Skip to content

Commit a4c5a20

Browse files
committed
docs(optimization): add development process documentation
1 parent 807bfbe commit a4c5a20

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Issue #91 开发过程记录
2+
3+
## 第 1 轮:Pipeline 架构与失败归因引擎
4+
5+
我给出了整体架构设计:7 阶段流水线(配置加载 → 基线评测 → 失败归因 → 优化执行 → 候选验证 → Gate 决策 → 报告生成),以及模块划分。
6+
7+
关键设计决策:
8+
- 使用 SDK 的 `AgentEvaluator.evaluate_eval_set()` 而非自己实现评测逻辑,好处是天然继承 trace mode、parallelism、callbacks
9+
- 失败归因不能只看 pass/fail,要从 eval_result 的 reason 字段做关键词匹配,归到 8 个根因类别
10+
- Gate 不只是分数阈值,需要 5 维度检查:提升幅度、关键 case 保护、新增失败、成本预算、过拟合检测
11+
- Fake mode 基于 evalset JSON 的 `actual_conversation` 字段做确定性模拟,零 API 成本
12+
13+
生成了 config.py(PipelineConfig + JSON 加载)、baseline.py(fake/sdk 双路径)、attribution.py(9 类 FailureCategory + 关键词归因)、gate.py(多维度 GateDecision)、validate.py(逐 case delta 对比)、report.py(JSON + Markdown 双格式)。
14+
15+
测试方面,我指定了每个模块的核心场景:config 测缺失文件/非法 JSON/默认值覆盖;baseline 测 fake 模式数据加载和 SDK stub;attribution 测 10 种 failure reason 的归类准确率;gate 测 7 种决策场景(accept/reject/needs_review 边界);validate 测过拟合检测。
16+
17+
## 第 2 轮:优化执行 + 审计追踪
18+
19+
我要求补充两个缺失模块:optimize.py(封装 AgentOptimizer)和 tracing.py(审计追踪)。
20+
21+
optimize.py 的设计要点:
22+
- Fake 模式基于归因结果模拟 GEPA 迭代:每轮"修复"一个失败类别,产生确定的 score 提升
23+
- Live 模式调用 `AgentOptimizer.optimize()` + `TargetPrompt.add_path()`
24+
- 记录每轮的 RoundRecord(score、prompt_changes、cost、duration)
25+
- 异常处理:SDK 不可用时返回友好提示,引导安装 `trpc-agent-python[gepa]`
26+
27+
tracing.py 的设计要点:
28+
- AuditTracer 类封装所有追踪逻辑:start_stage/end_stage 记录每个阶段的 wall clock
29+
- add_cost 累计优化和评测成本
30+
- record_input_file 计算 SHA-256 哈希确保可复现
31+
- finalize 生成完整的 reproduce_command
32+
- to_dict 输出 JSON-serializable dict,直接嵌入 optimization_report.json
33+
34+
同时要求创建 agent/ 包,包含一个简单的 calculator agent 用于测试。Fake 模式下用 question hash 做确定性输出,方便 trace mode 评测。
35+
36+
## 第 3 轮:大规模测试扩容
37+
38+
我审查了第一版测试后发现覆盖不够——35 个测试全挤在一个文件里,缺少集成测试、边界测试、性能测试和大规模数据测试。
39+
40+
按 6 个维度拆分测试:
41+
1. 单元测试:每个 pipeline 模块一个独立文件,共享 conftest.py fixtures
42+
2. 集成测试:完整 pipeline fake mode 端到端,包含多轮优化、过拟合拒绝、CI 模式
43+
3. 大规模数据:50-100 case evalset 加载和归因,20 轮对话,多语言混合
44+
4. 边界测试:空 evalset、单 case、500 字符 case_id、负 timeout、无效 JSON、emoji/Unicode
45+
5. 回归测试:seed 确定性、优化无效时不修改源文件、gate REJECT 时报告仍生成
46+
6. 性能测试:fake mode < 3s、50 case 加载 < 5s、100 case 端到端 < 10s
47+
48+
同时要求扩充 evalset 数据——从 6 个简单数学 case 扩展到 62 个跨领域 case(数学、多步推理、工具调用、中文、日文、韩文、emoji、格式要求),包含 holdout 隐藏集。
49+
50+
## 第 4 轮:修复与验证
51+
52+
审查发现几个问题:
53+
- Windows GBK 编码导致 emoji 打印崩溃 → 替换为 ASCII 安全字符
54+
- `_categorize_failure` 中 "missing" 关键词顺序在 "response" 之后,导致 "missing expected output" 被错误归类 → 调整判断顺序
55+
- 测试中硬编码 `== 3` 的断言在 evalset 扩容后失败 → 改为 `>= 3`
56+
- `test_large_scale` 中的 attribution 测试直接构造 BaselineResult 而非依赖 evalset 文件(因为 fake baseline 的 pass/fail 逻辑基于 conversation 字段存在性,不是内容匹配)
57+
- test_performance.py 的 100 case 缩放比阈值太严,fast ops 下浮点精度导致误判 → 增加绝对上限
58+
59+
全部修复后,189 tests passed,pipeline fake mode 端到端验证通过。Commit,push 到 fork,PR 自动更新。

0 commit comments

Comments
 (0)