微信扫码
与创始人交个朋友
我要投稿
语言模型本身无法采取行动(它们只是输出文本)。LangChain 的一个重要用例是创建代理。Agent(智能体/代理)是使用 LLM 作为推理引擎来确定要采取哪些操作以及执行操作所需的输入的系统。Agent 执行操作后,结果可以反馈到 LLM 中,以确定是否需要更多操作,或者是否可以完成。
在本教程中,我们将构建一个可以与搜索引擎交互的 Agent。用户将能够向该 Agent 提问,观察它调用搜索工具,并与其进行对话。
LangGraph 是 LangChain 的扩展,专门用于创建高度可控和可定制的 Agent。强烈建议使用 LangGraph 来构建代理 Agent。
定义工具
我们首先需要创建我们想要使用的工具。我们选择的主要工具是 Tavily(一款互联网搜索引,每个月可以有 1000 次免费搜索)。LangChain 中有一个内置工具,可以让我们轻松使用 Tavily 搜索引擎作为工具。
可以看到,我们的搜索工具按照设定从 2 个地方获取到了今天合肥的天气。
使用 LLM
首先我们创建 LLM,并使用 .bind_tools 为语言模型提供这些工具的知识::
现在我们可以调用该模型了。我们先用普通消息调用它,看看它如何响应。我们可以查看 content 字段以及 tool_calls 字段。
现在,让我们尝试使用一些需要调用工具的输入来调用它。
我们可以看到现在没有文本内容,但有一个工具调用!它希望我们调用 Tavily Search 工具。
但是这还没有调用该工具,它只是告诉我们它需要这样做。为了真正调用它,我们需要创建我们的 Agent。
创建 Agent
现在我们已经定义了工具和 LLM,我们可以创建 Agent 了。我们将使用 LangGraph 来构建 Agent。目前,我们使用高级接口来构建 Agent,但 LangGraph 的优点在于,如果你想要修改 Agent 逻辑,这个高级接口由低级、高度可控的 API 支持。
现在,我们可以使用 LLM 和工具初始化 Agent。
请注意,我们传入的是模型,而不是 model_with_tools。这是因为 create_react_agent 会在后台为我们调用 .bind_tools。
我们现在可以通过几个查询来运行 Agent!请注意,目前这些都是无状态查询(它不会记住以前的交互)。请注意,Agent 将在交互结束时返回最终状态(其中包括任何输入,我们稍后将了解如何仅获取输出)。
首先,让我们看看当不需要调用工具时它如何响应:
现在让我们在一个应该调用该工具的示例上尝试一下:
流式输出
我们已经了解了如何使用 .invoke 调用 Agent 来获取最终响应。如果 Agent 执行多个步骤,这可能需要一段时间。为了显示中间进度,我们可以在消息发生时回传消息。
用户看到有中间消息,就不会感觉等待时间过长了。
添加记忆
如前所述,此 Agent 是无状态的。这意味着它不记得以前的交互。为了给它记忆,我们需要传入一个检查点。传入检查点时,我们还必须在调用 Agent 时传入一个thread_id(这样它就知道从哪个线程/对话恢复)。
如果你想开始一个新的对话,你所要做的就是改变使用的thread_id:
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-08-18
2024-04-08
2024-06-03
2024-04-08
2024-04-17
2024-06-24
2024-04-12
2024-07-01
2024-04-10
2024-04-11
2024-10-30
2024-10-11
2024-08-18
2024-08-16
2024-08-04
2024-07-29
2024-07-28
2024-07-27