Skip to content

数据模型

所有数据存在 Memgraph 图数据库中。

节点类型

CodeEntity

代码实体,由 Joern CPG 分析生成。

属性类型说明
namestring实体名(函数名、文件路径等)
typeenumservicefilefunctionapi_endpoint
scopestring[]模块/服务标签,用于过滤
repostring所属 repo

DecisionContext

设计决策,从 AI 编程对话、代码分析或手动录入中提取。

属性类型说明
idstring唯一标识
contentstring完整自然语言描述
summarystring摘要(渐进披露的第一层)
keywordsstring[]提取的概念词(槽位 2)
scopestring[]模块标签
embeddingfloat[]语义向量(槽位 5)
created_atdatetime创建时间
updated_atdatetime最后更新
ownerstring产生者
session_idstring来源 AI 对话 session
commit_hashstring对应代码版本
sourceenumai_chatmeetingmanual
confidenceenumowner_confirmedai_inferredauto_generatedrefined
stalenessenumactivestalearchived

AggregatedSummary

模块级聚合摘要,由精炼管线生成。

INFO

尚未实现,计划在精炼管线中加入。

边类型

代码结构边

由 Joern CPG 分析和 LLM 推断生成。

方向含义
CONTAINSCodeEntity → CodeEntity层级关系:服务 → 文件 → 函数
CALLSCodeEntity → CodeEntity函数调用函数
DEPENDS_ON_APICodeEntity → CodeEntity跨服务 API 依赖(LLM 推断)

决策锚定边

把决策连接到它描述的代码。

方向含义
ANCHORED_TODecisionContext → CodeEntity精确锚定(函数级)
APPROXIMATE_TODecisionContext → CodeEntity模糊锚定(文件/目录级)

决策关系边

决策之间的连接,形成决策图。

方向含义
CAUSED_BYDecision → DecisionA 是因为 B
LEADS_TODecision → DecisionA 导致了 B
CONFLICTS_WITHDecision → DecisionA 和 B 有张力/trade-off
SUPERSEDESDecision → DecisionB 替代了 A
DEPENDS_ONDecision → DecisionA 的前提是 B
CO_DECIDEDDecision → Decision同一 session 中一起做出
SUMMARIZESAggregatedSummary → DecisionContext摘要覆盖这些决策

内部跟踪边

管线内部使用,不暴露给消费端。

方向含义
PENDING_COMPARISONDecision → Decision尚未比较是否有关系

TIP

PENDING_COMPARISON 边用的是反向跟踪模式:不记录"已比较、无关系"(会污染图),而是为还没比较的配对创建 PENDING 边。比较完成后,无论结果如何都删除 PENDING 边——图上只留有意义的关系边。

图谱可视化

打开 Memgraph Lab http://localhost:3000 浏览图谱。

常用 Cypher 查询:

cypher
// 查某个文件上锚定的所有决策
MATCH (d:DecisionContext)-[:ANCHORED_TO]->(c:CodeEntity {type: 'file', name: 'auth.ts'})
RETURN d, c

// 决策因果链
MATCH path = (d1:DecisionContext)-[:CAUSED_BY|LEADS_TO*1..3]-(d2:DecisionContext)
WHERE d1.id = 'some-decision-id'
RETURN path

// 没有决策覆盖的函数(覆盖空白)
MATCH (c:CodeEntity {type: 'function'})
WHERE NOT (c)<-[:ANCHORED_TO]-(:DecisionContext)
RETURN c.name, c.repo
ORDER BY c.repo

基于 Apache 2.0 协议发布