附录 C:FAQ 与最佳实践
本章整理 AI Harness 工程中的常见问题和最佳实践。
FAQ:常见问题
1. 评估体系设计
Q: Golden Set 需要多少案例?
A: 根据场景复杂度确定:
- 简单场景(如分类):50-100个
- 中等场景(如QA、客服):100-300个
- 复杂场景(如Agent、多轮对话):300-500个
Q: 自动评估和人工评估的比例?
A: 建议配置:
| 评估类型 | 比例 | 说明 |
|---|---|---|
| 自动评估 | 100% | 每次全量自动评估 |
| 人工抽查 | 5-10% | 随机抽样 + 低分案例全审 |
| 专家评审 | 关键变更 | 模型/Prompt重大变更时 |
Q: 评估多久运行一次?
A: 根据变更频率:
| 场景 | 评估频率 |
|---|---|
| 开发迭代 | 每次代码/Prompt变更 |
| CI/CD集成 | 每次提交触发 |
| 定期评估 | 每周/每两周 |
| 生产监控 | 每日 + 实时采样 |
2. 测试方法论
Q: Prompt 测试和传统测试有什么区别?
A: 核心区别:
| 维度 | 传统测试 | Prompt测试 |
|---|---|---|
| 验证方式 | 断言 Pass/Fail | 评分 + 阈值判断 |
| 结果确定性 | 确定 | 概率性(需多次验证) |
| 版本管理 | 代码版本 | Prompt版本 + 评估基线 |
| 回归方式 | 相同断言 | 得分对比 |
Q: 如何处理模型输出的不确定性?
A: 采用以下策略:
- 控制温度:评估时使用 temperature=0.0
- 多次执行:关键场景执行3-5次取平均
- 方差监控:稳定性测试检查输出方差
- 阈值而非断言:使用得分阈值而非精确匹配
Q: 边界测试案例如何设计?
A: 分类设计:
| 边界类型 | 示例 |
|---|---|
| 输入边界 | 空输入、超长输入、格式异常 |
| 语言边界 | 多语言混合、方言、专业术语 |
| 情绪边界 | 极端情绪、投诉、攻击性语言 |
| 知识边界 | 超出训练数据范围、时效性问题 |
| 系统边界 | 并发压力、资源限制、网络异常 |
3. 架构实现
Q: 如何控制评估成本?
A: 成本优化策略:
| 策略 | 方法 | 效果 |
|---|---|---|
| 缓存 | 缓存模型响应和评估结果 | 减少30-50%调用 |
| 批量执行 | 并行批量处理 | 减少时间成本 |
| 分层评估 | 快速评估初筛 + 深度评估精选 | 减少70%深度评估 |
| 采样监控 | 生产环境5%采样 | 控制在线成本 |
# 成本估算公式
Cost = (N_cases × Avg_tokens × Price_per_token) + (N_eval_calls × Eval_cost)
# 优化示例
# 100案例 × 1000tokens × $0.03/1K = $3
# G-Eval评估 × 100 × $0.01 = $1
# 总成本 ≈ $4/评估
Q: 评估结果如何存储和追溯?
A: 推荐方案:
# 存储架构
结果存储:
- 文件存储(JSON/YAML): 完整结果归档
- 时序数据库(Prometheus): 指标历史
- 关系数据库(PostgreSQL): 结构化分析
追溯能力:
- eval_id: 评估唯一标识
- timestamp: 时间戳
- config_snapshot: 配置快照
- dataset_version: 数据集版本
- model_version: 模型版本
4. 监控告警
Q: 如何避免告警风暴?
A: 告警收敛策略:
| 策略 | 说明 |
|---|---|
| 冷却期 | 同类告警5分钟内只发一次 |
| 分级 | P0立即、P1当日、P2周内 |
| 聚合 | 相关告警合并为一条 |
| 抑制 | 低优先级在高优先级期间抑制 |
Q: 监控指标如何选择?
A: 三层指标体系:
业务层(用户视角)
├── 用户满意度
├── 任务完成率
└── 用户投诉率
技术层(系统质量)
├── 自动评估得分
├── 内容安全率
└── 引用准确性
基础层(系统健康)
├── 响应时间 P95
├── 错误率
└── Token消耗
5. 实战问题
Q: 发现质量下降怎么办?
A: 诊断流程:
graph TB
A[质量下降告警] --> B{范围?}
B -->|全部场景| C[检查模型/Prompt变更]
B -->|部分场景| D[分析失败模式]
C --> C1[对比变更前后]
C --> C2[检查API稳定性]
D --> D1[案例分类分析]
D --> D2[定位具体问题]
C1 --> E[决策: 回滚/修复]
D2 --> E
Q: 如何验证优化效果?
A: A/B测试流程:
- 设置实验:新旧版本分流(50/50或逐步)
- 收集数据:评估得分 + 用户反馈
- 统计检验:确保显著性(p < 0.05)
- 决策:效果显著则采用新版本
最佳实践
1. 评估体系
| 实践 | 说明 |
|---|---|
| 版本锁定 | Golden Set 和评估配置必须版本锁定 |
| 基线建立 | 首次评估作为基线,后续对比 |
| 多维评估 | 至少3个维度:准确性、相关性、安全性 |
| 定期更新 | 每季度更新 Golden Set,添加新案例 |
2. 测试流程
| 实践 | 说明 |
|---|---|
| 开发同步 | Prompt修改同步添加测试案例 |
| 变更触发 | 模型/Prompt变更触发完整评估 |
| 失败分析 | 每次失败必须记录原因和改进 |
| 回归对比 | 版本对比而非单点判断 |
3. 监控告警
| 实践 | 说明 |
|---|---|
| 指标分层 | 业务→技术→基础三层覆盖 |
| 告警分级 | P0/P1/P2/P3分级响应 |
| 上下文完整 | 告警附带诊断信息 |
| 自动响应 | P0级别自动触发降级 |
4. 团队协作
| 实践 | 说明 |
|---|---|
| 明确分工 | 评估工程师、测试工程师、数据标注分工明确 |
| 评审机制 | 重大变更需评审委员会确认 |
| 文档齐全 | 每个组件有设计文档和使用指南 |
| 知识共享 | 定期分享评估发现和优化经验 |
5. 成本控制
| 实践 | 说明 |
|---|---|
| 缓存优先 | 相同请求缓存结果 |
| 采样监控 | 生产环境采样而非全量 |
| 分层评估 | 快速初筛 + 深度精选 |
| 批量执行 | 并行处理提高效率 |
Checklist 清单
新项目启动 Checklist
✅ 定义评估场景和指标体系
✅ 构建初始 Golden Set(100+案例)
✅ 选择评估框架和工具
✅ 设计评估架构
✅ 设置基线和阈值
✅ 集成 CI/CD 流程
✅ 配置监控系统
✅ 建立团队分工
评估执行 Checklist
✅ 确认数据集版本一致
✅ 确认模型配置一致
✅ 记录评估配置快照
✅ 执行全量评估
✅ 分析结果和失败案例
✅ 与基线对比
✅ 生成报告和建议
✅ 决策是否可发布
发布前 Checklist
✅ 评估得分超过阈值
✅ 无 P0/P1 级别问题
✅ 人工抽查通过
✅ 监控告警配置就绪
✅ 回滚方案准备
✅ 发布计划确认
监控日常 Checklist
✅ 检查告警状态
✅ 查看质量趋势
✅ 分析失败案例
✅ 用户反馈跟踪
✅ 优化建议生成
✅ A/B测试验证
排错指南
常见错误和解决方案
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 评估得分波动大 | 模型不确定性 | 增加执行次数取平均,检查temperature |
| 高分但用户不满 | 指标设计偏差 | 添加用户满意度指标,调整权重 |
| 成本超预算 | 全量评估太频繁 | 采用采样策略,启用缓存 |
| 告警风暴 | 告警未收敛 | 配置冷却期和聚合规则 |
| 回归检测失效 | 基线未锁定 | 锁定基线版本,配置版本对比 |
| 安全问题漏检 | 测试集不全面 | 扩展 Adversarial Set,添加攻击案例 |
参考资料
推荐阅读
| 资料 | 主题 | 链接 |
|---|---|---|
| G-Eval论文 | LLM评估方法 | arxiv.org/abs/2303.16634 |
| Ragas文档 | RAG评估 | docs.ragas.io |
| LangSmith教程 | LLM可观测性 | langchain.com/langsmith |
| Promptfoo指南 | Prompt测试 | promptfoo.dev |
社区资源
| 资源 | 说明 |
|---|---|
| LangChain Discord | LLM应用开发社区 |
| AI Engineering Discord | AI工程实践交流 |
| HuggingFace社区 | 模型和评估讨论 |