<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>记忆系统 on Kalend's Blog</title><link>https://blog.kalend.top/tags/%E8%AE%B0%E5%BF%86%E7%B3%BB%E7%BB%9F/</link><description>Recent content in 记忆系统 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 24 Jul 2026 08:30:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/%E8%AE%B0%E5%BF%86%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml"/><item><title>AI Agent的'遗忘症'怎么治？三层方案从金鱼脑到长期记忆</title><link>https://blog.kalend.top/2026/07/24/2026-07-24-agent-memory-implementation.html/</link><pubDate>Fri, 24 Jul 2026 08:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/07/24/2026-07-24-agent-memory-implementation.html/</guid><description>&lt;p&gt;先说结论：三层方案能治，且完全免费本地运行。&lt;/p&gt;
&lt;p&gt;你一定经历过这种崩溃——跟AI说了一百遍&amp;quot;代码用TypeScript不要JavaScript&amp;quot;，换个对话窗口它又问你用什么语言。你跟它讲过的项目背景、踩过的坑、你的审美偏好，下次全部归零。&lt;/p&gt;
&lt;p&gt;这不是模型的问题，是架构的问题。LLM天生没有状态，context window有物理上限，窗口关了记忆就没了。之前分析过记忆架构的理论框架，今天直接上手搭——三层方案，从热记忆到语义搜索到知识图谱，照着做就能跑通。&lt;/p&gt;
&lt;h2 id="为什么大多数ai助手是金鱼脑"&gt;为什么大多数AI助手是&amp;quot;金鱼脑&amp;quot;
&lt;/h2&gt;&lt;p&gt;先搞清楚病因。&lt;/p&gt;
&lt;p&gt;LLM是无状态函数——输入token，输出token，没有内部记忆寄存器。你的&amp;quot;对话历史&amp;quot;就是每次请求时把前面的内容重新塞进context window发给模型。这就是为什么窗口越来越大（从4K到128K到1M），但问题没有根本解决：&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;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;物理上限&lt;/td&gt;
					&lt;td&gt;128K窗口大约装10万字中文，一个复杂项目的完整上下文轻松超限&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;成本线性增长&lt;/td&gt;
					&lt;td&gt;token越多越贵，1M窗口一次调用可能几块钱&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;信息衰减&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Lost in the Middle&amp;quot;效应——中间的信息被遗忘，首尾偏好&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&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;那向量检索（RAG）呢？它解决了&amp;quot;找不到&amp;quot;的问题，但没解决&amp;quot;记不准&amp;quot;的问题。向量检索的本质是模糊联想——你问&amp;quot;上次那个数据库迁移方案&amp;rdquo;，它能找到语义相近的段落，但找不到你说的那一个精确段落。而且它没有结构化能力：&amp;ldquo;张三负责后端、李四负责前端&amp;quot;这种关系型信息，向量检索搞不定。&lt;/p&gt;
