Skip to content

Feature add evals ci#26

Closed
Galekanyun1123a wants to merge 10 commits intomainfrom
feature-add-evals-ci
Closed

Feature add evals ci#26
Galekanyun1123a wants to merge 10 commits intomainfrom
feature-add-evals-ci

Conversation

@Galekanyun1123a
Copy link
Contributor

修改总结 (对比 main 分支)

统计

📊 修改文件: 46 个
➕ 新增行数: 4,590 行
➖ 删除行数: 282 行

主要新增内容

1. 评估系统 (evals/) - 核心功能

目录/文件 说明
evals/config.ts 评估配置(超时、端口、并行数)
evals/run.ts CLI 入口
evals/eval.test.ts Vitest 测试入口
evals/README.md 评估系统文档

2. 评估基础设施 (evals/harness/)

文件 说明
types.ts 核心类型定义
runner.ts 任务运行器(支持并行)
environment.ts 隔离环境管理
reporter.ts 报告生成器
transcript.ts 执行日志记录

3. 评分器 (evals/graders/)

文件 说明
build-grader.ts 构建评分
sdk-grader.ts SDK 功能评分
server-grader.ts Server API 评分
e2e-grader.ts 端到端流程评分

4. 评估任务 (evals/tasks/)

任务 说明
001-sdk-init-report.ts SDK 初始化和上报
002-server-data-collection.ts Server 数据收集
003-server-error-handling.ts 错误处理
004-server-behavior-detection.ts 行为检测
005-server-error-detection.ts 错误检测
006-error-fix.ts 错误修复
007-full-integration.ts 完整集成测试

5. CI/CD 配置

文件 说明
.github/workflows/evals.yml GitHub Actions 评估 workflow
vitest.evals.config.ts Vitest 评估测试配置

修改的现有文件

文件 修改内容
package.json 添加 evaleval:test 脚本和依赖
packages/server/src/cli.ts 支持动态端口(PORT 环境变量)
.gitignore 忽略评估结果目录
skill/SKILL.md 技能文档更新

新增脚本命令

pnpm eval              # 运行评估
pnpm eval --parallel   # 并行运行
pnpm eval --verbose    # 详细日志
pnpm eval:test         # 通过 vitest 运行

@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

📊 Agent-aware 评估结果

ℹ️ main 分支暂无评估基准数据

📝 当前分支评估报告

  • 通过率: 100%
  • 通过数: 7/7
任务 耗时 状态
001-sdk-init-report 44.7s
002-server-data-collection 1.7s
003-server-error-handling 1.1s
004-server-behavior-detection 1.7s
005-server-error-detection 1.6s
006-error-fix 4.4s
007-full-integration 47.3s

Generated by Agent-aware Evals

Galekanyun1123a and others added 4 commits February 2, 2026 17:11
- Change /summary to /behaviors/summary in server-grader.ts and e2e-grader.ts
- The actual server endpoint is /behaviors/summary, not /summary

Co-authored-by: Cursor <cursoragent@cursor.com>
@krislavten
Copy link
Contributor

@claude review this PR,关注 评估质量

@kris-dong-dong
Copy link

kris-dong-dong bot commented Feb 2, 2026

Claude finished @krislavten's task in 2m 15s —— View job


PR 评审完成

关注点: 评估质量

  • 阅读评估系统核心文件
  • 审查评分器(graders)实现质量
  • 审查评估任务(tasks)设计
  • 审查测试基础设施(harness)
  • 审查 CI/CD 配置
  • 提供综合评审意见

评估质量审查报告

整体评价

这是一个设计良好的评估系统,架构清晰、可扩展性强。整体代码质量较高,遵循了 Anthropic 评估系统的最佳实践。以下是详细分析:


✅ 优点

