构建下一代语境感知型 AI Agent:AGENTS.md 与 SKILL.md 发现系统的深度工程架构报告

构建下一代语境感知型 AI Agent:AGENTS.md 与 SKILL.md 发现系统的深度工程架构报告
在这里插入图片描述

1. 执行摘要

随着 LLM 从对话界面演进为具备自主行动能力的 Agent,软件开发范式正从指令式编程转向基于意图和语境的编排。Agent 的效能瓶颈已不再是推理能力,而是其获取并遵循项目特定语境的能力。

为了解决“语境孤岛”,行业正向标准化协议收敛:

  • AGENTS.md:作为项目的“宪法”,定义架构规范与行为准则(治理)。
  • SKILL.md:作为可执行的“技能包”,赋予动态调用的操作能力(能力)。

本报告剖析了如何构建具备自主发现、解析并利用这些文件的 Agent,涵盖从文件系统遍历、AST 解析到基于 MCP 协议的安全沙箱执行环境的完整路线图。


2. 语境危机与 Agent 架构的演进

2.1 从“提示词工程”到“提示词运营(PromptOps)”

早期依赖庞大的系统提示词(System Prompt)存在两大局限:

  1. 语境污染:全量语境注入(Context Stuffing)挤压上下文窗口,导致模型注意力下降。
  2. 维护困难:硬编码的规则难以随代码库迭代。

**“配置即代码(Configuration as Code)”**的理念应运而生,将行为准则定义为版本受控的文件。

2.2 上下文感知的标准化协议

  • AGENTS.md (项目的神经中枢):解决 Agent “我是谁?我在哪里?遵循什么规则?”的问题。支持层级化继承,允许规则覆盖与合并。
  • SKILL.md (模块化的能力单元):采用渐进式披露模式。只有在识别到意图时才加载相关指令,优化 Token 效率。

3. 行业实现深度剖析

3.1 OpenAI Codex 与 GitHub Copilot:语境分层

  • 发现机制:从用户主目录向上扫描至当前工作目录(CWD)。
  • 优先级逻辑:距离 CWD 越近的文件优先级越高,实现“局部优于全局”。

3.2 Anthropic (Claude Code):虚拟机与技能挂载

  • VM 架构:在受控虚拟机中运行。
  • 子智能体模式:主 Agent 编排,根据 SKILL.md 启动加载特定上下文的子 Agent 以隔离干扰。

3.3 Cursor:语义检索增强 (RAG)

  • 精细化控制:引入 .mdc 格式,利用 Glob 模式(如 *.ts)限定规则生效范围。
  • 语义路由:对技能描述进行向量索引,动态匹配用户查询。

4. 自研 Agent 核心模块架构

系统架构划分为四个核心层级:

模块名称核心职责关键技术栈
I. 发现引擎遍历文件系统,识别配置文件,处理忽略规则Python pathlib, pathspec
II. 认知解析层解析 Markdown AST,验证 YAML 元数据,处理继承逻辑markdown-it-py, PyYAML, Pydantic
III. 语境管理器动态构建 Prompt,实现渐进式披露,管理 Token 预算LangChain, Vector DB
IV. 执行运行时安全执行脚本,工具调用,沙箱隔离MCP Protocol, Docker/Firecracker

5. 模块实现详解

5.1 发现引擎:智能遍历

实现基于 .gitignore 感知的遍历器。

  • 自底向上:寻找 AGENTS.md 以构建规则链。
  • 自顶向下:全局索引 SKILL.md 构建技能库。

5.2 认知解析:AST 与元数据

  • 语义合并:解析 AGENTS.md 为 AST,基于标题(Header)进行内容覆盖或追加。
  • SKILL.md 验证:严格校验 YAML 中的 namedescriptionallowed-tools(安全白名单)。

5.3 语境管理:动态 Prompt 构建

采用三层结构构建系统提示词:

  1. 身份层:基本人设。
  2. 宪法层:合并后的 AGENTS.md(始终在线)。
  3. 能力索引层:仅包含技能名称与描述,具体指令按需加载(Lazy Loading)。

5.4 执行运行时:基于 MCP 的沙箱

为了防御 RCE 风险,必须采用隔离环境:

  • MCP 协议:将文件系统和工具调用标准化。
  • 沙箱化:使用 Docker 容器或 Firecracker MicroVMs 运行 SKILL.md 中定义的脚本。

6. 战略价值

  1. 知识资产化:将团队隐性知识转化为可执行的代码。
  2. 跨平台互操作:遵循 AGENTS.md 等标准,避免供应商锁定。
  3. 无限扩展性:通过添加技能文件夹即可赋予 Agent 新能力,无需微调模型。

