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