@einja/dev-cli 0.1.40 → 0.1.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +71 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +187 -13
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/task-loop/lib/github-client.test.js.map +1 -1
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js +2 -2
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js.map +1 -1
- package/dist/lib/dependency-checker.d.ts.map +1 -1
- package/dist/lib/merger.d.ts +12 -0
- package/dist/lib/merger.d.ts.map +1 -1
- package/dist/lib/merger.js +28 -0
- package/dist/lib/merger.js.map +1 -1
- package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -1
- package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
- package/dist/lib/preset-update/file-copier.js +3 -3
- package/dist/lib/preset-update/file-copier.js.map +1 -1
- package/dist/lib/preset-update/preset-finder.d.ts.map +1 -1
- package/dist/lib/preset.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.d.ts +1 -1
- package/dist/lib/sync/category-validator.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.js +2 -1
- package/dist/lib/sync/category-validator.js.map +1 -1
- package/dist/lib/sync/category-validator.test.js +3 -1
- package/dist/lib/sync/category-validator.test.js.map +1 -1
- package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
- package/dist/lib/sync/diff-engine.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.js +1 -0
- package/dist/lib/sync/file-filter.js.map +1 -1
- package/dist/lib/sync/integration.test.js +255 -69
- package/dist/lib/sync/integration.test.js.map +1 -1
- package/dist/lib/sync/json-processor.d.ts +4 -4
- package/dist/lib/sync/json-processor.d.ts.map +1 -1
- package/dist/lib/sync/json-processor.js +11 -11
- package/dist/lib/sync/json-processor.js.map +1 -1
- package/dist/lib/sync/marker-processor.d.ts +60 -8
- package/dist/lib/sync/marker-processor.d.ts.map +1 -1
- package/dist/lib/sync/marker-processor.js +117 -26
- package/dist/lib/sync/marker-processor.js.map +1 -1
- package/dist/lib/sync/marker-processor.test.js +261 -40
- package/dist/lib/sync/marker-processor.test.js.map +1 -1
- package/dist/lib/sync/metadata-manager.d.ts +4 -0
- package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
- package/dist/lib/sync/metadata-manager.js +15 -0
- package/dist/lib/sync/metadata-manager.js.map +1 -1
- package/dist/lib/sync/metadata-manager.test.js +69 -0
- package/dist/lib/sync/metadata-manager.test.js.map +1 -1
- package/dist/lib/sync/orphan-cleaner.d.ts +29 -0
- package/dist/lib/sync/orphan-cleaner.d.ts.map +1 -0
- package/dist/lib/sync/orphan-cleaner.js +80 -0
- package/dist/lib/sync/orphan-cleaner.js.map +1 -0
- package/dist/lib/sync/orphan-cleaner.test.d.ts +2 -0
- package/dist/lib/sync/orphan-cleaner.test.d.ts.map +1 -0
- package/dist/lib/sync/orphan-cleaner.test.js +169 -0
- package/dist/lib/sync/orphan-cleaner.test.js.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.d.ts +52 -0
- package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.js +110 -0
- package/dist/lib/sync/project-private-synchronizer.js.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.test.d.ts +2 -0
- package/dist/lib/sync/project-private-synchronizer.test.d.ts.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.test.js +348 -0
- package/dist/lib/sync/project-private-synchronizer.test.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/sync.d.ts +36 -6
- package/dist/types/sync.d.ts.map +1 -1
- package/dist/types/sync.js +2 -2
- package/dist/types/sync.js.map +1 -1
- package/package.json +5 -4
- package/presets/default/.claude/agents/einja/Explore.md +140 -0
- package/presets/default/.claude/agents/einja/backend-architect.md +21 -1
- package/presets/default/.claude/agents/einja/codex-agent.md +5 -1
- package/presets/default/.claude/agents/einja/design-engineer.md +5 -1
- package/presets/default/.claude/agents/einja/docs/docs-updater.md +7 -93
- package/presets/default/.claude/agents/einja/frontend-architect.md +21 -1
- package/presets/default/.claude/agents/einja/frontend-coder.md +5 -1
- package/presets/default/.claude/agents/einja/{specs/spec-design-generator.md → issue-specs/design-generator.md} +16 -8
- package/presets/default/.claude/agents/einja/{specs/spec-qa-generator.md → issue-specs/qa-generator.md} +10 -4
- package/presets/default/.claude/agents/einja/{specs/spec-requirements-generator.md → issue-specs/requirements-generator.md} +9 -6
- package/presets/default/.claude/agents/einja/{specs/spec-tasks-generator.md → issue-specs/tasks-generator.md} +19 -16
- package/presets/default/.claude/agents/einja/{specs/spec-tasks-validator.md → issue-specs/tasks-validator.md} +13 -9
- package/presets/default/.claude/agents/einja/issue-specs/ui-design-generator.md +114 -0
- package/presets/default/.claude/agents/einja/task/task-executer.md +64 -116
- package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +6 -2
- package/presets/default/.claude/agents/einja/task/task-qa.md +7 -3
- package/presets/default/.claude/agents/einja/task/task-reviewer.md +17 -1
- package/presets/default/.claude/commands/einja/einja-sync.md +124 -45
- package/presets/default/.claude/commands/einja/frontend-implement.md +3 -1
- package/presets/default/.claude/commands/einja/issue-exec.md +413 -0
- package/presets/default/.claude/commands/einja/start-dev.md +4 -0
- package/presets/default/.claude/commands/einja/sync-cursor-commands.md +10 -6
- package/presets/default/.claude/commands/einja/{update-docs-by-task-specs.md → update-docs-by-issue-specs.md} +61 -57
- package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +27 -0
- package/presets/default/.claude/settings.json +29 -5
- package/presets/default/.claude/skills/{einja-general-context-loader → _einja-general-context-loader}/SKILL.md +6 -2
- package/presets/default/.claude/skills/{einja-output-format → _einja-output-format}/SKILL.md +5 -1
- package/presets/default/.claude/skills/_einja-project-overview/SKILL.md +29 -0
- package/presets/default/.claude/skills/{einja-spec-context-loader → _einja-spec-context-loader}/SKILL.md +9 -5
- package/presets/default/.claude/skills/einja-coding-standards/references/testing-strategy.md +899 -0
- package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +5 -1
- package/presets/default/.claude/skills/einja-create-pr/SKILL.md +138 -0
- package/presets/default/.claude/skills/einja-infra-maintenance/SKILL.md +779 -0
- package/presets/default/.claude/{commands/einja/spec-create.md → skills/einja-issue-spec-create/SKILL.md} +60 -23
- package/presets/default/.claude/skills/einja-issue-spec-generator/SKILL.md +105 -0
- package/presets/default/.claude/skills/einja-issue-spec-generator/references/format-rules.md +35 -0
- package/presets/default/.claude/skills/einja-issue-spec-validator/SKILL.md +130 -0
- package/presets/default/.claude/skills/einja-issue-spec-validator/references/validation-rules.md +52 -0
- package/presets/default/.claude/skills/einja-npm-release/SKILL.md +242 -0
- package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +311 -263
- package/presets/default/.claude/skills/einja-skill-creator/agents/analyzer.md +274 -0
- package/presets/default/.claude/skills/einja-skill-creator/agents/comparator.md +202 -0
- package/presets/default/.claude/skills/einja-skill-creator/agents/grader.md +195 -0
- package/presets/default/.claude/skills/einja-skill-creator/assets/eval_review.html +146 -0
- package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/generate_review.py +471 -0
- package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/viewer.html +1325 -0
- package/presets/default/.claude/skills/einja-skill-creator/references/schemas.md +430 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/compare_runs.py +154 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +272 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +247 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +13 -19
- package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +36 -7
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_eval.py +310 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +375 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/utils.py +48 -0
- package/presets/default/.claude/skills/einja-skill-first/SKILL.md +265 -0
- package/presets/default/.claude/skills/einja-subagent-question-protocol/SKILL.md +98 -0
- package/presets/default/.claude/skills/einja-task-commit/SKILL.md +11 -7
- package/presets/default/.claude/{commands/einja/task-exec.md → skills/einja-task-exec/SKILL.md} +106 -89
- package/presets/default/.claude/skills/einja-task-qa/SKILL.md +8 -4
- package/presets/default/.claude/skills/einja-task-qa/references/troubleshooting.md +1 -1
- package/presets/default/.claude/skills/einja-task-qa/references/usage-patterns.md +2 -2
- package/presets/default/.claude/skills/einja-team-exec/SKILL.md +165 -0
- package/presets/default/.envrc +5 -0
- package/presets/default/.mcp.json +2 -12
- package/presets/default/CLAUDE.md.template +45 -8
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/tasks.md +1 -1
- package/presets/default/docs/einja/instructions/deployment-setup.md +4 -9
- package/presets/default/docs/einja/instructions/environment-setup.md +3 -8
- package/presets/default/docs/einja/instructions/issue-exec-workflow.md +276 -0
- package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +71 -9
- package/presets/default/docs/einja/instructions/neon-cli-reference.md +3 -8
- package/presets/default/docs/einja/instructions/setup-flow.md +279 -0
- package/presets/default/docs/einja/instructions/task-execute.md +63 -68
- package/presets/default/docs/einja/instructions/vercel-cli-reference.md +17 -10
- package/presets/default/docs/einja/steering/README.md +11 -11
- package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +4 -9
- package/presets/default/docs/einja/steering/architecture.md +3 -8
- package/presets/default/docs/einja/steering/branch-strategy.md +63 -70
- package/presets/default/docs/einja/steering/commit-rules.md +3 -8
- package/presets/default/docs/einja/steering/db-schema-design.md +3 -8
- package/presets/default/docs/einja/steering/development/api-development.md +3 -8
- package/presets/default/docs/einja/steering/development/backend-architecture.md +3 -8
- package/presets/default/docs/einja/steering/development/coding-standards.md +723 -0
- package/presets/default/docs/einja/steering/development/component-design.md +502 -0
- package/presets/default/docs/einja/steering/development/database-guidelines.md +2 -2
- package/presets/default/docs/einja/steering/development/frontend-development.md +3 -8
- package/presets/default/docs/einja/steering/development/playwright-guidelines.md +59 -0
- package/presets/default/docs/einja/steering/development/review-guidelines.md +3 -8
- package/presets/default/docs/einja/steering/development/testing-strategy.md +3 -8
- package/presets/default/docs/einja/steering/development-workflow.md +155 -140
- package/presets/default/docs/einja/steering/infrastructure/deployment.md +156 -55
- package/presets/default/docs/einja/steering/infrastructure/environment-variables.md +4 -8
- package/presets/default/docs/einja/steering/product.md +3 -8
- package/presets/default/docs/einja/steering/task-management.md +22 -110
- package/presets/default/scripts/ensure-serena.sh +75 -0
- package/presets/default/scripts/env-rotate-secrets.ts +396 -0
- package/presets/default/scripts/env-show.ts +130 -0
- package/presets/default/scripts/env.ts +479 -0
- package/presets/default/scripts/init-github.ts +363 -0
- package/presets/default/scripts/init.sh +98 -0
- package/presets/default/scripts/lib/env-common.ts +108 -0
- package/presets/default/scripts/lib/worktree-config.ts +64 -0
- package/presets/default/scripts/setup-dev.ts +655 -0
- package/presets/default/scripts/stop-serena.sh +25 -0
- package/presets/default/scripts/worktree/dev.ts +872 -0
- package/dist/lib/sync/seed-synchronizer.d.ts +0 -27
- package/dist/lib/sync/seed-synchronizer.d.ts.map +0 -1
- package/dist/lib/sync/seed-synchronizer.js +0 -72
- package/dist/lib/sync/seed-synchronizer.js.map +0 -1
- package/dist/lib/sync/seed-synchronizer.test.d.ts +0 -2
- package/dist/lib/sync/seed-synchronizer.test.d.ts.map +0 -1
- package/dist/lib/sync/seed-synchronizer.test.js +0 -147
- package/dist/lib/sync/seed-synchronizer.test.js.map +0 -1
- package/presets/default/.claude/agents/einja/git/conflict-resolver.md +0 -148
- package/presets/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
- package/presets/default/.claude/skills/einja-api-development/SKILL.md +0 -14
- package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +0 -18
- package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +0 -132
- package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +0 -69
- package/presets/default/.claude/skills/einja-coding-standards/references/naming-conventions.md +0 -107
- package/presets/default/.claude/skills/einja-coding-standards/references/prohibited-patterns.md +0 -169
- package/presets/default/.claude/skills/einja-coding-standards/references/typescript-rules.md +0 -247
- package/presets/default/.claude/skills/einja-component-design/SKILL.md +0 -109
- package/presets/default/.claude/skills/einja-component-design/references/directory-structure.md +0 -117
- package/presets/default/.claude/skills/einja-component-design/references/props-patterns.md +0 -159
- package/presets/default/.claude/skills/einja-component-design/references/styling-guide.md +0 -122
- package/presets/default/.claude/skills/einja-frontend-development/SKILL.md +0 -14
- package/presets/default/.claude/skills/einja-project-overview/SKILL.md +0 -35
- package/presets/default/docs/einja/instructions/task-vibe-kanban-loop.md +0 -565
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
# 事後分析エージェント
|
|
2
|
+
|
|
3
|
+
ブラインド比較の結果を分析し、勝者がなぜ勝ったかを理解し、改善提案を生成する。
|
|
4
|
+
|
|
5
|
+
## 役割
|
|
6
|
+
|
|
7
|
+
ブラインド比較エージェントが勝者を決定した後、事後分析エージェントはスキルとトランスクリプトを検査して結果を「アンブラインド」する。目標は実行可能なインサイトを抽出すること:何が勝者を優れたものにしたのか、敗者をどのように改善できるのか。
|
|
8
|
+
|
|
9
|
+
## 入力
|
|
10
|
+
|
|
11
|
+
プロンプトで以下のパラメータを受け取る:
|
|
12
|
+
|
|
13
|
+
- **winner**: "A"または"B"(ブラインド比較から)
|
|
14
|
+
- **winner_skill_path**: 勝利出力を生成したスキルへのパス
|
|
15
|
+
- **winner_transcript_path**: 勝者の実行トランスクリプトへのパス
|
|
16
|
+
- **loser_skill_path**: 敗北出力を生成したスキルへのパス
|
|
17
|
+
- **loser_transcript_path**: 敗者の実行トランスクリプトへのパス
|
|
18
|
+
- **comparison_result_path**: ブラインド比較エージェントの出力JSONへのパス
|
|
19
|
+
- **output_path**: 分析結果の保存先
|
|
20
|
+
|
|
21
|
+
## プロセス
|
|
22
|
+
|
|
23
|
+
### ステップ1: 比較結果の読み込み
|
|
24
|
+
|
|
25
|
+
1. comparison_result_pathにあるブラインド比較エージェントの出力を読み込む
|
|
26
|
+
2. 勝利側(AまたはB)、理由、スコアを記録
|
|
27
|
+
3. 比較エージェントが勝利出力で何を評価したかを理解
|
|
28
|
+
|
|
29
|
+
### ステップ2: 両方のスキルを読み込む
|
|
30
|
+
|
|
31
|
+
1. 勝者スキルのSKILL.mdと主要な参照ファイルを読む
|
|
32
|
+
2. 敗者スキルのSKILL.mdと主要な参照ファイルを読む
|
|
33
|
+
3. 構造的な違いを特定:
|
|
34
|
+
- 指示の明確さと具体性
|
|
35
|
+
- スクリプト/ツールの使用パターン
|
|
36
|
+
- 例のカバレッジ
|
|
37
|
+
- エッジケースの処理
|
|
38
|
+
|
|
39
|
+
### ステップ3: 両方のトランスクリプトを読み込む
|
|
40
|
+
|
|
41
|
+
1. 勝者のトランスクリプトを読む
|
|
42
|
+
2. 敗者のトランスクリプトを読む
|
|
43
|
+
3. 実行パターンを比較:
|
|
44
|
+
- それぞれがスキルの指示にどれだけ忠実に従ったか?
|
|
45
|
+
- ツールの使い方にどのような違いがあったか?
|
|
46
|
+
- 敗者はどこで最適な動作から逸脱したか?
|
|
47
|
+
- どちらかがエラーに遭遇したり、回復を試みたか?
|
|
48
|
+
|
|
49
|
+
### ステップ4: 指示遵守度の分析
|
|
50
|
+
|
|
51
|
+
各トランスクリプトについて評価:
|
|
52
|
+
- エージェントはスキルの明示的な指示に従ったか?
|
|
53
|
+
- エージェントはスキルが提供するツール/スクリプトを使用したか?
|
|
54
|
+
- スキルの内容を活用する機会を逃していなかったか?
|
|
55
|
+
- エージェントはスキルにない不要なステップを追加していなかったか?
|
|
56
|
+
|
|
57
|
+
指示遵守度を1-10でスコアリングし、具体的な問題を記録する。
|
|
58
|
+
|
|
59
|
+
### ステップ5: 勝者の強みを特定
|
|
60
|
+
|
|
61
|
+
勝者を優れたものにした要因を特定:
|
|
62
|
+
- より良い行動につながった明確な指示?
|
|
63
|
+
- より良い出力を生み出した優れたスクリプト/ツール?
|
|
64
|
+
- エッジケースをガイドした包括的な例?
|
|
65
|
+
- より良いエラーハンドリングのガイダンス?
|
|
66
|
+
|
|
67
|
+
具体的であること。関連する箇所ではスキル/トランスクリプトから引用する。
|
|
68
|
+
|
|
69
|
+
### ステップ6: 敗者の弱点を特定
|
|
70
|
+
|
|
71
|
+
敗者を妨げた要因を特定:
|
|
72
|
+
- 最適でない選択につながった曖昧な指示?
|
|
73
|
+
- 回避策を強いた欠落したツール/スクリプト?
|
|
74
|
+
- エッジケースカバレッジのギャップ?
|
|
75
|
+
- 失敗を引き起こした不十分なエラーハンドリング?
|
|
76
|
+
|
|
77
|
+
### ステップ7: 改善提案の生成
|
|
78
|
+
|
|
79
|
+
分析に基づき、敗者スキルを改善するための実行可能な提案を作成:
|
|
80
|
+
- 具体的な指示の変更
|
|
81
|
+
- 追加または修正すべきツール/スクリプト
|
|
82
|
+
- 含めるべき例
|
|
83
|
+
- 対処すべきエッジケース
|
|
84
|
+
|
|
85
|
+
影響度で優先順位付け。結果を変えたであろう変更に焦点を当てる。
|
|
86
|
+
|
|
87
|
+
### ステップ8: 分析結果の書き込み
|
|
88
|
+
|
|
89
|
+
構造化された分析を`{output_path}`に保存。
|
|
90
|
+
|
|
91
|
+
## 出力フォーマット
|
|
92
|
+
|
|
93
|
+
以下の構造のJSONファイルを書き込む:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"comparison_summary": {
|
|
98
|
+
"winner": "A",
|
|
99
|
+
"winner_skill": "path/to/winner/skill",
|
|
100
|
+
"loser_skill": "path/to/loser/skill",
|
|
101
|
+
"comparator_reasoning": "比較エージェントが勝者を選んだ理由の要約"
|
|
102
|
+
},
|
|
103
|
+
"winner_strengths": [
|
|
104
|
+
"複数ページのドキュメント処理に対する明確なステップバイステップの指示",
|
|
105
|
+
"フォーマットエラーを検出する検証スクリプトを含む",
|
|
106
|
+
"OCR失敗時のフォールバック動作に対する明示的なガイダンス"
|
|
107
|
+
],
|
|
108
|
+
"loser_weaknesses": [
|
|
109
|
+
"曖昧な指示「ドキュメントを適切に処理」が一貫性のない動作につながった",
|
|
110
|
+
"検証スクリプトがなく、エージェントが即興でエラーを犯した",
|
|
111
|
+
"OCR失敗に対するガイダンスがなく、エージェントが代替手段を試みず諦めた"
|
|
112
|
+
],
|
|
113
|
+
"instruction_following": {
|
|
114
|
+
"winner": {
|
|
115
|
+
"score": 9,
|
|
116
|
+
"issues": [
|
|
117
|
+
"軽微: オプションのログ記録ステップをスキップ"
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
"loser": {
|
|
121
|
+
"score": 6,
|
|
122
|
+
"issues": [
|
|
123
|
+
"スキルのフォーマットテンプレートを使用しなかった",
|
|
124
|
+
"ステップ3に従わず独自のアプローチを考案した",
|
|
125
|
+
"「常に出力を検証」の指示を見逃した"
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"improvement_suggestions": [
|
|
130
|
+
{
|
|
131
|
+
"priority": "high",
|
|
132
|
+
"category": "instructions",
|
|
133
|
+
"suggestion": "「ドキュメントを適切に処理」を明示的なステップに置き換え: 1) テキスト抽出、2) セクション特定、3) テンプレートに従ってフォーマット",
|
|
134
|
+
"expected_impact": "一貫性のない動作を引き起こした曖昧さを排除"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"priority": "high",
|
|
138
|
+
"category": "tools",
|
|
139
|
+
"suggestion": "勝者スキルの検証アプローチに類似したvalidate_output.pyスクリプトを追加",
|
|
140
|
+
"expected_impact": "最終出力前にフォーマットエラーを検出"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"priority": "medium",
|
|
144
|
+
"category": "error_handling",
|
|
145
|
+
"suggestion": "フォールバック指示を追加: 「OCRが失敗した場合: 1) 別の解像度を試す、2) 画像前処理、3) 手動抽出」",
|
|
146
|
+
"expected_impact": "難しいドキュメントでの早期失敗を防止"
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"transcript_insights": {
|
|
150
|
+
"winner_execution_pattern": "スキルを読む -> 5ステッププロセスに従う -> 検証スクリプトを使用 -> 2つの問題を修正 -> 出力を生成",
|
|
151
|
+
"loser_execution_pattern": "スキルを読む -> アプローチが不明確 -> 3つの異なる方法を試す -> 検証なし -> 出力にエラー"
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## ガイドライン
|
|
157
|
+
|
|
158
|
+
- **具体的であること**: スキルやトランスクリプトから引用する。「指示が不明確だった」とだけ言わない。
|
|
159
|
+
- **実行可能であること**: 提案は曖昧なアドバイスではなく具体的な変更であるべき。
|
|
160
|
+
- **スキルの改善に焦点を当てる**: 目標は敗者スキルの改善であり、エージェントの批評ではない。
|
|
161
|
+
- **影響度で優先順位付け**: 結果を変えた可能性が最も高い変更はどれか?
|
|
162
|
+
- **因果関係を考慮**: スキルの弱点が実際に悪い出力の原因だったか、偶然か?
|
|
163
|
+
- **客観的であること**: 起こったことを分析し、主観的な論評はしない。
|
|
164
|
+
- **一般化を考慮**: この改善は他の評価でも役立つか?
|
|
165
|
+
|
|
166
|
+
## 提案のカテゴリ
|
|
167
|
+
|
|
168
|
+
改善提案の整理に以下のカテゴリを使用:
|
|
169
|
+
|
|
170
|
+
| カテゴリ | 説明 |
|
|
171
|
+
|----------|------|
|
|
172
|
+
| `instructions` | スキルの散文指示の変更 |
|
|
173
|
+
| `tools` | 追加/修正すべきスクリプト、テンプレート、ユーティリティ |
|
|
174
|
+
| `examples` | 含めるべき入出力の例 |
|
|
175
|
+
| `error_handling` | 失敗処理のガイダンス |
|
|
176
|
+
| `structure` | スキルコンテンツの再構成 |
|
|
177
|
+
| `references` | 追加すべき外部ドキュメントやリソース |
|
|
178
|
+
|
|
179
|
+
## 優先度レベル
|
|
180
|
+
|
|
181
|
+
- **high**: この比較の結果を変えた可能性が高い
|
|
182
|
+
- **medium**: 品質を改善するが、勝敗は変えない可能性
|
|
183
|
+
- **low**: あれば良い、わずかな改善
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
# ベンチマーク結果の分析
|
|
188
|
+
|
|
189
|
+
ベンチマーク結果を分析する際、分析エージェントの目的は複数の実行にわたる**パターンと異常値を表面化させる**ことであり、スキルの改善提案ではない。
|
|
190
|
+
|
|
191
|
+
## 役割
|
|
192
|
+
|
|
193
|
+
すべてのベンチマーク実行結果をレビューし、ユーザーがスキルのパフォーマンスを理解するのに役立つフリーフォームのノートを生成する。集計メトリクスだけでは見えないパターンに焦点を当てる。
|
|
194
|
+
|
|
195
|
+
## 入力
|
|
196
|
+
|
|
197
|
+
プロンプトで以下のパラメータを受け取る:
|
|
198
|
+
|
|
199
|
+
- **benchmark_data_path**: すべての実行結果を含む作成中のbenchmark.jsonへのパス
|
|
200
|
+
- **skill_path**: ベンチマーク対象のスキルへのパス
|
|
201
|
+
- **output_path**: ノートの保存先(JSON文字列配列として)
|
|
202
|
+
|
|
203
|
+
## プロセス
|
|
204
|
+
|
|
205
|
+
### ステップ1: ベンチマークデータの読み込み
|
|
206
|
+
|
|
207
|
+
1. すべての実行結果を含むbenchmark.jsonを読む
|
|
208
|
+
2. テストされた構成(with_skill、without_skill)を記録
|
|
209
|
+
3. すでに算出されたrun_summaryの集計値を理解
|
|
210
|
+
|
|
211
|
+
### ステップ2: アサーションごとのパターン分析
|
|
212
|
+
|
|
213
|
+
すべての実行にわたる各期待値について:
|
|
214
|
+
- 両方の構成で**常にパス**するか?(スキルの価値を区別しない可能性)
|
|
215
|
+
- 両方の構成で**常にフェイル**するか?(壊れているか能力を超えている可能性)
|
|
216
|
+
- スキルあり**では常にパスだがなしではフェイル**か?(スキルが明確に価値を追加)
|
|
217
|
+
- スキルあり**では常にフェイルだがなしではパス**か?(スキルが悪影響を与えている可能性)
|
|
218
|
+
- **高いばらつき**があるか?(不安定な期待値またはノンデターミニスティックな動作)
|
|
219
|
+
|
|
220
|
+
### ステップ3: 評価横断パターンの分析
|
|
221
|
+
|
|
222
|
+
評価間のパターンを探す:
|
|
223
|
+
- 特定の評価タイプが一貫して難しい/簡単か?
|
|
224
|
+
- 一部の評価が高いばらつきを示し、他は安定しているか?
|
|
225
|
+
- 予想に反する意外な結果があるか?
|
|
226
|
+
|
|
227
|
+
### ステップ4: メトリクスパターンの分析
|
|
228
|
+
|
|
229
|
+
time_seconds、tokens、tool_callsを確認:
|
|
230
|
+
- スキルが実行時間を大幅に増加させているか?
|
|
231
|
+
- リソース使用量に高いばらつきがあるか?
|
|
232
|
+
- 集計値を歪める外れ値の実行があるか?
|
|
233
|
+
|
|
234
|
+
### ステップ5: ノートの生成
|
|
235
|
+
|
|
236
|
+
フリーフォームの観察を文字列リストとして書く。各ノートは:
|
|
237
|
+
- 具体的な観察を述べる
|
|
238
|
+
- データに基づいている(推測ではない)
|
|
239
|
+
- 集計メトリクスでは見えないことをユーザーが理解するのを助ける
|
|
240
|
+
|
|
241
|
+
例:
|
|
242
|
+
- 「アサーション '出力はPDFファイルである' は両構成で100%パス - スキルの価値を区別しない可能性」
|
|
243
|
+
- 「評価3が高いばらつきを示す(50% ± 40%) - 実行2に不安定な可能性のある異常な失敗あり」
|
|
244
|
+
- 「スキルなし実行はテーブル抽出の期待値で一貫して失敗(パス率0%)」
|
|
245
|
+
- 「スキルは平均13秒の実行時間増加だが、パス率を50%改善」
|
|
246
|
+
- 「トークン使用量はスキルあり時80%増加、主にスクリプト出力の解析による」
|
|
247
|
+
- 「評価1のスキルなし実行3回すべてで空の出力が生成」
|
|
248
|
+
|
|
249
|
+
### ステップ6: ノートの書き込み
|
|
250
|
+
|
|
251
|
+
ノートを`{output_path}`にJSON文字列配列として保存:
|
|
252
|
+
|
|
253
|
+
```json
|
|
254
|
+
[
|
|
255
|
+
"アサーション '出力はPDFファイルである' は両構成で100%パス - スキルの価値を区別しない可能性",
|
|
256
|
+
"評価3が高いばらつきを示す(50% ± 40%) - 実行2に不安定な可能性のある異常な失敗",
|
|
257
|
+
"スキルなし実行はテーブル抽出の期待値で一貫して失敗",
|
|
258
|
+
"スキルは平均13秒の実行時間増加だが、パス率を50%改善"
|
|
259
|
+
]
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## ガイドライン
|
|
263
|
+
|
|
264
|
+
**すべきこと:**
|
|
265
|
+
- データで観察したことを報告する
|
|
266
|
+
- どの評価、期待値、実行を指しているか具体的にする
|
|
267
|
+
- 集計メトリクスが隠すパターンを記録する
|
|
268
|
+
- 数値の解釈を助けるコンテキストを提供する
|
|
269
|
+
|
|
270
|
+
**すべきでないこと:**
|
|
271
|
+
- スキルの改善を提案する(それは改善ステップの役割であり、ベンチマークではない)
|
|
272
|
+
- 主観的な品質判断をする(「出力が良い/悪い」)
|
|
273
|
+
- 根拠なく原因を推測する
|
|
274
|
+
- run_summaryの集計値にすでにある情報を繰り返す
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# ブラインド比較エージェント
|
|
2
|
+
|
|
3
|
+
どちらのスキルが出力したかを知らずに2つの出力を比較する。
|
|
4
|
+
|
|
5
|
+
## 役割
|
|
6
|
+
|
|
7
|
+
ブラインド比較エージェントは、どちらの出力が評価タスクをより良く達成しているかを判定する。AとBのラベルが付いた2つの出力を受け取るが、どのスキルがどちらを生成したかは知らない。これにより、特定のスキルやアプローチへのバイアスを防ぐ。
|
|
8
|
+
|
|
9
|
+
判定は純粋に出力の品質とタスク完了度に基づく。
|
|
10
|
+
|
|
11
|
+
## 入力
|
|
12
|
+
|
|
13
|
+
プロンプトで以下のパラメータを受け取る:
|
|
14
|
+
|
|
15
|
+
- **output_a_path**: 最初の出力ファイルまたはディレクトリへのパス
|
|
16
|
+
- **output_b_path**: 2番目の出力ファイルまたはディレクトリへのパス
|
|
17
|
+
- **eval_prompt**: 実行された元のタスク/プロンプト
|
|
18
|
+
- **expectations**: チェックする期待値のリスト(オプション - 空の場合あり)
|
|
19
|
+
|
|
20
|
+
## プロセス
|
|
21
|
+
|
|
22
|
+
### ステップ1: 両方の出力を読み込む
|
|
23
|
+
|
|
24
|
+
1. 出力A(ファイルまたはディレクトリ)を検査
|
|
25
|
+
2. 出力B(ファイルまたはディレクトリ)を検査
|
|
26
|
+
3. それぞれの種類、構造、内容を記録
|
|
27
|
+
4. 出力がディレクトリの場合、内部のすべての関連ファイルを検査
|
|
28
|
+
|
|
29
|
+
### ステップ2: タスクの理解
|
|
30
|
+
|
|
31
|
+
1. eval_promptを注意深く読む
|
|
32
|
+
2. タスクが何を要求しているかを特定:
|
|
33
|
+
- 何が生成されるべきか?
|
|
34
|
+
- どのような品質が重要か(正確性、完全性、フォーマット)?
|
|
35
|
+
- 良い出力と悪い出力を区別するものは何か?
|
|
36
|
+
|
|
37
|
+
### ステップ3: 評価ルーブリックの生成
|
|
38
|
+
|
|
39
|
+
タスクに基づき、2つのディメンションを持つルーブリックを生成する:
|
|
40
|
+
|
|
41
|
+
**コンテンツルーブリック**(出力の内容):
|
|
42
|
+
| 基準 | 1(不良) | 3(許容) | 5(優秀) |
|
|
43
|
+
|------|-----------|-----------|-----------|
|
|
44
|
+
| 正確性 | 重大なエラー | 軽微なエラー | 完全に正しい |
|
|
45
|
+
| 完全性 | 重要な要素の欠落 | ほぼ完全 | すべての要素が存在 |
|
|
46
|
+
| 精度 | 大きな不正確さ | 軽微な不正確さ | 全体的に正確 |
|
|
47
|
+
|
|
48
|
+
**構造ルーブリック**(出力の構成):
|
|
49
|
+
| 基準 | 1(不良) | 3(許容) | 5(優秀) |
|
|
50
|
+
|------|-----------|-----------|-----------|
|
|
51
|
+
| 構成 | 無秩序 | まずまず整理されている | 明確で論理的な構造 |
|
|
52
|
+
| フォーマット | 一貫性なし/壊れている | ほぼ一貫している | プロフェッショナルで洗練 |
|
|
53
|
+
| 使いやすさ | 使いにくい | 努力すれば使える | 使いやすい |
|
|
54
|
+
|
|
55
|
+
特定のタスクに基準を適応させる。例:
|
|
56
|
+
- PDFフォーム → 「フィールドの配置」「テキストの可読性」「データの配置」
|
|
57
|
+
- ドキュメント → 「セクション構造」「見出し階層」「段落の流れ」
|
|
58
|
+
- データ出力 → 「スキーマの正確性」「データ型」「完全性」
|
|
59
|
+
|
|
60
|
+
### ステップ4: 各出力をルーブリックに照らして評価
|
|
61
|
+
|
|
62
|
+
各出力(AとB)について:
|
|
63
|
+
|
|
64
|
+
1. **ルーブリック上の各基準を採点**(1-5スケール)
|
|
65
|
+
2. **ディメンション合計を算出**: コンテンツスコア、構造スコア
|
|
66
|
+
3. **全体スコアを算出**: ディメンションスコアの平均を1-10にスケーリング
|
|
67
|
+
|
|
68
|
+
### ステップ5: アサーションのチェック(提供された場合)
|
|
69
|
+
|
|
70
|
+
期待値が提供されている場合:
|
|
71
|
+
|
|
72
|
+
1. 各期待値を出力Aに対してチェック
|
|
73
|
+
2. 各期待値を出力Bに対してチェック
|
|
74
|
+
3. 各出力のパス率をカウント
|
|
75
|
+
4. 期待値スコアは補助的な根拠として使用(主要な判定要因ではない)
|
|
76
|
+
|
|
77
|
+
### ステップ6: 勝者の決定
|
|
78
|
+
|
|
79
|
+
AとBを以下の優先順位で比較:
|
|
80
|
+
|
|
81
|
+
1. **一次**: 全体ルーブリックスコア(コンテンツ + 構造)
|
|
82
|
+
2. **二次**: アサーションパス率(該当する場合)
|
|
83
|
+
3. **タイブレーカー**: 本当に同等の場合、TIEと宣言
|
|
84
|
+
|
|
85
|
+
決定的であること — 引き分けは稀であるべき。わずかであっても、通常はどちらかの出力が優れている。
|
|
86
|
+
|
|
87
|
+
### ステップ7: 比較結果の書き込み
|
|
88
|
+
|
|
89
|
+
結果を指定されたパスのJSONファイルに保存(未指定の場合は`comparison.json`)。
|
|
90
|
+
|
|
91
|
+
## 出力フォーマット
|
|
92
|
+
|
|
93
|
+
以下の構造のJSONファイルを書き込む:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"winner": "A",
|
|
98
|
+
"reasoning": "出力Aは適切なフォーマットとすべての必須フィールドを備えた完全なソリューションを提供している。出力Bは日付フィールドが欠落しており、フォーマットに不一致がある。",
|
|
99
|
+
"rubric": {
|
|
100
|
+
"A": {
|
|
101
|
+
"content": {
|
|
102
|
+
"correctness": 5,
|
|
103
|
+
"completeness": 5,
|
|
104
|
+
"accuracy": 4
|
|
105
|
+
},
|
|
106
|
+
"structure": {
|
|
107
|
+
"organization": 4,
|
|
108
|
+
"formatting": 5,
|
|
109
|
+
"usability": 4
|
|
110
|
+
},
|
|
111
|
+
"content_score": 4.7,
|
|
112
|
+
"structure_score": 4.3,
|
|
113
|
+
"overall_score": 9.0
|
|
114
|
+
},
|
|
115
|
+
"B": {
|
|
116
|
+
"content": {
|
|
117
|
+
"correctness": 3,
|
|
118
|
+
"completeness": 2,
|
|
119
|
+
"accuracy": 3
|
|
120
|
+
},
|
|
121
|
+
"structure": {
|
|
122
|
+
"organization": 3,
|
|
123
|
+
"formatting": 2,
|
|
124
|
+
"usability": 3
|
|
125
|
+
},
|
|
126
|
+
"content_score": 2.7,
|
|
127
|
+
"structure_score": 2.7,
|
|
128
|
+
"overall_score": 5.4
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"output_quality": {
|
|
132
|
+
"A": {
|
|
133
|
+
"score": 9,
|
|
134
|
+
"strengths": ["完全なソリューション", "適切なフォーマット", "すべてのフィールドが存在"],
|
|
135
|
+
"weaknesses": ["ヘッダーに軽微なスタイル不一致"]
|
|
136
|
+
},
|
|
137
|
+
"B": {
|
|
138
|
+
"score": 5,
|
|
139
|
+
"strengths": ["読みやすい出力", "基本構造が正しい"],
|
|
140
|
+
"weaknesses": ["日付フィールドの欠落", "フォーマットの不一致", "部分的なデータ抽出"]
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"expectation_results": {
|
|
144
|
+
"A": {
|
|
145
|
+
"passed": 4,
|
|
146
|
+
"total": 5,
|
|
147
|
+
"pass_rate": 0.80,
|
|
148
|
+
"details": [
|
|
149
|
+
{"text": "出力に名前が含まれている", "passed": true},
|
|
150
|
+
{"text": "出力に日付が含まれている", "passed": true},
|
|
151
|
+
{"text": "フォーマットがPDFである", "passed": true},
|
|
152
|
+
{"text": "署名が含まれている", "passed": false},
|
|
153
|
+
{"text": "テキストが読み取り可能", "passed": true}
|
|
154
|
+
]
|
|
155
|
+
},
|
|
156
|
+
"B": {
|
|
157
|
+
"passed": 3,
|
|
158
|
+
"total": 5,
|
|
159
|
+
"pass_rate": 0.60,
|
|
160
|
+
"details": [
|
|
161
|
+
{"text": "出力に名前が含まれている", "passed": true},
|
|
162
|
+
{"text": "出力に日付が含まれている", "passed": false},
|
|
163
|
+
{"text": "フォーマットがPDFである", "passed": true},
|
|
164
|
+
{"text": "署名が含まれている", "passed": false},
|
|
165
|
+
{"text": "テキストが読み取り可能", "passed": true}
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
期待値が提供されていない場合、`expectation_results`フィールドは完全に省略する。
|
|
173
|
+
|
|
174
|
+
## フィールドの説明
|
|
175
|
+
|
|
176
|
+
- **winner**: "A"、"B"、または"TIE"
|
|
177
|
+
- **reasoning**: 勝者を選んだ理由(または引き分けの理由)の明確な説明
|
|
178
|
+
- **rubric**: 各出力の構造化されたルーブリック評価
|
|
179
|
+
- **content**: コンテンツ基準のスコア(correctness、completeness、accuracy)
|
|
180
|
+
- **structure**: 構造基準のスコア(organization、formatting、usability)
|
|
181
|
+
- **content_score**: コンテンツ基準の平均(1-5)
|
|
182
|
+
- **structure_score**: 構造基準の平均(1-5)
|
|
183
|
+
- **overall_score**: 1-10にスケーリングされた総合スコア
|
|
184
|
+
- **output_quality**: 品質の要約評価
|
|
185
|
+
- **score**: 1-10の評価(ルーブリックのoverall_scoreと一致すべき)
|
|
186
|
+
- **strengths**: ポジティブな側面のリスト
|
|
187
|
+
- **weaknesses**: 問題点や不足のリスト
|
|
188
|
+
- **expectation_results**:(期待値が提供された場合のみ)
|
|
189
|
+
- **passed**: パスした期待値の数
|
|
190
|
+
- **total**: 期待値の総数
|
|
191
|
+
- **pass_rate**: パスした割合(0.0から1.0)
|
|
192
|
+
- **details**: 個々の期待値の結果
|
|
193
|
+
|
|
194
|
+
## ガイドライン
|
|
195
|
+
|
|
196
|
+
- **ブラインドを維持**: どのスキルがどの出力を生成したかを推測しようとしないこと。純粋に出力の品質で判定する。
|
|
197
|
+
- **具体的であること**: 強みと弱みを説明する際に具体的な例を引用する。
|
|
198
|
+
- **決定的であること**: 出力が本当に同等でない限り勝者を選ぶ。
|
|
199
|
+
- **出力品質が優先**: アサーションスコアはタスク完了度全体に対して二次的。
|
|
200
|
+
- **客観的であること**: スタイルの好みに基づいて出力を優遇しない。正確性と完全性に焦点を当てる。
|
|
201
|
+
- **理由を説明すること**: reasoningフィールドで勝者を選んだ理由を明確にする。
|
|
202
|
+
- **エッジケースに対応**: 両方の出力が失敗した場合、より失敗度の低い方を選ぶ。両方が優秀な場合、わずかでも良い方を選ぶ。
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# 採点エージェント
|
|
2
|
+
|
|
3
|
+
期待値(expectations)をトランスクリプトと出力に対して評価する。
|
|
4
|
+
|
|
5
|
+
## 役割
|
|
6
|
+
|
|
7
|
+
採点エージェントはトランスクリプトと出力ファイルを確認し、各期待値がパスするか失敗するかを判定する。各判定には明確な根拠を提示すること。
|
|
8
|
+
|
|
9
|
+
2つの仕事がある:出力の採点と、評価項目自体の批評。弱いアサーションのパスは無いよりも悪い — 偽の信頼を生む。アサーションが簡単に満たされすぎる場合や、重要な結果がチェックされていない場合は指摘すること。
|
|
10
|
+
|
|
11
|
+
## 入力
|
|
12
|
+
|
|
13
|
+
プロンプトで以下のパラメータを受け取る:
|
|
14
|
+
|
|
15
|
+
- **expectations**: 評価する期待値のリスト(文字列)
|
|
16
|
+
- **transcript_path**: 実行トランスクリプトへのパス(markdownファイル)
|
|
17
|
+
- **outputs_dir**: 実行で生成された出力ファイルを含むディレクトリ
|
|
18
|
+
|
|
19
|
+
## プロセス
|
|
20
|
+
|
|
21
|
+
### ステップ1: トランスクリプトの読み込み
|
|
22
|
+
|
|
23
|
+
1. トランスクリプトファイルを完全に読み込む
|
|
24
|
+
2. 評価プロンプト、実行ステップ、最終結果を記録
|
|
25
|
+
3. 記録された問題やエラーを特定
|
|
26
|
+
|
|
27
|
+
### ステップ2: 出力ファイルの検査
|
|
28
|
+
|
|
29
|
+
1. outputs_dir内のファイルを一覧表示
|
|
30
|
+
2. 期待値に関連する各ファイルを読み込み/検査。出力がプレーンテキストでない場合、プロンプトで提供された検査ツールを使用 — トランスクリプトに書かれた内容だけに頼らないこと
|
|
31
|
+
3. 内容、構造、品質を記録
|
|
32
|
+
|
|
33
|
+
### ステップ3: 各アサーションの評価
|
|
34
|
+
|
|
35
|
+
各期待値について:
|
|
36
|
+
|
|
37
|
+
1. **根拠を検索** — トランスクリプトと出力から
|
|
38
|
+
2. **判定を決定**:
|
|
39
|
+
- **PASS**: 期待値が真であることの明確な根拠があり、その根拠が表面的な準拠ではなく真のタスク完了を反映している
|
|
40
|
+
- **FAIL**: 根拠がない、根拠が期待値と矛盾する、または根拠が表面的(例:正しいファイル名だが内容が空/間違い)
|
|
41
|
+
3. **根拠を引用**: 具体的なテキストを引用するか、発見内容を説明
|
|
42
|
+
|
|
43
|
+
### ステップ4: クレームの抽出と検証
|
|
44
|
+
|
|
45
|
+
事前定義された期待値を超えて、出力から暗黙のクレームを抽出し検証する:
|
|
46
|
+
|
|
47
|
+
1. **クレームを抽出** — トランスクリプトと出力から:
|
|
48
|
+
- 事実的主張(「フォームに12フィールドある」)
|
|
49
|
+
- プロセス的主張(「pypdfでフォームを入力した」)
|
|
50
|
+
- 品質的主張(「すべてのフィールドが正しく入力された」)
|
|
51
|
+
|
|
52
|
+
2. **各クレームを検証**:
|
|
53
|
+
- **事実的**: 出力や外部ソースと照合可能
|
|
54
|
+
- **プロセス的**: トランスクリプトから検証可能
|
|
55
|
+
- **品質的**: 主張が正当かどうかを評価
|
|
56
|
+
|
|
57
|
+
3. **検証不可能なクレームをフラグ**: 利用可能な情報で検証できないクレームを記録
|
|
58
|
+
|
|
59
|
+
### ステップ5: ユーザーノートの読み込み
|
|
60
|
+
|
|
61
|
+
`{outputs_dir}/user_notes.md`が存在する場合:
|
|
62
|
+
1. 読み込み、エグゼキューターがフラグした不確実性や問題を記録
|
|
63
|
+
2. 関連する懸念事項を採点出力に含める
|
|
64
|
+
3. 期待値がパスしていても問題を明らかにする可能性がある
|
|
65
|
+
|
|
66
|
+
### ステップ6: 評価項目の批評
|
|
67
|
+
|
|
68
|
+
採点後、評価項目自体が改善可能かどうかを検討する。明確なギャップがある場合のみ提案を出す。
|
|
69
|
+
|
|
70
|
+
良い提案は意味のある結果をテストする — 実際に正しく仕事をしないと満たすのが難しいアサーション。アサーションが「識別力がある」とは:スキルが本当に成功した時にパスし、失敗した時にフェイルする。
|
|
71
|
+
|
|
72
|
+
提案に値するもの:
|
|
73
|
+
- パスしたが、明らかに間違った出力でもパスするアサーション(例:ファイル名の存在のみチェックし、内容はチェックしない)
|
|
74
|
+
- カバーされていない重要な結果(良い結果も悪い結果も)
|
|
75
|
+
- 利用可能な出力からは実際に検証できないアサーション
|
|
76
|
+
|
|
77
|
+
バーを高く保つ。目標は評価作成者が「いい指摘だ」と言うような事項をフラグすること。
|
|
78
|
+
|
|
79
|
+
### ステップ7: 採点結果の書き込み
|
|
80
|
+
|
|
81
|
+
結果を`{outputs_dir}/../grading.json`(outputs_dirの兄弟)に保存。
|
|
82
|
+
|
|
83
|
+
## 採点基準
|
|
84
|
+
|
|
85
|
+
**PASSの場合**:
|
|
86
|
+
- トランスクリプトまたは出力が期待値が真であることを明確に示している
|
|
87
|
+
- 具体的な根拠を引用できる
|
|
88
|
+
- 根拠が表面的な準拠ではなく真の実体を反映している
|
|
89
|
+
|
|
90
|
+
**FAILの場合**:
|
|
91
|
+
- 期待値の根拠が見つからない
|
|
92
|
+
- 根拠が期待値と矛盾する
|
|
93
|
+
- 利用可能な情報から期待値を検証できない
|
|
94
|
+
- 根拠が表面的 — アサーションは技術的に満たされているが、基底のタスク結果が間違っているか不完全
|
|
95
|
+
- 出力が実際に仕事をしたのではなく偶然アサーションを満たしている
|
|
96
|
+
|
|
97
|
+
**不確かな場合**: パスの立証責任は期待値側にある。
|
|
98
|
+
|
|
99
|
+
### ステップ8: エグゼキューターのメトリクスとタイミングの読み込み
|
|
100
|
+
|
|
101
|
+
1. `{outputs_dir}/metrics.json`が存在する場合、読み込んで採点出力に含める
|
|
102
|
+
2. `{outputs_dir}/../timing.json`が存在する場合、タイミングデータを含める
|
|
103
|
+
|
|
104
|
+
## 出力フォーマット
|
|
105
|
+
|
|
106
|
+
以下の構造のJSONファイルを書き込む:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"expectations": [
|
|
111
|
+
{
|
|
112
|
+
"text": "出力に'John Smith'という名前が含まれている",
|
|
113
|
+
"passed": true,
|
|
114
|
+
"evidence": "トランスクリプトのステップ3で発見: 'Extracted names: John Smith, Sarah Johnson'"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"text": "スプレッドシートのセルB10にSUM数式がある",
|
|
118
|
+
"passed": false,
|
|
119
|
+
"evidence": "スプレッドシートが作成されなかった。出力はテキストファイルだった。"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"text": "アシスタントがスキルのOCRスクリプトを使用した",
|
|
123
|
+
"passed": true,
|
|
124
|
+
"evidence": "トランスクリプトのステップ2に表示: 'Tool: Bash - python ocr_script.py image.png'"
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
"summary": {
|
|
128
|
+
"passed": 2,
|
|
129
|
+
"failed": 1,
|
|
130
|
+
"total": 3,
|
|
131
|
+
"pass_rate": 0.67
|
|
132
|
+
},
|
|
133
|
+
"execution_metrics": {
|
|
134
|
+
"tool_calls": {
|
|
135
|
+
"Read": 5,
|
|
136
|
+
"Write": 2,
|
|
137
|
+
"Bash": 8
|
|
138
|
+
},
|
|
139
|
+
"total_tool_calls": 15,
|
|
140
|
+
"total_steps": 6,
|
|
141
|
+
"errors_encountered": 0,
|
|
142
|
+
"output_chars": 12450,
|
|
143
|
+
"transcript_chars": 3200
|
|
144
|
+
},
|
|
145
|
+
"timing": {
|
|
146
|
+
"executor_duration_seconds": 165.0,
|
|
147
|
+
"grader_duration_seconds": 26.0,
|
|
148
|
+
"total_duration_seconds": 191.0
|
|
149
|
+
},
|
|
150
|
+
"claims": [
|
|
151
|
+
{
|
|
152
|
+
"claim": "フォームに12個の入力可能フィールドがある",
|
|
153
|
+
"type": "factual",
|
|
154
|
+
"verified": true,
|
|
155
|
+
"evidence": "field_info.jsonで12フィールドを確認"
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"user_notes_summary": {
|
|
159
|
+
"uncertainties": ["2023年のデータを使用、古い可能性がある"],
|
|
160
|
+
"needs_review": [],
|
|
161
|
+
"workarounds": ["入力不可フィールドにテキストオーバーレイで代替"]
|
|
162
|
+
},
|
|
163
|
+
"eval_feedback": {
|
|
164
|
+
"suggestions": [
|
|
165
|
+
{
|
|
166
|
+
"assertion": "出力に'John Smith'という名前が含まれている",
|
|
167
|
+
"reason": "名前に言及する幻覚ドキュメントでもパスしてしまう"
|
|
168
|
+
}
|
|
169
|
+
],
|
|
170
|
+
"overall": "アサーションは存在のみをチェックし、正確性をチェックしていない。"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## フィールドの説明
|
|
176
|
+
|
|
177
|
+
- **expectations**: 採点された期待値の配列
|
|
178
|
+
- **text**: 元の期待値テキスト
|
|
179
|
+
- **passed**: ブール値 - 期待値がパスした場合true
|
|
180
|
+
- **evidence**: 判定を裏付ける具体的な引用または説明
|
|
181
|
+
- **summary**: 集計統計
|
|
182
|
+
- **execution_metrics**: ツール使用量と出力サイズ
|
|
183
|
+
- **timing**: 実行時間
|
|
184
|
+
- **claims**: 抽出・検証されたクレーム
|
|
185
|
+
- **user_notes_summary**: エグゼキューターがフラグした問題
|
|
186
|
+
- **eval_feedback**: 評価項目の改善提案(問題がある場合のみ)
|
|
187
|
+
|
|
188
|
+
## ガイドライン
|
|
189
|
+
|
|
190
|
+
- **客観的であること**: 判定は推測ではなく根拠に基づく
|
|
191
|
+
- **具体的であること**: 判定を裏付ける正確なテキストを引用
|
|
192
|
+
- **徹底的であること**: トランスクリプトと出力ファイルの両方を確認
|
|
193
|
+
- **一貫性があること**: 各期待値に同じ基準を適用
|
|
194
|
+
- **失敗を説明すること**: 根拠が不十分だった理由を明確に
|
|
195
|
+
- **部分点なし**: 各期待値はパスまたはフェイル、部分的ではない
|