agent中的Function Calling详细解释

我来为你详细介绍 Function Calling(函数调用)这一重要概念。

什么是 Function Calling?

Function Calling 是一种让大语言模型(LLM)能够调用外部工具或函数的能力。它使模型不仅能生成文本,还能与外部系统交互,执行计算、查询数据库、调用 API 等操作。

简单来说,它让 AI 从"只会说话"变成了"能动手做事"。


核心工作原理

scss 复制代码
┌─────────────┐      1. 用户请求      ┌─────────────┐
│   用户      │ ───────────────────> │    LLM      │
└─────────────┘                      └──────┬──────┘
                                            │
                                            ▼
                                    ┌───────────────┐
                                    │  分析是否需要  │
                                    │  调用工具/函数  │
                                    └───────┬───────┘
                                            │
                              ┌─────────────┴─────────────┐
                              ▼                           ▼
                        ┌──────────┐                ┌──────────┐
                        │ 需要调用  │                │ 直接回答  │
                        └────┬─────┘                └────┬─────┘
                             │                           │
                             ▼                           ▼
                    ┌─────────────────┐          ┌─────────────┐
                    │ 生成函数调用参数 │          │  返回文本   │
                    │ (函数名+参数)    │          │   回答      │
                    └────────┬────────┘          └──────┬──────┘
                             │                          │
                             ▼                          │
                    ┌─────────────────┐                 │
                    │  系统执行函数    │                 │
                    │  (获取结果)      │                 │
                    └────────┬────────┘                 │
                             │                          │
                             ▼                          │
                    ┌─────────────────┐                 │
                    │  将结果返回给    │─────────────────┘
                    │     LLM         │
                    └─────────────────┘

典型应用场景

场景 说明 示例
实时信息获取 模型知识有截止日期,需要查询最新数据 查询天气、股票价格、新闻
精确计算 大模型数学计算容易出错 复杂数学运算、数据分析
数据库操作 需要查询或操作结构化数据 SQL 查询、用户信息检索
外部 API 调用 与第三方服务集成 发送邮件、创建日程、下单
代码执行 运行代码获取结果 Python 计算、代码验证

实际示例

示例:天气查询助手

用户输入:

"北京今天天气怎么样?"

Function Calling 流程:

  1. 模型判断 :需要调用 get_weather 函数

  2. 生成调用参数

    json 复制代码
    {
      "function": "get_weather",
      "arguments": {
        "city": "北京",
        "date": "2026-03-08"
      }
    }
  3. 系统执行 :调用天气 API,返回结果

    json 复制代码
    {
      "temperature": "15°C",
      "condition": "晴",
      "humidity": "45%"
    }
  4. 模型生成最终回答 : "北京今天天气晴朗,气温 15°C,湿度 45%,是个适合外出活动的好天气!"


技术实现要点

1. 函数定义(Schema)

需要向模型提供可用函数的详细描述:

json 复制代码
{
  "name": "get_weather",
  "description": "获取指定城市的天气信息",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "城市名称,如'北京'"
      },
      "date": {
        "type": "string",
        "description": "日期,格式YYYY-MM-DD"
      }
    },
    "required": ["city"]
  }
}

2. 调用与响应流程

python 复制代码
# 伪代码示例
def chat_with_functions(user_message):
    # 1. 发送用户消息 + 可用函数列表给模型
    response = llm.chat(
        messages=[{"role": "user", "content": user_message}],
        functions=[get_weather_schema, calculate_schema]
    )
    
    # 2. 检查模型是否要求调用函数
    if response.function_call:
        function_name = response.function_call.name
        arguments = response.function_call.arguments
        
        # 3. 执行函数
        result = execute_function(function_name, arguments)
        
        # 4. 将结果返回给模型,生成最终回答
        final_response = llm.chat(
            messages=[
                {"role": "user", "content": user_message},
                {"role": "assistant", "function_call": response.function_call},
                {"role": "function", "name": function_name, "content": result}
            ]
        )
        return final_response.content
    
    # 无需调用函数,直接返回答案
    return response.content

主要优势

优势 说明
准确性 通过外部工具获得精确结果,而非依赖模型"猜测"
时效性 突破知识截止日期限制,获取实时信息
扩展性 无限扩展模型能力,连接任意系统
可靠性 确定性操作(如计算、数据库查询)更准确
安全性 敏感操作在系统侧控制,而非模型直接执行

主流模型的支持情况

  • OpenAI GPT-4/GPT-3.5:原生支持 Function Calling
  • Claude (Anthropic):支持 Tool Use
  • Google Gemini:支持 Function Calling
  • 开源模型(如 Llama、Qwen 等):通过微调或特定格式支持

与类似概念的区别

概念 区别
RAG (检索增强生成) RAG 是先检索文档再生成回答;Function Calling 是调用可执行函数
插件 (Plugins) 插件通常是预定义的集成;Function Calling 更灵活,可动态定义函数
Agent (智能体) Function Calling 是 Agent 的核心能力之一,Agent 还包含规划、记忆等更复杂的逻辑

总结

Function Calling 是连接大语言模型与外部世界的桥梁,它让 AI 从"纸上谈兵"进化为"知行合一"。这是构建实用 AI 应用的关键技术,也是实现更强大 AI Agent 的基础能力。

相关推荐
AIGC大时代9 小时前
LangGraph 生产级笔记:Checkpointer + interrupt(),把人审做成可恢复状态机
python·agent·状态机·langgraph·hitl
zzz_236819 小时前
个人 AI 记忆如何跨工具复用:用 Markdown、索引和 Skill 搭一个可治理的记忆库
前端·人工智能·react.js·前端框架·agent·agent测评
Csvn20 小时前
第 16 章 多智能体 Multi-Agent
人工智能·aigc·agent
luckystar513~21 小时前
Hermes 实战 :系列收官/生产化——安全审计与运维
运维·人工智能·安全·agent·智能体开发·hermes实战·智能体网关
七牛云行业应用1 天前
Harness Engineering 是什么:从“写提示词“到“设计 Agent 边界“的工程方法论
人工智能·agent·ai编程
运维开发王义杰1 天前
终端新王登基?GPT-6 Astra 飞跃与 GLM-5.3 突围
agent
lee_curry1 天前
AI Agent 工程师完整学习路线(面向生产级项目与面试)
人工智能·学习·ai·面试·agent
大模型真好玩1 天前
DeepSeek Harness 入门很简单(二)——DeepSeek Harness通用设置及Agent预设详解
人工智能·agent·deepseek
HIT_Weston1 天前
203、【Agent】【OpenCode】JS 语法:作用域链与 var 循环陷阱
人工智能·agent·opencode
Luhui Dev1 天前
Multi-Agent 实践中的坑坑洼洼
人工智能·agent·luhuidev