公司动态
CANN直调工作流设计约束
设计约束【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills为保证实现一致性、在方案出现分歧时提供统一指导约定以下设计约束。1. 结构约束1.1 SOLID 原则条款说明示例单一职责S每个 Skill 只负责一个功能域只有一种原因引起它需要修改职责边界清晰例如repo-coding-rulesskill 只管理编码规范不应介绍代码架构的最佳实践开闭原则O工作流编排对扩展开放对修改关闭例如子仓需要扩展特定工作流步骤的约束应该 override 该步骤用到的 virtual skill而不是直接改动工作流代码里氏替换L子仓 override 基类的 virtual 组件后必须保持相同的输入输出格式用户和上层工作流不应感知底层实现的替换基类侧的反向约束见 1.3 基类演进兼容契约例如子仓用本仓的repo-coding-rules实现替换了基类的同名默认实现后工作流仍通过相同的逻辑名、相同的调用方式和参数使用这个 Skill不会影响工作流的表现接口隔离I子仓只需 override 自己需要的 virtual Skill不能要求子仓为了 override 某一个 Skill 而被迫同时实现所有 virtual 组件例如新仓只想定制编码规范只需 override coding-rules 一个 Skill其余组件沿用基类默认实现即可依赖倒置D上层模块只依赖下层定义的抽象接口不直接依赖任何具体实现路径例如工作流只定义repo-coding-rulesskill 负责存放编码规范不要求它分几章按什么方式编写1.2 层级感知原则层级感知方向主 Agent - 工作流 - 子 Agent - Skill - 仓内文档条款说明示例层级间单向感知下级模块不感知上级模块的存在不依赖、不引用、不提及例如子 Agent 不知道自己正在执行工作流的哪一步Skill 文件不提及自己被哪个 Agent 调用层级内黑盒感知同级模块之间互不了解对方的内部逻辑例如开发角色可以知道测试角色会评测自己的代码但不了解测试角色的测试流程1.3 基类演进兼容契约里氏替换L约束子类 override 时不破坏契约反过来基类演进时也不得破坏子仓依赖的契约否则子仓已有 override 会失效违背基类更新后已接入仓无需额外操作的要求。条款说明示例契约向后兼容基类 final 编排对外暴露的契约——virtual 组件的逻辑名、各角色的输入输出格式、调用约定——一经发布即视为稳定契约演进时只能新增、不能破坏性变更确需破坏性变更时须提供迁移路径并显式通知已接入仓例如基类不得随意重命名repo-coding-rules逻辑名或改变其调用参数否则各仓针对该逻辑名的 override 会全部失效2. 调度约束条款说明示例职责分离任务的执行方和验收方不能是同一个 Agent 实例可以是同一类 Agent但不能是同一个当验收方为外部主体用户、外部 harness agent 等时与执行方天然不同本约束自动满足例如同一份代码由开发角色实例 A 编写可以由开发角色实例 B 检视验收若验收方绑定为用户则由用户完成验收同样满足执行方与验收方相互独立最小信息调度的每个子 Agent 只获取完成当前任务所需的最小信息集禁止注入任务无关的全局上下文例如调度开发角色时只传入当前算子的设计文档不注入其他算子信息最小权限调度的每个子 Agent 只获取完成当前任务所需的最小操作权限禁止授予超出任务范围的权限例如调度开发角色时不被授予 test 目录的写权限过程有界工作流中所有可能循环或重试的环节必须声明最大执行次数超过上限后必须暂停并向用户报告问题现状禁止无限自动重试例如代码修复-重新检视循环最多 3 轮3 轮仍未通过则暂停并输出当前问题清单请求用户决策确定性交付调度的每个子环节都有明确的交付件与指标例如代码检视循环中建立检视评分机制当代码检视评分达到阈值后视为循环通过状态可观测工作流在每个阶段完成后将状态持久化到外部不依赖当前会话的上下文记忆例如每个阶段完成后在.cannbot/state.json中记录当前阶段和完成时间可恢复性任何暂停或失败含过程有界超限暂停都必须落盘到一个明确的可恢复状态点记录已完成阶段、当前阻塞点与已产出交付件恢复时从该状态点继续不重跑已通过的阶段例如代码检视循环超过最大轮次暂停时将当前阶段、失败原因、问题清单写入.cannbot/state.json用户决策后工作流从该状态点续跑而非从头重来修改不越权上游的设计与决策可能包含本步骤无法考虑到的约束执行时不质疑、不复核、严格遵循上游设计执行发现问题时回退给上游角色修改禁止自行修正。定位与修正的边界允许在不改变上游设计意图的前提下做问题定位复现、缩小范围、给出根因与证据但不得自行变更上游已定的设计决策如架构、Tiling/切分策略、接口定位结论须回退给对应上游角色由其决定是否调整设计例如开发角色严格按照设计文档编写代码出现性能瓶颈时可定位到是某段循环的切分策略导致但应把该结论反馈给设计角色由设计角色决定重构方案而不是自行改动切分策略3. 风格约束条款说明示例SKILL.md 只做路由Skill 入口文件只负责任务意图的识别和路由分发不包含具体的知识内容或实现逻辑保持文件轻量SKILL.md 中只写任务匹配到编码规范场景时加载 references/coding-rules.md规范细节放在 references 文件中机制优于自然语言能用 hook 拦截、脚本自动执行、agent 权限声明来实现的行为约束就不要用 prompt 中的自然语言来描述编译前必须检查 API 调用合规性应实现为 pre-build hook 脚本而不是在 prompt 中要求 Agent 主动记得去检查引用而非硬编码Skill 中涉及特定仓库的领域知识时应通过路径引导 Agent 访问仓库原文获取而非将知识全文硬编码到 Skill 中Skill 引导 Agent 去读取仓库 doc/coding-rules.md 的最新内容而不是把规范全文复制进 Skill 的 references 目录开发者知识外置对开发者同样可见的知识如测试框架使用方法、编码规范应该存放在仓库 doc 目录中保证 Agent 和开发者都能访问Skill 仅负责引导 Agent 定位到这些文档总结出测试框架的使用方法文档后优先选择作为仓内文档放在 doc/testing-guide.md 中而不是放在 skill 的 reference 目录下举例不引入外部概念文档与 Skill 中举例时只使用仓内已有知识或跨领域通用知识不引入需要额外背景才能理解的外部概念否则 Agent 为看懂例子还得先去了解该概念反而间接污染上下文说明领域知识时用仓内实际存在的算子或通用概念举例而不是写例如 BLAS 仓涉及的标准——Agent 若不了解 BLAS还需先去查证偏离当前任务【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考