Skip to content

test(ai-coach): 轻量架构可行性评测(方案 §1–17)+ 第一轮结果 CONDITIONAL GO - #546

Open
sol-wizard wants to merge 1 commit into
ai-coach-v3-profrom
feature/ai-coach-eval
Open

sol-wizard wants to merge 1 commit into
ai-coach-v3-profrom
feature/ai-coach-eval

Conversation

@sol-wizard

Copy link
Copy Markdown
Owner

按《AI Action Coach 轻量架构可行性评测方案》§1–§17 实现的评测代码,以及第一轮运行结果。§18(failure bundle / 自动修复闭环)没做。

第一轮结论:CONDITIONAL GO

授权边界全部守住(0 张未授权卡片、0 条虚构 Evidence 获得授权、0 次未确认的正式变更、提问规则 0 违反),多轮状态由 Kernel 正确表达。但有两处「守得太死、不给纠错机会」要先修:

结果
架构确定性(scripted A1–A12) 12 / 12;另 4 个变体过、4 个已知缺口固定为 _KnownGap characterization
真实模型 16 个 Case ×1 14 / 16(E1、E6 失败,同一根因)
稳定性 8 个关键 Case ×3 6 / 8(GO 线 7/8):E6 0/3,C8 2/3
Question Judge 校准 11 / 12

必须先修

  1. 一条不可验证的 constraint claim 会丢掉整张正确的卡片,且不重生成(E1、E6;scripted 复现 A3b)。
    E1「帮我安排明天下午三点整理论文资料,做半小时」模型卡片完全正确,只因 constraint 文本 明天下午三点整 比引用 明天下午三点 多一个字,HasInvalidClaimsConversationPostPolicy 第 55–62 行 Downgrade(ContinueListening, EvidenceInvalid) → 用户看到「抱歉,这次没能形成合适的回复」。
    249d2cca(09-12「optimize」)把这里从 RequiresRegeneration 改成了 DowngradePostPolicy_InvalidCurrentClaimWithActiveIntent_RejectsModelProposal 从那天起就是红的。
    建议:constraint claim 不可验证时只丢该条 constraint(item / actionRequest / disposition 的虚构仍致命),并/或恢复 RequiresRegeneration。
  2. Companion 出卡触发只认 direct_instruction(C8 三次里一次)。模型把「…但还是帮我安排明天早上跑步吧」标成 explicit_planning_requestProposalTrigger = CurrentTurnDirectInstruction 就拒绝出卡。建议触发同时接受 explicit_planning_request(仍要求引用来自当前消息)。

其他发现(未声明的问句绕过提问节奏、有约束的 intent 拿不到确定性兜底、部分纠正与整体拒绝不可区分、降级时模型文本整段换成 canned 道歉等)见完整报告 blotz-v2/ai-action-coach-evaluation-round1-report.md

这个 PR 里有什么

全部在 blotztask-test/AiCoach/Evaluation/,不动生产代码:

  • AiCoachEvalHarness:真 ConversationKernel + 真 ModelTurnRuntime(prompt、context builder、Evidence Guard、Planning/Support Policy、Post-Policy、Guards),只换 gateway;固定时间 2026-09-14 周一 10:00 Sydney。
  • AiCoachEvalCase / EvalChecks / QuestionQualityEvaluator:Required / Allowed / Forbidden 契约与硬规则检查,断言公开 Outcome 和 Kernel 状态,不解析日志。
  • LightweightJudge + QuestionJudgeCalibrationTests:同一部署做 judge,只出软信号,12 样本校准。
  • EvalRunRecorder:每个 Case 每次运行一行 JSON 到 TestResults/ai-coach-evals/(已 gitignore),含原始模型输出。
  • ArchitectureFeasibilityTests(A1–A12 + 变体 + 已知缺口)、ExecutionModeEvalTests(E1–E8)、CompanionModeEvalTests(C1–C8)。
AICOACH_MODEL_TESTS=0 dotnet test blotztask-test --filter "FullyQualifiedName~ArchitectureFeasibilityTests"   # 秒级,不调模型
dotnet test blotztask-test --filter "FullyQualifiedName~ExecutionModeEvalTests|FullyQualifiedName~CompanionModeEvalTests" --logger "console;verbosity=detailed"
AICOACH_EVAL_RUNS=3 dotnet test blotztask-test --filter "FullyQualifiedName~CompanionModeEvalTests.C8_" --logger "console;verbosity=detailed"

真模型层需要 blotztask-api/appsettings.Development.json 的 Azure OpenAI 凭据,没有则显示 SKIPPED、不算通过。

注意

  • ai-coach-v3-pro 上原本就有 7 个红测试(ModelTurnRuntimeTests 6 个 + ConversationPolicyTests 1 个),本 PR 没有改它们:6 个是旧 scripted 候选缺 actionRequest 字段、被 2f288aad 后的 readiness 规则降级;1 个就是上面阻塞 1 的规约冲突。
  • 4 个 _KnownGap 测试固定的是当前行为;修好后会翻红,届时改成正向断言。

🤖 Generated with Claude Code

https://claude.ai/code/session_01YMgJV8JoQ93ZXL8kEuuzry

…plan §1–17)

Layer 1: 12 scripted architecture cases (A1–A12) plus variants and 4
known-gap characterizations, run through the real ConversationKernel and
ModelTurnRuntime with a scripted gateway.
Layer 2: 16 live-model cases (E1–E8, C1–C8) with hard checks, a lightweight
judge and an AICOACH_EVAL_RUNS stability pass; 12-sample judge calibration.
One JSON record per case run under TestResults/ai-coach-evals/.

Round-1 verdict: CONDITIONAL GO (see blotz-v2 round-1 report).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMgJV8JoQ93ZXL8kEuuzry
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.

1 participant