1. 架构设计合理

  • 采用了 Task → Graders → Results 的分层架构
  • 类型定义完整 (evals/harness/types.ts:1-233),包含完整的 EvalTaskGraderConfigGraderResult 等类型
  • 支持任务的 Schema 验证 (evals/tasks/schema.ts),使用 Zod 确保任务配置正确

2. 评分器实现专业

  • 四类评分器覆盖全面:buildsdkservere2e
  • 评分器返回结构化的 GraderResult,包含 passedscoredetailserror 字段
  • 部分评分失败时仍返回 部分分数(如 sdk-grader.ts:283-286 返回 0.3 分)

3. 测试基础设施完善

  • 隔离环境 (environment.ts:143-198):每个任务在独立临时目录运行
  • Transcript 记录 (transcript.ts):完整记录评估过程,便于调试
  • 增量报告 (reporter.ts):支持实时查看进度

4. CI/CD 配置完整

  • 支持 多次评估 (--trials 5)
  • 支持与 main 分支对比
  • 自动在 PR 上发布评估结果

⚠️ 需要关注的问题

1. 问题检测验证过于宽松

文件: evals/graders/server-grader.ts:284-297

// 如果没有预期的问题,检测成功
if (expectedIssues.length === 0) {
  return { success: true, detectedIssues };
}
// 验证是否检测到预期的问题(可选验证)
// 由于这是自动化测试,可能没有实际用户操作,所以放宽验证
return { success: true, detectedIssues };

即使配置了 expectedIssues,也不会验证是否实际检测到这些问题。这可能导致假阳性结果。

Fix this →

2. E2E 评分器的 issueFix 检查逻辑存疑

文件: evals/graders/e2e-grader.ts:199-212

// 在实际场景中,beforeIndex 应该从修复前保存的数据获取
// 这里假设 afterResult.frustrationIndex 就是当前状态
const afterIndex = afterResult.frustrationIndex;
const success = afterIndex <= Math.abs(expectedDelta);
return {
  success,
  beforeIndex: afterIndex - expectedDelta, // 假设值
  // ...
};

beforeIndex 使用假设值,无法真正验证修复效果。

Fix this →

3. 环境隔离中缺少 waitForPort 函数定义

文件: evals/harness/environment.ts:262

const started = await waitForPort(env.devServerPort);

waitForPort 函数在文件中未定义,但被 startDevServer 调用。如果启用 needsDevServer 功能会导致运行时错误。

Fix this →

4. 并发执行时存在竞态条件风险

文件: evals/harness/runner.ts:264-268

const portOffsetLock = { current: 0 };
results = await runWithConcurrency(tasks, concurrency, async (task) => {
  const portOffset = portOffsetLock.current++;
  // ...
});

portOffsetLock.current++ 在异步环境中非原子操作,高并发下可能产生端口冲突。

Fix this →


💡 改进建议

1. 增加负面测试用例

当前所有任务都设计为"应该通过"的正向测试。建议添加负面测试用例来验证评分器能正确识别失败场景。

2. 丰富评估指标

当前主要关注 passed/failed 二元结果。建议增加:

  • 耗时回归检测:对比历史数据发现性能退化
  • 分数趋势统计:追踪部分评分器的分数变化

3. 考虑添加重试机制

评估过程中可能因网络或环境问题导致瞬时失败,建议在 runTrial 中添加可配置的重试逻辑。


📊 评审结论

方面 评价
架构设计 ⭐⭐⭐⭐⭐ 优秀
代码质量 ⭐⭐⭐⭐ 良好
测试覆盖 ⭐⭐⭐⭐ 良好
边界处理 ⭐⭐⭐ 需改进

整体来说这是一个高质量的评估系统实现,主要问题集中在部分验证逻辑过于宽松以及一个缺失函数的bug。建议在合并前修复 waitForPort 函数缺失的问题,其他问题可以在后续迭代中优化。

--- | Branch: feature-add-evals-ci

@Galekanyun1123a Galekanyun1123a deleted the feature-add-evals-ci branch February 3, 2026 08:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants