在AI开发中,Tool调用(有时称为Function调用)是一种通过用户定义的模式生成输出的技术。这种机制允许模型“建议”参数,但具体的工具执行则由用户负责。本文将深入探讨如何在语言模型(LLM)中实现和应用Tool调用功能,通过实际代码展示其实现过程。
技术背景介绍
Tool调用为模型提供了一种接口,通过生成结构化输出来响应用户输入。这种技术在需要从非结构化文本中提取结构化数据时尤其有用。许多LLM提供商,如Anthropic、Cohere、Google、OpenAI等,都支持不同格式的Tool调用。通过Tool调用,系统可以接收模型的调用建议,执行相应操作,并将结果返回给模型以提供更准确的响应。
核心原理解析
Tool调用通常包含一个名称、参数字典和一个可选的标识符。参数字典通常以{name: value}格式构造。不同提供商对Tool调用的格式有不同约定,例如,OpenAI要求参数以JSON字符串格式提供,而Anthropic则将Tool调用作为结构化数据返回。
代码实现演示
下面的代码示例展示了如何使用LangChain库在Python中定义并调用工具:
from langchain_core.tools import tool
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
import openai
import os
# 配置开放平台API
os.environ["OPENAI_API_KEY"] = "your-api-key" # 确保使用有效的API密钥
client = openai.OpenAI(
base_url='https://yunwu.ai/v1', # 国内稳定访问
api_key=os.getenv("OPENAI_API_KEY")
)
# 定义工具
@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
llm = ChatOpenAI(model="gpt-3.5-turbo")
llm_with_tools = llm.bind_tools(tools)
# 执行查询并查看Tool调用结果
query = "What is 3 * 12? Also, what is 11 + 49?"
tool_calls = llm_with_tools.invoke(query).tool_calls
print(tool_calls)
示例讲解
- 使用
@tool
装饰器定义了两个基本数学操作:加法和乘法。 - 使用
ChatOpenAI
将定义的工具绑定到模型,并执行查询。 - 输出显示模型生成的Tool调用建议。
解析输出
在执行上述代码后,tool_calls
包含模型生成的函数调用信息。这些信息中包括工具名称和参数,用户可依据这些调用具体执行工具操作。
应用场景分析
Tool调用可以广泛应用于需要结构化输出的任务中,例如:
- 从文本提取特定的信息。
- 根据用户输入进行复杂数据处理。
- 提供增强用户查询的精确性和自动化工具链。
实践建议
- 确保所有工具函数公开并准确定义其输入输出,这样模型能够正确生成调用。
- 定期测试Tool调用的准确性,特别是在多工具场景下,确保所有工具协同工作。
- 注意不同提供商对Tool调用格式的不同要求,并根据具体需求选择合适的实现。
结束语:如果遇到问题欢迎在评论区交流。
—END—