【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}], toolstools ) # 模型保证格式正确直接调用 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.coloradmin.cn/o/2566919.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!