7. 总结与展望

构建此类 Agent 是 AI 辅助开发走向工业级的关键。未来,自我进化型 Agent 将成为主流:它们不仅读取规范,还能通过观察项目偏差,主动发起 PR 更新 AGENTS.md,实现 DevOps 闭环。


附录:核心技术规格对比表

特性AGENTS.mdSKILL.md.cursorrules
主要职责全局治理、行为准则任务操作、工具封装编辑器上下文注入
作用域递归继承/覆盖模块化独立定义基于 Glob 文件匹配
执行能力被动(规则)主动(含 scripts/)被动(Prompt)
加载策略全量合并加载按需延迟加载基于相关性 RAG

Read more

个人整理的超全C++ 八股文(全是干货)

个人整理的超全C++ 八股文(全是干货)

目录 C++ 面向对象和面向过程 面向过程 面向对象 三大特性? C语言和C++的区别? C++编译过程 多态 是什么? 分类? 虚函数 是什么? 底层? 解决的问题? 构造函数不能设置为虚函数? 重载 重写 隐藏 引用 是什么? 好处 为什么不能初始化为空? 引用与指针的区别? 内存分区 堆和栈的区别? 指针常量和常量指针 NULL在C语言中是(void *)0在C++中是0? C++用nullptr代指空指针? 构造函数 是什么? 拷贝构造 调用时机 拷贝构造参数不是引用行吗? 深浅拷贝的区别? 析构函数 是什么? 内存分配和销毁用什么? new和malloc 区别? new delete malloc free?

By Ne0inhk

StarUML(6.3.3)2025-10-24更新!下载、破解、汉化及搭建C++扩展,从0到1全攻略教程(Windows11)

-1#主包作为第一次配StarUML环境可谓是吃进苦头,像无头苍蝇般,这里无偿分享给大家,如何从0到1实现汉化、破解、及解决软件c++扩展下载失败的问题 1.StartUML的下载 1.1官网网址: StarUMLhttps://staruml.io/ 1.2进去后按照此: 1.3然后点击运行,其正常界面如(代表下载成功): 2.StartUML的汉化及破解 2.1找到StartUML的安装目录(如1.2可知,一般在C盘的Program Files里) 在其根目录下找到 resources(如图): 2.2进入resources文件夹,找到 app.asar: 2.3 访问此网址: https://github.com/X1a0He/StarUML-CrackedAndTranslatehttps://github.com/X1a0He/StarUML-CrackedAndTranslate  进去之后点击

By Ne0inhk
C++ 模板进阶:特化、萃取与可变参数模板

C++ 模板进阶:特化、萃取与可变参数模板

C++ 模板进阶:特化、萃取与可变参数模板 💡 学习目标:掌握模板进阶技术的核心用法,理解模板特化的深层应用、类型萃取的实现原理,以及可变参数模板的灵活使用,提升泛型编程的实战能力。 💡 学习重点:模板特化的进阶场景、类型萃取工具的设计与应用、可变参数模板的展开技巧、折叠表达式的使用方法。 一、模板特化进阶:处理复杂类型场景 💡 模板特化不只是针对单一类型的定制,还能处理指针、引用、数组等复杂类型,实现更精细的类型适配逻辑。 1.1 指针类型的模板特化 通用模板默认处理普通类型,我们可以为指针类型单独编写特化版本,实现指针专属的逻辑。 #include<iostream>#include<string>usingnamespace std;// 通用模板:处理普通类型template<typenameT>classTypeProcessor{public:staticvoidprocess(T data){ cout

By Ne0inhk
【Java 学习】Comparable接口 和 Comparator接口,掌控排序逻辑解析,深入 Comparable 和 Comparator 的优雅切换

【Java 学习】Comparable接口 和 Comparator接口,掌控排序逻辑解析,深入 Comparable 和 Comparator 的优雅切换

💬 欢迎讨论:如对文章内容有疑问或见解,欢迎在评论区留言,我需要您的帮助! 👍 点赞、收藏与分享:如果这篇文章对您有所帮助,请不吝点赞、收藏或分享,谢谢您的支持! 🚀 传播技术之美:期待您将这篇文章推荐给更多对需要学习Java语言、低代码开发感兴趣的朋友,让我们共同学习、成长! 1. Comparable接口 1.1 为什么要使用Comparable接口 先看代码两组代码: 代码1: importjava.util.Arrays;publicclassMain{publicstaticvoidmain(String[] args){// 创建一个数组String[] strs ={"李华","小明","小红"};// 对数组进行排序Arrays.sort(strs);// 打印System.out.println(Arrays.toString(strs));}} 上述代码可以打印出比较的后的顺序。

By Ne0inhk