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

Agent 工程化系列 · 第 05 篇_FunctionCall底层到底怎么实现

Agent 工程化系列 · 第 05 篇Function Call 底层到底怎么实现模型不是在调用函数而是在生成调用意图。开篇定位前面第 04 篇我们讲清楚了 Function Call 是什么它不是让大模型“真的去执行函数”而是让模型在合适的时候生成一份结构化的工具调用请求。到了这一篇我们继续往下拆Function Call 底层到底是怎么跑起来的也就是说当用户说出一句话“帮我查一下今天北京天气如果下雨就提醒我带伞。”系统内部到底发生了什么模型看到了什么应用层收到了什么函数是谁执行的工具结果又是怎么回到模型里的这一篇不讲玄学只讲工程链路。目录Function Call 的底层本质是什么一次 Function Call 请求发生了什么工具定义为什么需要 JSON Schema模型输出tool call 长什么样执行器真正执行函数的是谁多轮工具调用循环怎么跑工程里如何做安全边界最后总结01 Function Call 的底层本质是什么先记住一句话Function Call 的底层本质上是模型输出一份“结构化调用意图”。普通聊天模式下模型输出的是自然语言。比如“今天北京可能有雨建议你带伞。”但 Function Call 模式下模型可以输出一种更适合程序处理的结果{name:get_weather,arguments:{city:北京}}这段内容不是最终回答而是一份调用请求。它的意思是我判断现在需要调用get_weather这个工具参数是city北京。真正执行get_weather函数的不是模型本身而是模型外面的应用程序、Agent 框架或者工具执行器。一个关键误区很多人第一次理解 Function Call 时会以为模型真的跑了一段函数代码。但这不准确。更准确的说法是模型负责判断“该调用什么工具、传什么参数”应用程序负责真正执行工具并把结果返回给模型。所以 Function Call 不是“模型执行代码”而是“模型和外部程序之间的一种结构化协作方式”。02 一次 Function Call 请求发生了什么从工程视角看一次 Function Call 通常会经历 5 个步骤。第一步开发者注册工具。应用程序先告诉模型我这里有一个工具叫get_weather它可以查询天气。它需要一个参数city。这个参数必须是字符串。第二步用户提出任务。用户输入“帮我查一下今天北京天气。”模型拿到的不只是用户问题还会同时看到系统提供的工具定义。第三步模型选择工具。模型判断这个问题不能只靠内部知识回答因为天气是实时信息。所以需要调用外部工具。于是模型输出一份 tool call。第四步应用执行工具。应用程序读取 tool call拿到函数名和参数真正调用天气 API。第五步模型整合结果。工具返回真实天气数据后应用程序把结果发回模型。模型再把结构化结果整理成用户能读懂的自然语言。这里最重要的是“回填”Function Call 不是模型输出一次工具调用就结束。真正完整的流程是用户问题 ↓ 模型输出 tool_call ↓ 应用执行工具 ↓ 工具结果回填给模型 ↓ 模型生成最终回答没有“工具结果回填”模型就不知道工具执行结果是什么。也就无法基于真实结果继续生成答案。03 工具定义为什么需要 JSON SchemaFunction Call 之所以比普通 Prompt 稳定关键原因之一是工具不是靠一句自然语言描述而是靠结构化 schema 描述。比如一个天气工具通常会描述这几类信息信息作用工具名称模型知道要调用哪个工具工具描述模型判断什么时候该用它参数结构模型知道需要传哪些字段参数类型避免把数字、字符串、数组传错必填字段避免漏传关键参数这就是 JSON Schema 的价值。它不是给人看的“说明文档”而是给模型和程序共同使用的“接口契约”。为什么不能只写 Prompt你当然可以在 Prompt 里写如果用户问天气就调用天气接口参数是城市名。但这样会有几个问题模型可能漏参数模型可能把参数写成自然语言模型可能输出格式不稳定应用程序解析困难多工具场景下容易混乱而 JSON Schema 的作用是把“工具怎么用”变成更明确的结构。这也是为什么 Function Call 是 Agent 工具系统的基础能力之一。04 模型输出tool call 长什么样在底层交互里模型通常不会直接返回一句完整回答而是返回一个工具调用对象。一个 tool call 至少要表达三件事{id:call_01,name:get_weather,arguments:{city:北京}}这里面最关键的是字段含义id本次工具调用的唯一标识name要调用的工具名称arguments传给工具的结构化参数其中id很重要。因为真实系统里可能一次返回多个 tool call比如同时查天气、查日程、查交通。应用程序执行完每个工具后需要把结果和对应的tool_call_id对上。否则模型无法知道哪个结果对应哪个工具调用。tool call 不是最终答案tool call 更像一张“任务单”。模型写了一张任务单去调用 get_weather查北京天气。执行器拿到任务单去真正执行。执行完之后再把结果贴回到对话上下文里。模型看到结果后才继续生成最终回答。05 执行器真正执行函数的是谁Function Call 系统里通常有一个角色叫工具执行器。它可以是你自己的业务代码也可以是 Agent 框架里的 Tool Executor。它的职责不是“理解用户意图”。理解用户意图主要由模型完成。工具执行器负责的是更工程化的事情读取模型输出的工具名校验参数是否符合 schema判断用户是否有权限调用真实 API、数据库或业务系统处理超时、失败、重试记录日志把结果包装成 tool result也就是说工具执行器是模型和真实系统之间的一层边界。它不能太薄。如果只是简单写一句resulttools[name](**arguments)在 Demo 里可以跑。但在真实系统里远远不够。因为工具调用一旦接入数据库、订单系统、文件系统、支付系统就已经不只是“问答”问题而是“执行动作”问题。06 多轮工具调用循环怎么跑真实 Agent 场景里Function Call 往往不是一次完成。比如用户说“帮我安排明天去上海的行程如果下雨就优先安排室内活动。”一个 Agent 可能需要查明天上海天气查用户日程查交通时间查室内活动推荐生成行程方案这时模型可能会连续生成多次 tool call。每一次调用之后工具结果都会回填到上下文里。模型再根据新信息决定下一步。工程上必须设置退出条件多轮工具调用有一个风险模型可能一直觉得信息不够然后不断调用工具。所以真实系统里一般需要设置最大调用步数单次工具超时时间总任务超时时间工具失败重试次数是否允许并行调用是否需要人工确认这也是 Agent 工程化和普通 API 开发最大的不同之一。普通 API 调用流程是程序员写死的。Agent 工具调用流程是模型在运行时动态决定的。所以你必须给它边界。07 工程里如何做安全边界Function Call 真正危险的地方不是“模型答错”。而是模型生成了一个看起来合理、但实际有风险的工具调用。比如删除文件修改数据库发送邮件提交订单转账付款调用内部系统接口如果没有安全边界Agent 很容易从“智能助手”变成“高风险自动执行器”。一个靠谱的工具执行器至少要做这些事安全点具体作用参数校验防止模型生成错误参数权限控制判断当前用户是否有权执行风险分级区分查询、修改、删除、支付等动作人工确认高风险动作必须由人确认超时重试防止工具长时间卡住幂等设计防止重复下单、重复扣费日志审计出问题时能追踪全过程这里有一个工程原则不要把模型当成可信执行者要把它当成会生成调用建议的智能决策模块。模型可以建议调用什么工具。但能不能执行、怎么执行、执行到什么权限边界必须由系统控制。08 最后总结Function Call 的底层实现可以压缩成一句话模型生成结构化 tool call应用程序执行真实工具再把工具结果回填给模型继续生成。它不是让模型拥有了魔法。它只是把模型的语言能力接到了外部系统的真实能力上。这一层能力是 Agent 从“会聊天”走向“能办事”的关键一步。本篇重点可以记住 4 点Function Call 本质是结构化调用意图JSON Schema 是模型和程序之间的接口契约真正执行函数的是应用层或工具执行器多轮调用必须有边界、安全、日志和退出条件下一篇我们会继续进入工具与协议阶段第 06 篇MCP 是什么协议为什么它被称为 AI 应用的 USB-C参考资料OpenAI API DocsFunction Calling / Tool CallingOpenAI API DocsStructured OutputsOpenAI Agents SDKToolsAnthropic DocsTool Use with ClaudeLangChain DocsTools / Tool Calling

