ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AI Agent 工程实践(02):Rules 分层设计,如何让 Agent 行为更可控?

AI Agent 工程实践(02):Rules 分层设计,如何让 Agent 行为更可控? 1. 从 50 条规则挤在一个文件说起如果你正在用 Claude Code、Cline 或者自建的 Agent 跑日常开发任务大概率遇到过这种场景一开始只写了三五条规则跑得挺顺等规则涨到四五十条响应开始变慢模型偶尔还会“忘记”最关键的安全约束。这不是模型变笨了而是所有规则始终在场把真正重要的那几条淹没了。AI Agent 的 Rules 分层设计说白了就是解决“规则一多就失控”这件事。它适合谁适合已经把 Agent 接进真实项目、规则文件超过 20 条、开始感觉维护吃力的开发者。核心思路只有一句话常驻最小底线其余按任务类型按需加载。我把它叫做 Rule RAG——传统 RAG 是“问题→检索知识→生成回答”Rule RAG 是“任务→检索规则→执行动作”本质都是不在推理时硬塞全部信息而是在需要时把对的信息送进去。这篇会给你一套可复制的 core/heavy 双层目录结构、完整的配置文件片段、验证请求的步骤以及几个真实报错的排查方法。你可以直接照着改自己的项目。2. TaoToken 前置准备让 Agent 稳定跑起来在动手改 Rules 之前得先保证 Agent 的模型调用链路是通的。我用 TaoToken 作为统一入口原因是它同时兼容 Anthropic 和 OpenAI 两种协议Claude Code、Cline、Codex 这几类工具都能接省得每个工具配一套 Key。你需要准备三件套Base URL、API Key、Model ID。这三样在任何 Agent 工具里都是必填项缺一个都跑不起来。Base URL 统一用https://taotoken.net/api注意这里不加任何查询参数。API Key 去控制台生成路径是 console生成后复制保存页面关掉就看不到了。Model ID 根据你用的模型填比如claude-sonnet-4-5这类。如果你用的是 Claude Code它读的是环境变量如果用 Cline 或 Codex配置写在各自的 settings 或 auth.json 里。下面这节我会给出具体片段。有一点要提醒Rules 分层和模型接入是两件事但顺序不能反。先把接入跑通确认能正常对话再去调 Rules否则报错了你分不清是规则问题还是接入问题。我试过先改规则再排查接入结果绕了一大圈。3. 可复制的 core/heavy 分层配置先给目录结构。我放在项目根目录下的.claude-data/你也可以换成自己的路径只要后面配置里的路径跟着改。.claude-data/ ├── core/ │ └── 00-must.md # 常驻层任何任务都加载 ├── heavy/ │ ├── 10-review.md # 代码审查 │ ├── 20-test.md # 单元测试 │ ├── 30-architecture.md # 架构设计 │ └── 40-security.md # 安全审计 └── README.mdcore 层只放不可妥协的底线控制在 3 条以内。内容长这样# core/00-must.md — 行为底线 core: - 始终使用中文回复 - 修改文件前先 Read 原始内容 - 提出架构方案时必须说明 trade-offheavy 层每个文件单一职责头部用 YAML front matter 声明触发条件。以代码审查为例# heavy/10-review.md — 代码审查规范 trigger: 用户要求代码审查或提交变更 max_lines: 300 priority: - 设计问题 - 正确性 - 可读性 - 性能 rules: - 每个问题必须有「描述 反例 改进建议」 - 不指出缺少文档/注释等非功能性建议接下来是 Claude Code 的 settings 片段。它读~/.claude/settings.json把 Base URL 和 Key 写进环境变量{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的Key, ANTHROPIC_MODEL: claude-sonnet-4-5 } }如果你用 Cline配置在 VS Code 的 settings.json 里走 OpenAI 兼容协议{ cline.apiProvider: openai, cline.openAiBaseUrl: https://taotoken.net/api, cline.openAiApiKey: 你的Key, cline.openAiModelId: claude-sonnet-4-5 }Codex 用户改~/.codex/auth.json{ OPENAI_BASE_URL: https://taotoken.net/api, OPENAI_API_KEY: 你的Key, model: claude-sonnet-4-5 }三件套在三个工具里字段名不同但含义一致Base URL 指向https://taotoken.net/apiKey 填你生成的Model ID 填实际模型。改完记得重启工具环境变量不会热加载。加载逻辑用一段伪代码说清楚你可以照着实现def build_agent_context(task_type: str) - list[str]: context [] context load_file(core/00-must.md) # 常驻 task_rules { review: [heavy/10-review.md], test: [heavy/20-test.md], arch: [heavy/30-architecture.md], security: [heavy/40-security.md], } for rule in task_rules.get(task_type, []): context load_file(rule) return context关键点core 永远加载heavy 按 task_type 选。判断“该加载哪条”的动作从“模型在一堆规则里自己找”提前到了加载阶段这就是 Rule RAG 的落地方式。4. 验证请求与成功结果配置改完先别急着跑复杂任务用最小请求验证链路。第一步确认模型能通在终端里发一个 curlcurl https://taotoken.net/api/v1/messages \ -H x-api-key: 你的Key \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: claude-sonnet-4-5, max_tokens: 64, messages: [{role: user, content: 回复链路正常}] }返回里能看到content字段带文字说明 Base URL 和 Key 都对。如果这一步就失败先别碰 Rules去看第 5 节的报错排查。第二步验证 Rules 加载。在 Claude Code 里输入一个审查类任务比如“帮我审查 utils.py 的改动”。观察两件事一是响应里是否体现了10-review.md的规则每个问题带描述反例建议二是 core 的三条底线是否生效中文回复、先 Read 再改。第三步对比分层前后的差异。我实测下来默认加载规则数从 50 降到 3 条单条指令响应时间主观感受从 8 秒左右降到 3 秒左右。这不是严格 A/B 测试但量级差异很明显。规则冲突概率也降了因为 core 优先级高于 heavyheavy 之间互斥不会出现“优先简洁”和“必须详细”同时在场的情况。验证通过后你可以用 模型对话 页面快速试不同任务类型看 heavy 文件是否按预期切换。长期跑编码和 Agent 任务的话Coding Plan 更划算额度按编码场景优化过。5. 本篇常见错排查分层配置最容易踩的坑集中在接入和加载两处下面按真实报错对照。401 UnauthorizedKey 没填对或没生效。检查 settings.json 里ANTHROPIC_API_KEY是否和 API Keys 页面生成的一致注意别把前后空格复制进去。改完必须重启工具。local proxy failed / connection refusedBase URL 写错了。确认是https://taotoken.net/api不要多加/v1或斜杠也不要带查询参数。Cline 里字段是openAiBaseUrl别填到别的字段去。reading choices of undefined这是 OpenAI 兼容协议下返回结构不对通常是 Model ID 填错或者用了 Anthropic 协议去请求 OpenAI 端点。检查cline.openAiModelId和实际模型是否匹配。OAuth / authentication_errorCodex 的 auth.json 格式不对或者同时存在旧的登录态。清掉~/.codex/下的缓存重新写 auth.json确保OPENAI_BASE_URL和OPENAI_API_KEY都在。规则没生效先确认 heavy 文件的trigger字段和你的 task_type 对得上再确认加载函数真的读到了文件。路径写错是最常见原因.claude-data/heavy/10-review.md少一层目录就读不到。规则冲突依旧说明你还在全量加载。检查是不是把 heavy 文件也 include 进了 core或者加载逻辑里写成了默认全开。core 只放底线heavy 必须按需。排查顺序建议先 curl 验证接入再验证单文件加载最后验证按任务切换。每一步单独确认别跳步。6. 把分层用起来Rules 分层不是银弹。如果你的规则本来就少于 10 条或者任务根本没法分类一个文件就够了别为了分层而分层。真正需要分层的是规则超过 20 条、任务类型明确、维护开始吃力的场景。落地时记住几条core 只放不可妥协的底线heavy 每个文件单一职责每个 heavy 文件都要有清晰的 trigger否则又会退化成全开。新增规则时直接加一个 heavy 文件不用动已有逻辑副作用小。接入文档在 docClaude Code 相关的配置细节可以对照 ClaudeCodeAnthropic 页面。先把三件套配通再把 core/heavy 目录建起来跑一个审查任务验证整套流程半小时内能跑完。
返回列表