代理2 | 豆包MarsCode AI刷题

66 阅读4分钟

总结

  • LangChain中代理相关关键组件
    • 代理(Agent):由语言模型和提示驱动,决定下一步执行的操作。提示包含代理性格、任务背景、提示策略等,LangChain有多种不同类型代理。
    • 工具(Tools):是代理调用的函数,要让代理能访问正确工具且需以合适方式描述,LangChain提供了系列工具,也可自定义。
    • 工具包(Toolkits):是一组完成特定目标的相关工具集合,如Office365工具包包含多种办公相关工具。
    • 代理执行器(AgentExecutor):是代理的运行环境,负责调用代理并执行其选择的操作,还能处理多种复杂情况,如工具不存在、出错等,同时进行观察和日志记录。
  • AgentExecutor运行机制深入剖析
    • 第一轮思考:模型决定搜索:通过在相关代码处设置断点深入调试,发现输入问题传递给llm_chain后接收大模型返回结果。给大模型的提示详细说明了可使用的工具及思考、行动、观察等格式要求,模型据此返回需调用搜索工具及输入内容,之后LangChain解析结果知道要调用Search工具,调用后得到Observation结果。
    • 第二轮思考:模型决定计算:任务未完成进入新一轮Plan环节,LLM Chain根据历史对话记录生成新提示,大模型依据此提示返回需调用计算器工具及输入内容,经解析后AgentExecutor调用LLMMath工具进行计算,计算过程通过特定提示指导LLM利用Python数学库完成,最终得到Observation结果。
    • 第三轮思考:模型完成任务:Executor的Plan将新结果传递给大模型,最新提示包含之前各轮的思考、行动及观察信息,模型经此轮思考后输出表明意识到任务已完成,AgentExcutor的plan方法返回AgentFinish实例,标志任务结束,得出玫瑰平均价格及加价后的价格。

深入思考

  • LangChain的代理机制通过将语言模型与各种工具及执行器相结合,实现了一种灵活且智能的任务处理方式。它打破了传统硬编码操作序列的模式,利用语言模型的推理能力自主决定操作流程,大大提高了处理不同任务的通用性和适应性。
  • 在整个运行过程中,提示信息起到了关键作用,它为模型提供了清晰的思考框架和行动指南,使得模型能够按照设定的格式进行思考、行动和观察,并根据不同轮次的结果不断调整,逐步接近并最终完成任务。
  • 不同工具的调用及配合也很精妙,如搜索工具用于获取相关信息,计算器工具用于进行数学运算,且针对计算器工具调用LLM时还有专门的提示来指导其利用Python库准确计算,确保了整个任务处理流程的顺畅进行。

思考题答案

在agent.py文件中找到AgentExecutor类及其中的_take_next_step方法后,其实现Plan和工具调用的方式如下:

Plan的实现

  • 启动计划:在_take_next_step方法驱动下,深入self.agent.plan方法来到Plan环节,输入问题传递给llm_chain,进而调用大模型获取返回结果,此过程依据给大模型的特定提示信息(包含任务、可使用工具及思考、行动、观察等格式要求)来引导大模型做出关于下一步行动的决策,从而开启计划流程。
  • 根据模型输出调整计划:大模型返回结果包含了下一步行动(如搜索或计算等)及相应输入内容,AgentExecutor通过解析这些输出,明确了模型的计划,如在第一轮思考中模型决定搜索,就根据此确定要调用的Search工具,后续轮次同理,根据模型不同轮次的输出不断调整和明确计划内容,推动任务处理流程继续。

工具调用的实现

  • 确定要调用的工具:根据大模型返回的Action信息(如Search或Calculator等),OutputParse解析此结果后,AgentExecutor能清楚知道要调用的具体工具。例如,当模型返回Action为Search时,就明确要调用搜索工具;当返回Action为Calculator时,就知道要调用计算器工具。
  • 执行工具调用并获取Observation:确定要调用的工具后,AgentExecutor将输入传给相应工具执行计划,从而获得该工具调用的Observation结果。比如调用搜索工具后得到关于玫瑰花价格的信息,调用计算器工具后得到计算后的价格结果等。这些Observation结果又会作为后续给大模型提示的一部分,用于下一轮的思考、行动和观察,如此循环直至任务完成。