新增对话模型,讯飞星火lite

This commit is contained in:
DEII 2024-07-25 11:07:57 +08:00
parent 11434a1211
commit 8200c2db50
5 changed files with 96 additions and 57 deletions

View File

@ -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: ""

View File

@ -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 #向信任用户推送天气信息

View File

@ -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)'''

View File

@ -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")
geminiapikey = resulttr.get("gemini")
proxy = resulttr.get("proxy")
openai_transit=resulttr.get("openaiSettings").get("openai-transit")
gptkeys = resulttr.get("openaiSettings").get("openai-keys")
openai_model=resulttr.get("openaiSettings").get("openai-model")
GeminiRevProxy = resulttr.get("GeminiRevProxy")
berturl = resulttr.get("bert_colab")
#gemini
geminiapikey = resulttr.get("gemini")
#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")
#讯飞星火模型配置
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:
@ -154,39 +163,38 @@ async def modelReply(senderName, senderId, text, modelHere=modelDefault, trustUs
logger.error("初始化anotherGPT3.5失败")
firstRep = True
logger.info(f"{modelHere} bot 接受提问:" + text)
if modelHere == "random":
prompt1 = copy.deepcopy(prompt1)#去重人设
prompt1 = copy.deepcopy(prompt1) # 去重人设
tasks = []
logger.warning("请求所有模型接口")
# 将所有模型的执行代码包装成异步任务,并添加到任务列表
# tasks.append(loop_run_in_executor(loop, cozeBotRep, CoziUrl, prompt1, proxy))# 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, kimi, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, qingyan, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, grop, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, lingyi, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, relolimigpt2, prompt1, bot_in)) # 2024-07-17测试无法解析API
# tasks.append(loop_run_in_executor(loop, stepAI, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, qwen, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, gptvvvv, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, gpt4hahaha, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, anotherGPT35, prompt1, senderId)) # 2024-07-17测试 初始化失败
# tasks.append(loop_run_in_executor(loop, xinghuo, prompt1, senderId)) # 2024-07-17测试无效
tasks.append(loop_run_in_executor(loop,Gemma,prompt1,bot_in)) # 2024-07-17测试通过
tasks.append(loop_run_in_executor(loop,alcex_GPT3_5,prompt1,bot_in)) # 2024-07-17测试通过
tasks.append(loop_run_in_executor(loop,catRep,prompt1,bot_in))
tasks.append(loop_run_in_executor(loop,momoRep,prompt1,bot_in))
# tasks.append(loop_run_in_executor(loop,freeGemini,prompt1,bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, cozeBotRep, CoziUrl, prompt1, proxy))# 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, kimi, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, qingyan, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, grop, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, lingyi, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, relolimigpt2, prompt1, bot_in)) # 2024-07-17测试无法解析API
# tasks.append(loop_run_in_executor(loop, stepAI, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, qwen, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, gptvvvv, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, gpt4hahaha, prompt1, bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop, anotherGPT35, prompt1, senderId)) # 2024-07-17测试 初始化失败
# tasks.append(loop_run_in_executor(loop, xinghuo, prompt1, senderId)) # 2024-07-17测试无效
tasks.append(loop_run_in_executor(loop, Gemma, prompt1, bot_in)) # 2024-07-17测试通过
tasks.append(loop_run_in_executor(loop, alcex_GPT3_5, prompt1, bot_in)) # 2024-07-17测试通过
tasks.append(loop_run_in_executor(loop, catRep, prompt1, bot_in))
tasks.append(loop_run_in_executor(loop, momoRep, prompt1, bot_in))
# tasks.append(loop_run_in_executor(loop,freeGemini,prompt1,bot_in)) # 2024-07-17测试无效
# tasks.append(loop_run_in_executor(loop,localAurona,prompt1,bot_in))
# ... 添加其他模型的任务 ...
aim = {"role": "user", "content": bot_in}
prompt1 = [i for i in prompt1 if i != aim]
#prompt1 = [i for i in prompt1 if not (i.get("role") == aim["role"] and i.get("content") == aim["content"])]
# prompt1 = [i for i in prompt1 if not (i.get("role") == aim["role"] and i.get("content") == aim["content"])]
aim = {"role": "assistant", "content": "好的,已了解您的需求~我会扮演好您设定的角色。"}
prompt1 = [i for i in prompt1 if i != aim]
#prompt1 = [i for i in prompt1 if not (i.get("role") == aim["role"] and i.get("content") == aim["content"])]
# prompt1 = [i for i in prompt1 if not (i.get("role") == aim["role"] and i.get("content") == aim["content"])]
done, pending = await asyncio.wait(tasks, return_when=asyncio.ALL_COMPLETED)
reps = {}
@ -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)
@ -225,19 +234,23 @@ async def modelReply(senderName, senderId, text, modelHere=modelDefault, trustUs
logger.info(f"random模型选择结果{priority}: {rep}")
break
elif modelHere == "gpt3.5":
if openai_transit=="" or openai_transit==" ":
rep = await loop.run_in_executor(None, gptOfficial, prompt1, gptkeys, proxy, bot_in,openai_model)
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)
elif modelHere=="binggpt4":
#print(1)
rep=await loop_run_in_executor(None,binggpt4,prompt1,bot_in)
if type(rep)==list:
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),
#print(r,type(r))
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:
@ -257,14 +270,14 @@ async def modelReply(senderName, senderId, text, modelHere=modelDefault, trustUs
# 写入文件
with open('data/chatGLMData.yaml', 'w', encoding="utf-8") as file:
yaml.dump(chatGLMData, file, allow_unicode=True)
#print(rep.get('content'),type(rep.get('content')))
#print(rep,type(rep))
# print(rep.get('content'),type(rep.get('content')))
# print(rep,type(rep))
logger.info(f"{modelHere} bot 回复:" + rep.get('content'))
if checkIfRepFirstTime:
return rep.get("content"), firstRep
else:
return rep.get("content")
#await tstt(rep.get('content'), event)
# await tstt(rep.get('content'), event)
except Exception as e:
logger.error(e)
try:
@ -298,7 +311,7 @@ async def clearAllPrompts():
# 写入文件
with open('data/chatGLMData.yaml', 'w', encoding="utf-8") as file:
yaml.dump(chatGLMData, file, allow_unicode=True)
#print(chatGLMData)
# print(chatGLMData)
return "已清除所有用户的prompt"
except:
return "清理缓存出错,无本地对话记录"

View File

@ -306,4 +306,6 @@
2024/7/24:
- 增加语音合成自定义前缀,减少误触发
- 增加random模式可用模型注意新增的两个模型可能无法使用bot_info设定
- 增加两个指令 开始对话/退出 可以在没有艾特的情况下展开对话同时gemini支持了图像识别
- 增加两个指令 开始对话/退出 可以在没有艾特的情况下展开对话同时gemini支持了图像识别
2024/7/25:
- 支持对接讯飞星火api免费无需代理详见api.yaml和settings.yaml