🧠 图记忆方法在 LLM 上下文管理中的可行性探索

💡 从 ClaudeMem 的渐进式披露与 GraphRAG 的知识图谱出发,到 Synapse 图记忆的实验、问题反思与未来方向


一、🧩 问题的起点:LLM 的"失忆症"

大语言模型(LLM)有一个根本性的局限:每一次对话都是新的开始。模型本身是无状态的,它不记得你昨天让它修过的 bug,不记得上周讨论过的架构决策,甚至不记得同一项目的上一个会话里达成了什么共识 🤷

解决这个问题的尝试大致分为三代:

代际 方案 问题
🥇 第一代 把历史对话全塞进上下文 Token 爆炸,信噪比崩塌 💥
🥈 第二代 滚动摘要(RecallLoom 等) 信息压缩损失,关键细节被平滑掉 📉
🥉 第三代 结构化记忆 + 按需检索 本文讨论的重点 🎯

第三代是目前的前沿,也是 ClaudeMem 和 Synapse 各自尝试的方向。但它们的路线截然不同 —— 一个往左走自动化,一个往右走结构化 🚦


二、🔍 启发一:ClaudeMem 的"渐进式披露"哲学

ClaudeMem 是 Claude Code 生态中最成熟的记忆插件。它的核心设计哲学可以概括为一句话:用户只管工作,记忆自动累积

2.1 🏗️ 架构全景

用户工作 → Hook 捕获工具调用 → SDK Agent 压缩为结构化 XML
         → SQLite(结构化存储)+ ChromaDB(向量嵌入)
         → 下次会话:混合检索 → 注入上下文

ClaudeMem 使用了五个生命周期钩子:

钩子 时机 做什么
SessionStart 会话开始 启动 Worker 服务,注入上次记忆
UserPromptSubmit 用户发消息 注册会话,启动观测 Agent
PostToolUse 每次工具调用 捕获工具输入/输出,入队待处理
Summary 会话进行中 请求 SDK Agent 生成阶段性摘要
SessionEnd 会话结束 结束会话,排空待处理消息

2.2 👥 “双 Agent” 观测模式

这是 ClaudeMem 最巧妙的设计 💡。它不要求主 Agent(帮你写代码的那个)同时记住要记录什么。而是启动一个独立的 SDK Agent 会话,专门做一件事:观察主 Agent 的工具调用,把它们压缩成结构化的 XML:

<observation>
  <type>bugfix</type>
  <title>修复了登录页面的 JWT 刷新逻辑</title>
  <facts>
    <fact>access_token 过期时间从 3600s 改为 900s</fact>
    <fact>新增 refresh_token 轮转机制</fact>
  </facts>
  <narrative>用户反馈登录后 1 小时必现 401……</narrative>
  <concepts>
    <concept>auth</concept>
    <concept>jwt</concept>
  </concepts>
  <files_read>
    <file>src/auth/token.ts</file>
  </files_read>
  <files_modified>
    <file>src/auth/refresh.ts</file>
  </files_modified>
</observation>

每条 observation 随后被拆分为多个文档存入 ChromaDB(narrative 单独一个文档,每个 fact 也是单独文档),同时保留 SQLite 中的结构化字段(type、title、files_read、concepts 等)。

2.3 🔀 混合检索

当用户在新的会话中问"上次那个 JWT 的问题怎么修的?",ClaudeMem 不会把整个数据库倒进上下文。它走两条路径:

  • 🔮 语义路径:ChromaDB 向量搜索 → 找到语义相似的 observation
  • 📊 结构化路径:SQLite 精确查询 → 按 type、project、date、file 过滤

这种混合检索策略可以处理"我隐约记得跟 auth 有关"的模糊查询,也能处理"上周三修改了 token.ts 的那次"的精确查询 🎯

2.4 📚 知识语料库(Knowledge Corpus)

ClaudeMem 最前沿的特性是 KnowledgeAgent。它允许用户把一组 observation 打包成"语料库",然后用 Claude Agent SDK 启动一个独立会话,把语料库作为 system prompt 注入。之后用户可以像跟专家对话一样向这个语料库提问——而语料库的会话是可以跨多次查询保持存活的 🤯

2.5 ⚖️ ClaudeMem 的得失

得:

  • 零维护成本。用户不需要创建任何文件、声明任何关系。
  • 混合检索在大多数场景下"足够好"。
  • 双 Agent 模式巧妙地将"记忆"从"工作"中解耦。

