Files
goodbuddy/docs/features/parallel-experiments-prd.md
T
2026-08-14 13:24:42 +08:00

12 KiB
Raw Permalink Blame History

并行实验工作台 PRD

文档信息

项目 内容
状态 设计中
版本 0.1
日期 2026-08-13
依赖 自动化平台总体设计自动任务与目标 PRD

1. 背景

GoodBuddy 已能把一个请求并行委派给最多三个只读专家,再综合结果。这适合“一次请求, 多种专业视角”,但不等同于实验:当前没有结构化变量、重复运行、统一指标、结果晋升和 Run 级记忆隔离。

本功能借鉴 MesaLogo ParallelLab 中变量隔离、批量 Run、失败结算、指标比较和运行证据 的思想,但不引入其 Action Space、服务端队列或重型仿真平台。

2. 产品定义

并行实验是在冻结的研究问题和执行协议下,生成多个相互隔离的候选 Run,以相同评估标准 比较结果,并将结论追溯到运行证据。

Experiment
  ├─ Question / Hypothesis
  ├─ Protocol
  ├─ Variables and Variants
  ├─ Objectives and Evaluators
  ├─ Budget and Stop Conditions
  └─ ExperimentRun × N
       ├─ Isolated Conversation
       ├─ Isolated Run Memory
       ├─ Tasks and Artifacts
       ├─ Metrics
       └─ Evidence

3. 已确认的产品决策

  1. 实验 Run 复用现有 Task、Runtime、Artifact 和审批机制。
  2. 每个 Run 有独立变量、会话、运行记忆、任务和成果。
  3. 默认实验是只读 Ask;写工作区的实验后续使用每 Run 独立沙箱。
  4. 多个 Run 不能并发修改同一个用户工作区。
  5. 失败、取消、预算耗尽或结果不完整的 Run 不参与最佳结果选择。
  6. 没有成功 Run 时实验为失败或无结论,不能报告成功。
  7. 模型生成的实验协议必须可审查、编辑和版本化。
  8. 评估优先使用确定性指标;模型 Rubric 显示评估器版本和不确定性。
  9. “最佳”只针对声明的目标和约束,不代表普遍最好。
  10. 最佳结果只能创建候选,不能直接覆盖计划、记忆或工作区。

4. 目标

  • 把问题转为可审查的实验问题、变量、候选和指标。
  • 比较不同提示、模型、专家组合、参数或方案。
  • 监控每个 Run 的状态、成本、证据和失败原因。
  • 查看结果表、差异、稳定性和评估依据。
  • 从候选创建普通任务、计划草稿或记忆候选。
  • 为持续学习提供回放和非退化评估基础。

5. 非目标

  • 第一阶段不模拟数千 Agent 或社会群体涌现。
  • 不实现任意连续参数的自动贝叶斯优化。
  • 不在样本不足时宣称统计显著性。
  • 不把模型的自报置信度直接作为跨模型比较指标。
  • 不允许实验自行增加样本数、预算或能力范围。
  • 不允许自动部署结果或修改安全策略。
  • 不把专家团队的一次回答自动包装成科学实验。

6. 实验类型

类型 变量示例 用途
Prompt 对比 系统说明、输出格式、示例 比较自动化协议
模型对比 已配置文本模型 质量、速度和 Token 权衡
专家组合 专家集合、综合策略 多视角研究
参数扫描 检索模式、Top K、轮数 寻找有限参数组合
方案候选 多个用户或模型方案 按统一 Rubric 比较
回放评估 历史脱敏案例集合 验证学习候选是否退化

后续多轮情景模拟需要单独定义角色、环境和状态变量。

7. 创建流程

7.1 研究问题

用户填写:

  • 实验名称。
  • 问题和可选假设。
  • 探索、比较、优化或回放验证类型。
  • 项目范围。
  • 期望输出。
  • 禁止行为。

7.2 协议

ExperimentProtocol 包含:

  • 基准输入或案例集。
  • 固定提示和步骤。
  • 变量与候选。
  • Runtime、模型和专家。
  • 工具、知识库和记忆范围。
  • 工作模式。
  • 每 Run 预算。
  • 指标、评估器和停止条件。
  • 重复次数。

模型生成协议草稿时必须标明用户字段、模型建议、确定性指标和模型判断指标。

7.3 变量

