☰
AI Agent 工程实践(02):Rules 分层设计,如何让 Agent 行为更可控?
2026/10/7 16:11:59 网站建设 项目流程

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.md

core 层只放不可妥协的底线,控制在 3 条以内。内容长这样:

# core/00-must.md — 行为底线 core: - 始终使用中文回复 - 修改文件前先 Read 原始内容 - 提出架构方案时必须说明 trade-off

heavy 层每个文件单一职责,头部用 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/api,Key 填你生成的,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. 验证请求与成功结果

配置改完,先别急着跑复杂任务,用最小请求验证链路。第一步确认模型能通,在终端里发一个 curl:

curl 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 优先级高于 heavy,heavy 之间互斥,不会出现“优先简洁”和“必须详细”同时在场的情况。

验证通过后,你可以用 模型对话 页面快速试不同任务类型,看 heavy 文件是否按预期切换。长期跑编码和 Agent 任务的话,Coding Plan 更划算,额度按编码场景优化过。

5. 本篇常见错排查

分层配置最容易踩的坑集中在接入和加载两处,下面按真实报错对照。

401 Unauthorized:Key 没填对或没生效。检查 settings.json 里ANTHROPIC_API_KEY是否和 API Keys 页面生成的一致,注意别把前后空格复制进去。改完必须重启工具。

local proxy failed / connection refused:Base URL 写错了。确认是https://taotoken.net/api,不要多加/v1或斜杠,也不要带查询参数。Cline 里字段是openAiBaseUrl,别填到别的字段去。

reading 'choices' of undefined:这是 OpenAI 兼容协议下返回结构不对,通常是 Model ID 填错,或者用了 Anthropic 协议去请求 OpenAI 端点。检查cline.openAiModelId和实际模型是否匹配。

OAuth / authentication_error:Codex 的 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 文件,不用动已有逻辑,副作用小。

接入文档在 doc,Claude Code 相关的配置细节可以对照 ClaudeCodeAnthropic 页面。先把三件套配通,再把 core/heavy 目录建起来,跑一个审查任务验证,整套流程半小时内能跑完。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询