学习笔记12《代理(中):AgentExecutor究竟是怎样驱动模型和工具完成任务的?》

114 阅读1分钟

LangChain 核心理念

  • 代理(Agent)与链(Chain)的差异
    • 链:操作硬编码在代码中。
    • 代理:使用语言模型动态决定操作序列。

Agent 的关键组件

  1. 代理(Agent)

    • 由语言模型和提示(prompt)驱动。
    • 提示包含性格、背景和推理策略。
    • LangChain提供多种类型的代理。
  2. 工具(Tools)

    • 代理调用的函数。
    • 关键在于提供正确的工具和正确描述工具。
  3. 工具包(Toolkits)

    • 完成特定目标的一组相关工具。
    • 例如:Office365工具包。
  4. 代理执行器(AgentExecutor)

    • 代理的运行环境。
    • 负责调用代理、执行操作、处理复杂情况和日志记录。

AgentExecutor 的运行机制

  • 关键代码回顾

    llm = OpenAI(temperature=0)  # 大语言模型
    tools = load_tools(["serpapi", "llm-math"], llm=llm)  # 工具-搜索和数学运算
    agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)  # 代理
    agent.run("目前市场上玫瑰花的平均价格是多少?如果我在此基础上加价15%卖出,应该如何定价?")  # 运行代理
    
  • 深入AgentExecutor

    • 设置断点,使用“Step Into”功能深入agent.py文件的AgentExecutor类内部方法_take_next_step
  • 第一轮思考:模型决定搜索

    • Plan方法由Agent类的Plan方法完成。
    • 传递问题给llm_chain,接收返回结果。
  • 第二轮思考:模型决定计算

    • 根据搜索结果,模型决定使用计算器工具。
  • 第三轮思考:模型完成任务

    • 模型判断任务完成,输出最终答案。

思考题

  • 分析AgentExecutor类中的_take_next_step方法,理解其如何实现Plan和工具调用。

延伸阅读

  • 代码实现细节:
    • AgentExecutor类。
    • LLMChain类。