Actagent开发之memory使用
增加memory处理
为了能让actAgent项目能更加理解用户的问题,需要在对话过程中增加memory的处理。在类初始化过程中增加self.memory属性。并且引用redis将对话历史记录存储在redis中,方便频繁的读写请求,如果历史记录超过10条,对历史记录进行总结,然后清空历史记录,重新添加总结内容。
def get_memory(self): chat_message_history = RedisChatMessageHistory( url = "redis://localhost:6379/0", session_id="session" ) print("chat_message_history:",chat_message_history.messages) store_message = chat_message_history.messages if len(store_message) > 10: prompt =ChatPromptTemplate.from_messages( [ ("system",self.SYSTEMPL+"\n这是一段你和用户的对话记忆,对其进行总结摘要,摘要使用第一人称'我',并且提取其中用户关键信息,如姓名、投资经历,可用投资资产等\n例如:用户user1问我,我礼貌回复" "然后他问我今年投资什么能赚钱,我回复他今年的投资情况,然后他离开。|user1,10年,50万"), ("user",f"{input}"), ] ) chain = prompt | self.chatModel | StrOutputParser() summary = chain.invoke({"input":store_message,"who_you_are":self.MOODS[self.emotin]["roleSet"]}) print("summary:",summary) chat_message_history.clear() chat_message_history.add_message(AIMessage(content=summary)) return chat_message_history
增加memory设置
使用langchain工具链的memory包中的ConversationTokenBufferMemory方法,定义我们所需的memory属性。主要设置的参数有,大模型方法,memory函数,token限制memory_kek等参数。
self.memory = self.get_memory() self.tools = [serach_tool,local_db_tool] # agent = create_openai_tools_agent(self.chatModel,prompt=self.prompt,tools=tools) # self.agent_executor = AgentExecutor(agent,tools) memory = ConversationTokenBufferMemory( llm = self.chatModel, human_prefix = "User", ai_prefix = "陈经理", memory_key = self.MEMORY_KEY, output_key = "output", return_messages =True, max_token_limit = 1000, chat_memory = self.memory, ) self.agent_executor = initialize_agent( tools = self.tools, llm = self.chatModel, memory = memory, agent=AgentType.OPENAI_FUNCTIONS, verbose = True )
浙公网安备 33010602011771号