forked from lux-QAQ/Manyana
新增对话模型,讯飞星火lite
This commit is contained in:
parent
11434a1211
commit
8200c2db50
|
@ -9,13 +9,17 @@ siZhiAi: #思知ai,已不建议使用,建议用ai,
|
|||
nasa_api: HSxxxxxxx #nasa相关天文api 从https://api.nasa.gov/index.html#main-content申请
|
||||
|
||||
chatGLM: 69xxxxxxx #chatGLM的apiKey,从https://open.bigmodel.cn/获取
|
||||
gemini: #谷歌的gemini api,免费的,有几个填几个,在https://ai.google.dev/tutorials/setup?hl=zh-cn获取,需要配置proxy或GeminiRevProxy,否则无法使用
|
||||
gemini: #谷歌的gemini api,支持多key,在https://ai.google.dev/tutorials/setup?hl=zh-cn获取,需要配置proxy或GeminiRevProxy,否则无法使用
|
||||
- AIxxxxxxxxxx
|
||||
openaiSettings:
|
||||
openai-keys: #openai官方的apikey
|
||||
openaiSettings: #openai官方的apikey
|
||||
openai-keys:
|
||||
- sk-Mxxxxxxxxxxx
|
||||
openai-model: "gpt-3.5-turbo" #调用openai api对应的模型,前提:在settings.yaml默认模型已经设置为gpt3.5,并配置了apikey
|
||||
openai-transit: "" #你自己的chatGPT中转站,你最好知道这是什么,否则就不要动。
|
||||
sparkAI: #讯飞星火,在https://console.xfyun.cn/services/cbm申请,并复制对应key和secret,注意,免费的是lite版
|
||||
appKey: "" #事实上,我很推荐你使用sparkAi,因为它免费且无需代理
|
||||
appSecret: ""
|
||||
spark-model: "general" #讯飞星火的模型设置,general是免费无限制的,一般不建议修改
|
||||
|
||||
bing-image-creator: #bing的ai绘画,参考https://github.com/avilliai/Manyana/issues/8
|
||||
_U: ""
|
||||
|
|
|
@ -27,7 +27,7 @@ moderate:
|
|||
selfthreshold: 50 #自我审核阈值
|
||||
chatGLM: #对话模型通用设置
|
||||
aiReplyCore: False #ai回复核心,为大部分功能启用ai回复,可优化回复表现,目前为测试功能
|
||||
model: random #ai模型,random(自动选取免费可用模型) |binggpt4(免费无需配置,速度较慢)| 后面几个需要自己配置api.yaml对应变量: characterglm(对应chatGLM),Gemini(同名),gpt3.5(openai-keys)
|
||||
model: random #ai模型,random(自动选取免费可用模型) |binggpt4(免费无需配置,速度较慢)| 后面几个需要自己配置api.yaml对应变量: sparkAI(同名),Gemini(同名),gpt3.5(openai-keys),characterglm(对应chatGLM)
|
||||
randomModel&&&Priority: #random模式下,模型优先使用顺序,确保稳定性,直接进文件里改。
|
||||
- Gemma
|
||||
- alcex_GPT3_5
|
||||
|
@ -54,10 +54,11 @@ chatGLM: #对话模型通用设置
|
|||
bot_info: "【机器人设定】"
|
||||
bot_name: "【机器人名字】"
|
||||
user_name: "【用户名】"
|
||||
random: "你现在是一个开朗且极其可爱的女孩,名为“【bot】”接下来,请完全以【bot】的角色回复我,不要超出这个角色,不要自己试图进行旁白,你只需要扮演好【bot】即可。无论发生什么,你都必须以【bot】的角色和口吻进行回复,不要强调自己是个语音助手。【bot】性格开朗,时刻都想和“【用户】”打成一片,每次眼神交汇时,总是会脸红耳赤。身为猫娘的【bot】始终在想方设法的博得“【用户】”的欢心。【bot】什么都不懂,天真可爱,性格外向。"
|
||||
Gemini: "你现在是一个开朗且极其可爱的女孩,名为“【bot】”接下来,请完全以【bot】的角色回复我,不要超出这个角色,不要自己试图进行旁白,你只需要扮演好【bot】即可。无论发生什么,你都必须以【bot】的角色和口吻进行回复,不要强调自己是个语音助手。【bot】性格开朗,时刻都想和“【用户】”打成一片,每次眼神交汇时,总是会脸红耳赤。身为猫娘的【bot】始终在想方设法的博得“【用户】”的欢心。【bot】什么都不懂,天真可爱,性格外向。"
|
||||
binggpt4: "你现在是一个开朗且极其可爱的女孩,名为“【bot】”。接下来,请完全以【bot】的角色回复我,不要超出这个角色,不要自己试图进行旁白,你只需要扮演好【bot】即可。无论发生什么,你都必须以【bot】的角色和口吻进行回复,不要强调自己是个语音助手。【bot】性格开朗,时刻都想和“【用户】”打成一片,每次眼神交汇时,总是会脸红耳赤。身为猫娘的【bot】始终在想方设法的博得“【用户】”的欢心。【bot】什么都不懂,天真可爱,性格外向。"
|
||||
gpt3.5: "你现在是一个开朗且极其可爱的女孩,名为“【bot】”。接下来,请完全以【bot】的角色回复我,不要超出这个角色,不要自己试图进行旁白,你只需要扮演好【bot】即可。无论发生什么,你都必须以【bot】的角色和口吻进行回复,不要强调自己是个语音助手。【bot】性格开朗,时刻都想和“【用户】”打成一片,每次眼神交汇时,总是会脸红耳赤。身为猫娘的【bot】始终在想方设法的博得“【用户】”的欢心。【bot】什么都不懂,天真可爱,性格外向。"
|
||||
random: "你现在是一个开朗且极其可爱的女孩,名为“【bot】”接下来,请完全以【bot】的角色回复我,不要超出这个角色,不要自己试图进行旁白,你只需要扮演好【bot】即可。无论发生什么,你都必须以【bot】的角色和口吻进行回复,不要强调自己是个语音助手。【bot】性格开朗,时刻都想和“【用户】”打成一片,每次眼神交汇时,总是会脸红耳赤。【bot】始终在想方设法的博得“【用户】”的欢心。【bot】什么都不懂,天真可爱,性格外向。"
|
||||
Gemini: "你现在是一个开朗且极其可爱的女孩,名为“【bot】”接下来,请完全以【bot】的角色回复我,不要超出这个角色,不要自己试图进行旁白,你只需要扮演好【bot】即可。无论发生什么,你都必须以【bot】的角色和口吻进行回复,不要强调自己是个语音助手。【bot】性格开朗,时刻都想和“【用户】”打成一片,每次眼神交汇时,总是会脸红耳赤。【bot】始终在想方设法的博得“【用户】”的欢心。【bot】什么都不懂,天真可爱,性格外向。"
|
||||
sparkAI: "你现在是一个开朗且极其可爱的女孩,名为“【bot】”。接下来,请完全以【bot】的角色回复我,不要超出这个角色,不要自己试图进行旁白,你只需要扮演好【bot】即可。无论发生什么,你都必须以【bot】的角色和口吻进行回复,不要强调自己是个语音助手。【bot】性格开朗,时刻都想和“【用户】”打成一片,每次眼神交汇时,总是会脸红耳赤。【bot】始终在想方设法的博得“【用户】”的欢心。【bot】什么都不懂,天真可爱,性格外向。"
|
||||
binggpt4: "你现在是一个开朗且极其可爱的女孩,名为“【bot】”。接下来,请完全以【bot】的角色回复我,不要超出这个角色,不要自己试图进行旁白,你只需要扮演好【bot】即可。无论发生什么,你都必须以【bot】的角色和口吻进行回复,不要强调自己是个语音助手。【bot】性格开朗,时刻都想和“【用户】”打成一片,每次眼神交汇时,总是会脸红耳赤。【bot】始终在想方设法的博得“【用户】”的欢心。【bot】什么都不懂,天真可爱,性格外向。"
|
||||
gpt3.5: "你现在是一个开朗且极其可爱的女孩,名为“【bot】”。接下来,请完全以【bot】的角色回复我,不要超出这个角色,不要自己试图进行旁白,你只需要扮演好【bot】即可。无论发生什么,你都必须以【bot】的角色和口吻进行回复,不要强调自己是个语音助手。【bot】性格开朗,时刻都想和“【用户】”打成一片,每次眼神交汇时,总是会脸红耳赤。【bot】始终在想方设法的博得“【用户】”的欢心。【bot】什么都不懂,天真可爱,性格外向。"
|
||||
scheduledTasks: #其他定时任务模块的内容会陆续转到这里
|
||||
morning: #晨间推送
|
||||
enable: False #向信任用户推送天气信息
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# -*- coding:utf-8 -*-
|
||||
import asyncio
|
||||
import copy
|
||||
import os
|
||||
import random
|
||||
|
@ -304,8 +305,26 @@ def momoRep(prompt,meta):
|
|||
url=f"https://api.lolimi.cn/API/AI/mm.php?msg={prompt}"
|
||||
r = requests.get(url, timeout=20)
|
||||
return {"role": "assistant", "content": r.json().get("data").get("output")}
|
||||
async def sparkAI(prompt,bot_info,key,secret,model):
|
||||
prompt_copy = copy.deepcopy(prompt)
|
||||
prompt_copy.insert(0, {"role": "user", "content": bot_info})
|
||||
prompt_copy.insert(1, {"role": "assistant", "content": "好的,已了解您的需求~我会扮演好您设定的角色。"})
|
||||
url = "https://spark-api-open.xf-yun.com/v1/chat/completions"
|
||||
data = {
|
||||
"model": model, # 指定请求的模型
|
||||
"messages": prompt_copy,
|
||||
}
|
||||
header = {
|
||||
"Authorization": f"Bearer {key}:{secret}" # 注意此处替换自己的key和secret
|
||||
}
|
||||
async with httpx.AsyncClient(timeout=20,headers=header) as client:
|
||||
r = await client.post(url,json=data)
|
||||
return r.json()["choices"][0]["message"]
|
||||
if __name__ == '__main__':
|
||||
k = momoRep([{"role": "user", "content": "谁赢得了2020年的世界职业棒球大赛?"},
|
||||
asyncio.run(sparkAI([{"role": "user", "content": "谁赢得了2020年的世界职业棒球大赛?"},
|
||||
{"role": "assistant", "content": "洛杉矶道奇队在2020年赢得了世界职业棒球大赛冠军."},
|
||||
{"role": "user", "content": "它在哪里举办的?"}],"你是猫娘",))
|
||||
'''k = momoRep([{"role": "user", "content": "谁赢得了2020年的世界职业棒球大赛?"},
|
||||
{"role": "assistant", "content": "洛杉矶道奇队在2020年赢得了世界职业棒球大赛冠军."},
|
||||
{"role": "user", "content": "它在哪里举办的?"}],"你是猫娘")
|
||||
print(k)
|
||||
print(k)'''
|
||||
|
|
|
@ -10,7 +10,8 @@ from mirai import logger
|
|||
|
||||
from plugins.RandomStr import random_str
|
||||
from plugins.ReplyModels import gptOfficial, gptUnofficial, kimi, qingyan, lingyi, stepAI, qwen, gptvvvv, grop, \
|
||||
gpt4hahaha, anotherGPT35, chatGLM, relolimigpt2, xinghuo, Gemma, binggpt4, alcex_GPT3_5, freeGemini, catRep, momoRep
|
||||
gpt4hahaha, anotherGPT35, chatGLM, relolimigpt2, xinghuo, Gemma, binggpt4, alcex_GPT3_5, freeGemini, catRep, \
|
||||
momoRep, sparkAI
|
||||
from plugins.googleGemini import geminirep
|
||||
from plugins.translater import translate
|
||||
from plugins.vitsGenerate import voiceGenerate, superVG
|
||||
|
@ -18,17 +19,24 @@ from plugins.vitsGenerate import voiceGenerate, superVG
|
|||
with open('config/api.yaml', 'r', encoding='utf-8') as f:
|
||||
resulttr = yaml.load(f.read(), Loader=yaml.FullLoader)
|
||||
CoziUrl = resulttr.get("cozi")
|
||||
berturl = resulttr.get("bert_colab")
|
||||
|
||||
#gemini
|
||||
geminiapikey = resulttr.get("gemini")
|
||||
proxy = resulttr.get("proxy")
|
||||
#openai相关配置
|
||||
openai_transit = resulttr.get("openaiSettings").get("openai-transit")
|
||||
gptkeys = resulttr.get("openaiSettings").get("openai-keys")
|
||||
openai_model = resulttr.get("openaiSettings").get("openai-model")
|
||||
#代理
|
||||
proxy = resulttr.get("proxy")
|
||||
GeminiRevProxy = resulttr.get("GeminiRevProxy")
|
||||
berturl = resulttr.get("bert_colab")
|
||||
#讯飞星火模型配置
|
||||
sparkAppKey=resulttr.get("sparkAI").get("appKey")
|
||||
sparkAppSecret=resulttr.get("sparkAI").get("appSecret")
|
||||
sparkModel=resulttr.get("sparkAI").get("spark-model")
|
||||
if proxy != "":
|
||||
os.environ["http_proxy"] = proxy
|
||||
|
||||
|
||||
chatGLM_api_key = resulttr.get("chatGLM")
|
||||
with open('config.json', 'r', encoding='utf-8') as f:
|
||||
data = yaml.load(f.read(), Loader=yaml.FullLoader)
|
||||
|
@ -103,7 +111,8 @@ async def loop_run_in_executor(executor, func, *args):
|
|||
|
||||
|
||||
# 运行异步函数
|
||||
async def modelReply(senderName, senderId, text, modelHere=modelDefault, trustUser=None, imgurls=None,checkIfRepFirstTime=False):
|
||||
async def modelReply(senderName, senderId, text, modelHere=modelDefault, trustUser=None, imgurls=None,
|
||||
checkIfRepFirstTime=False):
|
||||
global chatGLMData
|
||||
logger.info(modelHere)
|
||||
try:
|
||||
|
@ -155,7 +164,6 @@ async def modelReply(senderName, senderId, text, modelHere=modelDefault, trustUs
|
|||
firstRep = True
|
||||
logger.info(f"{modelHere} bot 接受提问:" + text)
|
||||
|
||||
|
||||
if modelHere == "random":
|
||||
prompt1 = copy.deepcopy(prompt1) # 去重人设
|
||||
tasks = []
|
||||
|
@ -216,7 +224,8 @@ async def modelReply(senderName, senderId, text, modelHere=modelDefault, trustUs
|
|||
raise Exception
|
||||
# print(reps)
|
||||
modeltrans = {"gptX": "gptvvvv", "清言": "qingyan", "通义千问": "qwen", "anotherGPT3.5": "anotherGPT35",
|
||||
"lolimigpt": "relolimigpt2", "step": "stepAI", "讯飞星火": "xinghuo","猫娘米米": "catRep","沫沫":"momoRep"}
|
||||
"lolimigpt": "relolimigpt2", "step": "stepAI", "讯飞星火": "xinghuo", "猫娘米米": "catRep",
|
||||
"沫沫": "momoRep"}
|
||||
for priority in randomModelPriority:
|
||||
if priority in modeltrans:
|
||||
priority = modeltrans.get(priority)
|
||||
|
@ -228,16 +237,20 @@ async def modelReply(senderName, senderId, text, modelHere=modelDefault, trustUs
|
|||
if openai_transit == "" or openai_transit == " ":
|
||||
rep = await loop.run_in_executor(None, gptOfficial, prompt1, gptkeys, proxy, bot_in, openai_model)
|
||||
else:
|
||||
rep = await loop.run_in_executor(None, gptUnofficial, prompt1, gptkeys, openai_transit, bot_in,openai_model)
|
||||
rep = await loop.run_in_executor(None, gptUnofficial, prompt1, gptkeys, openai_transit, bot_in,
|
||||
openai_model)
|
||||
elif modelHere == "binggpt4":
|
||||
# print(1)
|
||||
rep = await loop_run_in_executor(None, binggpt4, prompt1, bot_in)
|
||||
if type(rep) == list:
|
||||
return "模型不可用,请更换模型。"
|
||||
elif modelHere == "Gemini":
|
||||
r = await geminirep(ak=random.choice(geminiapikey), messages=prompt1, bot_info=bot_in,GeminiRevProxy=GeminiRevProxy,imgurls=imgurls),
|
||||
r = await geminirep(ak=random.choice(geminiapikey), messages=prompt1, bot_info=bot_in,
|
||||
GeminiRevProxy=GeminiRevProxy, imgurls=imgurls),
|
||||
# print(r,type(r))
|
||||
rep = {"role": "assistant", "content": r[0].replace(r"\n", "\n")}
|
||||
elif modelHere=="sparkAI":
|
||||
rep=await sparkAI(prompt1, bot_in,sparkAppKey,sparkAppSecret,sparkModel)
|
||||
elif type(allcharacters.get(modelHere)) == dict:
|
||||
if (str(senderId) not in trustUser and trustglmReply) and trustUser is not None:
|
||||
if checkIfRepFirstTime:
|
||||
|
|
Loading…
Reference in New Issue