Tool Use Function Calling

工具调用 — 让AI连接外部世界的能力

应用开发 Agent基础 热门

📖 定义

Tool Use(工具使用)或称 Function Calling(函数调用),是指大型语言模型根据用户请求,自动识别需要调用外部工具或API,生成结构化参数,并在获得执行结果后继续生成最终回答的能力。这是构建 AI Agent 的核心技术之一。

核心理念:让语言模型成为"大脑",通过调用外部工具(计算器、搜索引擎、数据库等)来扩展其能力边界。

⚙️ 工作流程

1

工具定义

向模型提供可用工具的Schema描述

2

意图识别

模型分析用户输入,决定调用哪个工具

3

参数生成

模型生成符合Schema的JSON参数

4

执行工具

应用程序执行实际工具调用

5

结果整合

将工具结果返回给模型生成回答

💻 代码示例

OpenAI Function Calling

from openai import OpenAI
import json

client = OpenAI()

# 定义可用工具
tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "获取指定城市的天气信息",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "城市名称"},
                "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
            },
            "required": ["city"]
        }
    }
}]

# 调用模型
response = client.chat.completions.create(
    model="gpt-4-turbo",
    messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
    tools=tools
)

# 检查并执行工具调用
message = response.choices[0].message
if message.tool_calls:
    for tool_call in message.tool_calls:
        args = json.loads(tool_call.function.arguments)
        # 执行实际函数并返回结果...
        print(f"调用: {tool_call.function.name}, 参数: {args}")

LangChain Agent

from langchain.agents import Tool, AgentExecutor, create_react_agent
from langchain_openai import ChatOpenAI

tools = [
    Tool(name="Calculator", func=lambda x: str(eval(x)), description="数学计算"),
    Tool(name="Search", func=lambda x: "搜索结果...", description="搜索信息")
]

llm = ChatOpenAI(model="gpt-4")
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
result = agent_executor.invoke({"input": "计算 15 * 23 + 100"})

🎯 常见工具类型

🔍

信息检索

搜索引擎、数据库查询、向量检索

🧮

计算工具

计算器、代码解释器、数学引擎

📅

系统操作

日历管理、邮件发送、文件操作

🌐

外部服务

天气API、地图服务、翻译API

🚀 应用场景

  • 智能助手:查天气、订机票、设提醒的全能助手
  • 数据分析:自动生成并执行SQL查询
  • 代码助手:调用代码解释器执行和验证代码
  • 知识库问答:检索内部文档后生成回答
  • 自动化工作流:串联多个API完成复杂任务

⚠️ 最佳实践

  • 清晰的工具描述:准确的名称和描述帮助模型选择正确工具
  • 参数验证:始终验证模型生成的参数,防止注入攻击
  • 错误处理:优雅处理工具调用失败的情况
  • 权限控制:限制工具的执行权限,特别是涉及修改的操作
  • 结果缓存:对幂等操作进行缓存,提高响应速度

🛠️ 支持工具调用的模型

GPT-4/GPT-3.5 OpenAI原生支持,功能最完善
Claude Anthropic的tool use功能
Gemini Google的function calling
Mistral/Llama 通过微调支持工具调用