&lt;p&gt;所以需要多层方案。每一层解决不同的问题。&lt;/p&gt;
&lt;h2 id="第一层热记忆每轮都带上你的核心信息"&gt;第一层：热记忆——每轮都带上你的核心信息
&lt;/h2&gt;&lt;p&gt;热记忆是最简单也最有效的一层。原理很直白：把最重要的信息写进一个固定文本段，每次对话开始时自动注入到system prompt里。&lt;/p&gt;
&lt;h3 id="载体和格式"&gt;载体和格式
&lt;/h3&gt;&lt;p&gt;热记忆通常存在一个markdown文件里，比如这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## 用户偏好
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 代码语言：TypeScript，禁止JavaScript
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 回复风格：先结论后细节，不要铺垫
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 禁止行为：不要用emoji，不要加&amp;#34;首先&amp;#34;/&amp;#34;其次&amp;#34;连接词
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## 环境信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 操作系统：Debian 13，内核6.12
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 部署方式：Docker Compose，compose文件在~/infra/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 数据库：PostgreSQL 16，连接串在.env
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## 高频踩坑
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Hugo日期必须RFC3339格式，否则日期变0001-01-01
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 又拍云API只支持HMAC-SHA1签名，不支持Basic Auth
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="工作原理"&gt;工作原理
&lt;/h3&gt;&lt;p&gt;每轮对话开始时，系统把这段内容注入到system prompt中。模型看到的不是&amp;quot;你是一个通用助手&amp;rdquo;，而是&amp;quot;你是一个帮忞写代码的助手，用TypeScript，先给结论，不要emoji&amp;quot;。&lt;/p&gt;
&lt;p&gt;这就是热记忆的核心——&lt;strong&gt;每轮都带上的上下文常量&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="怎么写怎么更新"&gt;怎么写、怎么更新
&lt;/h3&gt;&lt;p&gt;写热记忆的原则：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;只放高频信息&lt;/strong&gt;。你的项目结构、技术栈、编码习惯——每次对话都需要的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;控制在2000字符以内&lt;/strong&gt;。热记忆占用context window，太长浪费token&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用结构化格式&lt;/strong&gt;。分块（用户偏好/环境/踩坑），用列表不用段落&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;定期清理&lt;/strong&gt;。过时的信息及时删除，否则会&amp;quot;污染&amp;quot;新对话&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;更新方式：手动编辑文件，或者在对话中告诉AI&amp;quot;记住XXX&amp;quot;，它会自动更新热记忆段。&lt;/p&gt;
&lt;h3 id="适用场景"&gt;适用场景
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&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;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;高频踩坑记录&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;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;历史对话记录&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;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;热记忆是第一道防线，解决80%的&amp;quot;又忘了&amp;quot;问题。但它的容量有限，跨会话的深度信息需要更深的存储。&lt;/p&gt;
&lt;h2 id="第二层语义搜索跨会话的长期记忆"&gt;第二层：语义搜索——跨会话的&amp;quot;长期记忆&amp;quot;
&lt;/h2&gt;&lt;p&gt;当信息量超过热记忆的容量限制，或者你需要查找历史对话中的某个细节时，就需要语义搜索层。&lt;/p&gt;
&lt;p&gt;这一层的核心是向量数据库——把文本切块、转成向量、存入数据库，查询时用语义相似度匹配。&lt;/p&gt;
&lt;h3 id="为什么不用传统搜索"&gt;为什么不用传统搜索
&lt;/h3&gt;&lt;p&gt;传统搜索（grep、全文检索）是精确匹配。你搜&amp;quot;数据库迁移&amp;quot;，它只找包含这几个字的段落。但用户可能说的是&amp;quot;把MySQL换成PostgreSQL那件事&amp;quot;——语义一样，措辞完全不同。&lt;/p&gt;
&lt;p&gt;向量搜索解决的就是这个问题。它把文本编码成高维向量，语义相近的文本在向量空间中距离更近。&lt;/p&gt;
&lt;h3 id="实际工具怎么用"&gt;实际工具怎么用
&lt;/h3&gt;&lt;p&gt;以MemPalace为例（57.6k stars，本地免费，ChromaDB底层）：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;存储信息&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;wing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;devops&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# 域/分类&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;room&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;hugo-blog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# 主题/子分类&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hugo日期必须用RFC3339格式(2026-05-14T10:00:00+08:00)，否则日期变0001-01-01&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;语义搜索&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hugo日期格式问题&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;wing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;devops&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# 可选，限定搜索范围&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="c1"&gt;# 返回最相关的5条&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;搜索结果包含文本内容、相似度分数、来源wing/room，可以按相关性排序后注入到当前对话中。&lt;/p&gt;
&lt;h3 id="组织结构wing-room-drawer"&gt;组织结构：Wing-Room-Drawer
&lt;/h3&gt;&lt;p&gt;MemPalace用三层结构组织信息：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wing（域）→ Room（主题）→ Drawer（条目）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;───────────────────────────────────────
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;devops/ hugo-blog/ Hugo日期格式踩坑
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 又拍云API签名问题
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; docker/ Compose网络配置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;user/ preferences/ 编码风格偏好
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; background/ 技术背景
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conversation/ general/ 历史对话摘要
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这种结构的好处是搜索时可以限定范围——搜Hugo相关的问题只在&lt;code&gt;devops/hugo-blog&lt;/code&gt;里找，不会被无关信息干扰。&lt;/p&gt;
&lt;h3 id="容量和性能"&gt;容量和性能
&lt;/h3&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;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;总Drawer数&lt;/td&gt;
					&lt;td&gt;21,986&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Wing数&lt;/td&gt;
					&lt;td&gt;14&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;底层存储&lt;/td&gt;
					&lt;td&gt;ChromaDB（本地SQLite）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;单次查询延迟&lt;/td&gt;
					&lt;td&gt;&amp;lt;100ms&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&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;2万多个drawer，查询依然在100毫秒内完成。这就是向量数据库的优势——检索时间不随数据量线性增长。&lt;/p&gt;
&lt;h3 id="适用场景-1"&gt;适用场景
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&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;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;技术记录检索&lt;/td&gt;
					&lt;td&gt;✅ 按wing/room分类存储&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;项目详情&lt;/td&gt;
					&lt;td&gt;✅ 长文本切块后存储&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;精确关系查询&lt;/td&gt;
					&lt;td&gt;❌ &amp;ldquo;谁负责后端&amp;quot;这种结构化问题&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&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;语义搜索解决了&amp;quot;跨会话的深度记忆&amp;quot;问题，但它的底层还是文本匹配。当你需要查询结构化的关系信息——&amp;ldquo;项目A现在的状态是什么&amp;rdquo;、&amp;ldquo;张三和李四什么关系&amp;rdquo;——就需要知识图谱。&lt;/p&gt;
