OpenCode Temporal Pipeline — 时间骨骼化管线
期望状态
所有运行 opencode 的节点,每 5 分钟自动将其会话的骨骼(摘要 + 实体 + 时间关系)写入共享 Neo4j 图数据库。查询 Neo4j 时,能即时获得跨节点、带时间维度的态势感知。
架构
每节点 (nuc / mini / mbp / suse / ...)
│
├─ SQLite (opencode.db) ──── 每5分钟增量提取新会话
│
├─ GraphRAG / LM Studio ───── 骨骼化:摘要 + 矛盾检测 + 实体提取
│
└─ 共享 Neo4j ──── Window节点 → NEXT_WINDOW链 → GLOBAL_NEXT跨节点链
Neo4j 图模型
| 节点类型 | 属性 | 关系 |
|---|---|---|
Node |
name (hostname) | ← FROM_NODE |
Window |
id, ts, label, session_count, summary, node | → NEXT_WINDOW, → GLOBAL_NEXT |
Day |
date, session_count | → NEXT_DAY |
Session |
title, directory | → ON_DATE |
Timeline |
id, summary, last_sync | — |
时间链接:
- NEXT_WINDOW: 同一节点的时间序列(5分钟精度)
- GLOBAL_NEXT: 跨节点的全局时间序列(任何节点最新的窗口)
- NEXT_DAY: 按天的时间序列
骨骼化含义
"骨骼" 不是原始对话内容,而是结构化的元认知:
- 摘要: 这个时间窗口在干什么
- 实体: 涉及哪些技术/系统/概念
- 矛盾: 是否有冲突信息
- 时间: 何时发生,与其他窗口的关系
查询骨骼不需要读取原始聊天记录,直接看图就能理解协作态势。
实体时间线
图中的实体必须带时间戳。查询时按时间衰减——近期的实体权重大,历史实体自动降权。避免出现"Nomad 永远是 TOP 1"这种谬误。
多节点协作
- 每个节点独立运行管线,写入同一个 Neo4j
- 不同节点的 Window 通过 GLOBAL_NEXT 连接
- 查询 "nuc 和 mini 在最近1小时都在干什么" 只需求图遍历
- 不需要读任何节点的原始文件
当前部署
| 节点 | 管线脚本 | 触发 | 状态 |
|---|---|---|---|
| nuc | ~/.local/bin/opencode-pipeline.py | cron */5 | ✅ |
| mini | — | — | 待部署 |
| suse | — | — | 待部署 |
| raccoon | — | — | 待部署 |
依赖
- GraphRAG API: http://100.116.169.46:8800/api/trim(nuc 本地 LM Studio)
- Neo4j: bolt://100.116.169.46:7687(共享,neo4j/ccie15544)
- SQLite: ~/.local/share/opencode/opencode.db(每节点独立)
生命周期
- 状态: incomplete(多节点部署待完成)
- 创建: 2026-06-25
- 验证: nuc 单机已跑通,Day/Window/Session 节点正常
- 下一步: 部署到 mini/suse/raccoon,验证跨节点 GLOBAL_NEXT 链