61 lines
2.5 KiB
Python
61 lines
2.5 KiB
Python
import aiohttp
|
||
import json
|
||
from datetime import datetime
|
||
from config import get_config
|
||
|
||
|
||
# 依赖注入获取Config
|
||
Config = get_config()
|
||
|
||
class Summarizer:
|
||
def __init__(self):
|
||
self.system_prompt = """你是一台对话总结机器,你的职责是整理用户与玩具之间的对话,最终提炼出对话中发生的事件,以及用户性格\n\n你的输出必须为一个json,里面有两个字段,一个是event,一个是character,将你总结出的事件写入event,将你总结出的用户性格写入character\nevent和character均为字符串\n返回示例:{"event":"在幼儿园看葫芦娃,老鹰抓小鸡","character":"活泼可爱"}"""
|
||
self.model = "abab5.5-chat"
|
||
self.max_token = 10000
|
||
self.temperature = 0.9
|
||
self.top_p = 1
|
||
|
||
async def summarize(self,messages):
|
||
context = ""
|
||
for message in messages:
|
||
if message['role'] == 'user':
|
||
context += "用户:"+ message['content'] + '\n'
|
||
elif message['role'] == 'assistant':
|
||
context += '玩具:'+ message['content'] + '\n'
|
||
payload = json.dumps({
|
||
"model":self.model,
|
||
"messages":[
|
||
{
|
||
"role":"system",
|
||
"content":self.system_prompt
|
||
},
|
||
{
|
||
"role":"user",
|
||
"content":context
|
||
}
|
||
],
|
||
"max_tokens":self.max_token,
|
||
"top_p":self.top_p
|
||
})
|
||
headers = {
|
||
'Authorization': f'Bearer {Config.MINIMAX_LLM.API_KEY}',
|
||
'Content-Type': 'application/json'
|
||
}
|
||
async with aiohttp.ClientSession() as session:
|
||
async with session.post(Config.MINIMAX_LLM.URL, data=payload, headers=headers) as response:
|
||
content = json.loads(json.loads(await response.text())['choices'][0]['message']['content'])
|
||
try:
|
||
summary = {
|
||
'event':datetime.now().strftime("%Y-%m-%d")+":"+content['event'],
|
||
'character':content['character']
|
||
}
|
||
except TypeError:
|
||
summary = {
|
||
'event':datetime.now().strftime("%Y-%m-%d")+":"+content['event'][0],
|
||
'character':""
|
||
}
|
||
return summary
|
||
|
||
def get_summarizer():
|
||
summarizer = Summarizer()
|
||
return summarizer |