type ExperimentVariable =
  | { name: string; type: 'enum'; values: JsonValue[] }
  | {
      name: string
      type: 'range'
      start: number
      end: number
      step: number
    }
  | { name: string; type: 'boolean' }
  | { name: string; type: 'prompt_variant'; values: string[] }
  | {
      name: string
      type: 'model_profile'
      profileIds: string[]
    }
  | {
      name: string
      type: 'expert_set'
      expertIdSets: string[][]
    }

第一阶段只支持有限、确定生成的组合。保存前展示组合数、重复后 Run 总数、最大模型调用、 Token 和耗时范围,以及最大并发。超过上限时要求缩小变量,不静默抽样。

7.4 基准与候选

  • 至少一个 Variant。
  • 对比实验建议设置 Baseline。
  • Baseline 与 Candidate 使用相同案例和评估器。
  • 评估器不能读取 Variant 标签和模型名称作为质量信号。
  • 模型评分时随机化候选顺序并保存实际顺序。

8. Run 隔离

8.1 数据隔离

每个 Run 独立拥有:

  • experimentRunId 和运行会话。
  • 变量快照和临时上下文。
  • Run 记忆分区。
  • 任务、子任务和成果。
  • 指标、证据和 Runtime 会话标识。

禁止:

  • Run A 读取 Run B 的消息、临时记忆或中间成果。
  • 多个 Run 共享可变变量对象。
  • Run 候选记忆在实验结算前进入其他 Run。
  • 通过全局列表误取其他项目或实验数据。

8.2 工作区隔离

阶段 1 只支持 Ask 和只读工具。阶段 2 的 Execute Run 使用独立临时沙箱或版本化工作树, 结果以 Patch 或成果展示,用户选择候选后再进入单独应用流程。

8.3 记忆隔离

Run 只读取冻结的 Global、Project、Automation 记忆快照和自己的 Run 分区, 不读取其他 Run 或实验期间新产生的候选记忆。

9. 调度与预算

  • 默认最大并发 3,与现有子专家调度能力一致。
  • 还需遵守全局后台并发和模型连接并发。
  • 每个 Variant 使用相同的单 Run 预算。
  • 不因候选暂时领先而静默给它更多预算。
  • 提前停止必须来自预先声明的规则。
  • UI 显示运行、排队、成功、失败和取消数量。

停止条件:

type ExperimentStopCondition =
  | { type: 'all_runs_terminal' }
  | { type: 'successful_run_count'; count: number }
  | {
      type: 'metric_threshold'
      metric: string
      operator: string
      value: number
    }
  | { type: 'budget' }
  | { type: 'deadline'; at: string }
  | { type: 'manual' }

触发停止后不启动新 Run;是否取消正在运行的 Run 必须在条件中明确。保存停止原因, 未运行 Variant 不参与最终比较。

10. 评估与指标

10.1 指标类型

类型 示例
确定性结果 Schema 有效、测试通过、文件存在、检查项完成
运行指标 耗时、模型调用、Token、工具调用、成果大小
检索指标 召回、引用覆盖、降级状态
人工评分 正确性、可用性、偏好
模型 Rubric 结构、完整性、表达、风险

10.2 模型 Rubric

必须保存 Rubric 版本、评估模型、输入证据摘要、候选展示顺序、分项得分、结构化理由和 格式修复。它不能覆盖确定性失败,也不能在缺少证据时编造事实正确性判断。

10.3 多目标

type ExperimentObjective = {
  metric: string
  direction: 'maximize' | 'minimize' | 'target'
  weight?: number
  target?: number
  hardConstraint?: boolean
}

结算先排除非成功和违反硬约束的 Run,再计算其余指标。存在明显权衡时展示 Pareto 候选, 不强行选唯一最佳。

11. 结算规则

Run 成功要求:

  • Runtime 正常结束。
  • 必填成果存在。
  • 必填评估器成功。
  • 未违反硬约束。
  • 没有结果未知的副作用。

Experiment 结算:

情况 状态
至少一个成功 Run,所需 Run 已结算 completed
所有 Run 失败或无有效结果 failed
提前停止且已有可比较结果 stopped_with_results
提前停止且无可比较结果 cancelled
指标冲突或证据不足 inconclusive

