【AI面试临阵磨枪-29】什么是 Function Calling?与手动解析 LLM 输出的区别?

一、面试题目

请你解释一下什么是 Function Calling(函数调用)?它和我们手动解析 LLM 输出的 JSON 有什么区别?

二、知识储备

1. Function Calling 核心定义

Function Calling(函数调用) 是大模型(如 GPT、文心一言、通义千问)原生支持的结构化输出能力 。开发者提前把函数名、参数、功能描述 告诉 LLM,当用户提问需要调用工具 / 接口时,LLM 不会直接回答 ,而是严格按照约定格式返回可执行的函数 + 参数,由程序自动调用并返回结果给 LLM 做最终回答。

核心作用:让 LLM 安全、精准、标准化地调用外部工具(查询天气、查数据库、计算、发请求)。

2. 手动解析 LLM 输出(原生 Prompt 解析)

通过写 Prompt 让 LLM 返回固定格式(如 JSON),然后程序用 json.parse 解析,再调用函数。

3. 核心区别(面试必背)

① 输出稳定性

  • Function Calling :模型原生保证格式正确,几乎不会出错、不会乱码、不会漏字段。
  • 手动解析:格式不可控,偶尔缺逗号、少引号、结构错乱,直接导致程序崩溃。

② 意图识别能力

  • Function Calling :模型精准判断什么时候该调用、调用哪一个,支持多函数自动路由。
  • 手动解析:靠 Prompt 硬约束,容易误判、漏判、多判。

③ 参数填充

  • Function Calling:自动补全必填参数、自动校验类型(int/str)、自动追问缺失信息。
  • 手动解析:容易参数缺失、类型错误、格式不匹配。

④ 安全性

  • Function Calling :输出严格隔离,不会注入、不会执行恶意内容
  • 手动解析:存在注入风险、格式污染风险。

⑤ 多工具支持

  • Function Calling:同时注册几十个工具,模型自动选择最优。
  • 手动解析:工具越多越容易混乱。

4. 适用场景

Function Calling 适用

  • AI Agent
  • 工具调用(查天气、查订单、发邮件、查数据库)
  • 插件系统
  • 需要高稳定性、高可靠性的生产环境

手动解析适用

  • 简单结构化输出
  • 不支持 Function Calling 的小模型
  • 临时、非核心、简单业务

三、破局之道

在面试中,用这段话展现你对 LLM 工具调用的深度理解:

Function Calling 本质是大模型原生提供的标准化、高稳定、强意图的工具调用能力

它和手动解析最大的区别:手动解析是 "猜格式",Function Calling 是 "保格式"

Function Calling 解决了生产环境最痛的三个问题:输出不稳定、意图判断不准、参数不可靠

工程落地中,只要模型支持,必须优先使用 Function Calling,手动解析只适合简单非核心场景。真正的生产级 Agent、插件系统、工具调用,一定是基于 Function Calling 构建的。

四、代码实现

1. Python 版本

python 复制代码
# ==========================================
# 1. 官方 Function Calling(稳定、安全、生产级)
# ==========================================
def function_calling_demo(user_query):
# 注册工具
    tools = [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "查询天气",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "city": {"type": "string",
                                 "date": {"type": "string"}
                                },
                        "required": ["city"]
                    }
                }
            }
            ]

# LLM 原生返回函数+参数
response = llm.chat(
    messages=[{"role": "user", "content": user_query}],
    tools=tools
)

# 模型保证格式正确,直接调用
func = response.function
args = response.arguments
result = get_weather(args["city"])
return result


# ==========================================
# 2. 手动解析输出(不稳定、易报错、测试用)
# ==========================================
def manual_parse_demo(user_query):
# 让模型返回 JSON
    prompt = f"""
用户问题:{user_query}
如果需要查天气,返回JSON:
{{"func":"get_weather","params":{{"city":"xxx"}}}}
"""

# 模型返回字符串
raw = llm(prompt)

# 手动解析 → 极易报错
try:
    data = json.loads(raw)
return get_weather(data["params"]["city"])
except:
return "解析失败"

2. JavaScript 版本

javascript 复制代码
// ==========================================
// 1. Function Calling(推荐)
// ==========================================
async function functionCalling(userQuery) {
  const tools = [{
    name: "getWeather",
    params: { city: "string" }
  }];

  const res = await llm.invoke(userQuery, tools);
  const { functionName, args } = res;
  return getWeather(args.city);
}

// ==========================================
// 2. 手动解析(不推荐生产)
// ==========================================
async function manualParse(userQuery) {
  const prompt = `返回JSON格式:{func,params}`;
  const raw = await llm(prompt + userQuery);

  try {
    const data = JSON.parse(raw);
    return getWeather(data.params.city);
  } catch (e) {
    return "解析错误";
  }
}
相关推荐
情绪总是阴雨天~1 小时前
OpenClaw 核心机制深度讲解:开源个人 AI 智能体全解析
人工智能·开源
星越华夏7 小时前
计算机视觉:YOLOv12安装环境
人工智能·yolo·计算机视觉
Yolanda948 小时前
【人工智能】《从零搭建AI问答助手项目(九):Prompt优化》
人工智能·prompt
wj3055853788 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
小和尚同志8 小时前
深入使用 skill-creator:结合真实生产级实践
人工智能·aigc
DevSecOps选型指南8 小时前
安全419专访悬镜安全 | 穿越周期在 AI 浪潮中定义数字供应链安全新范式
人工智能
沪漂阿龙8 小时前
面试题详解:GraphRAG 全面解析——知识图谱增强 RAG、Local Search、Global Search、社区摘要、工程落地与评估指标一次讲透
人工智能·知识图谱
WangN28 小时前
Unitree RL Lab 学习笔记【通识】
人工智能·机器学习
haina20199 小时前
海纳AI亮相《科创中国》,解码招聘“智”变之路
人工智能·ai面试·ai招聘
阿星AI工作室9 小时前
刘润年中大课笔记:一句话说清AI落地之战的本质
大数据·人工智能·创业创新·商业