失:

  • 没有显式的关系模型。 如果 observation A 记录了"支付模块依赖 auth 模块的 /api/v1/auth/session 端点",observation B 记录了"auth 模块把 session 端点改成了 /api/v2/auth/verify",ClaudeMem 不知道这两条信息之间存在冲突。它不是"理解"了依赖关系,只是"存储"了两段文字。
  • 无法做影响面分析。 当 Agent 要修改 auth 模块时,ClaudeMem 无法回答"哪些功能会受影响"。搜索可以返回语义相关的结果,但那是概率性的——可能漏掉关键的下游消费者。
  • 摘要压缩存在信息损失。 SDK Agent 写 observation 的过程本身就是一个压缩步骤,压缩中可能丢失精确的技术细节(例如把 POST /api/v1/auth/refresh 写成"the refresh endpoint")。

三、🕸️ 启发二:GraphRAG 与知识图谱的思路

3.1 从 RAG 到 GraphRAG

传统 RAG(检索增强生成)的流程是:文档 → 分块 → 向量化 → 用户提问 → 语义搜索 → 拼接上下文 → 生成回答。

GraphRAG 向前走了一步:文档 → 实体/关系抽取 → 知识图谱 → 用户提问 → 图遍历 + 社区检测 → 生成回答。

🎯 核心差异:向量搜索回答"什么和什么相似",图遍历回答"什么和什么相关以及如何相关"。

举个例子。假设用户问:“如果我把 auth 模块的 token 格式从 JWT 换成 PASETO,哪些功能需要改?”

  • 🔮 向量搜索:找到所有提到 “JWT”、“auth”、“token” 的文档。可能返回 15 个结果,其中 10 个相关,3 个不相关(只因为碰巧提到"token"这个词),2 个关键结果漏掉了(因为那个文档用的是"access credential"而不是"token")。
  • 🕸️ 图遍历:从 mod_auth 节点出发,沿 depends_on反向边(即谁依赖我)遍历。如果图是完整的,你得到的是精确的下游影响集合 🎯

3.2 📐 图在 LLM 上下文中的三个理论优势

🛡️ 优势一:确定性遍历 > 概率性检索。 当你需要做影响面分析或安全审计时,"我觉得这些可能是相关的"是不够的——你需要知道清单是完整的。

🔍 优势二:上下文加载的可解释性。 如果 Agent 告诉你"我读了这三个文件,因为 A depends_on B,B depends_on C,而你的任务涉及 A",这是可审计的。相比之下,向量搜索只能告诉你"这几个文档的余弦相似度最高"——这是一个不透明的魔法数字 🪄

📦 优势三:信息密度。 图和索引(节点 + 边)占用的 token 远少于把所有文档内容塞进上下文。对于有 50 个模块的大型项目,在上下文中只加载与当前任务真正相关的 3-5 个节点,比加载所有模块的摘要要有用得多。

3.3 ⚠️ 图在 LLM 上下文中的两个固有挑战

🏗️ 挑战一:边从哪来。 知识图谱在传统 NLP 中依赖实体关系抽取模型(如 BERT+CRF)来自动构建。但在 LLM Agent 场景中,Agent 本身可以声明边——但 Agent 在长会话中会遗忘、会跳过步骤、会产生幻觉。边的创建和维护成本不可忽视。

挑战二:图是静态的,代码是动态的。 代码库在持续演进。昨天 A depends_on B,今天可能变成了 A depends_on C。如果图跟不上代码的变化,它就从一个"精确工具"退化为了一个"误导工具"。


四、🧪 Synapse 实验:一次图记忆的系统性尝试

带着 GraphRAG 的启发和对 ClaudeMem 局限性的观察,我设计了 Synapse——一个基于图拓扑的 LLM 记忆系统。它的核心假设是:显式声明的依赖边 + 有界 BFS 图遍历,能在不牺牲精确性的前提下,大幅降低每个任务需要加载的上下文量。

4.1 🔗 三个 CS 原语映射

Synapse 的设计将三个经典的计算机科学数据结构映射到了 LLM 上下文管理:

CS 原语 Synapse 实现 作用
📇 倒排索引 MEMORY_MAP.md(标签 → 节点路径映射) O(1) 查找哪些节点包含某个标签
📐 规范化 按领域拆分的 Markdown 节点文件 消除跨文件信息重复
🔗 外键引用 depends_on / blocks 确定性的图遍历替代概率性的向量搜索

