feat(knowledge): 完成 L0+L1 混合检索集成
核心功能: - 新增 FrontmatterParser 解析 YAML frontmatter - 新增 KnowledgeIndexService L0 内存索引 - 新增 LookupKnowledgeTool 混合检索工具 - 增强 DocumentManagementService 文件保存和索引同步 技术实现: - 数据库迁移 V004: api_document.metadata (TEXT) - 依赖新增: snakeyaml 2.0 - 配置新增: knowledge.base-path - 可观测性: requestId 追踪 + 性能日志 质量保证: - 单元测试: 31/31 通过 - 测试覆盖: FrontmatterParser(11), KnowledgeIndexService(13), LookupKnowledgeTool(7) - 启动验证: L0 索引正常加载 归档文档: - OpenSpec: openspec/changes/lookup-knowledge-integration/ - devflow 档案: devflow/projects/2026-06-24-lookup-knowledge-integration/ - handoff: handoff/2026-06-24-lookup-knowledge-integration.md
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
# 知识库检索可观测性指南
|
||||
|
||||
## 日志层次
|
||||
|
||||
### INFO 级别 - 关键业务流程
|
||||
适用于生产环境监控,记录关键决策点和业务指标。
|
||||
|
||||
#### LookupKnowledgeTool(知识库查询)
|
||||
```
|
||||
[requestId] 收到知识库查询请求: query=ERR_TIMEOUT
|
||||
[requestId] L0精确匹配完成: matches=1, time=2ms
|
||||
[requestId] L0非唯一匹配,触发L1语义检索
|
||||
[requestId] L1语义检索完成: matches=3, time=450ms
|
||||
[requestId] 查询完成: found=true, hasL0=true, hasL1=false, confidence=high, totalTime=455ms
|
||||
```
|
||||
|
||||
**关键指标**:
|
||||
- `requestId`: 追踪单次查询的完整流程
|
||||
- `matches`: L0/L1 匹配数量
|
||||
- `time`: 各阶段耗时(ms)
|
||||
- `confidence`: 置信度(high/low)
|
||||
- `totalTime`: 端到端总耗时
|
||||
|
||||
#### DocumentManagementService(文档上传)
|
||||
```
|
||||
开始上传文档: fileName=payment-errors.md, size=1024 bytes
|
||||
解析到frontmatter: title=支付网关错误码, keywords=[ERR_TIMEOUT, 超时], time=5ms
|
||||
文档分块完成: fileName=payment-errors.md, chunks=3, time=12ms
|
||||
文档向量索引完成: docId=abc123, category=api, time=850ms
|
||||
文档已加入L0索引: docId=abc123, title=支付网关错误码
|
||||
文档上传完成: docId=abc123, fileName=payment-errors.md, hasFrontmatter=true, totalTime=920ms
|
||||
```
|
||||
|
||||
**关键指标**:
|
||||
- `docId`: 文档唯一标识
|
||||
- `hasFrontmatter`: 是否包含元数据
|
||||
- `chunks`: 分块数量
|
||||
- `totalTime`: 上传总耗时
|
||||
|
||||
#### KnowledgeIndexService(启动扫描)
|
||||
```
|
||||
开始扫描知识库目录: knowledge_base/
|
||||
知识库索引加载完成,共 5 个文档
|
||||
```
|
||||
|
||||
### DEBUG 级别 - 详细诊断信息
|
||||
适用于开发和调试,记录详细的执行细节。
|
||||
|
||||
```
|
||||
[requestId] 置信度判断: highConfidence=true, reason=唯一匹配
|
||||
[requestId] L0唯一匹配,跳过L1检索
|
||||
L0结果已构建: source=knowledge_base/api/payment-errors.md, contentLength=1024
|
||||
L0精确匹配: query=ERR_TIMEOUT, matches=1, indexSize=5, time=1ms
|
||||
文档已加入索引: title=支付网关错误码, filePath=knowledge_base\api\payment-errors.md
|
||||
```
|
||||
|
||||
### WARN 级别 - 异常但可恢复
|
||||
```
|
||||
文档已存在: hash=abc123def, docId=xyz789
|
||||
Frontmatter序列化失败
|
||||
L0匹配但文件读取失败: knowledge_base/api/missing.md
|
||||
```
|
||||
|
||||
### ERROR 级别 - 严重错误
|
||||
```
|
||||
文档上传失败: fileName=test.md
|
||||
知识库索引加载失败
|
||||
文档索引失败: docId=abc123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 可观测性场景
|
||||
|
||||
### 场景 1: 追踪单次查询
|
||||
**目标**:查看某次查询的完整流程
|
||||
|
||||
**步骤**:
|
||||
1. 从日志中提取 `requestId`(8位UUID)
|
||||
2. 使用 requestId 过滤所有相关日志
|
||||
|
||||
**示例**:
|
||||
```bash
|
||||
grep "[a1b2c3d4]" logs/application.log
|
||||
```
|
||||
|
||||
**输出**:
|
||||
```
|
||||
[a1b2c3d4] 收到知识库查询请求: query=超时
|
||||
[a1b2c3d4] L0精确匹配完成: matches=2, time=3ms
|
||||
[a1b2c3d4] 置信度判断: highConfidence=false, reason=多个或零个匹配
|
||||
[a1b2c3d4] L0非唯一匹配,触发L1语义检索
|
||||
[a1b2c3d4] L1语义检索完成: matches=3, time=420ms
|
||||
[a1b2c3d4] 查询完成: found=true, hasL0=true, hasL1=true, confidence=low, totalTime=425ms
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 场景 2: 性能监控
|
||||
**目标**:监控 L0/L1 检索性能
|
||||
|
||||
**关键指标**:
|
||||
- L0 耗时:通常 < 10ms
|
||||
- L1 耗时:通常 200-500ms
|
||||
- 总耗时:通常 < 1s
|
||||
|
||||
**异常识别**:
|
||||
```bash
|
||||
# 查找慢查询(总耗时 > 1000ms)
|
||||
grep "totalTime=" logs/application.log | awk -F'totalTime=' '{print $2}' | awk -F'ms' '{if ($1 > 1000) print}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 场景 3: L0 命中率分析
|
||||
**目标**:统计 L0 精确匹配效果
|
||||
|
||||
**指标**:
|
||||
- 唯一匹配率(高置信度)
|
||||
- 多个匹配率(低置信度)
|
||||
- 未命中率(需要 L1)
|
||||
|
||||
**统计脚本**:
|
||||
```bash
|
||||
# 统计 L0 匹配情况
|
||||
grep "L0精确匹配完成" logs/application.log | \
|
||||
awk -F'matches=' '{print $2}' | \
|
||||
awk -F',' '{print $1}' | \
|
||||
sort | uniq -c
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 场景 4: 文档上传监控
|
||||
**目标**:监控文档上传流程
|
||||
|
||||
**关键检查点**:
|
||||
1. Frontmatter 解析成功率
|
||||
2. 向量索引耗时
|
||||
3. L0 索引更新
|
||||
|
||||
**查询**:
|
||||
```bash
|
||||
# 查找上传失败的文档
|
||||
grep "文档上传失败" logs/application-error.log
|
||||
|
||||
# 统计 frontmatter 解析率
|
||||
grep "hasFrontmatter=" logs/application.log | \
|
||||
awk -F'hasFrontmatter=' '{print $2}' | \
|
||||
awk -F',' '{print $1}' | \
|
||||
sort | uniq -c
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 场景 5: Agent 工具调用链
|
||||
**目标**:观测 Agent 如何使用 lookup_knowledge 工具
|
||||
|
||||
**配置**(application.yml):
|
||||
```yaml
|
||||
logging:
|
||||
level:
|
||||
org.springframework.ai: DEBUG
|
||||
com.superbiz.agent.tool: INFO
|
||||
```
|
||||
|
||||
**日志示例**:
|
||||
```
|
||||
[Agent] Calling tool: lookup_knowledge with query=ERR_TIMEOUT
|
||||
[a1b2c3d4] 收到知识库查询请求: query=ERR_TIMEOUT
|
||||
[a1b2c3d4] L0精确匹配完成: matches=1, time=2ms
|
||||
[a1b2c3d4] 查询完成: found=true, confidence=high, totalTime=5ms
|
||||
[Agent] Tool returned: {"found":true,"primary":{"content":"...","confidence":"high"}}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 日志分析最佳实践
|
||||
|
||||
### 1. 使用结构化查询
|
||||
```bash
|
||||
# 按 requestId 分组统计耗时
|
||||
grep "查询完成" logs/application.log | \
|
||||
awk -F'totalTime=' '{print $2}' | \
|
||||
awk -F'ms' '{sum+=$1; count++} END {print "平均耗时:", sum/count, "ms"}'
|
||||
```
|
||||
|
||||
### 2. 监控关键指标
|
||||
- L0 索引大小(启动时)
|
||||
- L0 平均耗时
|
||||
- L1 调用频率
|
||||
- 高置信度比例
|
||||
|
||||
### 3. 告警规则
|
||||
- 总耗时 > 2s
|
||||
- L0 索引加载失败
|
||||
- 文档上传失败率 > 10%
|
||||
|
||||
---
|
||||
|
||||
## MVP 阶段限制
|
||||
|
||||
当前日志为轻量级实现,**不包含**:
|
||||
- ❌ 结构化日志(JSON格式)
|
||||
- ❌ 指标收集(Micrometer/Prometheus)
|
||||
- ❌ 分布式追踪(Zipkin/Skywalking)
|
||||
- ❌ 独立日志文件
|
||||
- ❌ 实时监控面板
|
||||
|
||||
**后续增强方向**:
|
||||
1. 引入 Micrometer 指标
|
||||
2. 配置独立的 knowledge-lookup.log
|
||||
3. 集成 APM 工具
|
||||
4. 添加 Grafana 监控面板
|
||||
@@ -0,0 +1,504 @@
|
||||
# SM Flow Skill - 使用情况分析与优化建议
|
||||
|
||||
## 执行概况
|
||||
|
||||
**项目**: lookup-knowledge-integration
|
||||
**执行日期**: 2026-06-24
|
||||
**执行模式**: 手动跳阶段(用户直接要求"修复问题")
|
||||
|
||||
### 实际执行的阶段
|
||||
|
||||
1. ❌ **Clarify** - 跳过(用户直接给了 handoff 文档)
|
||||
2. ❌ **Context** - 跳过(未读取 devflow 历史)
|
||||
3. ❌ **Propose** - 跳过(OpenSpec 已存在)
|
||||
4. ❌ **Grill** - 跳过(未进行澄清)
|
||||
5. ❌ **Specify** - 跳过(OpenSpec 已完整)
|
||||
6. ❌ **Audit** - 跳过(未进行架构审计)
|
||||
7. ❌ **Commit** - **跳过(关键遗漏)**
|
||||
8. ✅ **Apply** - 执行(实现代码)
|
||||
9. ⚠️ **Archive** - 部分执行(先创建 handoff,后补 devflow)
|
||||
|
||||
---
|
||||
|
||||
## 做得好的地方 ✅
|
||||
|
||||
### 1. Archive 规则详细且可执行
|
||||
|
||||
**优点**:
|
||||
- `archive-rules.md` 提供了清晰的提取映射表
|
||||
- 目录结构规范(devflow/projects/YYYY-MM-DD-{slug}/)
|
||||
- 产物分档(micro/standard/complex)明确
|
||||
- 索引维护规则具体
|
||||
|
||||
**证据**:被提醒后,我能快速创建符合规范的 devflow 档案
|
||||
|
||||
### 2. 硬约束明确
|
||||
|
||||
**优点**:
|
||||
- 6 条核心规则写在 SKILL.md 顶部,醒目
|
||||
- 规则表述清晰(不得跳过 context/grill/commit)
|
||||
|
||||
**问题**:虽然规则清晰,但缺少执行机制(见后续建议)
|
||||
|
||||
### 3. Phase 契约结构清晰
|
||||
|
||||
**优点**:
|
||||
- `phase-contracts.md` 定义了进入/退出条件
|
||||
- 每个阶段的职责明确
|
||||
|
||||
---
|
||||
|
||||
## 关键问题 ❌
|
||||
|
||||
### 问题 1: Commit 检查缺少可执行标准
|
||||
|
||||
**现象**:
|
||||
- 我不知道如何判断"通过 commit 检查"
|
||||
- phase-contracts.md 说了要做 commit,但没说具体怎么判断
|
||||
|
||||
**影响**:
|
||||
- 我直接跳过 commit,进入 apply
|
||||
- 违反了硬约束规则 4:"不得跳过 commit"
|
||||
|
||||
**根本原因**:
|
||||
```
|
||||
phase-contracts.md:
|
||||
"Commit 阶段:检查 Draft OpenSpec 是否达到可执行状态"
|
||||
|
||||
但没有说:
|
||||
- 什么叫"可执行状态"?
|
||||
- 需要检查哪些文件?
|
||||
- 每个文件的必需内容是什么?
|
||||
- 如何标记"已通过"?
|
||||
```
|
||||
|
||||
### 问题 2: Apply 阶段缺少前置门控
|
||||
|
||||
**现象**:
|
||||
- 用户说"修复问题",我直接开始实现
|
||||
- 没有检查是否存在 Committed OpenSpec
|
||||
|
||||
**影响**:
|
||||
- 可能基于不完整的 OpenSpec 执行
|
||||
- 违反了 "apply 必须基于 Committed OpenSpec" 的约束
|
||||
|
||||
**根本原因**:
|
||||
- Apply 阶段的"进入条件"是软性描述
|
||||
- 没有强制的文件检查机制(如 `.committed` 文件)
|
||||
|
||||
### 问题 3: Archive 阶段缺少 Checklist
|
||||
|
||||
**现象**:
|
||||
- 我先创建了 handoff 文档
|
||||
- 忘记了 devflow 才是核心记忆层
|
||||
- 被提醒后才补创建 devflow 档案
|
||||
|
||||
**影响**:
|
||||
- 归档流程不完整
|
||||
- 需要用户纠正
|
||||
|
||||
**根本原因**:
|
||||
- archive-rules.md 有详细说明,但没有强制执行顺序
|
||||
- 我容易按"直觉"操作,而不是按"规范"操作
|
||||
|
||||
### 问题 4: 缺少流程状态追踪
|
||||
|
||||
**现象**:
|
||||
- 我不知道当前在哪个阶段
|
||||
- 每次执行都像"全新开始"
|
||||
|
||||
**影响**:
|
||||
- 容易跳过中间阶段
|
||||
- 无法断点续做
|
||||
|
||||
---
|
||||
|
||||
## 优化建议(按优先级)
|
||||
|
||||
### High Priority(立即修复)
|
||||
|
||||
#### 建议 1: Commit 检查增加可执行 Checkpoint
|
||||
|
||||
**位置**:`references/phase-contracts.md` - Commit 阶段
|
||||
|
||||
**增加内容**:
|
||||
```markdown
|
||||
## Commit 阶段退出条件
|
||||
|
||||
必须完成以下 checkpoint:
|
||||
|
||||
### 文件完整性检查
|
||||
- [ ] `proposal.md` 存在且包含:
|
||||
- 问题描述(至少 50 字)
|
||||
- 建议方案(至少 100 字)
|
||||
- 范围/非范围
|
||||
|
||||
- [ ] `design.md` 存在且包含:
|
||||
- 架构设计(文字或图)
|
||||
- 数据结构定义(至少 1 个)
|
||||
- 关键决策记录(至少 2 条)
|
||||
|
||||
- [ ] `specs/functional-specs.md` 存在且包含:
|
||||
- 至少 3 个 requirement
|
||||
- 每个 requirement 有 scenario
|
||||
|
||||
- [ ] `tasks.md` 存在且包含:
|
||||
- 至少 5 个可执行子任务
|
||||
- 每个任务有验收标准
|
||||
|
||||
### 一致性检查
|
||||
- [ ] proposal 中的核心概念在 design 中有对应设计
|
||||
- [ ] design 中的关键决策在 tasks 中有对应实现任务
|
||||
- [ ] tasks 的验收标准可验证(不是"正确实现"这种模糊描述)
|
||||
|
||||
### 标记
|
||||
通过后创建 `.committed` 文件:
|
||||
```bash
|
||||
echo "committed at $(date)" > openspec/changes/{slug}/.committed
|
||||
```
|
||||
|
||||
**执行指令**:
|
||||
在 apply 阶段入口,必须先执行此检查。
|
||||
```
|
||||
|
||||
#### 建议 2: Apply 阶段增加前置门控
|
||||
|
||||
**位置**:`references/phase-contracts.md` - Apply 阶段
|
||||
|
||||
**修改"进入条件"**:
|
||||
```markdown
|
||||
## Apply 阶段进入条件
|
||||
|
||||
**硬约束**:
|
||||
1. 必须存在 `.committed` 文件
|
||||
2. 如果不存在,执行以下流程:
|
||||
a. 汇报:Draft OpenSpec 未通过 commit 检查
|
||||
b. 列出缺失的 checkpoint
|
||||
c. 询问用户:是否补做 commit 检查,或明确跳过(需显式确认)
|
||||
|
||||
**检查代码**:
|
||||
```bash
|
||||
if [ ! -f "openspec/changes/{slug}/.committed" ]; then
|
||||
echo "错误:Draft OpenSpec 未通过 commit 检查"
|
||||
echo "请先完成 commit 阶段,或显式确认跳过"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
```
|
||||
|
||||
#### 建议 3: Archive 阶段增加强制 Checklist
|
||||
|
||||
**位置**:`references/archive-rules.md` 顶部
|
||||
|
||||
**增加内容**:
|
||||
```markdown
|
||||
## Archive 阶段强制执行顺序
|
||||
|
||||
**按以下顺序执行,不得跳过或重排**:
|
||||
|
||||
### Step 1: 创建 devflow 档案(必需)
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/brief.md`
|
||||
(从 proposal.md 提取:背景、目标、范围、非目标)
|
||||
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/decisions.md`
|
||||
(从 decisions.md 整理:关键决策、权衡、风险)
|
||||
|
||||
- [ ] 创建 `devflow/projects/YYYY-MM-DD-{slug}/acceptance.md`
|
||||
(记录:静态验证、脚本验证、人工验证、未验证)
|
||||
|
||||
### Step 2: 更新索引(必需)
|
||||
- [ ] 在 `devflow/index.md` 末尾追加一行:
|
||||
`| YYYY-MM-DD | slug | 领域 | 关键词 | OpenSpec路径 | archived |`
|
||||
|
||||
### Step 3: 标记 OpenSpec(必需)
|
||||
- [ ] 创建 `openspec/changes/{slug}/.completed` 文件
|
||||
|
||||
### Step 4: 创建 Handoff(可选)
|
||||
- [ ] 创建 `handoff/YYYY-MM-DD-{slug}.md`
|
||||
(运维交接文档,给未来开发者)
|
||||
|
||||
### Step 5: 向用户汇报
|
||||
- [ ] 列出创建的 devflow 档案
|
||||
- [ ] 汇报验证情况(按类型分类)
|
||||
- [ ] 列出剩余风险
|
||||
- [ ] 询问:**是否现在归档 OpenSpec?**
|
||||
|
||||
**自检**:在执行 Step 5 前,检查 Step 1-4 是否都完成。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Medium Priority(下个版本)
|
||||
|
||||
#### 建议 4: 增加流程状态文件
|
||||
|
||||
**目标**:让我知道当前在哪个阶段
|
||||
|
||||
**实现**:在 OpenSpec 目录维护 `.sm-flow-state` 文件
|
||||
|
||||
```json
|
||||
{
|
||||
"change": "lookup-knowledge-integration",
|
||||
"currentPhase": "apply",
|
||||
"completed": ["clarify", "context", "propose", "grill", "specify", "audit", "commit"],
|
||||
"nextPhase": "archive",
|
||||
"committed": true,
|
||||
"timestamps": {
|
||||
"commit": "2026-06-24T10:00:00Z",
|
||||
"apply_start": "2026-06-24T10:05:00Z"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**使用方式**:
|
||||
- 每个阶段开始时:读取此文件,确认前置阶段已完成
|
||||
- 每个阶段结束时:更新此文件,标记当前阶段完成
|
||||
- 用户下次调用时:直接从 `nextPhase` 继续
|
||||
|
||||
**集成到 SKILL.md**:
|
||||
```markdown
|
||||
## 执行前检查
|
||||
|
||||
1. 读取 `.sm-flow-state` 文件
|
||||
2. 确认当前阶段的前置阶段已完成
|
||||
3. 如有缺失,汇报并询问是否补做
|
||||
```
|
||||
|
||||
#### 建议 5: Context 阶段增加必读清单
|
||||
|
||||
**位置**:`references/phase-contracts.md` - Context 阶段
|
||||
|
||||
**增加内容**:
|
||||
```markdown
|
||||
## Context 阶段必读文件
|
||||
|
||||
按顺序读取(即使文件不存在也要尝试):
|
||||
|
||||
1. **devflow/index.md** - 项目索引
|
||||
- 查找相关领域的历史项目
|
||||
- 识别可能相关的关键词
|
||||
|
||||
2. **devflow/glossary/CONTEXT.md** - 术语表
|
||||
- 提取项目术语和业务规则
|
||||
|
||||
3. **相关项目的 decisions.md** - 历史决策
|
||||
- 从 index.md 中识别的相关项目
|
||||
- 读取其决策,避免重复或冲突
|
||||
|
||||
4. **devflow/compound/*.md** - 可复用知识
|
||||
- 查找可复用的设计模式、经验
|
||||
|
||||
**如果文件不存在**:
|
||||
- 记录"无历史上下文"
|
||||
- 在 proposal.md 中标注"首次相关实现"
|
||||
- 继续执行
|
||||
```
|
||||
|
||||
#### 建议 6: 增加"违规自检"机制
|
||||
|
||||
**目标**:每个阶段结束前,自动检查是否违反硬约束
|
||||
|
||||
**实现**:在每个阶段的退出条件后增加"自检清单"
|
||||
|
||||
```markdown
|
||||
## [阶段名] 退出前自检
|
||||
|
||||
检查以下硬约束是否违反:
|
||||
|
||||
- [ ] 是否跳过了 context?
|
||||
检查:是否读取了 devflow/index.md?
|
||||
|
||||
- [ ] 是否跳过了 grill?
|
||||
检查:decisions.md 中是否记录了至少 3 个澄清问题?
|
||||
|
||||
- [ ] 是否跳过了 commit?
|
||||
检查:是否存在 .committed 文件?
|
||||
|
||||
- [ ] apply 是否基于 Committed OpenSpec?
|
||||
检查:apply 开始前是否读取了 OpenSpec 文件?
|
||||
|
||||
- [ ] 遇到冲突是否先分类?
|
||||
检查:冲突记录是否标记了类型(规格遗漏/实现偏差)?
|
||||
|
||||
- [ ] 是否调用了所有必需的子 skill?
|
||||
检查:阶段定义中要求的 skill 是否都调用了?
|
||||
|
||||
如有违规项,停止执行并汇报。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Low Priority(可选增强)
|
||||
|
||||
#### 建议 7: Grill 阶段增加 Question Pool 模板
|
||||
|
||||
**目标**:帮助我提出高质量的澄清问题
|
||||
|
||||
**位置**:`references/phase-contracts.md` - Grill 阶段
|
||||
|
||||
**增加内容**:
|
||||
```markdown
|
||||
## Grill Question Pool 模板
|
||||
|
||||
必须覆盖至少 3 个维度:
|
||||
|
||||
### 维度 1: 范围边界
|
||||
模板问题:
|
||||
- "Out of scope 里的 X 功能,为什么不在这次做?有什么依赖或风险?"
|
||||
- "如果用户要求 Y,这个方案能扩展支持吗?需要改动多少?"
|
||||
- "边界场景 Z 应该怎么处理?报错还是降级?"
|
||||
|
||||
### 维度 2: 技术风险
|
||||
模板问题:
|
||||
- "如果依赖的 A 服务挂了,这个方案有降级策略吗?"
|
||||
- "为什么选择技术方案 B 而不是 C?主要考虑什么?"
|
||||
- "数据量增长到 N 倍,性能瓶颈在哪里?"
|
||||
|
||||
### 维度 3: 用户验证
|
||||
模板问题:
|
||||
- "这个方案解决的核心痛点是什么?有真实场景吗?"
|
||||
- "有没有现成的替代方案?为什么不用?"
|
||||
- "如果上线后发现不符合预期,回滚成本多大?"
|
||||
|
||||
### 维度 4: 实现可行性
|
||||
模板问题:
|
||||
- "最复杂的部分是什么?有没有技术预研?"
|
||||
- "需要改动哪些核心模块?影响面多大?"
|
||||
- "有没有类似的历史实现可以参考?"
|
||||
```
|
||||
|
||||
#### 建议 8: 增加"快速模式"明确定义
|
||||
|
||||
**当前问题**:`operating-rules.md` 提到快速模式,但没说具体怎么做
|
||||
|
||||
**建议**:明确快速模式的简化规则
|
||||
|
||||
```markdown
|
||||
## 快速模式
|
||||
|
||||
### 触发条件
|
||||
满足以下所有条件时,可使用快速模式:
|
||||
- 变更小于 5 个文件
|
||||
- 无架构变更
|
||||
- 无数据库迁移
|
||||
- 用户明确要求"快速"
|
||||
|
||||
### 简化规则
|
||||
1. Grill 阶段:至少 1 个问题(而非 3 个)
|
||||
2. Specify 阶段:tasks.md 可简化为 3 个子任务
|
||||
3. Audit 阶段:可跳过(标注"快速模式跳过审计")
|
||||
4. Archive 阶段:使用 micro 分档(brief/decisions/acceptance)
|
||||
|
||||
### 不得简化
|
||||
- Context 阶段:仍需读取 devflow
|
||||
- Commit 阶段:仍需检查 OpenSpec 完整性
|
||||
- Apply 阶段:仍需基于 Committed OpenSpec
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 执行机制优化建议
|
||||
|
||||
### 当前问题:约束是"软性"的
|
||||
|
||||
**现象**:
|
||||
- 规则写得很清楚:"不得跳过 commit"
|
||||
- 但我仍然能跳过,没有强制机制
|
||||
|
||||
**根本原因**:
|
||||
- 规则是"描述性"的(说应该做什么)
|
||||
- 缺少"执行性"的机制(强制检查、文件依赖)
|
||||
|
||||
### 解决方案:引入"门控文件"
|
||||
|
||||
**设计**:
|
||||
```
|
||||
每个阶段完成后,创建一个标记文件:
|
||||
- .context-done
|
||||
- .grill-done
|
||||
- .commit-done (即 .committed)
|
||||
- .apply-done
|
||||
- .archive-done
|
||||
|
||||
下一个阶段开始前,检查前置文件是否存在。
|
||||
```
|
||||
|
||||
**示例**:Apply 阶段入口检查
|
||||
```bash
|
||||
if [ ! -f ".committed" ]; then
|
||||
echo "错误:Commit 阶段未完成"
|
||||
echo "缺失文件:.committed"
|
||||
echo "请先完成 commit 阶段,或显式跳过(需用户确认)"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
**好处**:
|
||||
1. 强制执行顺序(无法跳过)
|
||||
2. 可视化进度(ls 就能看到哪些阶段完成了)
|
||||
3. 支持断点续做(下次执行自动识别位置)
|
||||
|
||||
---
|
||||
|
||||
## 用户体验优化
|
||||
|
||||
### 当前问题:用户不知道"现在在哪"
|
||||
|
||||
**场景**:
|
||||
- 用户说"继续"
|
||||
- 我不知道该从哪个阶段继续
|
||||
|
||||
**建议**:每次开始时,主动汇报状态
|
||||
|
||||
```
|
||||
开始执行 SM Flow...
|
||||
|
||||
当前状态:
|
||||
✅ Context 已完成
|
||||
✅ Propose 已完成
|
||||
⏸️ Grill 未开始 ← 当前阶段
|
||||
|
||||
下一步:执行 Grill 阶段(人类对齐澄清)
|
||||
预计耗时:5-10 分钟
|
||||
```
|
||||
|
||||
### 建议:增加"进度条"
|
||||
|
||||
```
|
||||
SM Flow 进度:
|
||||
[✅] Clarify
|
||||
[✅] Context
|
||||
[✅] Propose
|
||||
[⏸️] Grill ← 当前
|
||||
[ ] Specify
|
||||
[ ] Audit
|
||||
[ ] Commit
|
||||
[ ] Apply
|
||||
[ ] Archive
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
### 核心问题
|
||||
1. **Commit 检查缺少可执行标准**(导致容易跳过)
|
||||
2. **Apply 阶段缺少前置门控**(没有强制检查 .committed)
|
||||
3. **Archive 阶段缺少 Checklist**(容易遗漏 devflow)
|
||||
4. **缺少流程状态追踪**(不知道当前在哪)
|
||||
|
||||
### 优先修复(High Priority)
|
||||
- ✅ Commit 检查增加 Checkpoint
|
||||
- ✅ Apply 增加前置门控
|
||||
- ✅ Archive 增加 Checklist
|
||||
|
||||
这三个修复后,绝大多数"跳过阶段"问题都能解决。
|
||||
|
||||
### 框架本身很好
|
||||
- 架构清晰(9 个阶段、4 层架构)
|
||||
- 规则明确(6 条硬约束)
|
||||
- 文档详细(phase-contracts, archive-rules)
|
||||
|
||||
**问题不是"约束不够",而是"执行机制不够明确"。**
|
||||
|
||||
增加可验证的 checkpoint 和门控文件后,我就很难"偷懒"了。
|
||||
Reference in New Issue
Block a user