&lt;h2 id="第三层知识图谱结构化的关系网络"&gt;第三层：知识图谱——结构化的&amp;quot;关系网络&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;向量搜索是模糊匹配，知识图谱是精确查询。&lt;/p&gt;
&lt;p&gt;知识图谱的核心是三元组：&lt;strong&gt;Subject → Predicate → Object&lt;/strong&gt;。比如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;忞 → 负责 → 博客系统
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;博客系统 → 使用 → Hugo + Stack主题
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;博客系统 → 部署到 → 又拍云CDN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;忞 → 偏好 → TypeScript
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这种结构让查询变得精确——&amp;ldquo;忞负责什么？&amp;ldquo;直接返回&amp;quot;博客系统&amp;rdquo;，不需要语义匹配。&lt;/p&gt;
&lt;h3 id="时间窗口自动废止旧事实"&gt;时间窗口：自动废止旧事实
&lt;/h3&gt;&lt;p&gt;知识图谱最容易出的问题是信息过时。&amp;ldquo;张三负责后端&amp;rdquo;，三个月后张三离职了，旧事实还在图谱里，查出来就是错的。&lt;/p&gt;
&lt;p&gt;解决方案是时间窗口——每条三元组都有&lt;code&gt;valid_from&lt;/code&gt;和&lt;code&gt;valid_to&lt;/code&gt;字段：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 添加事实&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;张三&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;负责&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;后端服务&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;valid_from&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2026-01&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 后来张三离职了，废止旧事实&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_invalidate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;张三&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;负责&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;后端服务&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# valid_to 自动设为今天&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;查询时只返回当前有效的事实（valid_to为空或大于今天），过时的信息自动过滤。&lt;/p&gt;
&lt;h3 id="实际使用场景"&gt;实际使用场景
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;场景1：追踪人物关系&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 记录团队分工&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;张三&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;负责&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;后端API&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;李四&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;负责&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;前端React&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;项目Alpha&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;后端负责人&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;张三&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 查询：谁负责后端？&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_knowledge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;后端API&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# → 张三 → 负责 → 后端API&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;场景2：追踪项目状态变化&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 项目状态随时间变化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;项目Alpha&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;状态&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;开发中&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;valid_from&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2026-01&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_invalidate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;项目Alpha&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;状态&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;开发中&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;项目Alpha&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;状态&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;测试中&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;valid_from&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2026-04&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;场景3：技术栈关系&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;博客系统&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;使用框架&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hugo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;博客系统&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;使用主题&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Stack&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;博客系统&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;托管平台&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;又拍云&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_kg_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Stack主题&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;依赖&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hugo 0.144+&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 查询：博客系统的依赖链是什么？&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mempalace_knowledge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;博客系统&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# → 返回所有相关三元组&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="何时该用知识图谱何时不该"&gt;何时该用知识图谱，何时不该
&lt;/h3&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;&amp;ldquo;谁负责后端&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;✅ 精确关系&lt;/td&gt;
					&lt;td&gt;❌ 模糊匹配不准&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;上次聊了什么&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;❌ 不适合文本&lt;/td&gt;
					&lt;td&gt;✅ 语义匹配&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;项目状态历史&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;✅ 时间窗口&lt;/td&gt;
					&lt;td&gt;❌ 无时间概念&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;技术文档查询&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;❌ 结构化太重&lt;/td&gt;
					&lt;td&gt;✅ 文本匹配&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;依赖关系链&amp;rdquo;&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;简单判断：如果查询里有&amp;quot;谁/什么/关系/状态/版本&amp;quot;这种结构化关键词，用知识图谱。如果是&amp;quot;上次/记得/聊过/说过&amp;quot;这种模糊回忆，用语义搜索。&lt;/p&gt;