4.2 📝 节点文件规范

每个模块或功能被建模为一个 Markdown 文件,带有 YAML frontmatter:

---
id: feat_user-login
type: feature
status: in-progress
updated: 2026-05-01
depends_on:
  - meta/mod_auth-api.md
  - meta/mod_user-table.md
blocks: []             # 🤖 自动计算,Agent 不得编辑
tags: [auth, login, jwt]
---

节点分为两类:

  • 🧱 mod_*.md(模块节点):持久的架构组件,永远不会被归档
  • 🚀 feat_*.md(功能节点):有生命周期的功能,完成后移到 meta/archive/

每个节点的 body 包含:Current State(精确模式,路径/配置值逐字保留)、Key Decisions、Cross-Module Connection Points(结构化的接口契约)、Open Issues、Change Log。

4.3 🌊 有界 BFS 遍历协议

这是 Synapse 最核心的贡献 💎。当 Agent 需要加载记忆时,它执行的是有宽度和深度限制的 BFS

Depth 1(强制):加载目标节点在 depends_on 中列出的所有文件
  → 宽度限制:≤ 5 个
Depth 2(条件):对每个 Depth-1 节点,加载其 depends_on
  → 但只加载标签与当前任务领域重叠的节点
Depth 3(显式):仅当 Depth-2 节点的 Connection Points 明确提到需要时
  → 加载

🛑 停止条件:深度 > 3 或估算 token 超过上下文窗口的 15%

为什么不是刚性 1-hop?真实项目的依赖链往往是传递的:

feat_checkout → mod_payment → mod_auth → mod_user

只加载 1-hop 会丢失 mod_user 的信息。但无限制遍历等价于把所有文件全加载了。有界 BFS 在传递覆盖和上下文预算之间找到了折中 ⚖️

4.4 🔄 双边缘系统

Synapse 维护两套边:

边类型 方向 维护者 用途
➡️ depends_on 前向(我需要谁) Agent 手动维护 BFS 遍历路径
⬅️ blocks 反向(谁依赖我) 🤖 脚本自动计算 修改前的影响面分析

这是 Synapse 区别于任何其他记忆系统的关键特性 🏆。在修改一个模块之前,Agent 必须:

  1. 🔍 在 MEMORY_MAP.md 中查该节点的 blocks 字段
  2. 📖 读每个 blocking 节点的 Cross-Module Connection Points 部分
  3. ⚖️ 评估变更是否会破坏下游合同

4.5 🛡️ 基础设施强制

Synapse 不信任 Agent 会记住要做维护。它用两个基础设施钩子来保证:

