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 的基础能力。

相关推荐
米小虾11 小时前
Loop Engineering —— 循环的设计与自主执行
人工智能·agent
米小虾11 小时前
Harness Engineering —— 系统的安全护栏
人工智能·agent
武子康13 小时前
调查研究-200 llama.cpp b9754:一次很小但很关键的 Agent 工具调用修复
人工智能·agent·llama
武子康14 小时前
调查研究-199 MCP Zero-Touch OAuth:为什么它是 MCP 进入企业生产的关键门槛?
人工智能·agent·mcp
用户9478505292714 小时前
Skill用得好,下班走得早:一文讲透Skill的结构与设计
agent
leeyi14 小时前
Batch 处理:并发控制与可中断批处理
aigc·agent·ai编程
冬奇Lab1 天前
Workflow 系列(01):基础理论——三种执行模型与 Anthropic 5 种模式
人工智能·agent·工作流引擎
冬奇Lab1 天前
每日一个开源项目(第143篇):page-agent - 纯 JS 的网页 GUI Agent,无需截图、无需插件、无需后端
前端·人工智能·agent
用户3134672143541 天前
Langchain入门到实战开发智能体教程(LLM+RAG+OpenAI+Agent)-下
agent
大模型真好玩1 天前
LangChain DeepAgents 速通指南(九)—— 生产级智能体框架 DeepAgents Code 源码导读
人工智能·langchain·agent