409 lines
12 KiB
Markdown
409 lines
12 KiB
Markdown
# 持续学习与评估门 PRD
|
|
|
|
## 文档信息
|
|
|
|
| 项目 | 内容 |
|
|
| --- | --- |
|
|
| 状态 | 设计中,远期能力 |
|
|
| 版本 | 0.1 |
|
|
| 日期 | 2026-08-13 |
|
|
| 依赖 | [自动化平台总体设计](./automation-platform-architecture.md)、[并行实验 PRD](./parallel-experiments-prd.md)、[分区记忆 PRD](./partitioned-memory-prd.md) |
|
|
|
|
## 1. 背景
|
|
|
|
智能心跳已经可以生成摘要、后续任务和记忆候选,但这还不是完整学习:
|
|
|
|
- 候选是否改善未来行为没有评估。
|
|
- 一条反思是否会被检索和使用并不确定。
|
|
- 没有 Baseline、回放集、Shadow、晋升和回滚。
|
|
- 没有持续监控候选生效后的收益与退化。
|
|
- 如果允许系统直接修改 Prompt、Skill 或规则,可能发生静默劣化。
|
|
|
|
持续学习必须建立为可观察、可评估、可批准、可回滚的闭环,而不是“让模型自动改自己”。
|
|
|
|
## 2. 产品定义
|
|
|
|
```text
|
|
Observe
|
|
→ Propose candidate
|
|
→ Validate structure and safety
|
|
→ Evaluate against baseline
|
|
→ Shadow
|
|
→ Promote with approval
|
|
→ Monitor
|
|
→ Keep, revise, rollback or archive
|
|
```
|
|
|
|
学习产物只有在改变未来行为后才算生效;只保存一条 Reflection 仍属于记忆候选。
|
|
|
|
## 3. 已确认的产品决策
|
|
|
|
1. 评估门必须先于任何自动应用能力上线。
|
|
2. 新候选默认 `candidate`,通过离线评估后先进入 `shadow`。
|
|
3. 第一阶段只允许人工晋升。
|
|
4. 每次晋升必须记录 Baseline、候选、评估结果、作用域和回滚版本。
|
|
5. 学习不能修改安全边界、工具审批、目录权限、沙箱或 Electron 配置。
|
|
6. 失败案例和用户负反馈只作为评估数据,不直接成为新规则。
|
|
7. 回放案例必须脱敏、版本化,并得到用户明确选择或来自仓库公开样例。
|
|
8. 模型评估不是唯一真值,优先使用确定性验收和人工反馈。
|
|
9. 生效后的候选继续监控,发生退化可自动停用,但不能自动换上另一个候选。
|
|
10. 没有足够证据时保持 `inconclusive`,不强行晋升。
|
|
|
|
## 4. 学习产物
|
|
|
|
首期只支持:
|
|
|
|
| 产物 | 作用 | 是否可自动应用 |
|
|
| --- | --- | --- |
|
|
| Memory | 改善相关上下文召回 | 否,人工确认 |
|
|
| Automation Template | 改善目标、步骤、提示或预算默认值 | 否,创建新草稿 |
|
|
| Prompt Variant | 用于实验比较 | 否 |
|
|
| Rubric | 改善评估标准 | 否 |
|
|
| Retrieval Preference | 调整特定 Automation 的检索配置候选 | 否 |
|
|
|
|
后续评估:
|
|
|
|
| 产物 | 风险 |
|
|
| --- | --- |
|
|
| Skill | 可能扩大行为和工具使用 |
|
|
| Procedure | 可能长期影响多个任务 |
|
|
| Non-security Rule | 可能阻断或改变行为 |
|
|
| Agent Preference | 可能产生难以解释的个性漂移 |
|
|
|
|
永久禁止自动学习修改:
|
|
|
|
- 工具权限和审批策略。
|
|
- 工作区根目录和文件访问范围。
|
|
- 网络、远程消息和电脑控制权限。
|
|
- Electron 安全设置。
|
|
- API Key、凭据和 Provider Endpoint。
|
|
- 删除、支付、发布和生产操作政策。
|
|
|
|
## 5. 候选来源
|
|
|
|
- 用户对回答、任务或 Supervisor 意见的显式反馈。
|
|
- 智能心跳提出的重复模式。
|
|
- 自动化 Run 的成功与失败比较。
|
|
- 并行实验结论。
|
|
- 回放评估发现的稳定差异。
|
|
- 用户手动创建。
|
|
|
|
候选必须包含:
|
|
|
|
- 作用域。
|
|
- 产物类型。
|
|
- 来源证据。
|
|
- 预期改善的指标。
|
|
- 可能影响的行为。
|
|
- 风险级别。
|
|
- Baseline 引用。
|
|
- 建议的评估集。
|
|
|
|
模型不能仅凭一条成功案例宣称“已学习”。
|
|
|
|
## 6. 状态机
|
|
|
|
```text
|
|
candidate
|
|
→ evaluating
|
|
→ rejected
|
|
→ inconclusive
|
|
→ shadow
|
|
→ awaiting_approval
|
|
→ promoted
|
|
→ paused
|
|
→ rolled_back
|
|
→ archived
|
|
```
|
|
|
|
| 状态 | 含义 |
|
|
| --- | --- |
|
|
| `candidate` | 尚未评估 |
|
|
| `evaluating` | 正在运行离线评估 |
|
|
| `rejected` | 明确退化、安全不合格或无效 |
|
|
| `inconclusive` | 证据不足 |
|
|
| `shadow` | 计算候选决策但不影响真实行为 |
|
|
| `awaiting_approval` | 达到晋升标准,等待用户 |
|
|
| `promoted` | 已作为指定作用域的当前版本 |
|
|
| `paused` | 暂停影响,保留版本 |
|
|
| `rolled_back` | 已恢复前一版本 |
|
|
| `archived` | 不再评估和使用 |
|
|
|
|
## 7. 评估案例
|
|
|
|
### 7.1 案例来源
|
|
|
|
优先级:
|
|
|
|
1. 仓库内公开、无隐私的固定评测样例。
|
|
2. 用户手动创建的案例和期望。
|
|
3. 用户明确选择并脱敏的历史会话或任务。
|
|
4. 实验中产生、经用户批准保留的案例。
|
|
|
|
禁止默认采样所有私人会话用于学习。
|
|
|
|
### 7.2 案例结构
|
|
|
|
```ts
|
|
type EvaluationCase = {
|
|
id: string
|
|
suiteId: string
|
|
input: EvaluationInput
|
|
assertions: EvaluationAssertion[]
|
|
forbiddenBehaviors: EvaluationAssertion[]
|
|
source: EvaluationCaseSource
|
|
sensitivity: 'public' | 'private_local'
|
|
version: number
|
|
}
|
|
```
|
|
|
|
断言可以是:
|
|
|
|
- 输出符合 Schema。
|
|
- 包含或不包含确定文本模式。
|
|
- 引用来自允许知识库。
|
|
- 不调用工具。
|
|
- 任务状态和成果存在。
|
|
- 测试命令通过。
|
|
- 人工评分。
|
|
- 模型 Rubric 分项。
|
|
|
|
### 7.3 冻结
|
|
|
|
一次评估冻结:
|
|
|
|
- 案例版本。
|
|
- Baseline 版本。
|
|
- Candidate 版本。
|
|
- Runtime 和模型。
|
|
- 知识、记忆和工作区快照。
|
|
- 预算。
|
|
- 评估器版本。
|
|
|
|
设置变化不改变已开始的评估。
|
|
|
|
## 8. 评估门
|
|
|
|
### 8.1 判定
|
|
|
|
```ts
|
|
type GateVerdict = {
|
|
decision: 'reject' | 'inconclusive' | 'shadow'
|
|
baselineMetrics: MetricValue[]
|
|
candidateMetrics: MetricValue[]
|
|
regressions: Regression[]
|
|
caseIds: string[]
|
|
evaluatorVersions: string[]
|
|
notes: string
|
|
}
|
|
```
|
|
|
|
最小规则:
|
|
|
|
1. 任何安全、权限或硬约束退化立即 Reject。
|
|
2. 确定性质量指标不能低于配置阈值。
|
|
3. 成本和延迟退化必须在允许范围。
|
|
4. 开放质量指标至少非退化,或收益足以覆盖明确成本。
|
|
5. 案例数或评估器不足时 Inconclusive。
|
|
6. 通过离线门只进入 Shadow,不直接 Promote。
|
|
|
|
### 8.2 Baseline
|
|
|
|
Baseline 是当前已生效版本或明确的无候选行为。不能用另一个同时变化的实验配置充当 Baseline。
|
|
|
|
### 8.3 多模型评估
|
|
|
|
模型 Rubric 可使用与被评候选不同的模型,但必须:
|
|
|
|
- 固定版本和提示。
|
|
- 隐藏候选身份。
|
|
- 随机化顺序。
|
|
- 保存分项和证据。
|
|
- 在关键晋升中结合确定性或人工评估。
|
|
|
|
## 9. Shadow
|
|
|
|
Shadow 模式:
|
|
|
|
- 接收与当前真实行为相同的有界输入。
|
|
- 计算候选会做出的选择或输出。
|
|
- 不调用有副作用工具。
|
|
- 不替换用户看到的结果。
|
|
- 不写入长期记忆。
|
|
- 保存与实际结果可比较的指标。
|
|
|
|
对于成本较高的候选:
|
|
|
|
- 只对抽样的已授权案例运行。
|
|
- 用户可设置月度调用上限。
|
|
- 系统繁忙时延后。
|
|
|
|
Shadow 达到配置的最小观察数且无安全退化后进入 `awaiting_approval`。
|
|
|
|
## 10. 晋升
|
|
|
|
晋升对话框必须显示:
|
|
|
|
- 候选将改变什么。
|
|
- 作用域和受影响计划。
|
|
- 来源。
|
|
- Baseline 与 Candidate 指标。
|
|
- 失败案例和不确定性。
|
|
- 额外成本。
|
|
- 回滚版本。
|
|
|
|
用户可以:
|
|
|
|
- 晋升。
|
|
- 继续 Shadow。
|
|
- 拒绝。
|
|
- 缩小作用域后重新评估。
|
|
|
|
晋升采用原子版本切换。不能在一半对象上成功、一半失败。
|
|
|
|
## 11. 上线后监控
|
|
|
|
监控:
|
|
|
|
- 使用次数。
|
|
- 成功、失败和无结论。
|
|
- 确定性指标。
|
|
- 用户采纳、撤销和负反馈。
|
|
- Token、耗时和工具调用变化。
|
|
- Supervisor 警告变化。
|
|
|
|
自动暂停条件:
|
|
|
|
- 安全或权限硬约束失败。
|
|
- 确定性错误率超过阈值。
|
|
- 连续崩溃或格式失败。
|
|
- 成本超过批准上限。
|
|
|
|
自动暂停只恢复到上一已批准版本,并通知用户。系统不能自行选择新候选替代。
|
|
|
|
## 12. 回滚
|
|
|
|
- 每个 Promoted 产物有不可变版本。
|
|
- 保存前一版本和作用域绑定。
|
|
- 一键回滚使用原子切换。
|
|
- 回滚不删除失败版本,保留指标和原因。
|
|
- 当前有运行使用该版本时,只影响下一次 Run;紧急安全暂停可取消尚未开始的 Run。
|
|
- 被回滚候选再次晋升必须重新评估。
|
|
|
|
## 13. 衰减与归档
|
|
|
|
- 长期未使用的候选和 Shadow 可归档。
|
|
- Promoted 产物不因时间静默删除。
|
|
- Memory 类型遵守分区记忆的衰减规则。
|
|
- 评估案例变化后,相关候选标记为“评估过期”。
|
|
- 模型或 Runtime 大版本变化时,可要求重新回放。
|
|
- 归档保留不含私人正文的指标和版本元数据。
|
|
|
|
## 14. 信息架构
|
|
|
|
建议在自动化中心增加“学习”:
|
|
|
|
1. **候选**:来源、作用域、预期收益和风险。
|
|
2. **评估中**:进度、案例和预算。
|
|
3. **Shadow**:观察数、差异和成本。
|
|
4. **待批准**:晋升摘要。
|
|
5. **已生效**:当前版本、使用量和健康状态。
|
|
6. **历史**:拒绝、回滚和归档。
|
|
|
|
候选详情页签:
|
|
|
|
- 概览。
|
|
- 变更 Diff。
|
|
- 评估案例。
|
|
- 指标和失败。
|
|
- Shadow。
|
|
- 版本与回滚。
|
|
|
|
## 15. 数据模型建议
|
|
|
|
```ts
|
|
type LearningArtifact = {
|
|
id: string
|
|
scopeKind: 'global' | 'project' | 'automation' | 'agent'
|
|
scopeId?: string
|
|
kind:
|
|
| 'memory'
|
|
| 'automation_template'
|
|
| 'prompt_variant'
|
|
| 'rubric'
|
|
| 'retrieval_preference'
|
|
status:
|
|
| 'candidate'
|
|
| 'evaluating'
|
|
| 'rejected'
|
|
| 'inconclusive'
|
|
| 'shadow'
|
|
| 'awaiting_approval'
|
|
| 'promoted'
|
|
| 'paused'
|
|
| 'rolled_back'
|
|
| 'archived'
|
|
payload: JsonValue
|
|
sourceRefs: LearningSourceRef[]
|
|
baselineVersionId?: string
|
|
promotedVersionId?: string
|
|
createdAt: string
|
|
updatedAt: string
|
|
}
|
|
```
|
|
|
|
建议表:
|
|
|
|
- `learning_artifacts`
|
|
- `learning_artifact_versions`
|
|
- `evaluation_suites`
|
|
- `evaluation_cases`
|
|
- `evaluation_runs`
|
|
- `evaluation_results`
|
|
- `shadow_observations`
|
|
- `promotion_events`
|
|
- `rollback_events`
|
|
|
|
## 16. 安全与隐私
|
|
|
|
1. Apply 层拒绝没有 Gate Verdict 的候选。
|
|
2. 产物类型和目标作用域使用代码白名单。
|
|
3. 安全与权限配置不在可学习目标白名单中。
|
|
4. 私人评估案例只在本地使用,不导出或发送到未授权 Provider。
|
|
5. Shadow 不调用有副作用工具。
|
|
6. Candidate 内容和评估输出都视为不可信数据。
|
|
7. Renderer 不能直接设置 Promoted 状态,Main 验证评估与审批。
|
|
8. 删除私人评估案例后清理派生缓存和 Embedding。
|
|
9. 日志不记录完整案例、Prompt、回答、文件或凭据。
|
|
10. 自动暂停采用确定性条件,不依赖模型自由判断。
|
|
|
|
## 17. 实施顺序
|
|
|
|
严格顺序:
|
|
|
|
1. 建立版本化评估案例和确定性断言。
|
|
2. 复用并行实验运行 Baseline 与 Candidate。
|
|
3. 实现 Gate Verdict,只有 Reject、Inconclusive 和 Shadow。
|
|
4. 实现 Shadow,但不允许 Apply。
|
|
5. 实现人工晋升和原子回滚。
|
|
6. 实现上线监控和确定性自动暂停。
|
|
7. 首先开放 Memory 和 Automation Template。
|
|
8. 经过长期验证后再评估 Skill、Procedure 和非安全规则。
|
|
|
|
不能先做自动改 Prompt,再补评估门。
|
|
|
|
## 18. 验收标准
|
|
|
|
- [ ] 没有评估结果的候选无法晋升。
|
|
- [ ] 安全、权限或硬约束退化必定 Reject。
|
|
- [ ] 评估不足时显示 Inconclusive,不强行选优。
|
|
- [ ] Baseline、Candidate、案例、Runtime 和评估器都被冻结和版本化。
|
|
- [ ] Shadow 不影响用户结果、不调用副作用工具、不写长期记忆。
|
|
- [ ] 晋升前展示收益、退化、成本、作用域和回滚版本。
|
|
- [ ] 第一阶段只有用户可以批准晋升。
|
|
- [ ] 晋升和回滚采用原子版本切换。
|
|
- [ ] 生效后出现确定性严重退化时自动暂停并恢复上一批准版本。
|
|
- [ ] 系统不会自动选择另一个候选替代。
|
|
- [ ] 私人会话不会默认进入评估集。
|
|
- [ ] 安全策略、权限、目录、凭据和 Electron 配置不属于可学习产物。
|