| name | bfe-rd-workflow |
| description | 引导用户在 bfe 代码库中完成一次完整的功能研发流程,包括需求对齐、文档修改、代码实现、集成测试与回归验证。 |
BFE 代码库研发流程
本 Skill 适用于在 bfe/ 目录中新增或修改 BFE 功能(例如 AI Gateway 的多 API-Key 会话亲和性、限流、计费、路由、协议支持等)的完整研发流程。
触发语
当用户提出以下类型请求时启用本流程:
- “我要实现 xxx 功能”
- “请帮我完成 xxx 的代码与测试”
- “请在 BFE 中增加/修改 xxx”
执行原则
- 分阶段暂停确认:本流程将研发拆分为多个 Phase。每个 Phase 执行完毕后,必须暂停并等待用户确认“可以继续”后,再进入下一个 Phase。不要在未获得用户确认的情况下自动推进到下一阶段。
- Git 提交前确认:在任何
git commit、git push 或其他会改变 Git 仓库状态的操作之前,必须先向用户说明变更内容并取得明确同意。禁止自动执行 Git 提交或推送。
- Git push 默认目标为 origin:如果获得用户授权执行
git push,默认推送到 origin 远程仓库,而不是 upstream。除非用户明确指定其他 remote,否则不使用 upstream。
研发阶段
Phase 0. 需求澄清与范围界定
- 让用户明确:
- 功能目标(一句话描述)
- 验收标准(必须通过的测试/行为)
- 影响范围(是否改配置协议、是否改 Redis/状态、是否影响既有请求路径)
- 判断是否为“非平凡改动”(多文件、有架构选择、用户偏好影响实现):
- 是 → 调用
EnterPlanMode,先出设计文档/plan 再执行。
- 否 → 直接进入 Phase 1。
完成本阶段后暂停,等待用户确认后再进入下一阶段。
Phase 1. 修改 modifications 文档
BFE 侧的改动必须在 bfe/docs/zh_cn/modifications/ 留下修改说明,便于后续维护与审计。
- 在
bfe/docs/zh_cn/modifications/ 下新建日期化目录,例如:
bfe/docs/zh_cn/modifications/2026-08-26-ai-key-session-affinity/
- 在该目录下创建
design-changes.md,包含:
- 背景与目标
- 主要改动点(数据结构、模块行为、新增字段)
- 配置影响
- 兼容性说明
- 如已有同主题目录,则更新其中的文档,不要重复创建。
完成本阶段后暂停,等待用户确认后再进入下一阶段。
Phase 2. 更新 configuration 文档
如果改动涉及配置文件(cluster_conf.data、mod_*.conf、bfe.conf 等),必须同步更新中英文配置文档:
- 中文:
bfe/docs/zh_cn/configuration/
- 英文:
bfe/docs/en_us/configuration/
更新原则:
- 新增字段要说明类型、默认值、是否必填、示例。
- 修改字段要说明前后行为差异。
- 两个语言目录尽量保持内容一致。
完成本阶段后暂停,等待用户确认后再进入下一阶段。
Phase 3. 更新 sys_design 文档
如果改动涉及系统设计、协议交互或状态存储,需要更新 bfe/docs/zh_cn/sys_design/:
- 查找现有相关文档(例如
multi_api_key.md)。
- 在文档中新增/修改对应章节,说明:
- 方案选型
- 数据流
- 状态存储(如 Redis key 格式、TTL)
- 边界情况与优化
- 如需新增独立文档,直接创建
.md 文件,并在相关文档中建立链接。
完成本阶段后暂停,等待用户确认后再进入下一阶段。
Phase 4. 代码实现
- 阅读相关源码,确认:
- 配置结构体(
bfe_config/bfe_cluster_conf/cluster_conf/)
- 模块加载与处理逻辑(
bfe_modules/mod_*)
- 反向代理与 Key 选择逻辑(
bfe_server/reverseproxy.go 及相关测试)
- 做最小改动,优先匹配现有代码风格:
- 不引入未使用的依赖。
- 不修改与本次需求无关的逻辑。
- 关键实现完成后,先跑模块级单元测试:
cd bfe
go test ./bfe_server/... ./bfe_modules/<相关模块>/...
完成本阶段后暂停,等待用户确认后再进入下一阶段。
Phase 5. 编写集成测试设计文档
BFE 的集成测试设计文档位于 bfe/tests/integration/测试设计文档/。在写测试代码之前,先补充对应场景的设计文档,便于后续维护与评审。
- 在
bfe/tests/integration/测试设计文档/ 下新建 scenario 目录,命名规范:
scenario-SC<序号>-<简短中文描述>
- 编写
场景说明.md,包含:
- 场景背景与目的
- 运行模式
- 涉及的 BFE 配置文件
- 测试 Cluster 与关键配置(AIConf、KeyPolicy、路由表等)
- 测试例列表
- 每个测试例的详细说明(目的、前置条件、请求构造、执行步骤、预期结果、清理)
- 公共基础设施
- 与其他场景的依赖关系
- 为每个测试例编写独立的
TC-<序号>-<测试例名称>.md,结构与现有 TC 文档保持一致。
- 更新
bfe/tests/integration/测试设计文档/测试场景总体说明.md:
- 在“场景清单”中新增一行;
- 在“场景与测试例对应关系”中新增该 scenario 的 TC 列表。
完成本阶段后暂停,等待用户确认后再进入下一阶段。
Phase 6. 编写集成测试代码
BFE 的集成测试代码位于 bfe/tests/integration/implementation/。
- 选择最接近的现有 scenario 作为模板(例如需要 Redis 的可参考
scenario-SC07-ai-rate-limit-redis-key)。
- 新建 scenario 目录,命名规范:
scenario-SC<序号>-<简短英文描述>
- 复制模板后,修改
testdata/ 中的:
server_data_conf/host_rule.data:host
server_data_conf/route_rule.data:cluster
cluster_conf/gslb.data:cluster 名称
mod_ai_route/ai_route.data:apikey owner / route binding
mod_ai_token_auth/mod_ai_token_auth.conf、mod_ai_rate_limit/mod_ai_rate_limit.conf 等
- 编写
_test.go,覆盖:
- 正常路径
- 功能开关开启/关闭对比
- 边界场景(单 Key、多 ClientKeyId、BFE 重启后状态保持、错误码/降级)
- 运行集成测试:
cd bfe
go test ./tests/integration/implementation/scenario-SC<xx>-<描述>/... -v
完成本阶段后暂停,等待用户确认后再进入下一阶段。
Phase 7. 回归验证
- 运行本次新增 scenario 的测试。
- 运行与被改动模块相关的既有 scenario:
- 多 API-Key 轮换:
scenario-SC02-multi-api-key
- Redis 限流:
scenario-SC07-ai-rate-limit-redis-key
- 运行相关单元测试:
go test ./bfe_server/... ./bfe_modules/mod_ai_route/... ./bfe_modules/mod_ai_token_auth/...
- 如有失败,优先修复;修复后再次回归,直到全部通过。
完成本阶段后暂停,等待用户确认后再进入下一阶段。
Phase 8. 收尾与总结
-
检查是否有注释/文档描述的是旧行为,及时同步更新。
-
向用户汇报:
- 改动了哪些文件
- 新增/修改了哪些测试
- 验证结果
- 仍存在的风险或待决策点(如有)
-
Git 提交前必须人工确认:如果用户要求或流程需要执行 git commit、git push 等 Git 操作,必须先向用户清晰说明本次提交内容(包含文件清单与主要变更摘要),并取得明确同意后再执行。禁止在未获授权的情况下自动提交或推送。获得授权后,git push 默认推送到 origin,不要推送到 upstream,除非用户明确指定。
常见陷阱
- cluster 名称不一致:
route_rule.data、gslb.data、ai_route 中的 cluster 名称必须一致,否则 BFE 启动会报 no backend conf。
- ApikeyRouteTableBindings 遗漏:新增 client apiKey 时,必须在
mod_ai_route/ai_route.data 的 ApikeyRouteTableBindings 中为其绑定路由表。
- Redis 绑定 key 格式:确认代码中实际使用的 key 格式(如
bfe:ai:key_affinity:<cluster>:<client_key_id>)。
- 单 Key 优化:如果实现了“单 Key 不走 Redis”,需要同时避免读和写,否则集成测试里
Exists 会误判。
- BFE 端口冲突:集成测试里
processEnv.StartBFE 会自动分配端口,不要手动写死。
推荐命令速查
cd bfe
go test ./bfe_server/... ./bfe_modules/mod_ai_route/... ./bfe_modules/mod_ai_token_auth/...
go test ./tests/integration/implementation/scenario-SC<xx>-<描述>/... -v
go test ./tests/integration/implementation/scenario-SC02-multi-api-key/...
go test ./tests/integration/implementation/scenario-SC07-ai-rate-limit-redis-key/...