ToB企服应用市场:ToB评测及商务社交产业平台

标题: AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能 [打印本页]

作者: 汕尾海湾    时间: 2024-6-26 08:34
标题: AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
0 前言

在开辟复杂的AI应用时,赋予Agent记忆能力是一个关键步骤。这不仅能进步Agent的性能,还能使其在多轮对话中保持上下文连贯性。本文将具体介绍怎样在Langchain框架中为Agent添加记忆功能,并深入解析每个步骤的原理和最佳实践。
Agent记忆功能的核心组件

在Langchain中,构建具有记忆功能的Agent主要涉及三个核心组件:
这三个组件的协同工作使Agent能够在多轮对话中保持连贯性并做出明智的决策。
1 构建Agent可用工具

首先,我们须要界说Agent可以使用的工具。
  1. # 构建一个搜索工具,Langchain提供的一个封装,用于进行网络搜索。
  2. search = SerpAPIWrapper()
  3. # 创建一个数学计算工具,特殊的链,它使用LLM来解析和解决数学问题。
  4. llm_math_chain = LLMMathChain(
  5.     llm=llm,
  6.     verbose=True
  7. )
  8. tools = [
  9.     Tool(
  10.         name = "Search",
  11.         func=search.run,
  12.         description="useful for when you need to answer questions about current events or the current state of the world"
  13.     ),
  14.     Tool(
  15.         name="Calculator",
  16.         func=llm_math_chain.run,
  17.         description="useful for when you need to answer questions about math"
  18.     ),
  19. ]
  20. print(tools)
复制代码

2 增加memory组件

接下来,我们须要为Agent添加记忆功能。Langchain提供了多种记忆组件,这里我们使用ConversationBufferMemory:
  1. from langchain.memory import ConversationBufferMemory
  2. # 记忆组件
  3. memory = ConversationBufferMemory(
  4.     # 指定了存储对话历史的键名
  5.     memory_key="chat_history",
  6.           # 确保返回的是消息对象,而不是字符串,这对于某些Agent类型很重要
  7.     return_messages=True
  8. )
复制代码
3 界说agent

现在我们有了工具和记忆组件,可以初始化我们的Agent了:
  1. from langchain.agents import AgentType, initialize_agent
  2. agent_chain = initialize_agent(
  3.     tools,
  4.     llm,
  5.     agent=AgentType.OPENAI_FUNCTIONS,
  6.     verbose=True,
  7.     handle_parsing_errors=True,
  8.     memory=memory
  9. )
复制代码
这里的关键点是:
4 查看默认的agents prompt啥样

了解Agent使用的默认提示词模板非常重要,这有助于我们理解Agent的行为并举行须要的调整:
  1. print(agent_chain.agent.prompt.messages)
  2. print(agent_chain.agent.prompt.messages[0])
  3. print(agent_chain.agent.prompt.messages[1])
  4. print(agent_chain.agent.prompt.messages[2])
复制代码
这将输出Agent使用的默认提示词模板。通常包括系统消息、人类消息提示词模板和AI消息模板。

5 优化Agent配置

为了更好地利用记忆功能,我们须要修改Agent的配置,确保它在每次交互中都能访问对话历史。
须要使用agent_kwargs传递参数,将chat_history传入
  1. agent_chain = initialize_agent(
  2.     tools,
  3.     llm,
  4.     agent=AgentType.OPENAI_FUNCTIONS,
  5.     verbose=True,
  6.     handle_parsing_errors=True,#处理解析错误
  7.     agent_kwargs={
  8.         "extra_prompt_messages":[MessagesPlaceholder(variable_name="chat_history"),MessagesPlaceholder(variable_name="agent_scratchpad")],
  9.     },
  10.     memory=memory #记忆组件
  11.     )
复制代码
这里的关键改变是:
如许配置确保了Agent在每次决策时都能考虑到之前的对话内容。
6 验证优化后的提示词模板

最后,让我们检查一下优化后的提示词模板:
  1. print(agent_chain.agent.prompt.messages)
  2. print(agent_chain.agent.prompt.messages[0])
  3. print(agent_chain.agent.prompt.messages[1])
  4. print(agent_chain.agent.prompt.messages[2])
复制代码

能看到新添加的chat_history和agent_scratchpad占位符。


7 总结

通过以上步骤,我们成功地为Langchain Agent添加了记忆功能。这使得Agent能够在多轮对话中保持上下文连贯性,大大进步了其在复杂任务中的表现。
添加记忆功能只是构建高效Agent的第一步。在实际应用中,你可能须要根据具体需求调整记忆组件的类型和参数,或者实现更复杂的记忆管理计谋。
始终要注意平衡记忆的深度和Agent的相应速度。过多的历史信息可能会导致决策缓慢或偏离主题。因此,在生产环境中,你可能须要实现某种情势的记忆修剪或总结机制。
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发履历,在分布式系统设计、数据平台架构和AI应用开辟等领域都有丰富实践履历。
各大技能社区头部专家博主。具有丰富的引领团队履历,深厚业务架构和解决方案的积累。
负责:
现在主攻降低软件复杂性设计、构建高可用系统方向。
参考:
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4