大模型Function Calling实战:让Agent拥有工具调用能力

引言

AI Agent 的核心价值在于能够自主完成复杂任务。然而,大语言模型(LLM)本质上只能生成文本,无法直接获取实时数据、执行代码或操作外部系统。Function Calling(函数调用)机制的出现,恰好弥补了这一短板——它让模型能够"理解"何时需要调用外部工具、调用哪个工具、传入什么参数,并将执行结果回传给模型继续推理。本文将深入讲解 OpenAI Function Calling 的完整实战流程,帮助你构建具备工具调用能力的智能 Agent。

一、什么是 Function Calling

Function Calling 是 OpenAI 在 GPT-3.5-turbo 和 GPT-4 中引入的一项能力。它允许开发者在 API 请求中预先定义一组可调用函数,模型根据用户输入自主判断是否需要调用其中某个函数,并生成符合函数签名的 JSON 参数。

与传统的提示词工程(Prompt Engineering)相比,Function Calling 具有三个显著优势:

  1. 结构化输出:模型生成严格的 JSON 格式参数,无需从自由文本中解析
  2. 类型安全:通过 JSON Schema 定义参数类型,降低解析错误率
  3. 决策透明:模型显式地选择"直接回答"或"调用工具",决策过程可追溯

二、Function Calling 的工作流程

一个完整的 Function Calling 交互流程包含以下四个步骤:

用户提问 → 模型分析 → 输出函数调用请求 → 开发者执行函数 → 结果回传 → 模型生成最终回答

具体流程如下:

  1. 注册工具:将可用工具以 JSON Schema 形式注册到 API 请求中
  2. 模型决策:模型分析用户输入,决定是否调用工具、调用哪个工具
  3. 参数解析:模型输出结构化的函数名称和参数(JSON 格式)
  4. 本地执行:开发者在本地执行对应的函数逻辑
  5. 结果回传:将函数执行结果以 function 角色的消息回传给模型
  6. 最终输出:模型基于工具返回结果生成完整回答

三、实战:定义工具函数

假设我们要构建一个能够查询天气和获取当前时间的 Agent。首先,需要定义工具函数的 JSON Schema:

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的当前天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称,例如:北京、上海"
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "温度单位"
                    }
                },
                "required": ["city"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_current_time",
            "description": "获取当前时间",
            "parameters": {
                "type": "object",
                "properties": {
                    "timezone": {
                        "type": "string",
                        "description": "时区,例如:Asia/Shanghai"
                    }
                },
                "required": []
            }
        }
    }
]
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