相关文章:

Agent 工程化系列 · 第 05 篇_FunctionCall底层到底怎么实现

Agent 工程化系列 第 05 篇 Function Call 底层到底怎么实现?模型不是在调用函数,而是在生成调用意图。开篇定位 前面第 04 篇,我们讲清楚了 Function Call 是什么: 它不是让大模型“真的去执行函数”,而是让模型在合…...

清华PPT模板终极指南:从零开始打造专业学术演示

清华PPT模板终极指南:从零开始打造专业学术演示 【免费下载链接】THU-PPT-Theme 清华主题PPT模板 项目地址: https://gitcode.com/gh_mirrors/th/THU-PPT-Theme THU-PPT-Theme是一个专门为清华大学师生和学术工作者设计的PPT模板集合,提供了多种符…...

【ElevenLabs Creator计划终极避坑手册】:基于137份真实申请案例的数据复盘——高通过率申请者的3个共性特征

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs Creator计划全景认知与申请价值重定义 ElevenLabs Creator 计划并非传统意义上的 API 试用通道,而是面向内容创作者、开源贡献者与教育实践者的深度协作生态入口。其核心价值已从…...

Postman实战:自动化管理API访问令牌的两种高效策略

1. 为什么需要自动化管理API访问令牌 在如今的API开发中,身份验证和授权已经成为必不可少的安全机制。大多数现代API都采用基于令牌(Token)的认证方式,其中Bearer Token是最常见的标准之一。想象一下,每次调用API都需要手动复制粘贴一长串Tok…...

