当前位置: 首页 > news >正文

【AI面试临阵磨枪-029】什么是 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 版本

# ========================================== # 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 版本

// ========================================== // 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 "解析错误"; } }
http://www.jsqmd.com/news/721648/

相关文章:

  • 如何用PowerToys中文版彻底改变你的Windows工作流:从效率瓶颈到生产力飞跃
  • 你的GPS定位漂移吗?基于STM32 HAL库的ATGM336H数据滤波与有效性判断实践
  • Gemma 4工具调用:Python实现大语言模型自动化任务处理
  • 终极破解工具:3步实现Cursor AI无限免费使用,告别API限制困扰
  • 构建情侣专属任务积分系统:从零实现微信小程序互动平台
  • 关于北理课程的反差错乱
  • 别再被‘Bad CRC-32’卡住了!PyTorch安装报错终极排查手册(附--no-cache参数详解)
  • 别再到处找资源了!JEDEC JESD22全套标准(含最新A118、B118)下载与分类管理指南
  • 基于模块化架构的AI应用后端开发:从向量检索到LLM编排的工程实践
  • SpringBoot项目里用Camunda 7.18搞流程审批?这份避坑指南和实战代码请收好
  • 10、 H桥电路与电机方向控制
  • 破解 AI 幻觉困局:Easysearch 以检索技术筑牢大模型“可信防线”
  • 别再被ModuleNotFoundError卡住!Python处理Excel文件,openpyxl、pandas、xlrd到底该用哪个?
  • 别再乱打光了!Blender 3.6+ 灯光保姆级设置指南:从环境光到IES遮罩,一次讲透
  • R语言偏见检测耗时超47分钟?用data.table+Rcpp无缝加速——3个编译级优化技巧让AUC偏差归因提速8.2倍
  • AI规则同步器:用代码管理思维统一多平台提示词与指令集
  • 避坑指南:在C# WinForm项目中使用NModbus4实现RTU从站时,这几个异步和资源管理问题你遇到了吗?
  • 别再死记硬背了!用这5个真实项目场景,彻底搞懂ESP8266 AT指令怎么用
  • 如何用猫抓资源嗅探工具彻底改变你的数字内容管理体验
  • 无人机视频处理挑战与GE ICS-8580多速率压缩方案
  • 终极指南:如何彻底解决Cursor API限制,实现无限免费使用Pro功能
  • 方阵贪吃蛇的必胜策略
  • 别再死记硬背公式了!用Python+SymPy手把手推导状态空间平均法(以Buck电路为例)
  • 元宇宙资产测试专家:软件测试从业者的虚拟经济守护之道
  • MCP DevTools:无缝集成Jira与Linear,AI编程助手直接操作项目管理工具
  • 从adcode到城市树:一个免费行政区划API背后的数据结构设计与应用思考
  • ChartM3:多模态图表理解与商业智能分析新范式
  • OpenAI API密钥安全管理与多密钥轮询策略实践
  • LangTorch:用PyTorch张量范式重构LLM应用开发
  • 告别VM软件界面限制:用C#和VisionMaster 4.2 SDK打造你的专属视觉检测上位机