文章指出当前AI Agent开发缺乏依赖管理机制,类比软件工程的package-lock.json,需要skill lockfiles追踪子依赖和验证环境契约。
Hacktoberfest 周末挑战赛:为一个朋友构建项目提交 🤝
这是 Hacktoberfest 周末挑战赛:为一个朋友构建项目的投稿。
又是一个周一的早晨,CI 红了,某个自动化测试失败了。你不会慌,也不会怪编译器玄学——你打开 git diff,查看 package-lock.json 或 Cargo.lock。你能精确到具体的 commit hash 知道什么变了、什么坏了、为什么。
那为什么我们一着手构建 AI 代理,就接受了这种完全的混乱?
过去一年里,我们直接从写 prompt 文件(SKILL.md)跳跃到了运行自动化 CI 评估(如 NVIDIA 的 AEVAL)。然而每次评估测试失败,我们只是叹气、摊手,把问题归咎于"不可预测的 AI 抽风"或"模型漂移"。
但这真的是模型抽风吗?还是一个未钉定的子依赖在你眼皮底下变了?没有 lockfile,你根本无法判断。
当前工具中 Lockfile 的假象
你可能会想:"等等,skill lockfile 不是已经存在了吗?"
是的,一些实验性的 agent 工具现在会生成 skills-lock.json 或解析 SKILL.md frontmatter。但现有工具把 lockfile 当作磁盘上被动的库存清单,而不是主动的依赖所有者。它们不追踪传递性子依赖,不验证环境能力契约,也不把运行时 prompt 上下文名称桥接回内容寻址的包哈希。
因为当前工具不掌控供应链,agent 调试仍然是一场猜谜游戏:
我们希望评估能让我们控制特权 agent。但真正的控制需要两件事:
可复现性 — 在每个 CI 节点和机器上运行完全相同的比特(需要一个包管理器 & Lockfile)。
可归因失败 — 精确知道哪个版本化的输入导致了测试失败(需要一个依赖图)。
核心架构混淆来自混淆了两个完全不同的工作:
┌─────────────────────────────────────────────────────────────┐
│ Dependency Graph (Tooling) │
│ Resolves package refs, content hashes & pinned addresses │
└──────────────────────────────┬──────────────────────────────┘
│
Bridge (Name ↔ Address)
│
┌──────────────────────────────▼──────────────────────────────┐
│ Context Graph (LLM) │
│ Loads bare skill names into model prompt context │
└──────────────────────────────┴──────────────────────────────┘
Dependency Graph(工具层):在执行前由开发者 CLI 工具离线解析。处理版本约束、内容哈希和包清单,将所有内容钉定到 skills-lock.json。模型永远看不到这张图。它处理的是不可变的包地址。
Context Graph(LLM 层):在运行时由 LLM 动态解析。Agent 读取 skill 元数据并将指令加载到其 prompt 上下文窗口中。它处理的是裸 skill 名称。
桥接层连接两者。当一个名为 allergen-screening 的 skill 被加载到上下文时,桥接层验证这个裸名称能直接映射回 skills-lock.json 中钉定的不可变内容哈希。
将 prompt 名称连接到内容哈希能一箭双雕:
归因与爆炸半径:当测试失败时,桥接层将加载的上下文名称反向转译回钉定的哈希,并在依赖图上运行反向可达性分析。你不再得到模糊的"AI 抽风",而是得到精确到节点的爆炸半径,显示每一个受影响的模块和依赖 skill。
Prompt 注入防御:如果间接 prompt 注入试图欺骗 agent 调用未经验证的 skill 名称或伪造一个已存在的名称,桥接层充当硬边界:如果请求的 skill 名称未在 skills-lock.json 中钉定,或其磁盘上的内容哈希被篡改,验证立即失败。
模型会漂移——无论是闭源模型中未宣布的 API 更新,还是开源权重微调与量化间的差异。如果你的 agent 安全完全依赖于模型权重内的 prompt 服从,每次运行都是一场赌博。
通过将治理移入明确的、版本化的依赖图并由内容寻址 lockfile 支撑,安全成为模型无关的不变量。
无论你将请求路由到商业 API 端点、托管提供商还是本地开源权重模型,保证都锚定在图基础设施中。LLM 被当作它应有的角色:一个可互换的推理引擎。
我们构建了一个作为开源研究沙箱的工作原型,为 agent 评估流水线引入包管理器语义,辅以完整的可观测性和执行能力:
Repository: TheLazzziest/research
尝试这些工具:
bun run skills:lock — 生成内容可寻址的 skills-lock.json
bun run skills:verify — 验证本地 vendored skills 与 lockfile 的一致性
bun run skills:graph — 渲染可归因的 skill 依赖图
bun run skills:lint — 验证 frontmatter、manifest 和桥接约束
全栈与可观测性:使用 Sentry gen_ai span/latency tracing、ElevenLabs 语音叙述(TtsPort 适配器)、Gemma 开源权重模型预设,以及 Render 部署服务蓝图(render.yaml)插桩的 agent 装饰器。
关于实现的一点坦诚说明:目前,我们的工具在 CI 和评估流水线中离线强制执行这座桥——确保测试会话是比特级可复现的,且在代码进入生产前归因失败就起作用。将这座桥扩展为 LLM 分发边界处的主动运行时guardrail 是下一个前沿,但将包管理引入评估已经给了我们今天的确定性控制。
别再把未钉定依赖的锅甩给模型抽风了。有什么想法,欢迎在评论区留言!
AEVAL: NVIDIA Research, AEVAL: Change-Triggered Deterministic CI for Agent Skills, arXiv:2607.16345 (July 2026).
Agent Skill Supply Chains: Skills Are Not Islands: Measuring Dependency and Risk in Agent Skill Supply Chains, arXiv:2607.01136 (July 2026).
Formal Skill Analysis: Formal Analysis and Supply Chain Security for Agentic AI Skills, arXiv:2603.00195 (March 2026).
Harness Security: Scanning the Harness: Empirical Study of Supply-Chain Defects in AI Coding-Agent Configurations, arXiv:2609.07360 (September 2026).
Operational SKILL.md: Under the Hood of SKILL.md: Semantic Supply-chain Attacks on AI Agent Skill Registry, arXiv:2605.11418 (May 2026).
Best Use of Backboard (Model routing across open-weight providers via SDK adapter)
Best Use of GitHub Copilot (CLI patch series and agent harness development)
Best Use of Gemma (Open-weight model presets including Gemma 3 27B)
Best Use of Sentry Agent Tracing (Instrumented agent decorators with gen_ai spans and latency metrics)
Best Use of ElevenLabs (Voice narration with TtsPort adapter and /api/tts endpoint)
Best Use of Render (Deployment service blueprint via render.yaml)