引言
工具调用是现代AI聊天模型中的一个重要功能。它不仅能增强模型的功能扩展性,还是将生成的结构化输出转化为实际应用的关键。本文将深入探讨如何使用工具调用,让你的聊天模型更智能、更高效。
主要内容
什么是工具调用?
工具调用是一种技术,它允许聊天模型在响应提示时生成工具所需的参数。然而,注意工具本身的执行并不在模型的职责范围内。通过工具调用,模型生成结构化输出,这在需要从非结构化文本中提取信息时尤为有用。
支持工具调用的模型
工具调用并非所有大语言模型(LLM)都支持,但许多流行的LLM提供商如OpenAI、Anthropic等均支持此功能。LangChain实现了绑定工具、传递工具给LLM、和表示工具调用的标准接口。
定义工具模式
要让模型调用工具,我们需要定义工具模式。这些模式描述了工具的功能及其参数。工具模式可以通过Python函数、Pydantic模型、TypedDict类或LangChain工具对象来定义。
使用Python函数定义工具模式
def add(a: int, b: int) -> int:
"""Add two integers."""
return a + b
def multiply(a: int, b: int) -> int:
"""Multiply two integers."""
return a * b
使用Pydantic定义工具模式
from pydantic import BaseModel, Field
class Add(BaseModel):
"""Add two integers."""
a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")
class Multiply(BaseModel):
"""Multiply two integers."""
a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")
将工具绑定到聊天模型
利用bind_tools()方法可以将工具模式绑定到聊天模型中。这是调用工具的先决条件。
代码示例
以下是如何实际使用LangChain和支持的模型来实现工具调用的示例。
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
# 定义API密钥
import os
os.environ["OPENAI_API_KEY"] = 'your_openai_api_key_here' # 请使用适当的API代理服务提高访问稳定性
# 定义工具模式
class Add(BaseModel):
"""Add two integers."""
a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")
class Multiply(BaseModel):
"""Multiply two integers."""
a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")
# 初始化聊天模型
llm = ChatOpenAI(model="gpt-4o-mini")
# 绑定工具
llm_with_tools = llm.bind_tools([Add, Multiply])
# 执行查询并调用工具
query = "What is 3 * 12?"
response = llm_with_tools.invoke(query)
print(response.tool_calls)
常见问题和解决方案
-
工具调用失败或无效调用:如果模型输出的工具调用参数格式不正确,可使用
InvalidToolCall对象来捕获。这通常是参数格式错误,比如非JSON格式。 -
网络访问问题:由于地区性的网络限制,开发者可能需要考虑使用API代理服务来确保调用的稳定性。
总结和进一步学习资源
通过工具调用功能的学习和实现,你可以极大的扩展聊天模型的实际应用能力。接下来,可以参考以下资源深入学习:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---