feat: v0.3.0 — /learn 知识库 + 自动发现

对照 gstack /learn + Operational Self-Improvement 设计:

/learn 知识库:
- 新增 commands/learn.md 指令模板
- 支持全类型外部材料摄入(PDF/DOCX/XLSX/CSV/HTML/图片等)
- 8 模块 knowledge.md(行业背景/市场数据/竞品全景/目标用户/约束/假设/冲突/溯源)
- 子命令:ingest、update、show、prune

自动发现:
- 8 条命令更新项目状态追加 Operational Self-Improvement 段
- _timeline.jsonl 扩展 type/confidence/key 字段
- 写入标准:省时判断 + 非显而易见 + 置信度标注

8 命令第 0 步增强:
- 加载知识库(learn/knowledge.md)
- 加载近期学习(_timeline.jsonl 高置信度记录)

ROADMAP 版本号重排 + state_template 增强 + install.sh 更新
This commit is contained in:
开阳星
2026-05-03 05:08:39 +08:00
parent d8c21dd38a
commit 75152c36c2
14 changed files with 508 additions and 6 deletions

205
commands/learn.md Normal file
View File

@@ -0,0 +1,205 @@
# /learn - 知识库学习与检索
## 命令定位
摄入外部业务材料(报告、调研、数据、文档等),解析并汇总为结构化知识库,
供所有 YxStack 指令在执行时自动加载参考。
## 子命令
| 子命令 | 用途 |
|--------|------|
| `/learn <路径>` | 摄入指定文件/目录,解析并更新知识库 |
| `/learn update` | 增量更新,检测新增或修改的材料 |
| `/learn show` | 查看当前知识库摘要(模块、材料数、最近更新) |
| `/learn prune` | 修剪过期或矛盾的知识条目 |
---
## /learn <路径> — 摄入外部材料
### Step 1: 扫描材料
扫描目标路径,识别所有可处理文件:
**支持格式**
- 文档:`.md`, `.txt`, `.pdf`, `.docx`
- 表格:`.xlsx`, `.csv`
- 演示:`.pptx`
- 网页:`.html`, 直接输入 URL
- 图片:`.png`, `.jpg`OCR 文字提取)
- 结构化数据:`.json`
**跳过规则**`.yxstack/`, `node_modules/`, `.git/`, `.DS_Store`
**目录处理**:递归扫描,按修改时间排序
### Step 2: 逐份解析
对每个文件,使用 Read 工具读取内容AI 模型提取结构化信息:
**信息提取维度**
| 维度 | 提取内容 |
|------|----------|
| 行业数据 | 市场规模、增长率、政策环境、技术趋势(数字+来源页) |
| 竞品信息 | 名称、定位、核心优势、主要劣势、价格带、目标用户 |
| 用户信息 | 画像描述、痛点清单、采购/使用决策链、付费意愿 |
| 约束条件 | 预算范围、时间节点、合规/监管要求、资源限制 |
| 假设与观点 | 非事实性判断、预测性结论 → 务必标注为"假设",归入待验证 |
### Step 3: 知识汇总
- **按模块归类**:行业背景 / 市场数据 / 竞品全景 / 目标用户 / 关键约束 / 待验证假设
- **去重合并**:相同信息点合并为一条,标注多来源
- **冲突处理**:矛盾信息点保留双方观点,归入「知识冲突」区域
- **溯源标注**:每条关键信息标注来源材料 + 页码/段落
### Step 4: 写入知识库
将汇总结果写入 `.yxstack/learn/knowledge.md`
**新增模式**knowledge.md 不存在):创建新文件,写入全部模块
**增量模式**knowledge.md 已存在):合并新材料信息,更新对应模块,追加材料溯源
**knowledge.md 格式**
```markdown
---
title: "项目知识库"
project: "{项目名称}"
last_updated: "{YYYY-MM-DD}"
materials_processed: {N}
---
# 项目知识库
> 最近更新:{YYYY-MM-DD}
> 已处理材料:{N} 份(详见 [材料溯源](#材料溯源)
## 行业背景
- 关键事实1 [来源材料A]
- 关键事实2 [来源材料B]
## 市场数据
| 指标 | 数值 | 来源 |
|------|------|------|
| 市场规模 | XXX | 材料A (p.12) |
## 竞品全景
| 竞品 | 定位 | 核心优势 | 主要劣势 | 价格带 | 来源 |
|------|------|----------|----------|--------|------|
## 目标用户
- 核心用户画像:[来源]
- 痛点清单(按严重程度):
1. 痛点1 [来源]
2. 痛点2 [来源]
- 付费意愿与能力:[来源]
## 关键约束
- 预算约束:
- 时间约束:
- 合规/监管约束:
- 资源约束:
## 待验证假设
| 假设 | 验证路径 | 来源 |
|------|----------|------|
| XXX | 如何验证 | 材料C |
## 知识冲突
| 主题 | 观点A | 来源A | 观点B | 来源B |
|------|-------|-------|-------|-------|
## 材料溯源
| 材料 | 类型 | 处理时间 | 关键信息贡献 |
|------|------|----------|-------------|
```
### Step 5: 更新元数据
更新 `.yxstack/learn/_learn_meta.json`
```json
{
"project": "{项目名称}",
"last_updated": "{ISO时间戳}",
"materials_processed": N,
"materials": [
{
"name": "材料名称",
"path": "原始路径",
"type": "pdf",
"processed_at": "ISO时间戳",
"sha256": "可选:文件哈希"
}
]
}
```
---
## /learn update — 增量更新
重新扫描已记录的材料目录,检测:
- 新增文件 → 解析并追加到 knowledge.md
- 修改过的文件 → 标记对应模块为「待更新」,重新解析
- 删除的文件 → 保留历史知识,标记来源材料已不可用
---
## /learn show — 查看摘要
读取 `.yxstack/learn/knowledge.md`,简洁展示:
- 知识库覆盖的模块列表
- 已处理材料数量
- 最近更新时间
- 待验证假设数量
- 知识冲突数量
---
## /learn prune — 修剪知识库
对标 gstack 的 `/learn prune` 机制:
1. **过期检测**:检查每条信息的来源材料是否仍可访问
2. **矛盾检测**:检查同一主题下是否存在相互矛盾的结论
3. **置信度评估**:标注每条知识的可靠性(从来源材料质量推断)
4. **用户确认**:对标记条目逐条询问:
- 删除(知识已过时)
- 保留(仍有效)
- 降级(标注为「待验证」)
5. 修剪后更新 knowledge.md
判断标准:「下次执行分析时,这条知识还有参考价值吗?」
---
## 存档规则
/learn 本身不产生报告文件(不同于其他 YxStack 指令),而是直接维护 `.yxstack/learn/knowledge.md`
执行 `/learn` 后,追加事件日志:
```json
{"skill":"learn","event":"completed","ts":"当前时间","summary":"摄入 N 份材料,知识库已更新","decision":"新增/更新模块列表"}
```
---
## 与其他指令的关系
| 指令 | 如何引用知识库 |
|------|---------------|
| /pfit | 参考目标用户(痛点清单)、待验证假设 |
| /pos | 参考竞品全景、行业背景、市场数据 |
| /uj | 参考目标用户(画像+决策链)、痛点清单 |
| /prd | 参考全部模块 |
| /money | 参考市场数据、竞品全景(价格带)、关键约束(预算) |
| /gtm | 参考目标用户(画像+决策链)、行业背景 |
| /metric | 参考市场数据(行业基准)、关键约束 |
| /comp | 参考竞品全景、市场数据 |
---
## 常见误区
- 把个人观点当事实写入知识库(应标注为假设)
- 材料之间的信息不核实矛盾直接合并(应标注冲突)
- 知识库只建不维护(应定期 prune
- 把单个来源的结论当作确定事实(应标注置信度)