LangChain Agent是如何工作的?ReAct是其中唯一的Agent类型吗?
LangChain Agent是如何工作的?ReAct是其中唯一的Agent类型吗?
LangChain Agent利用LLM作为推理引擎,使其能够动态地选择和使用工具来完成任务。Agent的核心是让LLM决定采取一系列行动,而不是像链那样遵循预定义的步骤。
工作流程:
- 接收输入:Agent接收用户的初始请求或任务。
- LLM决策:Agent执行器(Agent Executor)将输入、可用的工具描述以及可能的对话历史/记忆传递给LLM。
- 思考与行动规划:LLM进行推理(思考),判断当前是否需要使用工具,如果需要,选择哪个工具以及如何调用它(提供什么参数)。LLM的输出通常包含其思考过程和下一步要执行的动作(Action)。
- 工具解析与执行:Agent执行器解析LLM输出的动作指令,找到对应的工具并执行它。
- 获取观察结果:工具执行后返回结果,这个结果被称为观察(Observation)。
- 迭代:Agent执行器将观察结果反馈给LLM,LLM基于新的信息进行下一轮的思考和行动规划。这个"思考-行动-观察"的循环会持续进行,直到LLM判断任务完成。
- 最终响应:当LLM认为任务完成时,它会生成最终的响应,Agent执行器将其返回给用户。
Agent类型:
ReAct (Reasoning and Acting) 是LangChain中最常用和基础的Agent类型之一,它明确地遵循"思考-行动-观察"的循环。但ReAct并不是LangChain中唯一的Agent类型。LangChain支持多种Agent类型(或称为Agent执行器逻辑),它们在LLM如何决策以及如何与工具交互方面有所不同:
-
Zero-shot ReAct:
- 最基础的ReAct实现,只依赖于工具的描述来决定使用哪个工具。
- 不需要示例,适用于通用任务。
-
Structured Chat Zero-shot ReAct:
- 专为聊天模型(Chat Models)设计。
- 能够更好地处理多输入工具,并且通常在需要结构化输出时表现更好。
-
OpenAI Functions Agent:
- 利用OpenAI模型内置的函数调用(Function Calling)能力。
- LLM可以直接输出要调用的函数名和参数,而不是通过解析文本来确定动作。
- 通常更可靠,更不容易出错。
-
Self-Ask with Search:
- 一种专门用于回答需要通过搜索获取中间事实的问题的Agent类型。
- LLM会生成后续问题,并调用搜索工具来回答这些问题,直到能够回答原始问题。
-
Conversational Agent:
- 专为对话场景设计,通常会结合记忆(Memory)组件来保持对话上下文。
-
Plan and Execute Agent:
- 首先让LLM制定一个详细的计划(步骤列表),然后按顺序执行计划中的每一步(可能涉及调用工具)。
- 与ReAct的逐步决策不同,它先规划后执行。
开发者可以根据任务需求、所使用的LLM能力(如是否支持函数调用)以及对可靠性和灵活性的要求来选择合适的Agent类型。LangChain的框架也允许开发者创建自定义的Agent逻辑。