Next.js企业级开发样板Next-Enterprise:一站式集成最佳实践与工具链

1. 项目概述:为什么说 Next-Enterprise 是 Next.js 企业级开发的“瑞士军刀”? 如果你正在用 Next.js 构建一个中大型、对代码质量和开发体验有要求的企业级应用,那你大概率遇到过这些头疼事:项目初始化配置繁琐,得花…...

从零构建:基于Air724UG的4G LTE物联网数据透传系统

1. 认识Air724UG模块:你的物联网数据搬运工 第一次拿到Air724UG这个巴掌大的4G模块时,我完全没想到它能成为我物联网项目的核心组件。这个来自合宙通信的Cat.1模块,最大的特点就是用2G的价格享受4G的体验。实测在市区环境下,它的上…...

Hermes-Agent 智能体核心能力与实战效能深度评测

在构建自动化工作流或智能客服系统时,开发者最常遇到的痛点往往不是模型本身不够聪明,而是“记不住”和“乱执行”。很多时候,一个智能体在前几轮对话中还逻辑清晰,一旦上下文拉长,就开始遗忘关键约束,或者…...

STATA CLI:我把 Stata 接进了命令行,也接进了 AI 工作流

为什么要做这个工具 我写 stata-cli,不是因为想再造一个 Stata,也不是因为命令行天然高级,而是因为 Stata 明明是很多实证研究者最熟悉的工具,却一直很难进入现代自动化工作流。 做计量、做实证、做政策评估的人都知道&#xff0c…...

Matlab ode45求解微分方程保姆级教程:从单变量到多智能体系统,附完整代码

Matlab ode45求解微分方程:从单变量到多智能体系统的工程实践 微分方程是描述动态系统演化的核心数学工具,而Matlab的ode45求解器则是工程师和科研人员最常用的数值求解利器。本文将带你从最基础的单个微分方程求解出发,逐步深入到多智能体系…...

【Gemini Chrome插件实战指南】:20年老司机亲测的5大生产力跃迁技巧,90%用户还不知道

更多请点击: https://intelliparadigm.com 第一章:Gemini Chrome插件的核心架构与能力边界 Gemini Chrome 插件并非简单封装的 API 调用前端,而是一个基于 Chromium 扩展模型(Manifest V3)构建的多层协同系统&#xf…...

紧密型医共体信息平台厂商行业白皮书:厂商实力及趋势分析

紧密型医共体信息平台厂商行业白皮书:厂商实力及趋势分析一、行业概况医共体信息平台是县域医疗卫生共同体建设的核心数字化工具。以县级医院为枢纽,平台连接县域内各级医疗机构及管理单位,实现数据互通、系统协同与资源共享,打破…...

长期使用Token Plan套餐,我的大模型调用成本降低了多少

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Token Plan套餐,我的大模型调用成本降低了多少 1. 从按量付费到套餐订阅的转变 在深度使用大模型API进行项目…...

ChatGPT 2026安全增强套件发布:内置FIPS 140-3认证加密引擎、GDPR实时审计追踪、AI生成内容数字水印——金融/医疗行业合规上线最后窗口期

更多请点击: https://intelliparadigm.com 第一章:ChatGPT 2026安全增强套件整体架构与合规定位 ChatGPT 2026安全增强套件(CESK-2026)是一套面向生成式AI服务的纵深防御框架,专为满足GDPR、中国《生成式人工智能服务…...

基于Gemini与Elasticsearch构建智能数据查询命令行工具

1. 项目概述:当Elasticsearch遇见Gemini,一个命令行智能体的诞生 最近在开源社区里闲逛,发现了一个挺有意思的项目: elastic/gemini-cli-elasticsearch 。光看这个名字,就能嗅到一股“强强联合”的味道。Elasticsea…...

Taotoken CLI工具一键配置开发环境与团队密钥共享指南

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken CLI工具一键配置开发环境与团队密钥共享指南 在团队协作开发中,统一大模型API的接入配置是一个常见痛点。每位…...

NotebookLM无法识别PDF表格?手把手复现Google Research 2024最新LayoutParser适配方案(附可运行Colab脚本)

更多请点击: https://intelliparadigm.com 第一章:NotebookLM无法识别PDF表格?手把手复现Google Research 2024最新LayoutParser适配方案(附可运行Colab脚本) NotebookLM 默认使用轻量级 PDF 解析器(如 Py…...

