Session 摄入
从 AI 编程对话(Claude Code 记录)中捕获设计决策,写入知识图谱。
工作流程
管线分三个阶段:
Phase 0 — 预处理。 读取 JSONL 对话记录,压缩 turns(去掉工具调用、折叠长输出),识别本次 session 涉及的文件。
Phase 1 — 分段。 把压缩后的对话发给 Claude,分割成逻辑段落——每段代表一个独立的任务或讨论主题。每段标记是否可能包含设计决策。
Phase 2 — 提取。 对每个已批准的段落,系统从图谱拉取代码结构上下文(调用者、被调用者、文件结构),然后让 Claude 提取具体决策和锚定信息。
~/.claude/projects/*.jsonl
↓
Phase 0: 解析 & 压缩 turns
↓
Phase 1: LLM 分段
↓
用户选择要分析哪些段落
↓
Phase 2: 逐段深度提取 + 图谱上下文
↓
写入 DecisionContext 节点
↓
创建 PENDING_COMPARISON 边
↓
(之后)npm run connect → 建立关系边对话记录来源
Claude Code 把对话记录存为 JSONL 文件:
~/.claude/projects/<hashed-project-dir>/<session-id>.jsonl每行是一条消息(user、assistant 或 tool call)。管线直接读取,不需要导出。
用法
bash
# 处理所有新 session
npm run ingest:sessions:v2
# 只处理某个项目
npm run ingest:sessions:v2 -- --project bite-me-website
# 处理指定 session
npm run ingest:sessions:v2 -- --session abc123
# 自动批准所有有决策的段落
npm run ingest:sessions:v2 -- --auto-approve
# 试运行——只跑 Phase 0,不调 LLM
npm run ingest:sessions:v2 -- --dry-run
# 重新处理已经处理过的 session
npm run ingest:sessions:v2 -- --force --session abc123
# 控制 Phase 2 并发度
npm run ingest:sessions:v2 -- --concurrency 3交互式审批
Phase 1 分段完成后,默认会显示:
[abc12345] bite-me-website
42 turns | 5 files | ~12000 tokens
🔍 Phase 1: Segmenting...
✓ 4 segments (2 with decisions):
[1] ✅ Turn 1-12: 重构 auth 中间件改用 JWT
Hints: chose JWT over session cookies, trade-off discussion
[2] ❌ Turn 13-20: 修复 CSS 布局 bug
[3] ✅ Turn 21-35: 设计限流策略
Hints: Redis vs in-memory, sliding window approach
[4] ❌ Turn 36-42: 更新 README
Analyze which? (all / 1,3 / none):可以按编号选择、全部分析或跳过。用 --auto-approve 自动分析所有标记有决策的段落。
状态追踪
已处理的 session 记录在 data/ingested-sessions-v2.json。后续运行只处理新增 session。用 --force 可以重新处理——旧决策会被删除并替换。
大 Session
超过 ~80,000 tokens 的 session 会自动分成重叠的块进行 Phase 1 分段。重叠部分(5 个 turns)防止边界处的决策丢失。
摄入之后
摄入后会创建 DecisionContext 节点和 PENDING_COMPARISON 边。运行以下命令建立关系图:
bash
npm run connect