create_react_agent 函数,根据创建的 chat 模型实例和工具列表 tools 构造一个“反应式代理”(react agent)

发布于:2025-03-09 ⋅ 阅读:(152) ⋅ 点赞:(0)
graph = create_react_agent(chat, tools)

1. create_react_agent 函数的作用

create_react_agent 是一个工厂函数,它接收两个参数:

  • chat 模型实例(这里是 ChatOpenAI 的对象):它负责生成语言模型的回复,也就是理解用户输入并给出回答。
  • tools 列表:这是之前定义的工具函数集合,包含了更新、查询和删除用户宠物信息的函数。这些工具通过 @tool 装饰器包装后,能够被代理在对话中动态调用。

调用 create_react_agent(chat, tools) 后,会构造一个“反应式代理”(react agent),它具有如下特性:

  1. 自动决策与工具调用
    这个代理不仅仅把用户的输入交给语言模型,还会分析对话内容,决定是否需要调用某个工具函数来完成特定操作。

    • 举例说明
      • 当用户说“my favorite pets are cats and dogs”时,代理会理解这是在告诉系统用户的宠物喜好,于是调用 update_favorite_pets 工具,把信息存储到全局状态中。
      • 当用户询问“what are my favorite pets”时,代理会检测到需要查询之前存储的数据,然后调用 list_favorite_pets 工具返回结果。
      • 当用户说“please forget what i told you about my favorite animals”时,代理会调用 delete_favorite_pets 工具,清空之前存储的宠物信息。
  2. ReAct 模式的实现
    “反应式代理”(react agent)背后的思想通常被称为 ReAct 模式,即在对话中交替进行“推理”(reasoning)和“行动”(acting)。

    • 代理首先利用传入的 chat 模型进行推理,判断当前用户意图是什么。
    • 根据判断结果,代理决定是否需要调用某个工具(比如更新、查询或删除数据)。
    • 调用完工具后,代理可以再次让语言模型结合最新的状态信息生成最终回复,形成一个完整的对话闭环。
  3. 内部工作流程可视化
    在代码中,我们还看到下面这段:

    try:
        display(Image(graph.get_graph().draw_mermaid_png()))
    except Exception:
        pass
    

    这行代码会尝试将代理内部的决策流程图转换成 Mermaid 格式的 PNG 图片并显示出来。

    • 这相当于把代理内部是如何“思考”以及如何调用工具的过程以图形化方式展示,便于开发者理解代理的运行机制。

2. 举例说明整个代理的工作流程

假设你使用这个代理与系统进行对话,整个过程可以描述如下:

  1. 更新信息

    • 用户输入: “my favorite pets are cats and dogs”
    • 代理接收到信息后,首先让 chat 模型处理这条消息。
    • 经过内部推理,代理判断这是一个更新宠物喜好的指令,于是调用 update_favorite_pets 工具,把用户 “123” 的宠物列表设为 ["cats", "dogs"]
    • 全局状态 user_to_pets 更新后,代理可能生成一个确认回复,如“好的,我已记录你的宠物喜好”。
  2. 查询信息

    • 用户输入: “what are my favorite pets”
    • 代理再次利用 chat 模型处理消息,并发现这是一个查询请求,于是调用 list_favorite_pets 工具。
    • 工具读取全局状态后返回字符串 “cats, dogs”,代理将这个结果结合上下文返回给用户。
  3. 删除信息

    • 用户输入: “please forget what i told you about my favorite animals”
    • 代理经过判断后,调用 delete_favorite_pets 工具,把用户 “123” 的记录从 user_to_pets 中删除。
    • 此后,全局状态中不再有该用户的信息,代理可能回复“好的,我已经忘记了之前的信息”。

3. 总结

调用 create_react_agent(chat, tools) 后,我们得到了一个能在对话中自动决策、调用工具来更新或查询状态的代理。它整合了:

  • 语言模型:用于理解和生成自然语言回复。
  • 工具函数:用于具体的状态管理操作,比如存储、查询和删除数据。
  • ReAct 模式:实现了先推理再行动的逻辑,确保代理能根据用户的不同指令做出合适的操作。

这种设计不仅使得对话系统能够与用户自然交互,还能根据需要调用后端逻辑进行数据操作,极大地增强了系统的功能性和灵活性。


网站公告

今日签到

点亮在社区的每一天
去签到