LangChain Agent的两种模式
我们在深入探讨LangChain Agent相关知识之前,不妨先了解两种常见的Agent模式。首先,让我们关注ReAct模式。ReAct模式不仅是LangChain中至关重要的Agent模式之一,也是LangChain的默认模式。这一概念源自论文“REACT:Synergizing Reasoning and Acting in Language Model”,因此ReAct模式实际上是推理(Reasoning)和行动(Acting)的结合。
ReAct模式包含3个核心步骤:推理、行动和观测,其执行流程如下。
(1)面对用户的提问,LangChain通过思维链技术生成应采取的首个行动动作。
(2)执行对应的动作,并收集执行结果。
(3)观测并分析结果,判断是否继续推理。若尚未结束,则重复步骤,直至推理完成,随后将答案反馈给用户。
值得注意的是,ReAct模式的核心在于其循环和迭代过程,旨在模拟人类解决问题的思考方式。通过不断地推理和行动,Agent能够逐步深入问题,逐渐接近最终答案。执行过程如图1所示。这种模式不仅提高了问题解决的效率,也增强了Agent的适应性和灵活性,使其能够应对更为复杂和多变的问题场景。
我们可通过langchain.agents.mrk.prompt.FORMAT_INSTRUCTIONS看到ReAct模式的完整Prompt。
PREFIX =”””Answer the following questions as best you can. You have access to the following tools:”””FORMAT_INSTRUCTIONS =”””Use the following format the input question you must answerThought: you should always think about what to doAction: the action to take, should be one of [{tool_names}]Action Input: the input to the actionObservation: the result of the action… (this Thought/Action/Action Input/Observation can repeat N times)Thought: I now know the final answerFinal Answer: the final answer to the original input question”””SUFFIX =”””Begin!Question: {input}Thought:{agent_scratchpad}”””
这种Agent模式的灵感源自论文Plan-and-Solve Prompting: Improving Zero-Shot Chain-of- Thought Reasoning by Large Language Models。从其名称可以推断,这种Agent模式首先会制订一个详尽的执行计划,然后逐步执行计划中的各个任务,以达成最终目标。在执行各个子任务时,它通常采用传统的Agent模式,例如前文提到的ReAct模式,执行流程如图2所示。这种Agent模式的典型应用之一便是BabyAGI。
这种Agent模式的优势在于,能够在复杂场景中保持清晰的目标导向和步骤管理,使得Agent能够更精准地实现目标,同时也提高了解决问题的灵活性和创造性。通过这种模式,Agent能够更有效地处理那些需要长期规划和连贯思维的复杂任务。
我们可以通过langchain_experimental.plan_and_execute.planners. chat_planner. SYSTEM_PROMPT看到的完整Prompt。
SYSTEM_PROMPT = (“Let’s first understand the problem and devise a plan to solve the problem.”” Please output the plan starting with the header ‘Plan:’ “”and then followed by a numbered list of steps. “”Please make the plan the minimum number of steps required “”to accurately complete the task. If the task is a question, “”the final step should almost always be ‘Given the above steps taken, “”please respond to the users original question’. “”At the end of your plan, say ‘
在LangChain的Agent架构中,包含了4个关键组件,每个都扮演着重要的角色。
(1)Agent:这是由语言模型和Prompt组成的主体类,负责决定下一步的行动。LangChain提供了多种Agent模式,以适应不同的应用场景和需求,我们会在后续章节中逐一介绍这些模式。
(2)Tool:这个组件使Agent能够调用外部资源,如搜索维基百科、访问资料库等。这为Agent提供了获取和处理外部信息的能力,增强了Agent的功能性和适用性。
(3)Toolkit:在实现特定目标时,常常需要多个工具协同作用。Toolkit允许将多个工具组合在一起,形成一个更强大、更协调的工具组合,以便更有效地达成目标。
(4)AgentExecutor:这是Agent运行时的核心。在程序运行中,它负责调用Agent并执行其选择的动作。这个组件确保了整个Agent的动作执行过程是有序和高效的。
下面看看我们第一个Agent的例子,具体代码如下所示。
fromlangchain.llms import OpenAIfrom langchain.agents import ( load_tools, initialize_agent, AgentType)llm = OpenAI( model_name=’gpt-3.5-turbo-instruct’, temperature=0.6)tools =load_tools([‘ddg-search’,’llm-math’], llm=llm)agent =initialize_agent( tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, max_iterations=5, verbose=True, return_intermediate_steps=False)print(agent.run(‘OpenAI开发者大会召开的年份除以4,最后得到的数字是多少?’))
整个代码非常简单,先初始化了一个LLM对象。然后,通过load_tools方法初始化了一个工具列表。这个工具列表中添加了两个工具:基于DuckDuckGo搜索引擎用于在互联网上搜索信息的ddg-search工具和用于数学计算的llm-math工具。因为llm-math工具依赖于LLM,所以在这里设置了它的llm参数。接着,使用initialize_agent方法初始化了AgentExecutor对象。这里Agent类型用的是最常用的AgentType.ZERO_SHOT_REACT_DESCRIPTION模式,该代理类型也是initialize_agent方法默认使用的Agent类型。这种类型的Agent采用ReAct框架来根据工具的描述选择使用哪个工具。可以为它提供任意数量的工具,但必须为每个工具提供一份描述。为了防止Agent无限地递归推理,还可以设置它的最大递归次数参数max_iterations,默认值为15。
起初随机给出了一个年份进行计算,但是后来发现结果不对,开始调用ddg-search工具在互联网上搜索,并得到了正确的年份并调用llm-math工具进行了计算,最终得到了正确的结果。
在实际应用中,ReAct模式与Plan and Execute模式各有其适用场景。ReAct模式因其动态迭代的特性,更适合解决需要即时反馈和快速调整的问题。例如在实时问答场景中,用户的问题可能涉及多步验证(如代码调试、数学计算与事实校验结合的任务),ReAct模式通过“推理-行动-观测”的循环,能够逐步修正错误并逼近正确答案。
而Plan and Execute模式则更擅长处理需要全局规划和长期目标拆解的复杂任务。例如,在自动化项目管理中,Agent需要先制定任务分解计划(如需求分析、资源分配、进度跟踪),再分阶段执行每个子任务。这种模式通过前置的全局规划,减少了执行过程中的方向偏差风险,尤其适合需要多工具协作的场景(如结合代码生成、数据库查询和邮件通知的自动化流程)。
01
两种模式的局限性
ReAct模式对语言模型的推理能力依赖较强,若模型在初步推理中出现逻辑错误,可能导致后续动作偏离正确路径。此外,过多的迭代步骤也可能增加计算成本。
Plan and Execute模式的规划阶段可能因模型对任务理解的偏差而产生不合理的步骤设计,且计划一旦生成后缺乏动态调整机制(需依赖子任务执行时的修正)。
02
如何选择Agent模式
开发者应根据任务类型选择合适模式:
简单任务或需快速原型验证:优先使用ReAct模式,其轻量级特性能够快速实现功能。
复杂流程或需严格步骤控制:选择Plan and Execute模式,通过前置规划提升执行可控性。
混合模式尝试:部分场景可将两种模式结合,例如在Plan and Execute的子任务中使用ReAct框架,兼顾规划与灵活性。
随着LangChain对多模态能力的支持,Agent模式的应用场景进一步扩展。例如,在图像分析任务中,Agent可先通过Plan and Execute模式制定“图像识别→文本摘要→情感分析”的流程,再在子步骤中调用视觉模型(如CLIP)和语言模型协同工作。
LangChain的Agent模式为大型语言模型的应用提供了结构化的问题解决框架,无论是ReAct的敏捷迭代还是Plan and Execute的全局规划,都在不同维度拓展了AI代理的边界。然而,这些模式的实际效果仍取决于开发者对工具链的设计、对模型能力的理解以及对业务场景的抽象能力。
若希望深入探索Agent模式的底层原理与高阶实践,推荐阅读《LangChain技术解密:构建大模型应用的全景指南》,该书特点如下:
内容全面:包含Langchain的新版本、新动态及全新表达式语言。
系统深入:书中融入了LangGraph、Langsmith等核心组件,讲解细致入微。
结构流畅:章节设计自然衔接,有助于读者掌握Langchain的运行逻辑。
深度拓展:深入讲解了Langchain的隐私与安全、数据评估等高级主题。
实战性强:提供了丰富的代码实例和结果截图,读者可快速上手实践。
源码开放:在作者的GitHub中提供了各章节源码,读者可独立运行学习。
尊敬的博文视点用户您好: 欢迎您访问本站,您在本站点访问过程中遇到任何问题,均可以在本页留言,我们会根据您的意见和建议,对网站进行不断的优化和改进,给您带来更好的访问体验! 同时,您被采纳的意见和建议,管理员也会赠送您相应的积分...
时隔一周,让大家时刻挂念的《Unity3D实战核心技术详解》终于开放预售啦! 这本书不仅满足了很多年轻人的学习欲望,并且与实际开发相结合,能够解决工作中真实遇到的问题。预售期间优惠多多,实在不容错过! Unity 3D实战核心技术详解 ...
如题 ...
读者评论