基于MCP与多准则决策的数据中心智能选址系统设计与实践

1. 项目概述:数据中心选址智能决策的现代解法最近在做一个挺有意思的项目,客户是一家大型互联网公司,他们计划在海外新建一个大型数据中心,但面对全球几十个潜在选址,从土地成本、电力供应、网络延迟到政策风险&#x…...

Arcgis制图进阶:比例尺参数深度解析与实战样式定制

1. 比例尺参数配置的核心逻辑 比例尺在ArcGIS中远不止是一个简单的标注工具,它直接影响地图的专业性和信息传达效率。我经手过上百个制图项目,发现90%的比例尺问题都源于对参数逻辑理解不透彻。比例尺参数系统其实是一个精密的视觉计算器,它…...

【源码深度】Android 屏幕渲染底层原理|SurfaceFlinger + 渲染流水线 + 刷新率适配 + 帧率卡顿根治|Android 全栈体系 150 讲 - 42

...

基于MCP协议与本地全文检索的电子元件文档AI查询系统

1. 项目概述:为LLM构建一个本地化的电子元件文档搜索引擎如果你是一名嵌入式工程师、硬件开发者,或者像我一样,经常需要和德州仪器(TI)、意法半导体(ST)、亚德诺(ADI)这些…...

长期使用Taotoken Token Plan套餐在项目开发中的成本节省感受

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken Token Plan套餐在项目开发中的成本节省感受 1. 项目背景与计费模式选择 我们团队负责一个中型规模的AI应用项目…...

Pycharm更新骨架卡死C盘?罪魁祸首是torch-geometric的四个依赖库

PyCharm更新骨架卡死C盘?深入解析torch-geometric依赖库的存储陷阱 当你在PyCharm中启动一个包含torch-geometric的项目时,是否经历过C盘空间被神秘吞噬的噩梦?那个名为"Updating skeletons"的后台进程,本应是IDE的贴心…...

2026浏览器插件指纹溯源机制与插件环境安全优化实战指南

一、前言:插件特征成为批量虚拟环境识别的新型突破口在矩阵运营行业精细化风控对抗背景下,UA 修改、IP 切换、基础指纹伪装已经成为行业标配操作,平台逐渐放弃基础参数检测,转向高隐蔽、高区分度、极易被忽略的插件指纹进行设备识…...

UWB车内目标探测技术【附仿真】

✨ 长期致力于UWB雷达、活体、目标检测、生命体征、信号模型研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)UWB雷达生命体征信号建模与自适应杂波抑制…...

建立个人学习SOP:信息输入、消化吸收与输出实践

对于软件测试从业者而言,技术迭代的速度往往快于岗位技能的沉淀周期。从自动化框架的百花齐放到 AI 驱动测试的兴起,从微服务架构下的契约测试到混沌工程在稳定性领域的渗透,测试人员需要持续吸收新知识,却又极易陷入“学得越多&a…...

从JAR包到原生二进制:我的SpringBoot应用在Linux服务器上‘瘦身’实战记录(GraalVM 22.1.0 + Maven)

从JAR包到原生二进制:我的SpringBoot应用在Linux服务器上‘瘦身’实战记录 去年接手的一个电商促销系统,随着业务增长,JAR包启动时间从最初的8秒延长到23秒。某次大促期间,服务扩容时JVM预热导致的响应延迟直接影响了转化率——这…...

为什么数据科学家都爱用Spyder?这6个独特优势让你告别Python开发烦恼! [特殊字符]

为什么数据科学家都爱用Spyder?这6个独特优势让你告别Python开发烦恼! 😊 【免费下载链接】spyder Official repository for Spyder - The Scientific Python Development Environment 项目地址: https://gitcode.com/gh_mirrors/sp/spyder…...

Realme Q3 5G刷Pixel Experience GSI保姆级教程(附问题修复与救砖指南)

Realme Q3 5G刷入Pixel Experience GSI全流程实战手册 在ColorOS与类原生Android之间,总有一群追求极简体验的玩家。Realme Q3 5G作为一款性价比突出的设备,其官方系统预装的应用和服务未必符合所有用户的期待。本文将带你完整走过从解锁到问题修复的全过…...

告别嘟嘟声!用Arduino和Python给蜂鸣器编程,轻松播放任意MP3旋律

用Arduino与Python解锁蜂鸣器的音乐潜能:从基础音调到智能编曲 在创客的世界里,让硬件发出声音一直是最富成就感的项目之一。传统51单片机虽然功能强大,但对于现代开发者而言,其开发环境配置复杂、调试困难等问题常常让人望而却步…...

如何3步完成CAJ转PDF:caj2pdf完全指南

如何3步完成CAJ转PDF:caj2pdf完全指南 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https://gitcode.com/gh_mirrors/ca/caj…...