LangChain 代理模块详解
概述
某些应用程序需要基于用户输入对 LLM(大语言模型)和其他工具进行灵活调用。Agents(代理)为此类应用程序提供了灵活性。代理可以访问单一工具,并根据用户输入确定要使用的工具;也可以使用多个工具,并将一个工具的输出作为下一个工具的输入。
主要有两种类型的代理:
- Plan-and-Execute Agents:用于制定动作计划,先规划再执行子任务。
- Action Agents:决定实施何种动作,通常基于 ReAct 框架。
Agents 模块还包含配合代理执行的工具(代理可以执行的操作)和工具包(一套工具集合)。例如,为了使代理与 SQL 数据库交互,它可能需要一个工具来执行查询,另一个工具来检查表结构。
核心组件
- Tools:代理可执行的具体操作函数。
- Toolkits:特定用例的工具集合。
- Memory:用于存储对话历史或状态,使代理具备上下文记忆能力。
- LLM:驱动代理决策的核心模型。
主要代理类型
1. CONVERSATIONAL_REACT_DESCRIPTION
针对对话场景优化的代理,适合需要多轮交互的场景。
from langchain.agents import initialize_agent, AgentType
from langchain.tools import Tool
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.utilities import GoogleSearchAPIWrapper
search = GoogleSearchAPIWrapper()
tools = [
Tool(
name="Current Search",
func=search.run,
description="useful for when you need to answer questions about current events or the current state of the world"
),
]
memory = ConversationBufferMemory(memory_key="chat_history")
llm = ChatOpenAI(temperature=0)
agent_chain = initialize_agent(
tools,
llm,
agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
verbose=True,
memory=memory
)
print(agent_chain.run(input="用中文回答中国人口数量"))
执行过程解析: 代理会进入思考循环(Thought -> Action -> Observation),判断是否需要使用工具。如果需要,则选择工具并传入参数,获取观察结果后再次思考,直到得出最终答案。