最佳结果展示 Variant、参数、成功和失败数量、重复运行原始值与聚合、目标分项、硬约束、 证据和限制。只有一个成功 Run 时使用“当前最高分候选”,不使用“稳定最佳”。

12. 重复与复现

  • 每个 Variant 默认重复 1 次,波动敏感实验建议至少 3 次。
  • 重复 Run 使用相同变量和独立运行会话。
  • Runtime 支持种子时保存种子,否则明确标注不可完全复现。
  • 聚合展示原始值、中位数或均值,并说明计算方式。
  • 样本不足时不展示统计显著性结论。

13. 会话监督接入

Supervisor 可以检查偏离协议、遗漏必填输出、证据不足和候选间协议不一致; 确定性预算或权限违规可以暂停 Run,模型判断默认只警告或请求人工复核。

Supervisor 不能:

  • 根据其他候选结果提示当前 Run。
  • 临时修改某个候选协议。
  • 自动提高预算或批准工具。

14. 信息架构

实验工作台页签:

  1. 设计:问题、协议、变量、指标和预算。
  2. 运行:总体进度、Run 表和状态。
  3. 比较:指标表、图表、差异和 Pareto 候选。
  4. 证据:按结论、指标和 Run 查看证据。
  5. 结论:总结、限制和后续操作。

Run 详情展示参数、协议版本、时间线、消息、任务、成果、监督记录、指标、评估理由、 上下文和记忆快照、Token、耗时与错误。

15. 后续操作

允许:

  • 用候选参数创建普通任务。
  • 创建自动化计划草稿。
  • 保存实验模板。
  • 创建记忆候选。
  • 追加确认 Run。
  • 导出脱敏结果摘要。

不得自动启用新计划、覆盖现有计划、确认长期记忆、应用工作区 Patch 或扩大权限。

16. 数据模型建议

type Experiment = {
  id: string
  projectId?: string
  name: string
  question: string
  status:
    | 'draft'
    | 'queued'
    | 'running'
    | 'paused'
    | 'completed'
    | 'failed'
    | 'stopped_with_results'
    | 'inconclusive'
    | 'cancelled'
  protocolVersion: number
  totalRuns: number
  successfulRuns: number
  failedRuns: number
}

type ExperimentRun = {
  id: string
  experimentId: string
  variantId: string
  repetition: number
  automationRunId: string
  variables: Record<string, JsonValue>
  status: string
  goalStatus: 'met' | 'not_met' | 'inconclusive'
}

建议表:

  • experiments
  • experiment_protocol_versions
  • experiment_variants
  • experiment_runs
  • experiment_run_metrics
  • experiment_evidence
  • experiment_conclusions

17. 安全与隐私

  1. 协议、案例、输出和评估输入都视为不可信数据。
  2. Renderer 不能指定其他项目的 Run 或记忆分区。
  3. 每个 Run 使用唯一 Runtime conversation ID,并在结束后释放。
  4. 实验默认不能写用户工作区。
  5. 模型对比不能传递其他供应商的凭据或隐藏配置。
  6. 导出默认不包含完整私人案例、提示、消息或文件内容。
  7. 取消实验传播到排队和运行任务,但不伪装撤销已有副作用。
  8. 实验删除不能误删已由用户独立保存的成果或计划候选。

18. 实施顺序

  1. 建立 Experiment、Variant、Run 聚合实体和只读 Ask Run。
  2. 实现有限组合、预算估算、并发调度和运行监控。
  3. 增加确定性指标、失败结算和结果比较。
  4. 增加模型 Rubric、人工评分和证据工作台。
  5. 增加重复运行和回放评估。
  6. 最后评估独立工作树中的 Execute 实验。

19. 验收标准

  • 保存前显示变量组合、重复后 Run 总数和最大预算。
  • 每个 Run 的会话、变量、记忆、任务和成果相互隔离。
  • 默认实验无法写用户工作区。
  • 最大并发和全局后台预算同时生效。
  • 各 Variant 使用相同单 Run 预算。
  • 失败、取消、预算耗尽和不完整 Run 不参与最佳选择。
  • 全部 Run 失败时实验不报告成功或最佳结果。
  • 模型 Rubric 显示版本、模型、分项和证据。
  • 多目标冲突时可以展示多个 Pareto 候选。
  • 用户可从候选创建草稿,但不会自动部署或确认记忆。
  • 结论能追溯到具体 Run、指标、成果和证据。