forked from killua/TakwayPlatform
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
|