
做AI芯片的朋友见面三句话离不开“软件栈怎么搭”。我这两年一直在折腾一件事能不能让Agent替我画出一块AI芯片的全栈软件地图。这里的“全栈软件地图”不是说画张架构图挂在墙上而是把芯片从指令集、编译器、运行时、驱动、算子库到上层框架的映射关系全部变成一份可查询、可生成、可验证的动态数据。这个标题里的Agent、AI芯片、全栈软件三个词本质上是在问一件事当芯片的软件栈复杂度高到人肉梳理不动的时候Agent能不能像老工程师一样把散落的代码、文档、IR dump和profiling日志整理成一张活地图。先说清楚这篇博文讲什么、给谁看。如果你在做AI芯片软件工具链或者负责编译器和算子库的演进再或者是研究Agent应用开发的工程师这篇文章会拆解一种真实的落地路线Agent如何读取ISA手册和仓库代码如何生成算子到指令的映射表如何产出IR pass骨架以及如何维护一份持续更新的性能基线。不是泛泛聊Agent概念而是把每一步怎么做、踩了什么坑、为什么这么设计讲透。看完你至少可以拿着这套思路回去搭一个原型。1. 先从一张图说起AI芯片的全栈软件到底在“叠”什么很多人一听“全栈软件地图”就以为是要写一份超长的PPT或者做一个炫酷的可视化大屏。真不是。AI芯片的软件栈是一层一层叠出来的每一层之间都有复杂的依赖和约束地图的价值在于把这些关系变成显式的、可操作的数据而不是留在几个核心工程师脑子里。1.1 为什么AI芯片离不开全栈软件地图AI芯片不像CPU那样有成熟的通用软件生态可以抄。无论是自研NPU、GPU类架构还是异构SoC每一代芯片都意味着新的指令集、新的存储层次、新的算子切分方式。软件栈从底层往上数大致是这么几层指令集架构ISA、编译器后端指令选择、寄存器分配、调度、图编译器Pass链、算子融合、布局转换、运行时内存管理、任务分发、同步、驱动、算子库、上层训练/推理框架对接层最顶上还有性能调优工具链。这几层之间的问题在于每一层都有自己独立的输入输出格式、配置项和约束条件。比如图编译器把一个PyTorch算子下发给算子库算子库又分派到不同的kernel实现kernel再落到指令序列。这个链条上任何一环的更新都可能让其他环失效。没有一张全栈地图就只有两种后果要么团队里某个人成了人肉百科全书所有问题都去问他要么大家各自维护自己那一亩三分地的文档最后文档和代码脱节得没法看。我见过一个典型的翻车场景算子库开发者改了一个kernel的签名没有同步更新上层的注册表结果图编译器测试的时候跑出了错误的结果。定位这个bug花了两天最后发现就是一个字段没对齐。如果有地图层的数据一致性检查这种问题在提交阶段就会被拦下来。所以地图的本质不是文档是约束关系的一致性维护工具。1.2 软件地图的三种粒度静态架构图、动态数据流、性能基线把“地图”这个词拆细一点我习惯把它分成三种粒度来看对应不同的使用场景。第一种是静态架构图描述的是“有什么、挂在哪”。比如编译器的每个Pass在哪个阶段执行、算子库有哪些kernel族、Runtime的资源管理模块依赖哪个驱动接口。这种粒度适合新人上手和代码评审也适合Agent做初始扫描。静态架构图的核心不是画得好看而是和真实代码仓库保持同步任何一处不一致都应该被当作bug。第二种是动态数据流描述的是“跑起来之后长什么样”。一个算子从高层IR开始经过类型推导、布局转换、算子选择最后变成底层指令中间每一跳的输入输出、寄存器分配、内存搬移都算数据流。这种粒度最不好维护因为会随着芯片版本、编译选项、输入shape变化而变化。但这恰恰是Agent最擅长的领域用脚本批量跑编译流程抓取IR dump然后让Agent总结中间格式的变换规律。第三种是性能基线描述的是“跑得快不快、瓶颈在哪”。比如某个矩阵乘算子在不同shape下的cycle数、内存带宽利用率、指令发射效率。性能基线算是地图的“天气层”它反映的是软件栈和硬件实际的配合质量。Agent可以定期跑benchmark把数据填入基线表再用新数据比较自动标出回退点。这三层不是各自孤立的。静态架构图告诉Agent有哪些模块可以操作动态数据流告诉Agent一条真实路径长什么样性能基线告诉Agent优化空间在哪里。三层合在一起才算是一张可用的全栈软件地图。2. Agent在这个场景里到底能干什么不是写文档是生成地图聊清楚为什么需要地图之后关键问题就来了Agent在里面到底扮演什么角色。我见过很多团队把Agent当成“文档自动生成器”给一堆代码让它写README其实这是最浅的用法。真正的用法是让Agent参与地图的构建和维护把地图当成一种持续演进的数据资产而不是一份写死的话术。2.1 定位把“无人维护”变成“自动持续更新”软件地图最大的敌人是过期。代码是活的每次commit都有可能改接口、改行为、改约束而文档是惰性的没人记得更新。Agent做地图的第一性原理就是让地图跟着代码走。具体做的时候我给Agent开了一个“仓库读取通道”它可以按需拉取git提交记录、源码文件、头文件声明、测试用例和CI日志。每次我被问到“某个IR pass为什么在这个位置执行”这类问题时不会去翻文档而是让Agent先查一下最近的提交记录看看这个pass是哪个commit加进来的、对应的issue在讨论什么。然后Agent把源码里的实际调用关系、注释里遗留的上下文以及测试里对行为的断言拼在一起输出一份带证据链的回答。这么做的好处是地图和事实之间的距离被压缩到了最小。代码一改下一次Agent扫描就会把新地图覆盖上去。不需要有人专门去“更新文档”地图更新是Agent工作流的自然副产物。所以我在团队里反复强调不是让Agent写一份地图报告而是让Agent成为一个持续在线的地图维护者。2.2 Agent的三种工作模式导游模式、翻译模式、施工模式同一个Agent放在不同的任务场景里应该切换不同的工作模式不要指望一个模式打天下。导游模式是最容易理解的。你问“Tensor的layout转换在哪一层处理”Agent沿着地图索引找到对应的代码路径、IR pass和配置文件最后给出答案。导游模式要求Agent具备阅读理解大仓库的能力重点是精准定位而不是生成内容。这个模式下不要开启代码生成功能否则容易答非所问。翻译模式是AI芯片软件栈特有的需求。高层算子经过图编译器之后会被翻译成底层指令或库函数的调用。翻译模式要求Agent同时理解高层语义比如PyTorch的Scale算子、中间IR的表示约定比如布局是NHWC还是NCHW和底层指令集的语义比如向量单元只支持fp16不支持fp32累加。翻译模式就是把这三层语义对齐生成算子映射表和参数转换规则。施工模式最花哨也最危险。Agent直接生成IR pass的骨架代码、算子库的kernel函数模板甚至测试用例。施工模式的核心不是让Agent闭眼写代码而是让它先把约束条件列清楚再生成符合约束的骨架。约束包括输入IR的格式、内存对齐要求、线程调度方式、是否允许修改上游节点等。施工模式只有在地图的前两种模式都跑通了之后才建议开启。2.3 一张表看清Agent在软件栈各层的落点把上面这套思路落到AI芯片软件栈的各层每个层次Agent能干的活差异还是很大的。我整理了一张落点表平时给新同学讲地图的时候基本都用这张表。软件栈层次典型产物Agent任务产出物示例指令集层ISA手册、指令语义描述解析指令格式提取操作数约束指令语义摘要、伪代码说明编译器后端指令选择、寄存器分配、调度器分析指令选择规则生成映射候选代码生成规则对照表图编译器IR pass链、算子融合规则梳理pass依赖标注layout约束pass依赖图、关键参数说明运行时内存池、任务队列、同步原语分析资源生命周期生成资源流转图内存分配与释放路径说明算子库kernel实现、dispatch逻辑建立算子dispatch表生成kernel模板算子到kernel的映射表、模板代码上层框架对接自定义op注册、梯度分配梳理前端op到后端op的注册关系op注册清单、形状推导规则性能调优层benchmark脚本、profiling数据汇总性能数据识别回退点性能基线表、异常波动报告Agent在不同层的介入深度应该不一样。比如指令集层以语义解析为主施工模式少开编译器和算子库层可以开施工模式但必须接自动验证性能调优层则适合定期跑批任务让Agent形成周期性报告。这张表也提醒我们全栈软件地图不是一次性任务它是一套分层协作的长期机制。3. Agent架构怎么搭单Agent、多Agent还是Agent框架加Harness真正开始做的时候第一个绕不开的问题是Agent系统本身怎么搭。这个项目里我一开始用单Agent硬扛后来发现上下文不够用任务之间会互相污染才转向多Agent分工配合Agent框架。这个过程中踩了不少坑也梳理清楚了一个关键概念Agent和Harness到底什么关系。3.1 单Agent起步先搞清楚Agent和Harness的边界很多人在讨论Agent架构时会把“模型本身”“Agent”“框架”“Harness”混在一起说。我自己的理解是Agent是决策内核它负责理解任务、选择工具、拆解步骤Harness是外层运行环境它负责工具接入、上下文管理、权限控制和结果审查。说得直白点Agent是大脑Harness是身体和保镖。做全栈软件地图这类大任务单Agent在同一个对话里既要想清楚怎么解读ISA手册又要生成IR pass代码还要分析benchmark数据很容易出现两种情况上下文窗口被塞满早期的关键约束被挤掉Agent自己“精神分裂”一会儿说编译问题一会儿跳回算子映射。Harness的职责就是把Agent从这些琐事里解放出来让Agent专注在推理和决策上而文件的读写、命令的执行、上下文的持久化都交给Harness。最开始我搭的单Agent原型就是没有Harness的裸版本直接让模型对话去调工具结果就是每次都要把重复的工具说明塞进上下文。后来接了一个轻量框架把工具调用、会话缓存和权限检查统一封装才避免了上下文爆炸。所以我的建议是哪怕你只是做原型也要先把Agent和Harness的边界想清楚别让Agent干Harness的活。3.2 多Agent分工地图师、翻译官、质检员软件地图这个任务天然适合拆成三个角色。第一个角色我管它叫“地图师”职责是扫描代码仓库、解析构建脚本、读取头文件和文档产出一份静态架构索引。地图师不需要写代码它的核心能力是信息获取和目录化。为了让地图师跑得快我给它限定了一个工作半径只允许读取预先指定的目录和文件类型不允许访问网络不允许修改文件。权限收得越紧地图师的产出越稳定。第二个角色叫“翻译官”职责是把算子语义翻译成底层指令或库调用。翻译官需要结合ISA手册和算子库注册表生成映射表。它的难点在于语义对齐比如同一个算子在不同精度、不同shape下可能有完全不同的底层路径。翻译官的工作方式是同步模式它会先读一小段ISA描述然后对照源码实现再产出映射片段绝不一次性搬一大段。第三个角色是“质检员”职责是对前两个角色的产出做验证。质检员会运行编译命令、检查IR dump、跑几个小规模仿真用例然后把异常结果反馈给地图师或翻译官去修正。质检员本质上是一个自动测试驱动者它最大的价值是让Agent生成的东西不再盲目自信。这三个角色之间怎么协作我的做法是建一个共享工作目录每个角色有独立的输出子目录消息通过任务文件传递。地图师产出索引后翻译官读取索引和ISA片段产出映射表质检员读取映射表后运行验证脚本把失败的case写回反馈目录。这个流程模拟的是一个小型开发团队的工作方式Agent之间的协作不是靠聊大天而是靠文件系统和显式任务状态。3.3 记忆怎么做短期上下文与长期仓库记忆多Agent跑起来之后记忆问题立刻浮现。这里说的“Agent记忆”不是指模型参数而是指系统里怎么存、怎么取状态。短期记忆由Harness管理主要保存当前任务链里的中间结果比如Agent已经生成的映射片段、待验证的总结。短期记忆要控制体积通常只会保留最近的几步因为一旦上下文超限模型表现会直线下降。长期记忆则是仓库级别的。我把地图数据切块后一部分用结构化文件存一部分做向量索引方便Agent做语义检索。比如翻译官想知道“Scale算子在fp16下的调度约束”它先通过向量检索找到相关文档片段再结合源码精读而不是把整个ISA手册塞进上下文。刚开始做时容易犯的错是“什么都往向量库里塞”结果检索噪音很大Agent经常抓到无关片段。后来我做了分层索引文件名和目录结构是粗粒度索引函数注释和关键定义是细粒度索引Agent先走粗粒度再走细粒度准确率提升很多。长期记忆还需要考虑更新策略。仓库代码一旦变更旧记忆可能过期。我的做法是给地图数据打上commit影响范围标记当Agent扫描到相关代码变更时把受影响的地图块标记为stale下次任务里优先重建这些块。这样Agent记忆就从一个静态的快照变成了一个能够感知代码变化的活系统。4. 实操让Agent跑通一块AI芯片的软件栈地图前面讲设计这章讲跑通一个最小闭环。我以一个具体的算子——比如一个带偏置的矩阵乘算子——为样例带大家走一遍Agent从读取仓库到产出映射表和IR pass骨架的完整流程。这套流程不需要完整的芯片硬件一条仿真通道就够了。4.1 第一步喂给Agent一张“底图”Agent不是神它需要一个可信的起点。我这里的“底图”就是把已知的、稳定的信息先整理成结构化文件让Agent不用从头开始猜。输入信息分为几类ISA手册的切片重点是指令语义和格式字段、已有编译器的Pass列表和入口函数、算子库的注册表包括已支持的算子和精度集合、以及仓库目录结构说明。这些信息不要求全面但要保证准确。因为我坚信一条原则Agent产出质量的上限取决于底图的质量你在底图里塞垃圾Agent就会产出更精致的垃圾。实际操作中我先把ISA手册里和矩阵乘相关的指令段落转成Markdown再把算子库注册表的关键字段整理成JSON。然后写一个扫描任务脚本让“地图师”Agent读取这些文件并输出一个仓库结构的统计摘要。你不需要让Agent一次读全部代码螺旋式推进会更稳先看目录再看入口再看关键函数定义。我给地图师的Prompt大致是这样的请扫描目录/repo/src/dialect 和 /repo/src/oplib。 任务 1. 列出所有可见的IR定义文件和算子注册文件 2. 提取每个文件的头注释和关键函数签名 3. 输出一个结构化摘要包含文件名、核心对象、依赖关系。 禁止修改文件禁止执行构建命令只做读取和总结。这段Prompt跑完后Agent会吐出一份结构化的“底图摘要”。这一步的目的是让后续的翻译官和质检员有一个共同的坐标系不至于各说各话。不要跳过这步直接让Agent生成映射表否则它连仓库里有那些模块都不知道怎么可能产出可信结果。4.2 第二步生成算子到指令的映射表底图建立之后进入最核心的环节让“翻译官”Agent生成算子到指令的映射表。这里不是简单地列一个表格而是要包含每个算子在特定精度、布局、shape条件下的底层实现路径。我用的方法是先把整个映射任务拆成若干个原子任务。比如“GemmWithBias算子fp16输入fp32累加布局NHWCbatchsize1”是一个原子任务“GemmWithBias算子int8量化版本”是另一个原子任务。原子任务分得越细Agent出错的概率越低后续验证也更容易定位问题。针对每个原子任务翻译官会读取ISA手册中对向量乘加指令的描述、算子库中现有kernel的dispatch逻辑、以及IR中关于布局转换的约束。输出格式我统一为{ op: GemmWithBias, input_dtypes: [fp16, fp16], accum_dtype: fp32, layout: NHWC, backend_path: vector_mma, selected_instructions: [VMAC.F16.F32, VBIAS.ADD.F32], constraints: [tile_m16, tile_n16, align32], fallback: scalar_fallback }这个过程中最常见的坑是Agent把指令语义给“脑补”错了。有一次Agent在映射表里写了一条“VBIAS.ADD.F32”指令但实际ISA手册里根本没有这条指令而是叫“VECTOR.ADD.F32”。为什么会错因为底图里我给的ISA切片缺少了指令别名表Agent就根据上下文推测了一个最像的名字。后来我在映射任务之前专门加了一个“指令词典校验”子任务先让Agent从ISA手册里提取出所有可用的指令名和关键字段再用这份词典去约束后续生成。有了这层约束映射表的幻觉率明显下降。4.3 第三步让Agent生成IR pass骨架映射表解决了“算子怎么落到底层”的问题接下来要解决“IR怎么变换到目标形态”的问题。这一步我让Agent生成一个IR pass的骨架代码语言我用的是Rust。选Rust不是追热点而是因为项目的IR框架本身基于RustAgent生成的代码需要能直接接入现有的Pass管理机制。给Agent的任务不是“写一个完整的pass”而是“给现有pass框架填一个具体实现”。Prompt里必须写清楚输入IR的op类型、输出IR的op类型、pass插入点在哪个pass pipeline的哪个位置、以及必须维护的IR metadata字段。如果不把这些讲清楚Agent生成出来的代码大概率是通用的模板代码放到真实IR里根本跑不通。一个生产可用的Prompt骨架大致长这样任务在 /repo/src/transform 目录下新增一个 pass名为 LowerGemmToVectorMMA。 输入HighLevelIR 中的 linalg.gemm_with_bias 操作 输出VectorIR 中的 vector.mma 和 vector.bias_add 操作 约束 - pass 必须注册到 pipeline 的 layout-lowering 阶段位于 existing-layout-convert 之后 - 需要维护 metadatamapping_key、tile_config、fallback_reason - 内存布局转换由另一个 pass 处理当前 pass 不做 layout 推断 - 生成的代码要用 rust 写遵循现有 pass 的返回值约定。 请先输出 pass 结构说明再生成代码骨架。跑完这步后Agent会生成一个包含run函数、匹配逻辑、结果回写的代码骨架。这个骨架一定不能直接合入主分支需要在质检员环节做一次完整验证。而对纯新手来说这一步最值得学的是不要让Agent“自由发挥”架构而是把架构决策全部写在Prompt里Agent只做实现和补充。你给Agent的自由度越大后面排查bug的时间就越长。4.4 第四步自动审查与性能基线跑通代码骨架生成后进入质检员环节。质检员Agent会做三件事编译检查、小规模IR测试、性能抽测。编译检查最直接就是把生成的代码放进现有编译流程里跑一遍如果语法、依赖、接口签名有问题就会报错。这一步能过滤掉大概一半的错误主要是那些“看起来没问题但根本编译不过”的代码。IR测试则是构造几个小规模的输入IR片段让pass跑通看输出形状和metadata是否符合预期。性能抽测则是在有仿真环境时用几个经典shape跑一下cycle数存进性能基线表。我把性能基线表保存在一个独立的目录里每次质检员跑完会把数据追加进去。表结构大概是算子名、shape、精度、cycle数、内存搬移量、版本号、时间戳。Agent会自己对连续数据做比较一旦发现某个版本性能突然回退超过10%就会在反馈报告里标红。这一步让地图的“天气层”活了起来不只是静态关系图还能看出软件栈的“健康状况”。这里的实操要点是自动化验证的粒度一定要小。不要等Agent生成了一大堆代码再一次性验证而是每一个原子任务完成后立即验证。小步快跑问题暴露得越早Agent修正所花的成本就越低。5. 并发、安全与常见坑Agent组队跑芯片项目时容易翻车的地方Agent做全栈软件地图真正难的不是单点能力而是多个Agent协作时暴露出来的并发、权限和安全问题。这几个坑如果不提前规避轻则产出错乱重则污染代码仓库。这章节我把真实环境里撞过的问题和排查思路整理出来。5.1 并发多个Agent同时改同一份地图怎么办多Agent协作的第一步是让它们能同时干活但“同时干活”立刻带来并发问题。最典型的是两个Agent同时更新同一个映射表文件后写入的覆盖了先写入的成果结果一查发现之前版本里的正确映射不见了。出现这种问题的原因很简单Agent没有锁的概念。我用的方案是任务队列加文件级锁。每个Agent在执行写操作前必须先申请对应文件的写锁写锁由中央状态服务维护同一时间只有一个Agent能持有。任务队列则负责把原子任务派发给合适的Agent避免把两个冲突任务同时丢出去。这个方案实现难度不高但对系统的稳定性帮助巨大。另一个和并发相关的话题是如何让Agent扛住并发压力。我的经验是不要让Agent模型本身去扛而是让Harness层做排队和限流。当多个Agent并发调用模型接口时Harness会把请求排成队列控制同时进行的生成请求数量避免上下文碎片化。队列之外还可以做内存态隔离每个Agent任务有独立的状态目录任务之间共享读取但写入操作必须通过队列串行化。这样即使Agent同时跑状态不会乱。5.2 安全Agent执行环境与权限控制让Agent写代码、跑命令权限如果不管好风险不小。我们在搭建时有几条硬规定。第一Agent默认在沙盒环境里执行沙盒里能访问的资源有严格限制。这里的“沙盒”我指的是受控执行环境独立的临时目录、受限的文件系统访问、不允许任意修改系统配置。一开始我图省事让Agent直接在开发环境里跑结果一个Agent误删了一个缓存目录导致后续任务全部异常。从那以后所有Agent操作都在沙盒中执行产出物通过审查门禁后才输出到正式目录。第二Agent生成的代码必须经过diff审查。任何Agent生成的代码或地图数据都先落到staging目录由质检员或是开发人员做diff确认变更范围和预期一致再合入主目录。这条看似拖慢节奏实际上能过滤大量“Agent自作主张”的改动。比如Agent在生成pass骨架时顺手改了头文件里一个无关的宏定义这种情况在diff审查里一眼就能抓住。第三Agent不具备读取敏感配置的权限。芯片项目的构建、烧录、防泄漏体系是另一套Agent的访问边界被限定在工具链开发目录、文档和测试数据里。所有超出边界的请求会被Harness拒绝并记录下来。这类权限控制在Agent规模小的时候无所谓一旦跑起来就是关乎整个基础设施安全的关键防线。5.3 常见问题速查表实操过程中遇到的问题五花八门下面这张速查表是我自己项目里最常遇到的几类问题供大家对照排查。症状可能原因排查方向Agent生成的映射表包含不存在的指令名ISA底图缺少指令别名或指令词典先让Agent提取指令全集再生成映射表多个Agent同时写一个文件内容互相覆盖缺锁和队列机制引入文件级写锁和任务串行队列Agent报错“execution terminated due to error”单个任务链过长上下文或工具调用异常拆细任务加Harness异常恢复逻辑沙盒启动失败或环境状态不一致沙盒初始化流程不完善重建沙盒快照统一环境版本Agent生成的pass代码编译通过但IR行为错误Pass内缺少metadata维护或约束遗漏检查Prompt中的约束是否完整添加IR测试用例性能基线数据波动大benchmark环境不稳定存在随机干扰固定频率、固定设备状态多次取样取中位数这张表背后有一条共性经验绝大多数Agent翻车问题靠的不是换更强的模型而是靠收紧任务边界和增加验证环节。模型负责“聪明”系统负责“靠谱”。6. 复盘与心得Agent做全栈软件地图的价值边界项目跑到这个阶段我对Agent做全栈软件地图的认知比最开始清晰了很多。这里想写一点个人感受和边界思考不一定适合所有团队但应该能作为大家判断这套方法是否适合自己项目的参照。6.1 我踩过的坑和体会最大的一个坑Agent会一本正经地编造“看起来合理”的ISA语义。比如在翻译映射表时它会根据指令命名的前缀推测功能结果写出了和实际硬件行为不符的映射。后来我不再让Agent直接读原始手册生成映射而是先做一步指令词典抽取再让它基于词典做选择。这个过程把幻觉率降了一个量级。第二个坑是文档版本混乱。我一开始喂给Agent的底图里有多个版本的算子说明有些已经过期了Agent混在一起用输出的地图自相矛盾。后来我们规定所有底图文件必须带版本号Agent读取时优先采用仓库内实时源码的注释而不是零散的历史文档。这条规则的优先级比Agent能力还高。第三个体会是“地图三分法”真的管用。静态架构图、动态数据流、性能基线这三层分开维护让Agent任务的颗粒度更清晰也让验证变得可追踪。性能回退报告、映射表更新、pass依赖图各有各的闭环。不要试图让Agent一次性产出“上帝视角总图”它会糊成一团分层维护自然就成了一张总图。6.2 这套方案还能扩展到哪里全栈软件地图只是一类场景。同样的多Agent协作模式可以扩展到芯片产品线的软件资产治理、自动驾驶工具链的模块依赖分析、甚至任何大型仓库的知识沉淀。我发现一个比较通用的判断标准当一个软件系统“代码量上来了、人员流动大、文档跟不上”的时候Agent地图这套方法就比传统文档工程更省力。另外还可以把Agent的“技能”沉淀下来。比如“从ISA手册提取指令词典”这个能力可以做成一个可复用的Agent Skill后续其他芯片型号来了直接复用这套技能不需要从零写Prompt。Agent Skills的真正价值不是把单个任务做快而是把过去项目里的经验固化成可调用的能力包。最后我再分享一个实际使用中的小技巧在所有Agent任务里加一个“产出物自检清单”让Agent在提交结果前自己检查一遍。比如“映射表里所有指令名是否都在指令词典中”“pass代码是否注册到pipeline”“性能数据是否包含时间戳”。这个自检清单看着简单效果比我预想的好得多因为Agent很多错误其实是有能力自查的只是没人提醒它查。我在实际项目里给每个Agent的Harness都加了这道自检门禁踩过几次坑之后才明白做Agent系统稳定性比聪明更重要。