【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 "解析错误";
  }
}
相关推荐
ai大模型中转api测评1 小时前
构建生产级 AI 应用:GPT-5.5 与 Claude 4.7 的 Token 成本管理与工程化实战
大数据·人工智能·gpt·自动化
wxl7812271 小时前
Hermes+Qwen3.6-35B本地离线全链路全自动开发React项目,完成cognee-ui从零开发+自动测试+自动修Bug闭环
人工智能·经验分享·自我提升·hermes agent
jkyy20141 小时前
数智赋能药品零售:从卖药到健康服务,重构慢病管理新生态
人工智能·重构·健康医疗·零售
DO_Community1 小时前
DigitalOcean 打造 AI 原生云,帮助 AI 应用大幅降低成本与运维复杂度
运维·人工智能·agent·claude
汽车仪器仪表相关领域1 小时前
Kvaser Memorator R SemiPro:双通道CAN总线记录仪,汽车与工业测试的高性价比之选
大数据·网络·人工智能·功能测试·汽车·安全性测试
天天爱吃肉82181 小时前
空间智能上车:新能源OEM决胜「第三空间」的底层技术革命|研发工程师深度解析
大数据·人工智能·嵌入式硬件·汽车
初圣魔门首席弟子1 小时前
深度学习 欠拟合、过拟合讲透
人工智能
开开心心就好1 小时前
支持批量添加水印的实用工具推荐
人工智能·游戏·ci/cd·docker·音视频·语音识别·媒体
毕胜客源码1 小时前
卷积神经网络的手势识别系统(有技术文档)深度学习 图像识别 卷积神经网络 Django python 人工智能
人工智能·python·深度学习·cnn·django