大模型的Agent Skill功能,在LLM HTTP底层交互流中是怎么承载的?

📅 2026/7/25 21:58:51
大模型的Agent Skill功能,在LLM HTTP底层交互流中是怎么承载的?
01前言前几天我在司内论坛的一个问答中提到了要写一个拉取网络文章文本的 skill昨天我实现了之后也就开始好奇起 Skills 的底层原理了——相比起各种花里胡哨的 agrnt 应用我一直以来都很对大模型在纯粹的 HTTP 交互层面是如何交互的更感兴趣。我们知道大模型只会对话聊天所谓的工具调用也只不过是特化的聊天功能而已。但是各种天花乱坠的 skills是如何在底层的 HTTP 中与大模型——这个只会嘴遁的工具交互的呢02前置知识本文面向对 OpenAI 兼容协议 有了解的同学如果不了解的话可以参考协议文档或者是我的 两篇老文章 https://cloud.tencent.com/developer/article/2518981 简单了解。03核心结论先说Skills 不是协议层概念在 OpenAI 兼容协议中根本不存在 “Skill” 这个字段或角色。 Skills 是一个纯粹的应用层抽象它最终被 Cursor或类似的 AI IDE编译成三种协议原语的组合System/Developer Message — 把 Skill 的指令文本注入到 system prompt 中Tools Definition — 把 Skill 需要用到的工具如 Shell、Read 等注册为tools数组Multi-turn Tool Calling Loop — LLM 根据注入的指令自主决策发起 tool_calls宿主执行后把结果喂回去用一句话总结Skill 动态注入的 system prompt 片段 预定义的 tool schema 多轮 tool calling 循环。这里我们用 Cursor 以及我实现的 skill mp-read 来举例其他工具OpenClaw也是一样的——04第 0 步Skill 发现与描述摘要注入在你打开 Cursor、还没说话的时候Cursor 就已经扫描了 .cursor/skills/、.agents/skills/ 等目录收集了所有 Skill 的 name description来自 YAML frontmatter然后把它们作为静态上下文塞进 system prompt。以你的 mp-read 为例SKILL.md 的 frontmatter 是name: mp-readdescription: - Extract plain text from Tencent MP (mp.weixin.qq) articles using a headless Chrome browser. Use when the user wants to read, fetch, extract, summarize, or reference a MP article, or when a mp.weixin.qq URL appears in conversation.这段信息会被注入成类似这样的 system prompt 片段Cursor 真实行为的简化版available_skillsagent_skill fullPath/path/to/mp-read/SKILL.md Extract plain text from Tencent MP (mp.weixin.qq) articles using a headless Chrome browser. Use when the user wants to read, fetch, extract, summarize, or reference a MP article, or when a mp.weixin.qq URL appears in conversation./agent_skill/available_skills注意此时 SKILL.md 的正文还没有被读取。这就是 Cursor 文档里说的 “Progressive Loading”——只先放名字和描述不浪费 token。05第 1 步用户发问触发 Skill假设用户发了一句帮我读一下这篇公众号文章https://mp.weixin.qq.com/s/HHPK6QvclYaxlDg28elN8w此时 Cursor 作为客户端构造出的第一次 API 请求大致如下简化但忠实于 OpenAI 协议{ model: claude-4.6-opus, messages: [ { role: system, content: You are an AI coding assistant.../n/navailable_skills/nagent_skill fullPath//Users/123456/.../mp-read/SKILL.md//n Extract plain text from Tencent MP (mp.weixin.qq) articles.../n/agent_skill/n/available_skills/n/nWhen a skill is relevant, read and follow it IMMEDIATELY as your first action... }, { role: user, content: 帮我读一下这篇公众号文章https://mp.weixin.qq.com/s/HHPK6QvclYaxlDg28elN8w } ], tools: [ { type: function, function: { name: Read, description: Reads a file from the local filesystem..., parameters: { type: object, properties: { path: { type: string, description: The absolute path of the file to read. }, offset: { type: integer }, limit: { type: integer } }, required: [path] } } }, { type: function, function: { name: Shell, description: Executes a given command in a shell session..., parameters: { type: object, properties: { command: { type: string }, description: { type: string }, working_directory: { type: string }, block_until_ms: { type: number } }, required: [command] } } } ], tool_choice: auto}关键点tools 数组是 Cursor 预定义好的不是 Skill 定义的。Skill 本身不声明工具——它只是告诉 LLM “你可以用 Read 来读文件用 Shell 来执行命令”。system prompt 里有 Skill 的描述摘要和一条关键指令“When a skill is relevant, read and follow it IMMEDIATELY”06第 2 步LLM 响应 — 决定先读 SKILL.mdLLM 看到用户提到了 mp.weixin.qq匹配到了 system prompt 中 mp-read skill 的描述于是按照指令先读 Skill 文件。它返回的响应是{ choices: [ { message: { role: assistant, content: null, tool_calls: [ { id: call_abc123, type: function, function: { name: Read, arguments: {/path/: //path/to/mp-read/SKILL.md/} } } ] }, finish_reason: tool_calls } ]}这就是 Skill 的加载——本质上就是 LLM 自己发起了一次 Read tool call读取 SKILL.md 文件。07第 3 步Cursor 执行 tool call返回结果Cursor 在本地执行 Read(“/Users/123456/…/mp-read/SKILL.md”)拿到文件内容然后构造下一轮请求{ messages: [ { role: system, content: 同上省略 }, { role: user, content: 帮我读一下这篇这篇公众号文章https://mp.weixin.qq.com/s/HHPK6QvclYaxlDg28elN8w }, { role: assistant, content: null, tool_calls: [ { id: call_abc123, type: function, function: { name: Read, arguments: {/path/: //Users/123456/.../mp-read/SKILL.md/} } } ] }, { role: tool, tool_call_id: call_abc123, content: ---/nname: mp-read/ndescription: -/n Extract plain text from MP.../n---/n/n/n/n...完整 SKILL.md 内容... } ], tools: [ 同上Shell、Read 等工具定义 ]}到这一步SKILL.md 的全部内容已经通过 role: “tool” 消息进入了 LLM 的上下文窗口。 LLM 现在拥有了完整的技能说明书。08第 4 步LLM 按照 Skill 指令行动 — 前置检查LLM 读完 SKILL.md 后按照 “Prerequisites Check” 章节的指示章节中要求用户必须实现准备好一个 cookie.txt 文件先检查环境。它返回{ choices: [ { message: { role: assistant, content: null, tool_calls: [ { id: call_def456, type: function, function: { name: Shell, arguments: {/command/: /which mp-read/, /description/: /Check mp-read is installed/} } }, { id: call_ghi789, type: function, function: { name: Read, arguments: {/path/: /.../cookie.txt/} } } ] }, finish_reason: tool_calls } ]}注意这里 一次返回了两个 tool_calls——这是 OpenAI 协议支持的并行 tool calling。LLM 判断这两个检查互相独立所以同时发起。09第 5 步工具结果回传Cursor 并行执行两个 tool call然后把结果都塞进 messages{ messages: [ ...之前的所有消息..., { role: assistant, tool_calls: [ { id: call_def456, function: { name: Shell, arguments: ... } }, { id: call_ghi789, function: { name: Read, arguments: ... } } ] }, { role: tool, tool_call_id: call_def456, content: /usr/local/go/bin/mp-read }, { role: tool, tool_call_id: call_ghi789, content: skeyxxxxxxx; p_skeyyyyyyyy; RIO_TCOAzzzzzz... } ]}10第 6 步LLM 执行核心命令前置检查通过LLM 按照 SKILL.md 中的 Usage 章节构造并发起实际的 mp-read 命令{ choices: [ { message: { role: assistant, content: null, tool_calls: [ { id: call_jkl012, type: function, function: { name: Shell, arguments: {/command/: /mp-read 2026/0316_mp_read/cookie.txt https://mp.weixin.qq.com/s/HHPK6QvclYaxlDg28elN8w/, /description/: /Extract MP article text/, /block_until_ms/: 120000} } } ] }, finish_reason: tool_calls } ]}注意 block_until_ms: 120000——这正是 SKILL.md 中明确要求的。LLM 从 Skill 文档中学到了这个参数应该设多大。11第 7 步最终响应Shell 执行完毕mp-read 的 stdout 输出文章全文通过 role: “tool” 消息回传给 LLM。LLM 最终生成一个 role: “assistant” 的纯文本响应把文章内容整理后呈现给用户{ choices: [ { message: { role: assistant, content: 这篇公众号文章的内容如下/n/n# 文章标题/n/n文章正文内容..., tool_calls: null }, finish_reason: stop } ]}12全景图从协议视角看 Skill 生命周期把上面 7 步画成一张协议交互时序图Cursor (客户端) LLM (服务端) │ │ ┌─────────────────┤ │ │ 启动时扫描 skill │ │ │ 目录提取 name │ │ │ description │ │ └────────┬────────┘ │ │ │ Round 1 │ POST /chat/completions │ │ system: ...skills摘要... tools: [Shell,Read] │ │ user: 帮我读一下 https://mp.weixin.qq.com/s/HHPK6QvclYaxlDg28elN8w │ │ ───────────────────────────────────────────────── │ │ │ │ assistant.tool_calls: Read(SKILL.md) │ │ ───────────────────────────────────────────────── │ │ │ ┌────────┤ 执行: Read(SKILL.md) │ └────────┤ │ │ │ Round 2 │ tool: (SKILL.md 完整内容) │ │ ───────────────────────────────────────────────── │ │ │ ← LLM 现在 学会 了这个 Skill │ assistant.tool_calls: │ │ Shell(which mp-read) │ │ Read(cookie.txt) │ │ ───────────────────────────────────────────────── │ │ │ ┌────────┤ 并行执行两个 tool call │ └────────┤ │ │ │ Round 3 │ tool: /usr/local/go/bin/mp-read │ │ tool: skeyxxx;p_skeyyyy... │ │ ───────────────────────────────────────────────── │ │ │ │ assistant.tool_calls: │ │ Shell(mp-read cookie.txt URL, │ │ block_until_ms120000) │ │ ───────────────────────────────────────────────── │ │ │ ┌────────┤ 执行: mp-read耗时 ~30s │ └────────┤ │ │ │ Round 4 │ tool: (文章全文) │ │ ───────────────────────────────────────────────── │ │ │ │ assistant.content: 这篇文章的内容如下... │ │ finish_reason: stop │ │ ───────────────────────────────────────────────── │ ▼ ▼13总结Skill 的协议映射表Skill 概念协议映射Skill 发现scan directories纯客户端行为不涉及协议Skill 摘要name description注入到messages[0].role system的文本中Skill 加载读取 SKILL.mdLLM 发起tool_calls: [Read(SKILL.md)]结果通过role: tool回传Skill 指令执行LLM 按读到的 SKILL.md 内容自主发起后续tool_callsSkill 的 “Progressive Loading”先在 system prompt 放摘要省 tokenLLM 需要时再 Read 全文Skill 的 “scripts/” 目录LLM 通过 Shell tool call 执行脚本Skill 的 “references/” 目录LLM 通过 Read tool call 按需读取参考文档核心洞察Skill 在协议层面完全不存在。它是一种给 LLM 写使用手册让 LLM 通过已有工具自己照着做的设计模式。 整个过程就是在 system prompt 里告诉 LLM “你有这些技能手册可以查”LLM 通过 Read 工具自己去读手册LLM 读完手册后按手册说的步骤通过 Shell/Read 等工具一步步执行这种设计的精妙之处在于它完全复用了 OpenAI 协议已有的 tool calling 机制不需要任何协议扩展。 Skill 的全部魔法都发生在 system prompt 的措辞和 SKILL.md 文件的编写质量上——本质上是一种 prompt engineering 文件系统的组合。一个简简单单的对话功能人类真的是能够玩出花来语言不愧是高智慧的人类区别于动物的一个重要特征呀这里给大家精心整理了一份全面的AI大模型学习资源包括AI大模型全套学习路线图从入门到实战、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等资料免费分享扫码免费领取全部内容1. 成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。这里我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。2. 大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF3. 大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。4. 2026行业报告行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5. 大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。6. 大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。7. 资料领取全套内容免费抱走学 AI 不用再找第二份不管你是 0 基础想入门 AI 大模型还是有基础想冲刺大厂、了解行业趋势这份资料都能满足你现在只需按照提示操作就能免费领取扫码免费领取全部内容