&lt;h2 id="四级回忆链怎么把三层串起来"&gt;四级回忆链：怎么把三层串起来
&lt;/h2&gt;&lt;p&gt;三层不是独立工作的，它们形成一个级联回忆链：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;热记忆（每轮自动注入）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 没找到？
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MemPalace语义搜索（按需查询）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 还没找到？
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;session_search（跨会话精确搜索）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 最后手段
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;结构化文件搜索（grep/全文检索）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;决策逻辑很简单：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;热记忆&lt;/strong&gt;：高频、稳定、短文本——每次自动带上，不需要主动查询&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;语义搜索&lt;/strong&gt;：中频、长文本、需要模糊匹配——用户提到某个话题时触发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;session_search&lt;/strong&gt;：低频、需要精确匹配某个历史对话——明确要求时触发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件搜索&lt;/strong&gt;：兜底——其他方式都找不到时，直接grep源文件&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个级联的效率在于：热记忆零成本（已经注入了），语义搜索100ms内返回，session_search秒级，文件搜索最慢但最全。90%的需求在前两层就解决了。&lt;/p&gt;
&lt;h3 id="遗忘机制"&gt;遗忘机制
&lt;/h3&gt;&lt;p&gt;记忆系统不仅要能记，还要能忘。过时的信息如果不清理，会造成&amp;quot;记忆污染&amp;rdquo;——AI带着过期信息做决策，比没有记忆更糟糕。&lt;/p&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;kg_invalidate&lt;/td&gt;
					&lt;td&gt;手动标记&lt;/td&gt;
					&lt;td&gt;知识图谱中的事实失效，设valid_to=今天&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;热记忆清理&lt;/td&gt;
					&lt;td&gt;定期审计&lt;/td&gt;
					&lt;td&gt;删除过时的高频信息，释放context空间&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;sync清理&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;h2 id="避坑指南"&gt;避坑指南
&lt;/h2&gt;&lt;h3 id="坑1过早上知识图谱"&gt;坑1：过早上知识图谱
&lt;/h3&gt;&lt;p&gt;最常见的错误。需求还没验证就建复杂系统——三元组设计了一百个关系类型，实际只用到三个。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：先用热记忆+语义搜索跑一个月，确认确实有结构化查询需求，再加知识图谱。三层方案是渐进式的，不是一步到位的。&lt;/p&gt;
&lt;h3 id="坑2记忆污染"&gt;坑2：记忆污染
&lt;/h3&gt;&lt;p&gt;跨会话的过时信息混入当前对话。比如三个月前记录的&amp;quot;项目状态：开发中&amp;quot;，现在已经是&amp;quot;已上线&amp;quot;了，但没有及时更新。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：给信息打时间戳，定期审计，用kg_invalidate废止过时事实。热记忆更要频繁清理——它每轮都注入，过时信息的伤害最大。&lt;/p&gt;
&lt;h3 id="坑3热记忆膨胀"&gt;坑3：热记忆膨胀
&lt;/h3&gt;&lt;p&gt;什么都往热记忆里塞，2000字符变成5000字符，再变成10000字符。结果context window被记忆占了大半，留给实际对话的空间不够了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：热记忆只放&amp;quot;每轮都需要&amp;quot;的信息。&amp;ldquo;偶尔用到的&amp;quot;放语义搜索，&amp;ldquo;结构性的&amp;quot;放知识图谱。一个判断标准：如果这条信息连续5轮对话都没被用到，就不该在热记忆里。&lt;/p&gt;
&lt;h3 id="坑4向量检索的记忆泡沫"&gt;坑4：向量检索的&amp;quot;记忆泡沫&amp;rdquo;
&lt;/h3&gt;&lt;p&gt;向量搜索返回的结果看着相关，但实际上是噪声。比如你问&amp;quot;数据库性能优化&amp;rdquo;，它返回了&amp;quot;数据库备份方案&amp;quot;——语义相近但不是你要的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：用wing/room限定搜索范围，设置相似度阈值过滤低质量结果。语义搜索是召回，不是精确匹配，返回结果需要二次筛选。&lt;/p&gt;
&lt;h2 id="落地建议最小可用方案"&gt;落地建议：最小可用方案
&lt;/h2&gt;&lt;p&gt;不需要三层一步到位。推荐的渐进路线：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一周：只用热记忆&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;把用户偏好、技术栈、高频踩坑写进热记忆段，2000字符以内。这一层零成本，立即见效。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二周：加入语义搜索&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;安装MemPalace（本地ChromaDB，不需要API Key），开始把重要对话、技术记录存进去。配置wing/room分类结构。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三周：按需加知识图谱&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果发现经常需要查询&amp;quot;谁负责什么&amp;quot;、&amp;ldquo;项目状态&amp;rdquo;、&amp;ldquo;依赖关系&amp;quot;这种结构化信息，再加知识图谱层。不需要就不加。&lt;/p&gt;
&lt;p&gt;整个方案完全本地运行，不需要任何云服务、API Key或月费。MemPalace底层是ChromaDB（SQLite），数据存在本地磁盘，隐私完全可控。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;记忆系统的终点不是&amp;quot;记住&amp;rdquo;，而是&amp;quot;学会&amp;quot;。&lt;/p&gt;
&lt;p&gt;三层方案解决的是信息的存储和检索，但真正有价值的是从记忆中提取规律、变成行为。热记忆让你不用重复解释偏好，语义搜索让你不用重复查找历史，知识图谱让你不用重复梳理关系。&lt;/p&gt;
&lt;p&gt;把这些省下来的时间和精力，用在真正需要创造力的地方。&lt;/p&gt;
&lt;p&gt;— varkm&lt;/p&gt;</description></item></channel></rss>