Skip to content

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

基于 Apache 2.0 协议发布