引言
在现代AI应用中,工具调用(Tool Calling)或函数调用(Function Calling)正在成为重要的功能。它允许模型响应指定的提示,通过生成符合用户定义的模式的输出来调用工具。尽管看似模型正在执行动作,但实际上模型只是生成工具的参数,实际调用工具则由用户决定。本篇文章将深入探讨这一技术,并提供一些实用的代码示例。
什么是工具调用?
工具调用涉及模型生成一个包括名称、参数字典和可选标识符的结构。这里的参数字典结构为 {argument_name: argument_value}。许多领先的LLM提供商,如Anthropic、Cohere、Google、Mistral和OpenAI,都支持工具调用的变体功能。
使用Python实现工具调用
在Python中,我们可以使用LangChain库来定义和绑定自定义工具。这里我们简要展示如何用 @tool 装饰器定义工具:
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]
我们也可以使用Pydantic定义工具:
from langchain_core.pydantic_v1 import BaseModel, Field
class Add(BaseModel):
"""Add two integers together."""
a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")
class Multiply(BaseModel):
"""Multiply two integers together."""
a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")
tools = [Add, Multiply]
代码示例
以下是使用LangChain绑定工具并调用的完整示例:
import os
from langchain_openai import ChatOpenAI
# 使用API代理服务提高访问稳定性
os.environ["OPENAI_API_KEY"] = "your_api_key"
llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools(tools)
query = "What is 3 * 12? Also, what is 11 + 49?"
print(llm_with_tools.invoke(query).tool_calls)
常见问题和解决方案
问题1:工具调用返回错误格式
一些模型提供商可能输出格式错误的工具调用。在这种情况下,可以使用 InvalidToolCall 机制来记录这些错误调用。
问题2:网络访问不稳定
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。
总结和进一步学习资源
工具调用是构建复杂AI应用的一项重要技术,它可以帮助实现工具使用链与代理。要进一步深入学习,可以参考以下资源:
参考资料
- LangChain官方文档
- OpenAI API文档
- Pydantic使用指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---