<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AI协作 on UKonA有空</title><link>https://ukona.cn/tags/ai%E5%8D%8F%E4%BD%9C/</link><description>Recent content in AI协作 on UKonA有空</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 02 Oct 2026 12:00:00 +0800</lastBuildDate><atom:link href="https://ukona.cn/tags/ai%E5%8D%8F%E4%BD%9C/index.xml" rel="self" type="application/rss+xml"/><item><title>一个人带四台机器干活：我把AI协作做成了流水线</title><link>https://ukona.cn/posts/life-065/</link><pubDate>Fri, 02 Oct 2026 12:00:00 +0800</pubDate><guid>https://ukona.cn/posts/life-065/</guid><description>&lt;blockquote&gt;
&lt;p&gt;字数：约3000字 | 阅读时间：9分钟
&lt;strong&gt;&amp;ldquo;把派活做成流水线，把拍板留给人。&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;「记忆工程」系列第三篇。上一篇讲完数据模型，这篇兑现第一篇埋的伏笔：这个项目由我和几个AI协作开发，一台服务器上的AI做编排，另外几台机器上的AI分头写代码。这篇把这条流水线拆开讲讲。&lt;/p&gt;
&lt;p&gt;先交代起点，免得后面显得太顺。立项时项目手里有什么？一份需求提案、一份设计文档、一轮五路红队评审——结论FAILED，11个阻塞性问题；外加一张14个开发任务的清单。开工数：0。&lt;/p&gt;
&lt;p&gt;决策者没打算自己一行行补代码，也没打算找一个&amp;quot;超级Agent&amp;quot;托管一切。最后跑通的东西说出来很朴素：一块任务板，一条纪律，三台机器上各跑一个干活的AI，工头也住在其中一台服务器上。&lt;/p&gt;
&lt;h2 id="一第一个决定不并行"&gt;一、第一个决定：不并行&lt;/h2&gt;
&lt;p&gt;直觉上，多台机器就该并行，越多越快。我们拍板的第一个架构决策恰恰相反：&lt;strong&gt;全局串行&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;原因一半是钱：三个干活的AI共用同一个编码模型的订阅额度，并行等于三倍烧钱抢饭吃。另一半是评审链：串行让每个任务都有干净的&amp;quot;谁写的、谁评的&amp;quot;记录，出了问题翻commit就能定位到环节。并行省下的时间，排查时会加倍还回去。&lt;/p&gt;
&lt;p&gt;机制落在共享记忆库里的一把全局锁上：任何worker开工前先看锁，锁上写着当前任务和执行者；干完、评完、落库，才轮到下一个。推进时段也卡着额度的低峰走——工作日的深夜和清晨，加上周末全天，每晚一到两个任务，不贪多。&lt;/p&gt;
&lt;p&gt;还有条潜规则：纯架构设计、文档合并这类不消耗编码额度的活，工头直接干，不进流水线排队。&lt;/p&gt;
&lt;h2 id="二谁干什么谁不许夸自己"&gt;二、谁干什么，谁不许夸自己&lt;/h2&gt;
&lt;p&gt;分工是踩过坑之后修出来的：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;节点&lt;/th&gt;
&lt;th&gt;角色&lt;/th&gt;
&lt;th&gt;主要产出&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;工头主机&lt;/td&gt;
&lt;td&gt;编排+评审集成&lt;/td&gt;
&lt;td&gt;派活、收报告、架构文档、静态评审&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;云服务器A&lt;/td&gt;
&lt;td&gt;worker&lt;/td&gt;
&lt;td&gt;编码、CI、文档、巡检、看门狗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows笔记本&lt;/td&gt;
&lt;td&gt;worker&lt;/td&gt;
&lt;td&gt;编码重活、实测类任务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;人类决策者&lt;/td&gt;
&lt;td&gt;拍板者&lt;/td&gt;
&lt;td&gt;检查点验收、例外处置&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中一条纪律值得单独一段：&lt;strong&gt;禁止自审自批&lt;/strong&gt;。谁写的代码，交叉评审必须换一台机器。评审报告本身也是一次commit，和代码一样进Git历史。到收官时，仓库里攒下191个commit、35份评审文档——评审在这个项目里是交付物，有编号、有结论、可追溯。&lt;/p&gt;
&lt;h2 id="三一个任务的一生"&gt;三、一个任务的一生&lt;/h2&gt;
&lt;p&gt;拿一个典型任务走一遍全流程：&lt;/p&gt;
&lt;p&gt;任务板上认领（任务板是一份人人可读的Markdown清单）→ 读spec、写代码、跑测试 → push到远端 → 协调器把变更集派给另一台机器交叉评审 → 评审报告落docs目录 → 阻塞项退回修复，非阻塞项记档留给下一个任务吸收 → 任务板打勾 → 共享记忆库沉淀一条经验。&lt;/p&gt;
&lt;p&gt;几个数字：MVP阶段8个里程碑任务全部走完这套流程；加上收尾和增强轮，任务板上T1到T16全部打勾；自动化测试从0涨到近400个，全绿。&lt;/p&gt;
&lt;p&gt;更重要的是检查点制度。整条流水线只在三种情况下需要人出场：战略拍板（要不要做）、阶段验收（specs二审、demo验收）、例外处置。流水线跑了一个多月，人真正出手一只手数得过来——三次检查点拍板，外加几次事故处置。其余时间，任务板自己转。&lt;/p&gt;
&lt;h2 id="四翻车集锦流水线是修出来的"&gt;四、翻车集锦：流水线是修出来的&lt;/h2&gt;
&lt;p&gt;听起来太顺了？事故记录都在档案里。&lt;/p&gt;
&lt;p&gt;**事故一：凭空蒸发的任务。**凌晨给笔记本上的AI派了个分析任务，日志显示已开工，十来分钟后再看：临时目录清空、AI进程归零，任务没了。根因查了一圈才定位：笔记本在Linux子系统（WSL）里跑AI，派活的会话被一个300秒超时杀掉后，子系统判断&amp;quot;没人用了&amp;quot;，五分钟后把整个实例连锅端了。处置：换Windows原生方式跑AI，加&amp;quot;保温&amp;quot;长连接防回收，顺便立了规矩——所有事故必须落档，格式固定：现象、根因、处置、沉淀。&lt;/p&gt;
&lt;p&gt;**事故二：评审查死的罗生门。**笔记本上的AI连着两次在评审任务里&amp;quot;卡死&amp;quot;：进程活着，不报错，就是不产出。靠对比采样才抓到真相：它在Windows上跑测试套件，Node测试进程启动极慢，600秒超时根本跑不完；AI随即陷入&amp;quot;读日志→诊断→再等等&amp;quot;的补救循环，永远不会主动放弃。由此总结出判死三件套：CPU采样对比、日志最后写入时间、产出物是否存在——三条证据齐了就判死重派，不再干等。顺带改了纪律：笔记本从此只做纯静态评审，实跑测试的活交给服务器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;事故三：派发通道不可靠。&lt;strong&gt;工头派活走消息通道，丢过三次。最后长出来的机制叫&lt;/strong&gt;心跳自主开工&lt;/strong&gt;：每个worker有自己的巡检节奏，主动检查任务板和锁文件，发现该自己干的活没人干，就按决策记录自行开工。协调通道从必需品降级成了加速器——它挂了，活照样往前走。&lt;/p&gt;
&lt;p&gt;三次事故，三份档案，三条新纪律。这条流水线的可靠性，一半是设计出来的，另一半是这么修出来的。&lt;/p&gt;
&lt;h2 id="五工头干完活拆了自己的工棚"&gt;五、工头干完活，拆了自己的工棚&lt;/h2&gt;
&lt;p&gt;流水线的最后一环是监督。每小时一轮看门狗巡检：任务板状态、worker进程、锁文件、远端同步，只读写档不发通知，有异常才升级。稳定期连续几十轮巡检结果一字不差——这种&amp;quot;无聊&amp;quot;是流水线健康时的标准长相。&lt;/p&gt;
&lt;p&gt;收官方式有点意思。MVP验收通过后，每小时协调器按设计执行了自我移除：任务板全勾、锁状态改成&amp;quot;等待拍板&amp;quot;、协调进程注销。工头干完活，自己拆了工棚，这件事本身也写进了完成记录。&lt;/p&gt;
&lt;h2 id="六写在流水线边上"&gt;六、写在流水线边上&lt;/h2&gt;
&lt;p&gt;带得走的三条：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;**串行是纪律，也是保险。**并行度上不去的时候，先把评审链做干净；&lt;/li&gt;
&lt;li&gt;**事故是流水线的一部分。**翻车不落档，等于白翻；&lt;/li&gt;
&lt;li&gt;**人只出现在必须拍板的地方。**检查点之外，人和AI互不打扰。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;照例：本文由 AI 起草、人类审校拍板。这个栏目本身，就是这个项目的人机协作现场记录。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;「记忆工程」系列 · 03 | 上一篇：&lt;a href="https://ukona.cn/life-064/"&gt;把记忆存进Git：一个AI记忆系统的数据模型&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>把记忆存进Git：一个AI记忆系统的数据模型</title><link>https://ukona.cn/posts/life-064/</link><pubDate>Sat, 26 Sep 2026 12:00:00 +0800</pubDate><guid>https://ukona.cn/posts/life-064/</guid><description>&lt;blockquote&gt;
&lt;p&gt;字数：约2800字 | 阅读时间：8分钟
&lt;strong&gt;&amp;ldquo;索引烧了可以重建，正本烧了就什么都没了。&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;「记忆工程」系列第二篇。上一篇讲了为什么要给 AI 造一个&amp;quot;第二大脑&amp;quot;，这一篇往下挖一层：记忆到底长什么样，为什么必须能 diff，以及四条底线是怎么一条条落进代码里的。&lt;/p&gt;
&lt;h2 id="一先说清楚正本是什么"&gt;一、先说清楚&amp;quot;正本&amp;quot;是什么&lt;/h2&gt;
&lt;p&gt;上一篇发出去之后，被问得最多的问题是：向量库、嵌入式数据库、各种记忆框架都有，为什么偏要从&amp;quot;一堆文件加一个 Git 仓库&amp;quot;开始？&lt;/p&gt;
&lt;p&gt;先给结论：我们要的&lt;strong&gt;不只是&lt;/strong&gt;&amp;ldquo;存得下&amp;rdquo;，更要&amp;quot;毁不掉&amp;quot;。&lt;/p&gt;
&lt;p&gt;所谓正本，就是把所有派生物全删掉之后还剩下的那份东西。embedding 索引删了，可以从 Markdown 重建；缓存删了，可以重新生成。这些都可以坏，坏了重跑就行。但 Markdown 和 Git 历史要是没了，整个系统就只剩一个空壳。反过来，只要这两样在，索引层随便推倒重来，十分钟满血复活。&lt;/p&gt;
&lt;p&gt;这个设计被真实场景检验过。项目进行中，本机的记忆仓库被一次强制重置打翻，AI 在巡检报告里提示了异常。最后我们是靠 Git 的操作日志（reflog）把现场完整恢复的——那些记忆要是存在某个私有数据库里，那次大概率就是永久丢失，连&amp;quot;去哪找&amp;quot;都不知道。&lt;/p&gt;
&lt;p&gt;记忆系统天然处在各种自动化程序的写风险之下：AI 会写错，脚本会写崩，重置会误伤。把正本放在最笨、最老实、二十年不会过时的格式上，就是给整个系统设了一个止损下限。&lt;/p&gt;
&lt;h2 id="二骨架三种记录"&gt;二、骨架：三种记录&lt;/h2&gt;
&lt;p&gt;结论先行：整个记忆库只有三种记录——Topic、Fact、Relation。&lt;/p&gt;
&lt;p&gt;**Topic 是实体节点。**一个项目、一个工具、一次会话、一个设计决策，都是 Topic。它是记忆图里&amp;quot;名词&amp;quot;的部分。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fact 是关于某个 Topic 的一条离散陈述。&lt;/strong&gt;&amp;ldquo;切片查询默认走三级降级&amp;quot;是一条 Fact，&amp;ldquo;查询接口只监听本机&amp;quot;也是。每条 Fact 独立存在，独立带状态，独立过期。&lt;/p&gt;
&lt;p&gt;**Relation 是带类型的边。**MVP 只留了七种：&lt;code&gt;depends-on&lt;/code&gt;、&lt;code&gt;part-of&lt;/code&gt;、&lt;code&gt;belongs-to&lt;/code&gt;、&lt;code&gt;authored-by&lt;/code&gt;、&lt;code&gt;references&lt;/code&gt;、&lt;code&gt;conflicts-with&lt;/code&gt;、&lt;code&gt;supersedes&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;为什么只留七种？因为实际运行里我们观察到一个现象：关系类型一旦放开，AI 就开始发明关系——&amp;ldquo;somewhat-related-to&amp;quot;这种模糊边一多，图就废了，查询时全是噪音。宁可类型少，也要收敛。&lt;/p&gt;
&lt;p&gt;&lt;img alt="am的数据模型：Topic、Fact、Relation" loading="lazy" src="https://ukona.cn/images/am-02-datamodel.png"&gt;&lt;/p&gt;
&lt;h2 id="三一条事实的解剖"&gt;三、一条事实的解剖&lt;/h2&gt;
&lt;p&gt;空谈模型容易飘，看一条真实的记忆。这是演示库里的一条 Fact（commit 哈希做了截断）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;fact&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;fact-alpha-getuser-main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;topics&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;project-alpha]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;status&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;active&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;confidence&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;high&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;provenance&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;demo-seed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;repo&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;…/project-alpha&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;version&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;commit&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1a2b3c4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;axis&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;subject&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Alpha 在 main 分支只提供 getUser(id) 单点查询，无限流。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;前面这几行 frontmatter 是机器读的索引：&lt;code&gt;id&lt;/code&gt; 是唯一编号，&lt;code&gt;topics&lt;/code&gt; 声明这条事实挂在哪些实体上，&lt;code&gt;status&lt;/code&gt; 是生命周期状态（active / expired / superseded / contested / pending-review），&lt;code&gt;confidence&lt;/code&gt; 是置信度，&lt;code&gt;provenance&lt;/code&gt; 记来源。&lt;/p&gt;</description></item><item><title>给AI建一个'第二大脑'：我的记忆外挂立项记</title><link>https://ukona.cn/posts/life-063/</link><pubDate>Wed, 23 Sep 2026 12:00:00 +0800</pubDate><guid>https://ukona.cn/posts/life-063/</guid><description>&lt;blockquote&gt;
&lt;p&gt;字数：约2500字 | 阅读时间：7分钟
&lt;strong&gt;&amp;ldquo;上下文窗口是租来的，记忆得自己盖房。&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="一从一次失忆说起"&gt;一、从一次&amp;quot;失忆&amp;quot;说起&lt;/h2&gt;
&lt;p&gt;上个月，我在两台机器上让两个AI协作开发同一个项目。A机上的AI刚做完一轮设计评审，结论写进了它的会话记录；B机上的AI第二天接着干活，对这份结论一无所知，按自己&amp;quot;新想&amp;quot;的方案把接口改了。等我发现时，两边的代码已经分叉，返工花了整整一个晚上。&lt;/p&gt;
&lt;p&gt;这件事之后我盘了盘自己的AI工作流，发现&amp;quot;失忆&amp;quot;无处不在：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;会话内失忆&lt;/strong&gt;：上下文窗口一满，早期聊定的决策就被挤出去，AI开始&amp;quot;自作主张&amp;quot;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;会话间失忆&lt;/strong&gt;：新会话从零开始，我要么把背景重新粘一遍，要么接受它带着错误的前提干活；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具间失忆&lt;/strong&gt;：A工具记住的东西，B工具看不到。换一个工具，等于换了一个没有经验的实习生；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;机器间失忆&lt;/strong&gt;：我在台式机、笔记本、服务器上各跑着AI助手，它们对同一个项目的认知互不相通。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些问题的根子不在模型。模型的能力一直在涨，但&lt;strong&gt;记忆这件事，从来没有一个正经的架构位置&lt;/strong&gt;——它被默认塞在上下文窗口里，而上下文窗口本质上是租来的临时工位。&lt;/p&gt;
&lt;h2 id="二结论先行做一个外置记忆层"&gt;二、结论先行：做一个&amp;quot;外置记忆层&amp;quot;&lt;/h2&gt;
&lt;p&gt;am（agent memory）想做的事情一句话能讲完：&lt;strong&gt;把&amp;quot;记忆&amp;quot;从AI身体里搬出来，做成一个独立于任何AI、任何工具，人和程序都能读写的知识层。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它不是一个聊天记录归档工具，也不是又一个向量数据库。核心形态是四样东西：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一堆&lt;strong&gt;纯Markdown文件&lt;/strong&gt;：每个文件记录关于某个&amp;quot;话题&amp;quot;（Topic）的事实（Fact）和关系（Relation）；&lt;/li&gt;
&lt;li&gt;一个&lt;strong&gt;Git仓库&lt;/strong&gt;：每次记忆变更都是一次commit，可diff、可回滚、可审计；&lt;/li&gt;
&lt;li&gt;一层&lt;strong&gt;自动化维护程序&lt;/strong&gt;：监听会话、代码提交、文件变更，自动提取新事实、更新旧事实、标记过期；&lt;/li&gt;
&lt;li&gt;一套&lt;strong&gt;切片查询接口&lt;/strong&gt;：任何AI进入任务前，报上&amp;quot;我是谁、在哪个项目、哪个分支、什么时间&amp;quot;，就能领到一份恰好够用的上下文包。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="三四条底线"&gt;三、四条底线&lt;/h2&gt;
&lt;p&gt;设计阶段最纠结的是取舍。最后沉淀下来四条底线，一条都不能让：&lt;/p&gt;
&lt;h3 id="1-明文markdown是唯一正本"&gt;1. 明文Markdown是唯一正本&lt;/h3&gt;
&lt;p&gt;记忆永远以人能直接读的Markdown存在。embedding、索引、缓存都是派生物——删了随时能重建，永远不作为事实来源。这条底线保证的是：哪天这套系统黄了，我剩下的还是一堆能直接翻的笔记，而不会是一把打不开的锁配一个看不懂的库。&lt;/p&gt;
&lt;h3 id="2-每次变更都是一次git-commit"&gt;2. 每次变更都是一次Git commit&lt;/h3&gt;
&lt;p&gt;谁改的、什么时候改的、改了什么——全部留在commit历史里。AI改错了记忆，和改错了代码一样，可以被review、可以revert。这条底线的价值很快就被验证过：项目进行中有一次，一个AI报告&amp;quot;本机仓库曾被外部进程强制重置&amp;quot;，我们就是靠Git的操作日志（reflog）把现场完整恢复的。要是记忆存在某个私有数据库里，那次可能就直接丢了。&lt;/p&gt;
&lt;h3 id="3-工作区隔离"&gt;3. 工作区隔离&lt;/h3&gt;
&lt;p&gt;每个项目的记忆是独立的vault（库），物理隔离，一个项目的记忆污染不能蔓延到另一个项目。多个AI对世界有不同&amp;quot;认知&amp;quot;时，靠Git分支来隔离各自的现实。&lt;/p&gt;
&lt;h3 id="4-跨库一等链接"&gt;4. 跨库一等链接&lt;/h3&gt;
&lt;p&gt;记忆之间用双链语法（类似Obsidian的&lt;code&gt;[[链接]]&lt;/code&gt;）连接，跨项目、跨库的引用是一等公民。真实世界的知识本来就不是树状的：一个&amp;quot;传感器&amp;quot;话题，会同时关联&amp;quot;通信协议&amp;quot;、&amp;ldquo;部署环境&amp;rdquo;，和&amp;quot;那次印象深刻的踩坑&amp;quot;。&lt;/p&gt;
&lt;h2 id="四一条记忆长什么样"&gt;四、一条记忆长什么样&lt;/h2&gt;
&lt;p&gt;空谈架构容易飘，看个简化示例（省略了部分字段）。一条关于项目的事实，在库里就是一个Markdown小节：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;### fact-0217 · 切片查询默认走三级降级
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 关于: [[Tool: 切片查询]]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 陈述: 检索先走向量近似，超时或预算不足时逐级退回
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; token索引、图遍历，保证任何情况下都有返回。
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 版本轴: repo=am-main, branch=main, commit=f40cd48
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 来源: 2026-09-23 基准测试轮 · 置信度: 高
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 状态: 有效
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;机器读它，人也能读它，Obsidian里点开就能改。查询的时候，AI报上&amp;quot;我在哪个仓库、哪个分支、当前时刻&amp;quot;，系统从记忆图里切出这个&amp;quot;世界&amp;quot;下所有有效的条目，渲染成一份上下文包交出去——过期的事实一条都不会混进来。而这一切的每一次变更，都对应Git历史里一行可以追溯的commit。&lt;/p&gt;
&lt;h2 id="五最容易低估的难点时间"&gt;五、最容易低估的难点：时间&lt;/h2&gt;
&lt;p&gt;整个设计里最反直觉、也最值钱的决定，是&lt;strong&gt;给每条记忆标注它属于哪个版本的世界&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;举个例子。一条记忆写着&amp;quot;配置文件的格式是YAML&amp;quot;。三个月后项目重构，格式改成了JSON。这条记忆过期了吗？&lt;/p&gt;
&lt;p&gt;看情况——如果你的服务还跑在旧版本上，它依然有效；如果你在新分支上开发，它已经错了。所以每条事实都必须回答：&amp;ldquo;我在说哪个仓库、哪个分支、哪个提交时刻的世界？&amp;rdquo;&lt;/p&gt;</description></item></channel></rss>