news 2026/4/23 13:29:11

大模型Function Calling的函数如何调用的?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型Function Calling的函数如何调用的?

在真实开发中,大模型的 Function Calling(函数调用)不是“模型直接执行代码”,而是一套“声明-生成-解析-执行-反馈”的安全闭环机制。以下是我在项目中(如智能编程助手、自动化运维 Agent)的实际做法:

一、核心流程(生产级标准做法)

二、具体步骤

1.注册函数

在调用 LLM 前,向模型描述有哪些函数可用(OpenAI 格式为例):

const tools = [{ type: "function", function: { name: "read_file", description: "读取项目中的文件内容", parameters: { type: "object", properties: { path: { type: "string", description: "文件相对路径,如 src/main.ts" } }, required: ["path"] } } }];

关键:参数必须有明确 schema,防止模型传非法值。

2.调用 LLM 并启用工具
const response = await openai.chat.completions.create({ model: "gpt-4o", messages: [...], tools, // ← 注册的函数列表 tool_choice: "auto" // 模型可自主决定是否调用 });
3.解析模型返回

模型不会执行函数,而是返回结构化调用请求:

{ "tool_calls": [ { "id": "call_abc123", "function": { "name": "read_file", "arguments": "{"path":"src/utils.ts"}" } } ] }
4.安全执行函数
  • 绝不直接 eval!而是通过白名单映射:
const toolMap = { read_file: (args) => { // 1. 校验路径是否在项目目录内 if (!args.path.startsWith("src/")) throw new Error("Access denied"); // 2. 读取文件(沙箱隔离) return fs.readFileSync(args.path, "utf8"); } }; const result = await toolMap[funcName](parsedArgs);
  • 所有操作在受限环境中执行(如 Docker 沙箱、只读文件系统)。
5.将结果反馈给模型

把函数执行结果作为“tool message”送回对话:

messages.push({ role: "tool", tool_call_id: "call_abc123", content: result // 文件内容 });

→ 模型基于此生成下一步(继续调用 or 最终回答)。

三、真实项目中的关键实践

问题解决方案
模型传错参数(如 path: "../../../etc/passwd")参数校验 + 路径归一化 + 白名单目录
函数执行超时/卡死设置 timeout(如 5s) + AbortController
敏感操作(如删文件)禁止高危函数,或需用户二次确认
多次调用循环限制最大 tool_calls 次数(如 5 次)
调试困难记录完整 trace:prompt → tool_call → result → final answer

四、为什么不用模型直接“写代码执行”?

  • 安全风险极高(任意代码执行 = RCE 漏洞);
  • 不可控(无法限流、审计、降级);
  • 不可靠(模型可能生成语法错误代码)。

正确做法:Function Calling 是“受控 API 调用”,不是“代码生成执行”

总结:

在实际项目中,大模型的 Function Calling 是一个安全代理机制

  1. 我们先向模型声明可用函数及其参数 schema
  2. 模型返回结构化调用请求(非执行);
  3. 后端严格校验参数、权限、路径,在沙箱中执行真实函数;
  4. 将结果反馈给模型,形成多轮推理闭环。

核心原则:模型只负责“决策”,不负责“执行”——这是生产系统安全落地的底线。

学习资源推荐

如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!​

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示

​因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

四、AI大模型商业化落地方案

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 14:06:56

一键打包下载所有生成结果,HeyGem批量导出超方便

一键打包下载所有生成结果,HeyGem批量导出超方便 在数字内容生产进入“AI工业化”时代的今天,企业对视频制作效率的要求早已从“日更几十条”跃升至“分钟级产出百条”。尤其在在线教育、智能客服、跨境电商等领域,同一段讲解词需要适配不同形…

作者头像 李华
网站建设 2026/4/18 5:28:39

MathType公式插入HeyGem生成的教学视频可行吗?

MathType公式能否嵌入HeyGem数字人教学视频?一文讲透技术路径 在智能教育内容爆发的今天,越来越多教师和课程开发者开始尝试用AI数字人替代真人出镜,制作微课、MOOC或企业培训视频。这类方案的核心优势很明显:不用打光、不用排练、…

作者头像 李华
网站建设 2026/4/23 2:20:23

从静态指导到智能驱动:动态工艺卡片如何重塑制造内核

在现代制造业数字化转型的深水区,一场静默却深刻的变革正在车间基层发生。传统工艺卡片,这一延续数十年的生产指导基石,正从静态的纸质指令进化为集三维可视化、实时数据交互与系统智能驱动于一体的“动态工艺卡片”。这不仅是形式的革新&…

作者头像 李华
网站建设 2026/4/18 21:14:22

3.5 基于横盘结构的分析体系——缠论(走势转折)

走势转折是所有技术分析体系中的重点和难点。大多数技术分析都要找到走势的转折点,参与到一段上涨趋势(做多)或下跌趋势(做空)中,或者在横盘震荡区间做高抛低吸。 缠论中走势转折涉及到背离以及走势结构,通常在日线级别,带有中枢并形成背离的五笔、七笔或九笔走势,之…

作者头像 李华
网站建设 2026/4/20 7:26:07

C# 12主构造函数到底怎么用?3个实战案例教你高效编程

第一章:C# 12主构造函数的核心概念C# 12 引入了主构造函数(Primary Constructors),极大简化了类型初始化的语法,尤其在类和结构体中表现突出。这一特性允许开发者在类型定义时直接声明构造参数,并在整个类型…

作者头像 李华
网站建设 2026/4/18 16:18:13

揭秘C#跨平台日志难题:5个关键技巧让你快速定位Bug

第一章:揭秘C#跨平台日志难题:为何Bug难以定位在现代软件开发中,C#应用常被部署于多平台环境,包括Windows、Linux乃至macOS。然而,当程序在不同操作系统上运行时,日志记录行为的差异往往导致Bug难以复现与追…

作者头像 李华