1. LangChain Agent 与Memory 在项目中协作的常见方式
在 LangChain 项目中,Agent 与 Memory 的协作是实现自然语言处理(NLP)任务时非常关键的一部分。 Agent 负责决定如何处理用户输入,并通过选择合适的工具(如调用模型、查询数据库等)来完成任务,而 Memory 则负责保持对话历史和上下文,以便使系统在多轮对话中保持连贯性和一致性。
LangChain 提供了强大的 Agent 与 Memory 功能,它们通过协作,可以使系统更具智能和持续性。以下是 Agent 与 Memory 在实际项目中的常见协作方式:
1. 记忆保持对话上下文
- Memory 用于存储整个对话的上下文,确保系统能够记住之前的对话内容。
- Agent 在每轮对话时,利用 Memory 中存储的信息来做出更准确的决策。例如,如果用户问到 “请帮我查找上次提到的订单状态”,系统会从 Memory 中恢复相关信息,然后生成合适的回答。
常见实现方式:
- 使用
ConversationBufferMemory
或ConversationSummaryMemory
来记录和总结对话历史。 - Agent 会将当前的 Memory 内容作为输入传递给模型(如 OpenAI GPT),以帮助模型理解对话的上下文。
示例代码:
from langchain.agents import initialize_agent, Tool, AgentType
from langchain.memory import ConversationBufferMemory
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
# 创建 OpenAI LLM
llm = OpenAI(model="gpt-4")
# 初始化 Memory
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# 创建工具(可扩展)
tools = []
# 定义代理
agent = initialize_agent(
tools,
llm,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
memory=memory,
verbose=True
)
# 模拟对话
agent.run("帮我查询一下我的订单状态")
agent.run("上次我提到的订单是什么状态?")
2. 任务调度与动态记忆更新
- Agent 可以根据用户的请求选择不同的任务,并与多个工具进行协作。通过对话中的信息,Agent 会动态更新 Memory,以便更好地处理后续的请求。
- 比如用户发出指令时,Agent 可以首先调用某个工具进行数据检索,然后更新 Memory 中存储的状态,接着继续执行下一个任务。
常见实现方式:
- 使用 Tool 和 Memory 在不同的任务之间进行信息传递和更新。
- 每个任务处理结束后,将新的上下文信息更新回 Memory,以便后续任务可以继续基于最新的上下文执行。
示例代码:
from langchain.agents import Tool
from langchain.agents import initialize_agent
from langchain.memory import ConversationBufferMemory
from langchain.llms import OpenAI
# 创建工具
def tool1(query):
return f"Tool1 response to {
query}"
tool = Tool(
name="ExampleTool",
func=tool1,
description="An example tool"
)
# 初始化 Memory
memory = ConversationBuf