🔧 PostToolUse 钩子:每次 Agent 用 Write/Edit 工具修改 meta/*.md 文件后,自动检查 frontmatter 完整性、dead links、updated 字段是否为今天。

🏁 SessionEnd 钩子:会话结束时自动重建 MEMORY_MAP.md、验证拓扑健康(dead links、cycles、orphans、oversized nodes)、输出变更摘要、标记"源码改了但记忆节点没更新"的漂移。

4.6 📊 Benchmark 的设计

Synapse 包含一个 benchmark 脚本,创建 10 个模块的模拟电商项目,对比 Synapse 的图加载 vs Flat File(全量加载)的 token 消耗:

任务 文件数 Token vs Flat
🔧 修复结账页面按钮颜色 4 1,167 55% ↓
➕ 添加用户资料字段 4 597 77% ↓
⚡ 优化产品搜索查询 3 483 81% ↓
🔐 更新 JWT 过期时间(需影响分析) 2 403 84% ↓
🐛 调试登录页 401(多领域) 5 1,302 50% ↓
📊 平均 3.6 702 73% ↓

💡 即使在最坏的多领域调试场景下,仍能减少 50% 的 token 消耗。


五、🔬 Synapse 的问题:详细诊断

做完实验后,往回看,问题可以按严重程度分为三层 🏔️

5.1 🔴 架构级问题(威胁系统可行性)

问题一:边维护是图系统的阿喀琉斯之踵 ⚡
feat_checkout → mod_payment → mod_auth → mod_user

这个依赖链中只要一条边缺失或过期,整个下游上下文就断了 💔。Agent 在做 BFS 时会静默地停在一个断裂点,漏掉所有后续信息——更糟糕的是,它不知道自己在漏信息。

Synapse 意识到了这个问题(SKILL.md 的"Soft dependency inference"一节),但给出的解决方案是让 Agent 每次写完 Current State 后自查文本。坦白讲,这是一个 Agent 记忆方案来解决基础设施问题。系统自己承认 “Agent instruction compliance degrades in long sessions”——但你却把最关键的维护任务交给了它 🤦

📐 这里有数学层面的必然性:N 个节点的潜在边数是 O(N²),而每个 Agent 会话只触及一小部分节点。边漂移不是 Bug,是系统输入条件下的必然收敛状态。

问题二:BFS 协议完全依赖 Agent 自律,没有运行时守卫 🚨

SKILL.md 有 290 行密密麻麻的指令告诉 Agent 如何正确执行 Retrieval Protocol。但如果你真的跑一个会话来测试——Agent 在读到第 3 步时可能已经在想别的事了 😴。没有任何代码检查 Agent 是否真的读了 MAP、真的按 BFS 做了遍历、真的检查了 blocks。如果 Agent 直接 Read meta/*.md 暴力加载所有文件……它仍然能完成工作。故障是绝对静默的 🤫

🆚 相比之下,ClaudeMem 的检索路径(SQL 查询 → Chroma 查询 → 格式化结果)是硬编码的 TypeScript,Agent 根本不需要"遵守"任何东西。

问题三:MEMORY_MAP.md 是单点故障 💣

如果 MAP 损坏、不完整,或生成脚本在某个节点上静默失败——Agent 的整个检索链就断了。脚本用 awk/sed 手写 YAML 解析器,这在面对稍微不规范的 frontmatter 时很容易静默失败。

5.2 🟡 设计级问题(影响日常可用性)

问题四:标签作为唯一发现机制的脆弱性 🏷️

Agent 通过标签匹配来发现节点。但同一概念可能用不同标签(auth vs authentication vs login),同一标签可能匹配过多节点导致超过宽度限制(> 5 个就停止)。

这是一种手动的、非标准化的、主观的分类法。与 ClaudeMem 的语义向量搜索放在一起看,差异是明显的:在 ClaudeMem 中,你问"登录有问题",即使没有一条 observation 显式标记为 auth,语义相似性仍然能命中相关记录 ✨

问题五:节点粒度悖论 📏

30-150 行的约束是合理的启发式,但现实中的模块不尊重这个尺度。一个认证系统可能需要 500 行才够详细,一个简单的工具模块可能只需要 20 行。强制拆分产生更多的人工连接点(更多潜在边漂移),强制合并产生信息过载的"上帝节点"。

问题六:冷启动困境 🥶

ClaudeMem 从第一个工具调用开始就产生价值——用户什么都不用做。Synapse 需要先创建目录结构、先创建根节点、先运行生成脚本——在见到任何价值之前就要求相当的投资。从采用率的角度看,这是致命的 💀

问题七:Connection Points 快照与代码现实的渐行渐远 📸
### To mod_auth
- **Endpoint**: POST /api/v1/auth/refresh
- **Request**: `{ refresh_token: string }`
- **Response**: `{ access_token: string, expires_in: number }`

这是 Agent 对代码的文字快照。而代码是不停变化的。Session-end hook 能检测"源码改了但 meta/ 没更新"的二元信号,但它无法告诉你哪个 Connection Point 过期了。当 Agent 基于过期的接口信息做影响评估时,这是一个虚假的安全感 🎭

5.3 🟠 实现级问题

问题八:benchmark 方法论缺陷 📉

Benchmark 假设 flat 模式下 Agent 会读整个 rolling_summary.md。但实际中 Agent 可以先 grep 再选择性地读。对比的是"Synapse 最优行为 vs Flat 最差行为" ⚠️

问题九:Agent 合规性无法测量 📏

parse-session.sh 只能统计"meta/ 下的 Read 调用次数",它分不清"Agent 正确执行了 BFS"和"Agent 暴力读了所有文件"——因为两者都体现为 Read 调用。


六、⚔️ Synapse vs ClaudeMem:系统对比

维度 🔵 ClaudeMem 🟣 Synapse
记忆模型 隐式时间轴 + 向量空间 显式有向图(DAG)
知识录入 ✅ 全自动(Hook 捕获 → Agent 压缩) ⚠️ 手动/半自动(Agent 创建节点 + 声明边)
检索路径 🔀 混合:语义向量 + SQL 过滤 🎯 确定性的:标签匹配 + BFS 图遍历
关系建模 🌫️ 隐式(concepts, files 字段) 🔗 显式(depends_on / blocks 边)
影响分析 ❌ 无(只能搜索,概率性) ✅ 有(blocks 入度查询,确定性)
维护成本 🟢 零 🟡 中等(需要持续维护边)
冷启动 🟢 即刻生效 🔴 需先创建节点
信息保真度 ⚠️ 取决于 Agent 压缩质量 ⚠️ 精确/模糊分类(但依赖 Agent 自律)
容错性 🟢 高(搜索失败只是少了一些上下文) 🔴 低(边断了整个下游上下文丢失)
质量保障 🔧 解析器验证 XML 结构 🔧 Hooks 验证 frontmatter + 拓扑健康
可扩展性 🟢 良好(自动随项目增长) 🟡 有问题(边维护成本线性增长)

💬 核心差异的一句话总结

ClaudeMem 选择了零维护成本,代价是失去了结构化的关系理解;Synapse 选择了结构化关系,代价是维护成本和系统脆弱性。


七、🔮 图记忆在 LLM 上下文中的可行性:一个务实的评估

7.1 🟢 图在什么条件下优于纯检索

图记忆在以下场景中有不可替代的优势

🛡️ 1. 安全性关键的修改任务。 当 Agent 要修改一个被多个功能依赖的共享模块时,blocks 入度查询提供的确定性下游影响清单 > 向量搜索的"可能是相关"的结果集。两者的差异类似于"编译器的静态类型检查"与"运行时的动态类型推断"——前者在安全性上远胜。

🏛️ 2. 长生命周期的复杂项目。 如果项目的模块图相对稳定(基础架构层不频繁变更),一次性建立图结构后,后续几十个会话持续受益于精确的上下文加载。图的初始投资被摊薄 📈

👥 3. 多 Agent 协作。 如果多个 Agent 并行工作在不同的功能上,共享一个图结构可以让每个 Agent 了解自己的修改对他人的影响——类似于分布式系统中的"向量时钟"概念。

7.2 🔴 图在什么条件下失败

💸 1. 边维护的边际成本超过边际收益时。 对于大部分日常任务(修复一个按钮颜色、调整一个文案),Agent 只需要理解当前文件的上下文。花费 30 秒声明和验证一条边,但这条边可能在 5% 的后续会话中才被用到——ROI 为负。

🏃 2. 项目在快速演进时。 在项目的早期阶段,模块结构每周都在变化。图的半衰期可能只有几天——你今天画的边,下周就过期了 ⌛

🤖 3. Agent 作为图维护者时。 这是最关键的问题。LLM Agent 有一些不利于图维护的特性:在长会话中指令遵循能力衰减 📉、置信度与正确性不挂钩(对错误声明也有高置信度)、倾向于"抄近路"(skip steps that seem unnecessary)。

7.3 🎭 核心矛盾的提炼

图记忆在 LLM 上下文中的核心矛盾是:

图的精确性优势与边维护的脆弱性之间存在根本性的张力。你无法同时拥有"无需维护的便利"(ClaudeMem)和"确定性遍历的精确"(Synapse),除非你解决边的自动创建问题。

📖 这个矛盾与历史上的 Semantic Web 困境高度相似:Tim Berners-Lee 的 Semantic Web 在理论上非常优美——如果所有网页都用 RDF 声明语义关系,机器就能推理。但它在实践中失败了——因为让内容创建者手动声明元数据的成本远超收益。Schema.org 的微数据之所以成功一些,恰恰是因为它把要求降到了最低(只在 HTML 中加几个属性)。


八、🚀 下一步:融合之路的设想

我不认为图记忆是一条死路。相反,我认为它是 LLM 记忆系统的正确进化方向——只是边的来源不能是手动的。下面是我设想的三阶段路线图 🗺️

阶段一:从观测数据中自动推断边 🤖➡️🔗

🎯 解决"边从哪来"这个最关键的问题

这是最关键的一步。ClaudeMem 已经捕获了每一条工具调用作为一个 structured observation,包含:

{
  "type": "bugfix",
  "title": "修复 JWT 刷新逻辑",
  "facts": ["access_token TTL: 3600→900", "新增 refresh_token 轮转"],
  "files_read": ["src/auth/token.ts", "src/auth/session.ts"],
  "files_modified": ["src/auth/refresh.ts", "src/middleware/auth.ts"],
  "concepts": ["auth", "jwt", "refresh-token"]
}

这些 observation 中蕴含了丰富的隐式关系 👇

关系类型 推断逻辑 示例
📁 文件共现 obs A 和 obs B 都涉及 src/auth/token.ts 它们可能相关
💡 概念共现 obs A 的 concepts 包含 auth,obs B 的 narrative 引用 /api/v1/auth/ 它们可能相关
⏱️ 因果时序 obs A(修改 auth)后不久 obs B(修改 checkout),都涉及 auth 概念 可能存在依赖链

🔑 关键原则:系统建议边,Agent 确认边,而非 Agent 创建边。

阶段二:图增强搜索 🕸️ + 🔀

🎯 解决"图太脆弱"的问题

即使图不完整(总会有一些边缺失),它仍然可以作为向量搜索的增强层:

用户提问 → 🔮 向量搜索获取候选集 → 🕸️ 图拓扑过滤/排序
           ↓
      候选 observation         沿图边扩展发现"没想到但相关"的节点 🎁

💡 图不是替代向量搜索,而是增强它。 如果边存在 → 确定性遍历 ✅。如果边缺失 → 回退到语义搜索 ⚠️。这是一种优雅降级策略。

阶段三:基于实际行为的入度告警 📊

🎯 解决"影响分析没有 runtime guard"的问题

当 Agent 准备修改一个文件时,系统自动查询:

  1. ⏰ 过去 30 天内,哪些 observation 涉及了同一文件?(时间维度)
  2. 🏷️ 这些 observation 分别属于哪些 concept 领域?(语义维度)
  3. 🕸️ 基于文件共现图,哪些其他文件与目标文件有强关联?(图维度)

然后生成一个非阻塞的影响面提示

⚠️ 你即将修改 src/auth/token.ts
📊 在过去 30 天内,有 7 个会话涉及此文件:
  🚀 feat_checkout(4 天前)
  👤 feat_user-profile(1 周前)
  💳 mod_payment(2 周前)
🔍 建议检查以下 Connection Points 是否受影响:
  → POST /api/v1/auth/session(被 checkout 使用)
  → GET /api/v1/users/me(被 user-profile 使用)

💎 这个提示的价值在于:它不需要任何显式声明的边。它从实际发生过的行为数据中推导潜在影响面。这就是**“图从行为中涌现”**的含义。

🧬 融合设计总结

保留 Synapse 的 学习 ClaudeMem 的
🌊 有界 BFS 遍历协议(深度/宽度双重约束) 🔧 零维护的自动观测管道
🔄 双边缘模型(前向 depends_on + 反向 blocks) 🔀 混合检索作为 baseline
📐 精确/模糊保真度分类法(编码为自动验证规则) 👥 双 Agent 解耦模式
🛡️ 基础设施强制(Hook 驱动的自动验证) 📚 知识语料库的可查询性

九、🏁 总结

回头看这段探索历程的脉络:

🔵 ClaudeMem 的渐进式披露 → 🕸️ GraphRAG 的图检索 → 🧪 Synapse 实验
        ↓                           ↓                    ↓
   "自动积累很好" ✨         "图结构很优美" 💎      "但手动维护图不行" ⚠️

✅ Synapse 回答了"图记忆在理论上是否可行",答案是——它的 benchmark 证明了精确的图遍历可以大幅降低上下文消耗,blocks 入度分析提供了其他系统没有的安全性。

⚡ 但它也暴露了核心问题:边的维护成本与图的精确性优势之间存在不可调和的矛盾,只要你依赖 Agent 手动声明边。

所以下一步的答案不在"更好的图"或"更好的 Agent 指令"里,而在一个更根本的转变上:

🔄 从 Agent 声明边 → 系统从行为数据中推断边

图结构不应该是被写下来的,而应该是从实际工作流中涌现出来的 🌊

这不是放弃图记忆的方向——恰恰相反,这是为图记忆找到了正确的实现路径 🎯


📚 参考项目


✍️ 本文基于对上述两个项目源码的深入分析。所有结论均为个人观点,欢迎讨论和指正。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