<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI on Kalend's Blog</title><link>https://blog.kalend.top/tags/ai/</link><description>Recent content in AI on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 29 May 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>知识库搭完就完了？加上这两招，效率翻倍</title><link>https://blog.kalend.top/2026/05/29/2026-05-29-knowledge-base-advanced-2.html/</link><pubDate>Fri, 29 May 2026 10:00:00 +0800</pubDate><guid>https://blog.kalend.top/2026/05/29/2026-05-29-knowledge-base-advanced-2.html/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;备选标题①：别再用 RAG 从零搜了！3 步搭出互联知识库 + 接入 AI 助手
备选标题②：99% 的人卡在&amp;quot;知识库能搜&amp;quot;就停了——你还能再做两步
备选标题③：知识库入门容易精通难：两个进阶玩法效率直接翻倍&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;上篇我们用 MemPalace + ChromaDB + Ollama 搭好了基础知识库。安装、嵌入、搜索、定时扫描，一条龙跑通。&lt;/p&gt;
&lt;p&gt;但说实话，能搜只是起点。&lt;/p&gt;
&lt;p&gt;搜索是&amp;quot;每次从零发现&amp;quot;，你问一次它找一次，找不到就是找不到。知识之间的关系？没有。知识的沉淀和演化？也没有。&lt;/p&gt;
&lt;p&gt;今天讲两个进阶玩法，直接把知识库从&amp;quot;能用&amp;quot;拉到&amp;quot;好用&amp;quot;：&lt;/p&gt;
&lt;p&gt;第一，LLM Wiki 互联知识库。&lt;/p&gt;
&lt;p&gt;第二，接入 AI 助手，让记忆自动流转。&lt;/p&gt;
&lt;h2 id="一llm-wiki从搜文档到用知识"&gt;一、LLM Wiki：从&amp;quot;搜文档&amp;quot;到&amp;quot;用知识&amp;quot;
&lt;/h2&gt;&lt;h3 id="传统-rag-的致命问题"&gt;传统 RAG 的致命问题
&lt;/h3&gt;&lt;p&gt;每次提问，RAG 都要重新检索、重新理解、重新组织答案。同一个知识点问了十遍，它就检索了十遍，没有任何积累。&lt;/p&gt;
&lt;p&gt;这就像每次考试都从头翻课本，从不做笔记。&lt;/p&gt;
&lt;p&gt;LLM Wiki 的思路不一样：一次编译知识，持续更新，互联引用。&lt;/p&gt;
&lt;p&gt;它源自 Karpathy 的 LLM Wiki 模式，用互联的 Markdown 文件构建一个持久化的知识网络。&lt;/p&gt;
&lt;h3 id="三层架构"&gt;三层架构
&lt;/h3&gt;&lt;p&gt;LLM Wiki 的核心是三层分离：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Layer 1：&lt;code&gt;raw/&lt;/code&gt; —— 不可变原始资料。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;放文章、论文、对话记录等原材料。&lt;/p&gt;
&lt;p&gt;一旦放进去就不改，作为知识源头。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Layer 2：Wiki Pages —— AI 拥有的知识页面。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是核心产出层。&lt;/p&gt;
&lt;p&gt;包含实体页、概念页、对比页、查询页。&lt;/p&gt;
&lt;p&gt;每个页面都是经过消化的结构化知识。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Layer 3：&lt;code&gt;SCHEMA.md&lt;/code&gt; —— 结构规则和标签分类法。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;定义整个 wiki 的域配置、标签体系、页面阈值。&lt;/p&gt;
&lt;p&gt;是整个系统的&amp;quot;宪法&amp;quot;。&lt;/p&gt;
&lt;p&gt;三层分离的好处：原始数据不动，知识页面持续演化，规则独立维护。&lt;/p&gt;
&lt;h3 id="实操5-分钟搭骨架"&gt;实操：5 分钟搭骨架
&lt;/h3&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p ~/wiki/&lt;span class="o"&gt;{&lt;/span&gt;raw/&lt;span class="o"&gt;{&lt;/span&gt;articles,papers,transcripts,assets&lt;span class="o"&gt;}&lt;/span&gt;,entities,concepts,comparisons,queries&lt;span class="o"&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;code&gt;SCHEMA.md&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;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&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="gh"&gt;# Wiki Schema
&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="gu"&gt;## Domain
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AI Engineering &amp;amp; Knowledge Management
&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;## Taxonomy Tags
&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; &lt;span class="ni"&gt;#architecture&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; &lt;span class="ni"&gt;#embedding&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; &lt;span class="ni"&gt;#retrieval&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; &lt;span class="ni"&gt;#integration&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; &lt;span class="ni"&gt;#rag&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; &lt;span class="ni"&gt;#vector&lt;/span&gt;-db
&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 class="ni"&gt;#workflow&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="gu"&gt;## Page Thresholds
&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; entity_min_references: 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; concept_min_sections: 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; comparison_min_axes: 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; query_max_age_days: 90
&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;## Naming Convention
&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; lowercase-with-hyphens.md
&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;code&gt;index.md&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;/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="gh"&gt;# Wiki Index
&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="gu"&gt;## Entities
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;!-- entities listed here --&amp;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="gu"&gt;## Concepts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;!-- concepts listed here --&amp;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="gu"&gt;## Comparisons
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;!-- comparisons listed here --&amp;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="gu"&gt;## Queries
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;!-- queries listed here --&amp;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;code&gt;log.md&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;/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="gh"&gt;# Wiki Log
&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;| Date | Action | Target | Notes |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;完成。这就是一个完整的 LLM Wiki 骨架。&lt;/p&gt;
&lt;h3 id="三个核心操作"&gt;三个核心操作
&lt;/h3&gt;&lt;p&gt;LLM Wiki 围绕三个操作展开：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ingest（摄入）：把原材料变成知识。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;流程是：捕获原始源 → 讨论要点 → 检查已有页面 → 创建或更新页面 → 更新导航。&lt;/p&gt;
&lt;p&gt;不是简单存文件，而是消化、提取、关联、索引一条龙。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query（查询）：基于已有知识回答。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;关键区别：查完之后，有价值的答案会写回 wiki。知识越用越丰富。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lint（检查）：保持知识库健康。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;检测孤儿页面、断裂链接、索引完整性等六类问题。超过 100 个页面后，不跑 Lint 就是给自己埋雷。&lt;/p&gt;
&lt;h3 id="obsidian-兼容"&gt;Obsidian 兼容
&lt;/h3&gt;&lt;p&gt;LLM Wiki 原生兼容 Obsidian。&lt;code&gt;[[页面名]]&lt;/code&gt; 的 wikilinks 语法直接可用。&lt;/p&gt;
&lt;p&gt;Graph View 可以可视化知识网络。&lt;/p&gt;
&lt;p&gt;把 &lt;code&gt;~/wiki&lt;/code&gt; 当作 Vault 打开就行，零迁移成本。&lt;/p&gt;
&lt;h2 id="二接入-ai-助手让知识自动流转"&gt;二、接入 AI 助手：让知识自动流转
&lt;/h2&gt;&lt;p&gt;知识库搭好了，但每次手动查还是很累。&lt;/p&gt;
&lt;p&gt;更合理的做法是：把知识库变成 AI 助手的长期记忆，对话时自动存取。&lt;/p&gt;
&lt;h3 id="方式-amemoryprovider-深度集成推荐"&gt;方式 A：MemoryProvider 深度集成（推荐）
&lt;/h3&gt;&lt;p&gt;MemPalace 直接作为 AI 助手框架的 memory provider，对话时自动同步记忆。&lt;/p&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;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-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory_enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;user_profile_enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory_char_limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2200&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;user_char_limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1375&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mempalace&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nudge_interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flush_min_turns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="w"&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;code&gt;mempalace.json&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&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="nt"&gt;&amp;#34;auto_extract&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nt"&gt;&amp;#34;extract_model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;glm-4-flash&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;code&gt;extract_model&lt;/code&gt; 用轻量模型做记忆提取，成本极低。&lt;/p&gt;
&lt;p&gt;配置完成后，框架自动注册 6 个工具：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mempalace_recall&lt;/code&gt;（语义搜索）、&lt;code&gt;mempalace_store&lt;/code&gt;（精准存储）、&lt;code&gt;mempalace_knowledge&lt;/code&gt;（查询知识图谱）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mempalace_kg_add&lt;/code&gt;（添加三元组）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mempalace_kg_invalidate&lt;/code&gt;（标记过期）、&lt;code&gt;mempalace_status&lt;/code&gt;（记忆总览）。&lt;/p&gt;
&lt;h3 id="三个自动钩子"&gt;三个自动钩子
&lt;/h3&gt;&lt;p&gt;集成后，三个钩子自动工作：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;sync_turn()&lt;/code&gt;&lt;/strong&gt; —— 每轮对话结束，自动把消息持久化到 MemPalace。你不用手动存。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;on_memory_write()&lt;/code&gt;&lt;/strong&gt; —— 框架内置记忆写入时，自动镜像到 MemPalace。双写，不丢。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;on_session_end()&lt;/code&gt;&lt;/strong&gt; —— 对话结束时，自动提取三类记忆：Persona、Episodic、Instruction。提取完直接存入，下次对话自动加载。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;去重机制&lt;/strong&gt;：新记忆与已有记忆做 cosine similarity，超过 0.92 视为重复，跳过存储。防止记忆膨胀。&lt;/p&gt;
&lt;h3 id="方式-bmcp-server备选"&gt;方式 B：MCP Server（备选）
&lt;/h3&gt;&lt;p&gt;如果框架不支持 MemoryProvider，可以用 MCP 协议接入：&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-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;mcp_servers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mempalace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;python&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-m&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mempalace.mcp_server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&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;/p&gt;
&lt;h2 id="三多实例隔离别让并发写炸了你的数据库"&gt;三、多实例隔离：别让并发写炸了你的数据库
&lt;/h2&gt;&lt;p&gt;同时跑多个 Agent（主助手 + OpenClaw 定时挖掘 + 其他实验），它们都写同一个 ChromaDB，迟早出问题。&lt;/p&gt;
&lt;p&gt;ChromaDB 不是为高并发写入设计的。多进程同时写，数据损坏只是时间问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方案：每个 Agent 用独立的 MemPalace 实例。&lt;/strong&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;code&gt;~/.mempalace/palace/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;AI 助手主程序&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;第二实例&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;~/.mempalace/palace-openclaw/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;OpenClaw 定时挖掘&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;第三实例&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;~/.mempalace/palace-yuan/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;其他 Agent&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;路径不同，ChromaDB 实例不同，互不干扰。&lt;/p&gt;
&lt;p&gt;OpenClaw 定时挖掘脚本示例：&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&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="nv"&gt;PALACE_DB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/root/.mempalace/palace-openclaw&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PALACE_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/root/.openclaw/workspace-main&amp;#34;&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;mempalace --palace &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$PALACE_DB&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; mine &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$PALACE_PATH&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --limit &lt;span class="m"&gt;500&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;然后配置定时执行。用 OpenClaw 自己的 cron，不要用系统 crontab。&lt;/p&gt;
&lt;h2 id="踩坑清单"&gt;踩坑清单
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;1. ChromaDB 并发写必挂。&lt;/strong&gt; 多 Agent 共享一个实例是&amp;quot;能跑&amp;quot;但&amp;quot;迟早崩&amp;quot;。老老实实隔离。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 记忆提取模型别用大模型。&lt;/strong&gt; &lt;code&gt;extract_model&lt;/code&gt; 用轻量模型就够了。用大模型做提取，成本是收益的十倍。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. LLM Wiki 的 Lint 别偷懒。&lt;/strong&gt; 知识库超过 100 个页面后，孤儿页面和矛盾内容会越来越多。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. wiki 路径别用中文。&lt;/strong&gt; 文件名和目录名都用英文加连字符。中文路径在 wikilinks 中会出奇怪问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. MemPalace 去重阈值 0.92 不要调低。&lt;/strong&gt; 调到 0.85 以下，相似但不同的记忆会被误判为重复丢弃。宁可多存，不可误删。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. &lt;code&gt;flush_min_turns&lt;/code&gt; 别设太大。&lt;/strong&gt; 设成 20 的话，对话在第 15 轮断了，那 15 轮的记忆都没存。建议 6-8 轮。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结
&lt;/h2&gt;&lt;p&gt;上篇解决了&amp;quot;知识库能存能搜&amp;quot;。&lt;/p&gt;
&lt;p&gt;这篇解决了两个更关键的问题：&lt;/p&gt;
&lt;p&gt;第一，知识库能互联、能演化。LLM Wiki 的三层架构让知识从&amp;quot;孤立文档&amp;quot;变成&amp;quot;互联网络&amp;quot;，越用越丰富。&lt;/p&gt;
&lt;p&gt;第二，知识库能和 AI 助手自动协同。MemPalace 作为 MemoryProvider，对话即存储，查询即回忆，全程自动化。&lt;/p&gt;
&lt;p&gt;加上多实例隔离，多 Agent 并行也不会打架。&lt;/p&gt;
&lt;p&gt;三步走：基础搭建 → 互联知识库 → AI 助手集成。到这步，你的知识库系统才算真正完成。&lt;/p&gt;</description></item><item><title>3个命令搭知识库：你的笔记终于能"搜懂意思"了</title><link>https://blog.kalend.top/2026/05/29/build-knowledge-base-3-commands.html/</link><pubDate>Fri, 29 May 2026 07:36:00 +0800</pubDate><guid>https://blog.kalend.top/2026/05/29/build-knowledge-base-3-commands.html/</guid><description>&lt;p&gt;我搭了个跑在自己机器上的知识库，能自动扫描文件、语义搜索、定时更新，全程零 API 费用。&lt;/p&gt;
&lt;p&gt;之前试过关键词搜索笔记，搜&amp;quot;AI怎么记住对话&amp;quot;，0 结果。换成语义搜索，秒命中。下面是完整搭建过程，每一步都能直接复制执行。&lt;/p&gt;
&lt;h2 id="为什么你需要一个知识库"&gt;为什么你需要一个知识库
&lt;/h2&gt;&lt;p&gt;笔记越积越多，Ctrl+F 搜不到东西了。关键词匹配只认字面，不认意思。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;AI怎么记住之前的对话&amp;quot;搜不到&amp;quot;记忆系统架构&amp;rdquo;，但语义上是一回事。这就是关键词搜索的致命缺陷。&lt;/p&gt;
&lt;h2 id="第一步装-mempalace5分钟"&gt;第一步：装 MemPalace（5分钟）
&lt;/h2&gt;&lt;p&gt;MemPalace 是本地优先的 AI 记忆系统，底层用 ChromaDB 存向量数据。&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-bash" data-lang="bash"&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;pip install 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;&lt;span class="c1"&gt;# 验证&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mempalace status
&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;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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Palace Status:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Drawers filed: 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total memories: 0
&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;code&gt;~/.mempalace/&lt;/code&gt; 目录。默认嵌入模型是 all-MiniLM-L6-v2（英文模型，384维），后面会换成中文模型。&lt;/p&gt;
&lt;h2 id="第二步装-ollama--中文嵌入模型10分钟"&gt;第二步：装 Ollama + 中文嵌入模型（10分钟）
&lt;/h2&gt;&lt;p&gt;默认英文模型对中文命中率约 50%。换成中文模型，实测 100%。&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 装 Ollama（本地推理引擎）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://ollama.com/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&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;# 2. 启动服务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama serve &lt;span class="p"&gt;&amp;amp;&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;# 3. 拉中文嵌入模型（约4.7GB）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama pull qwen3-embedding
&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;验证 Ollama 在跑：&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl http://localhost:11434/api/embeddings &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;model&amp;#34;:&amp;#34;qwen3-embedding&amp;#34;,&amp;#34;prompt&amp;#34;:&amp;#34;测试中文嵌入&amp;#34;}&amp;#39;&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;返回一个 4096 维浮点数组就对了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;踩坑提醒：&lt;/strong&gt; Ollama 嵌入 API 用 &lt;code&gt;prompt&lt;/code&gt; 字段，不是 &lt;code&gt;input&lt;/code&gt;。ChromaDB 自带的 Ollama 适配器用错了字段，后面会说怎么绕过。&lt;/p&gt;
&lt;h2 id="第三步初始化知识库3分钟"&gt;第三步：初始化知识库（3分钟）
&lt;/h2&gt;&lt;p&gt;编辑 &lt;code&gt;~/.mempalace/config.json&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&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="nt"&gt;&amp;#34;palace_path&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/root/.mempalace/palace&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="nt"&gt;&amp;#34;collection_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mempalace_drawers&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="nt"&gt;&amp;#34;topic_wings&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&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="s2"&gt;&amp;#34;project&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="s2"&gt;&amp;#34;technical&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="s2"&gt;&amp;#34;personal&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="s2"&gt;&amp;#34;creative&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="s2"&gt;&amp;#34;work&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="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;code&gt;topic_wings&lt;/code&gt; 是知识分区，相当于书架分类标签。按需修改。&lt;/p&gt;
&lt;p&gt;写初始化脚本 &lt;code&gt;init_palace.py&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;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&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="ch"&gt;#!/usr/bin/env python3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;用 Qwen3 中文嵌入模型初始化 MemPalace 向量集合&amp;#34;&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="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;chromadb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&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="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Qwen3Embedding&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="s2"&gt;&amp;#34;&amp;#34;&amp;#34;绕过 ChromaDB Ollama 适配器的 prompt/input bug&amp;#34;&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="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://localhost:11434&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;qwen3-embedding&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="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&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="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__call__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;texts&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;embeddings&lt;/span&gt; &lt;span class="o"&gt;=&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;texts&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;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&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="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/api/embeddings&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;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;t&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;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&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="n"&gt;embeddings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;embedding&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;embeddings&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;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chromadb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PersistentClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/root/.mempalace/palace&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;ef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Qwen3Embedding&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;collection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_or_create_collection&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;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mempalace_drawers&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;embedding_function&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ef&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;metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;hnsw:space&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;cosine&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="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="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;集合已就绪，当前 &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;collection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 条记录&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;/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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python3 init_palace.py
&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; 如果之前用默认模型创建过集合（384维），必须删掉重建。Qwen3 是 4096 维，维度不同会报错。&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&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;python3 -c &lt;span class="s2"&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;import chromadb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;client = chromadb.PersistentClient(path=&amp;#39;/root/.mempalace/palace&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;for c in client.list_collections():
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; client.delete_collection(c.name)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; print(f&amp;#39;已删除: {c.name}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 然后重新运行 init_palace.py&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;h2 id="第四步存入第一条知识2分钟"&gt;第四步：存入第一条知识（2分钟）
&lt;/h2&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;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&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="ch"&gt;#!/usr/bin/env python3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;存入一条知识并验证&amp;#34;&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="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;chromadb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;hashlib&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&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;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chromadb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PersistentClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/root/.mempalace/palace&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;col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mempalace_drawers&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;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;AI 助手的记忆系统分四层：热记忆（每轮注入）→ 用户画像 → 知识库按需检索 → 会话历史搜索&amp;#34;&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;technical&amp;#34;&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;memory-architecture&amp;#34;&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;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://localhost:11434/api/embeddings&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;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;qwen3-embedding&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&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;embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;embedding&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;doc_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;()[:&lt;/span&gt;&lt;span class="mi"&gt;16&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;col&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;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;ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;doc_id&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;embeddings&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;embedding&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;documents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;text&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;metadatas&lt;/span&gt;&lt;span class="o"&gt;=&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="s2"&gt;&amp;#34;wing&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;wing&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="s2"&gt;&amp;#34;room&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;room&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="s2"&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%Y-%m-&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;T%H:%M:%S&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="p"&gt;}]&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="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;已存入: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;...&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;总条数: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;col&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&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;h2 id="第五步验证语义搜索2分钟"&gt;第五步：验证语义搜索（2分钟）
&lt;/h2&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;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&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="ch"&gt;#!/usr/bin/env python3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;语义搜索测试&amp;#34;&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="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;chromadb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&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;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chromadb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PersistentClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/root/.mempalace/palace&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;col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mempalace_drawers&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;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;AI 怎么记住之前的对话？&amp;#34;&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;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://localhost:11434/api/embeddings&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;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;qwen3-embedding&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&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_embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;embedding&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;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query_embeddings&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;query_embedding&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;n_results&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;documents&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&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;dist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;distances&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;i&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="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;metadatas&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;wing&amp;#34;&lt;/span&gt;&lt;span class="p"&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dist&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.3f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;wing&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;) &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;...&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;/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;&amp;ldquo;AI怎么记住之前的对话&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;0 结果&lt;/td&gt;
 &lt;td&gt;命中&amp;quot;四层记忆架构&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;怎么防止模型忘东西&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;0 结果&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;0 结果&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;p&gt;写一个脚本扫描你的笔记/文档目录，自动切片 + 向量化 + 入库。&lt;/p&gt;
&lt;p&gt;保存为 &lt;code&gt;auto_index.sh&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;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;span class="lnt"&gt;54
&lt;/span&gt;&lt;span class="lnt"&gt;55
&lt;/span&gt;&lt;span class="lnt"&gt;56
&lt;/span&gt;&lt;span class="lnt"&gt;57
&lt;/span&gt;&lt;span class="lnt"&gt;58
&lt;/span&gt;&lt;span class="lnt"&gt;59
&lt;/span&gt;&lt;span class="lnt"&gt;60
&lt;/span&gt;&lt;span class="lnt"&gt;61
&lt;/span&gt;&lt;span class="lnt"&gt;62
&lt;/span&gt;&lt;span class="lnt"&gt;63
&lt;/span&gt;&lt;span class="lnt"&gt;64
&lt;/span&gt;&lt;span class="lnt"&gt;65
&lt;/span&gt;&lt;span class="lnt"&gt;66
&lt;/span&gt;&lt;span class="lnt"&gt;67
&lt;/span&gt;&lt;span class="lnt"&gt;68
&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; -e
&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="nv"&gt;DOCS_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/notes&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PALACE_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.mempalace/palace&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;LOG_FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.mempalace/logs/index_&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;date +%Y%m%d&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.log&amp;#34;&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;mkdir -p &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dirname &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$LOG_FILE&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&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;log&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;[&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;date &lt;span class="s1"&gt;&amp;#39;+%H:%M:%S&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; tee -a &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$LOG_FILE&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&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;log &lt;span class="s2"&gt;&amp;#34;开始扫描: &lt;/span&gt;&lt;span class="nv"&gt;$DOCS_DIR&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&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="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt; -v mempalace &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&amp;gt;/dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mempalace mine &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$DOCS_DIR&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --limit &lt;span class="m"&gt;500&lt;/span&gt; &amp;gt;&amp;gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$LOG_FILE&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; log &lt;span class="s2"&gt;&amp;#34;MemPalace mine 完成&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; python3 &lt;span class="s"&gt;&amp;lt;&amp;lt; &amp;#39;PYEOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;import os, hashlib, time, requests, chromadb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;DOCS_DIR = os.environ.get(&amp;#34;DOCS_DIR&amp;#34;, os.path.expanduser(&amp;#34;~/notes&amp;#34;))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;client = chromadb.PersistentClient(path=os.path.expanduser(&amp;#34;~/.mempalace/palace&amp;#34;))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;col = client.get_collection(&amp;#34;mempalace_drawers&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;existing_ids = set(col.get()[&amp;#34;ids&amp;#34;]) if col.count() &amp;gt; 0 else set()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;def embed(text):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; r = requests.post(&amp;#34;http://localhost:11434/api/embeddings&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; json={&amp;#34;model&amp;#34;: &amp;#34;qwen3-embedding&amp;#34;, &amp;#34;prompt&amp;#34;: text[:500]}, timeout=120)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; return r.json()[&amp;#34;embedding&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;added = 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;for root, dirs, files in os.walk(DOCS_DIR):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; dirs[:] = [d for d in dirs if not d.startswith(&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="s"&gt; for f in files:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; if not f.endswith((&amp;#34;.md&amp;#34;, &amp;#34;.txt&amp;#34;, &amp;#34;.py&amp;#34;, &amp;#34;.yaml&amp;#34;, &amp;#34;.json&amp;#34;)):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; continue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; fpath = os.path.join(root, f)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; try:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; content = open(fpath, &amp;#34;r&amp;#34;, errors=&amp;#34;ignore&amp;#34;).read()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; except:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; continue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; if len(content) &amp;lt; 50:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; continue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; chunks = [content[i:i+500] for i in range(0, len(content), 500)]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; for chunk in chunks:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; doc_id = hashlib.md5(chunk.encode()).hexdigest()[:16]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; if doc_id in existing_ids:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; continue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; try:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; vec = embed(chunk)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; col.add(ids=[doc_id], embeddings=[vec], documents=[chunk],
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; metadatas=[{&amp;#34;source&amp;#34;: fpath, &amp;#34;wing&amp;#34;: &amp;#34;docs&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;timestamp&amp;#34;: time.strftime(&amp;#34;%Y-%m-%dT%H:%M:%S&amp;#34;)}])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; existing_ids.add(doc_id)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; added += 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; except Exception as e:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; print(f&amp;#34; 错误 {fpath}: {e}&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;print(f&amp;#34;新增 {added} 条，总计 {col.count()} 条&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;PYEOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; log &lt;span class="s2"&gt;&amp;#34;Python 扫描完成&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&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="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt; -v mempalace &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&amp;gt;/dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mempalace status 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; head -10 &lt;span class="p"&gt;|&lt;/span&gt; tee -a &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$LOG_FILE&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&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;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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x auto_index.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./auto_index.sh ~/notes
&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;CPU 推理每条约 20 秒，100 个文件大约 30 分钟。有 GPU 会快很多。&lt;/p&gt;
&lt;h2 id="第七步定时自动更新2分钟"&gt;第七步：定时自动更新（2分钟）
&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 编辑 crontab&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;crontab -e
&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;# 添加这行：每天凌晨3点自动更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; * * * ~/auto_index.sh ~/notes &amp;gt;&amp;gt; ~/.mempalace/logs/cron.log 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&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;或者用 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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; * * * mempalace mine ~/notes --limit &lt;span class="m"&gt;500&lt;/span&gt; &amp;gt;&amp;gt; ~/.mempalace/logs/cron.log 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&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;h2 id="第八步接入-ai-助手可选"&gt;第八步：接入 AI 助手（可选）
&lt;/h2&gt;&lt;p&gt;如果你用 AI 助手框架，可以把 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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# AI 助手框架配置文件&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory_enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mempalace&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory_char_limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2200&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flush_min_turns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="w"&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;/p&gt;
&lt;h2 id="踩坑清单必看"&gt;踩坑清单（必看）
&lt;/h2&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;嵌入模型 API 字段错误&lt;/td&gt;
 &lt;td&gt;返回空向量，ChromaDB 报 IndexError&lt;/td&gt;
 &lt;td&gt;用 &lt;code&gt;prompt&lt;/code&gt; 不用 &lt;code&gt;input&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;换嵌入模型后维度冲突&lt;/td&gt;
 &lt;td&gt;报 dimension mismatch&lt;/td&gt;
 &lt;td&gt;必须删旧集合重建&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ChromaDB 并发写损坏&lt;/td&gt;
 &lt;td&gt;数据库报 file is not a database&lt;/td&gt;
 &lt;td&gt;不同进程用不同目录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CPU 推理太慢&lt;/td&gt;
 &lt;td&gt;几百条数据跑几小时&lt;/td&gt;
 &lt;td&gt;批量跑用 batch_size=5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;中文搜索命中率低&lt;/td&gt;
 &lt;td&gt;all-MiniLM-L6-v2 只有50%命中&lt;/td&gt;
 &lt;td&gt;换 Qwen3-Embedding&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ollama 服务没启动&lt;/td&gt;
 &lt;td&gt;嵌入请求超时&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ollama serve&lt;/code&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;500字左右切一片&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="成本核算"&gt;成本核算
&lt;/h2&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;Ollama 模型约4.7GB + ChromaDB 约10MB/千条&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;内存占用&lt;/td&gt;
 &lt;td&gt;Ollama 常驻约150MB（CPU模式）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;API 费用&lt;/td&gt;
 &lt;td&gt;0（全部本地）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;首次搭建时间&lt;/td&gt;
 &lt;td&gt;约30分钟&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;</description></item><item><title>AI文章有股味：11特征自查</title><link>https://blog.kalend.top/2026/05/21/ai-writing-patterns-draft.html/</link><pubDate>Thu, 21 May 2026 21:00:00 +0800</pubDate><guid>https://blog.kalend.top/2026/05/21/ai-writing-patterns-draft.html/</guid><description>&lt;h1 id="你的ai文章有股ai味这11个中文特征你至少中了3个"&gt;你的AI文章有股AI味：这11个中文特征，你至少中了3个
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;用AI写文章的人越来越多，但大部分AI产出的文字有个致命问题——一眼就能看出是AI写的。问题不在内容，而在&amp;quot;味&amp;quot;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="先说结论"&gt;先说结论
&lt;/h2&gt;&lt;p&gt;有个开源项目整理了40个AI写作特征，其中11个是中文独有的。&lt;/p&gt;
&lt;p&gt;大部分人至少中3个，严重的全中。&lt;/p&gt;
&lt;p&gt;这些特征不是&amp;quot;错&amp;quot;，而是AI的统计本性导致的。&lt;/p&gt;
&lt;p&gt;知道后改起来不难。下面逐个拆解，每个都给Before和After对照。&lt;/p&gt;
&lt;h2 id="为什么ai写的东西有味"&gt;为什么AI写的东西有&amp;quot;味&amp;quot;
&lt;/h2&gt;&lt;p&gt;AI本质上是个统计鹦鹉。&lt;/p&gt;
&lt;p&gt;它不&amp;quot;理解&amp;quot;内容，只是根据概率预测下一个词。所以它总是选最&amp;quot;安全&amp;quot;、最&amp;quot;常见&amp;quot;的搭配。&lt;/p&gt;
&lt;p&gt;结果就是——用AI写100篇企业文化宣传稿，长得都差不多。&lt;/p&gt;
&lt;h2 id="中文ai味的11个特征"&gt;中文AI味的11个特征
&lt;/h2&gt;&lt;h3 id="1-互联网黑话堆砌"&gt;1. 互联网黑话堆砌
&lt;/h3&gt;&lt;p&gt;一段话里塞5-6个互联网黑话，读起来像PPT。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频词：&lt;/strong&gt; 赋能、抓手、闭环、沉淀、链路、矩阵、生态、打法、组合拳、底层逻辑&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;我们需要找到核心抓手，打通全链路闭环，通过私域裂变赋能品牌心智沉淀，构建护城河壁垒。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;我们需要想清楚核心策略是什么，把获客到复购的流程跑通，让用户记住品牌。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 你的文章里，一段话出现3个以上黑话的段落，就是重灾区。&lt;/p&gt;
&lt;h3 id="2-形容词膨胀"&gt;2. 形容词膨胀
&lt;/h3&gt;&lt;p&gt;把普通的事说得像改变世界。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频词：&lt;/strong&gt; 划时代、颠覆性、卓越、典范、标杆、翘楚、令人瞩目&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;这是一款具有划时代意义的颠覆性产品，在行业中树立了全新标杆，堪称卓越典范。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;这款产品有几个明显区别于竞品的功能。发布两周注册用户超过10万。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 数一数你文章里&amp;quot;颠覆&amp;quot;&amp;ldquo;卓越&amp;quot;&amp;ldquo;标杆&amp;quot;出现几次。超过2次就该删。&lt;/p&gt;
&lt;h3 id="3-宏大叙事框架"&gt;3. 宏大叙事框架
&lt;/h3&gt;&lt;p&gt;把任何小事都放在时代大潮里讲。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频句式：&lt;/strong&gt; &amp;ldquo;在&amp;hellip;的背景下&amp;rdquo;、&amp;ldquo;随着&amp;hellip;的不断发展&amp;rdquo;、&amp;ldquo;在&amp;hellip;的浪潮中&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;在数字化转型的大背景下，随着人工智能技术的不断发展，企业面临着前所未有的机遇与挑战。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;企业现在用AI的地方越来越多。但也带来了新问题。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 看你的开头。如果前两行出现了&amp;quot;背景下&amp;quot;&amp;ldquo;大趋势&amp;quot;&amp;ldquo;浪潮&amp;rdquo;，删掉重来。&lt;/p&gt;
&lt;h3 id="4-意义升华"&gt;4. 意义升华
&lt;/h3&gt;&lt;p&gt;不允许任何事实只是事实，一定要赋予它意义。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频句式：&lt;/strong&gt; &amp;ldquo;具有重要的现实意义&amp;rdquo;、&amp;ldquo;发人深省&amp;rdquo;、&amp;ldquo;值得深入思考&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;这一发现具有重要的现实意义和深远的理论价值，为我们理解这一现象提供了全新视角，值得深入思考。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;这一发现解释了之前观测到但无法确认的现象。研究团队已公开数据和代码。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 搜&amp;quot;意义&amp;quot;&amp;ldquo;价值&amp;quot;&amp;ldquo;值得&amp;rdquo;。如果它们不是在讨论具体的价格或数值，就删掉。&lt;/p&gt;
&lt;h3 id="5-模板化过渡"&gt;5. 模板化过渡
&lt;/h3&gt;&lt;p&gt;用套话硬把上下文连起来，实际上逻辑是断的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频句式：&lt;/strong&gt; &amp;ldquo;值得注意的是&amp;rdquo;、&amp;ldquo;综上所述&amp;rdquo;、&amp;ldquo;毋庸置疑&amp;rdquo;、&amp;ldquo;更值得一提的是&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;值得注意的是，该技术在医疗领域取得了显著成效。更值得一提的是，其应用范围还在不断扩大。综上所述，前景广阔。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;这项技术目前用在医疗领域最多。其他领域的应用也在增长。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 搜那几个高频句式。找到了，删掉，看句子还通不通。通常更通。&lt;/p&gt;
&lt;h3 id="6-客套收尾"&gt;6. 客套收尾
&lt;/h3&gt;&lt;p&gt;文章结尾突然变成客服。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频句式：&lt;/strong&gt; &amp;ldquo;希望对你有所帮助&amp;rdquo;、&amp;ldquo;感谢您的阅读&amp;rdquo;、&amp;ldquo;欢迎随时交流&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;以上就是关于机器学习的全部介绍。希望本文对您有所帮助。感谢您的耐心阅读！&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;（直接删掉。文章在最后一个实质观点处结束。）&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 如果你的结尾是&amp;quot;希望&amp;hellip;&amp;ldquo;开头，删。读者不需要祝福。&lt;/p&gt;
&lt;h3 id="7-四六句对仗"&gt;7. 四六句对仗
&lt;/h3&gt;&lt;p&gt;像政府工作报告或演讲稿。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频句式：&lt;/strong&gt; &amp;ldquo;只有&amp;hellip;才能&amp;hellip;；只有&amp;hellip;才能&amp;hellip;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;只有不断创新，才能不断进步；只有不断学习，才能不断成长；只有不断突破，才能不断超越。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;持续改进依赖创新和学习，但也需要务实——先验证想法再扩大投入。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 朗读一遍。如果哪段读起来像领导讲话，改。&lt;/p&gt;
&lt;h3 id="8-假辩证"&gt;8. 假辩证
&lt;/h3&gt;&lt;p&gt;什么话题都要列正反两面，篇幅还几乎对等。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频句式：&lt;/strong&gt; &amp;ldquo;一方面&amp;hellip;另一方面&amp;hellip;&amp;quot;、&amp;ldquo;需要找到平衡&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;人工智能带来了巨大便利，提高了效率。但与此同时，也引发了伦理问题。一方面AI可以辅助诊断，另一方面数据隐私不容忽视。需要在发展与监管之间找到平衡。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;AI在医疗领域增长很快，但数据隐私的监管还没跟上。欧盟的AI法案尝试解决这个问题，效果有待观察。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 搜&amp;quot;一方面&amp;quot;&amp;ldquo;平衡&amp;rdquo;。如果你两面都写了但没给出自己的判断，这就是假辩证。&lt;/p&gt;
&lt;h3 id="9-四字成语滥用"&gt;9. 四字成语滥用
&lt;/h3&gt;&lt;p&gt;密度太高，而且总用最常见的那几个。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频成语：&lt;/strong&gt; 日新月异、突飞猛进、方兴未艾、如虎添翼、乘风破浪、潜移默化&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;随着科技的日新月异，各行各业突飞猛进，新兴产业如雨后春笋般涌现，可谓方兴未艾。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;新技术催生了一些新行业，也改变了老行业的做法。变化最快的是金融和零售。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 数成语数量。一段话里超过2个四字成语，就多了。&lt;/p&gt;
&lt;h3 id="10-万能结尾"&gt;10. 万能结尾
&lt;/h3&gt;&lt;p&gt;空洞的未来展望。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频句式：&lt;/strong&gt; &amp;ldquo;未来可期&amp;rdquo;、&amp;ldquo;前景广阔&amp;rdquo;、&amp;ldquo;拭目以待&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;展望未来，随着技术不断进步，前景广阔，未来可期。让我们拭目以待，共同迎接更美好的明天。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;明年计划在三个新城市上线。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 如果你的结尾是&amp;quot;未来可期&amp;quot;&amp;ldquo;拭目以待&amp;rdquo;，替换成具体事实或直接删掉。&lt;/p&gt;
&lt;h3 id="11-数字枚举强迫"&gt;11. 数字枚举强迫
&lt;/h3&gt;&lt;p&gt;什么内容都要往固定数字框架里塞。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高频句式：&lt;/strong&gt; &amp;ldquo;三大趋势&amp;rdquo;、&amp;ldquo;五大特征&amp;rdquo;、&amp;ldquo;四大要素&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;当前行业呈现三大发展趋势：一是智能化加速推进，二是绿色化蔚然成风，三是全球化持续深化。这五大特征构成了四大核心要素。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;After：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;行业最近的变化：智能化程度提高，环保要求加严，海外市场竞争加剧。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;自检：&lt;/strong&gt; 数一数文章里有几个&amp;quot;三大&amp;quot;&amp;ldquo;五大&amp;quot;&amp;ldquo;四大&amp;rdquo;。超过3个就是病。&lt;/p&gt;
&lt;h2 id="快速自查清单"&gt;快速自查清单
&lt;/h2&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;一段话3个以上黑话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;形容词膨胀&lt;/td&gt;
 &lt;td&gt;颠覆性/卓越/标杆&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;颠覆&amp;quot;&amp;ldquo;标杆&amp;quot;超过2次&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;宏大叙事&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;在&amp;hellip;背景下&amp;rdquo;/&amp;ldquo;浪潮&amp;rdquo;&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;rdquo;/&amp;ldquo;值得思考&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;搜&amp;quot;意义&amp;rdquo;，非数值就删&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;模板过渡&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;值得注意的是&amp;rdquo;/&amp;ldquo;综上所述&amp;rdquo;&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;rdquo;&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;hellip;才能&amp;hellip;&amp;rdquo;&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;hellip;另一方面&amp;rdquo;&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;一段超2个四字成语&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;tr&gt;
 &lt;td&gt;数字强迫&lt;/td&gt;
 &lt;td&gt;三大/五大/四大&lt;/td&gt;
 &lt;td&gt;超过3个就多&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="怎么改三个实操技巧"&gt;怎么改？三个实操技巧
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;技巧一：朗读。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;哪段读着像领导讲话，就改哪段。&lt;/p&gt;
&lt;p&gt;写完文章出声读一遍，比任何工具都管用。AI味的段落读起来特别&amp;quot;顺&amp;rdquo;，顺到不自然。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;技巧二：成语换大白话。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;看到四字成语，问自己：能不能用日常用语说同样的事？&lt;/p&gt;
&lt;p&gt;&amp;ldquo;日新月异&amp;rdquo;→&amp;ldquo;变化很快&amp;rdquo;。&amp;ldquo;赋能&amp;rdquo;→&amp;ldquo;帮助&amp;rdquo;。&amp;ldquo;闭环&amp;rdquo;→&amp;ldquo;跑通流程&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;每个替换都让文章更接地气。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;技巧三：删&amp;quot;意义&amp;quot;句。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;搜索&amp;quot;意义&amp;quot;&amp;ldquo;价值&amp;quot;&amp;ldquo;前景&amp;quot;&amp;ldquo;未来可期&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;这些词后面的句子，90%可以整句删掉。剩下的10%，用具体数据替换。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;以上特征整理自开源项目 &lt;a class="link" href="https://github.com/blader/humanizer" target="_blank" rel="noopener"
 &gt;humanizer&lt;/a&gt;（MIT协议），该项目基于维基百科&amp;quot;AI写作特征&amp;quot;条目，总结了40个中英文AI写作特征。&lt;/em&gt;&lt;/p&gt;
&lt;section style="margin:20px 0;padding:16px 20px;background:linear-gradient(135deg,#4a90d9,#357abd);border-radius:8px;text-align:center;"&gt;
&lt;p style="margin:0;color:#fff;font-size:16px;font-weight:bold;line-height:1.6;"&gt;关注 varkm，一起学习，一起成长&lt;/p&gt;
&lt;/section&gt;</description></item><item><title>多Agent协作实战：从写稿到审核的完整Pipeline</title><link>https://blog.kalend.top/2026/05/19/multi-agent-pipeline-part3.html/</link><pubDate>Tue, 19 May 2026 07:00:00 +0800</pubDate><guid>https://blog.kalend.top/2026/05/19/multi-agent-pipeline-part3.html/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;一篇AI对比文章，4个Agent接力完成，10步Pipeline自动跑通。中间经历3轮审核修复循环，全程1.5小时零人工介入。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们搭了一套多Agent协作的写作Pipeline。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4个专职Agent&lt;/strong&gt;：写作、审核、博客部署、公众号发布，各司其职。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10步自动流水线&lt;/strong&gt;：从第一行字写出来，到博客上线、公众号草稿就绪，全自动。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;质量门禁&lt;/strong&gt;：审核不通过，下游任务直接卡住，修好了才放行。&lt;/p&gt;
&lt;p&gt;这是系列第3篇。第1篇讲了Kanban+Profile架构，第2篇搭了单个Writer Agent。&lt;/p&gt;
&lt;p&gt;这篇是&lt;strong&gt;多Agent协作的完整实战&lt;/strong&gt;——怎么让4个Agent接力干活、互相检查、自动修复。&lt;/p&gt;
&lt;h2 id="1-4个agent怎么分工"&gt;1. 4个Agent怎么分工
&lt;/h2&gt;&lt;p&gt;先看全局。每个Agent有自己的&lt;strong&gt;Profile&lt;/strong&gt;（身份配置）和&lt;strong&gt;SOUL.md&lt;/strong&gt;（行为规范）。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Agent&lt;/th&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;strong&gt;blog-writer&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;写原始文章&lt;/td&gt;
 &lt;td&gt;glm-5.1&lt;/td&gt;
 &lt;td&gt;204K上下文，有记忆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;reviewer&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;审核内容质量&lt;/td&gt;
 &lt;td&gt;glm-5.1&lt;/td&gt;
 &lt;td&gt;只审不改，无记忆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;blog-creator&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;转Markdown+部署&lt;/td&gt;
 &lt;td&gt;glm-4.7&lt;/td&gt;
 &lt;td&gt;最精简工具集&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;mp-creator&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;转公众号HTML+上传&lt;/td&gt;
 &lt;td&gt;glm-4.7&lt;/td&gt;
 &lt;td&gt;4个微信skill&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;类比&lt;/strong&gt;：像一个编辑部——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;◆ &lt;strong&gt;Writer&lt;/strong&gt;是记者，负责采访写稿&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Reviewer&lt;/strong&gt;是编辑，负责审稿把关&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Creator&lt;/strong&gt;是排版员，负责报纸和网站两个渠道的排版&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意模型选择：写作和审核用强模型(glm-5.1)，格式转换用弱模型(glm-4.7)。&lt;/p&gt;
&lt;p&gt;为什么？格式转换是机械活，不需要创造力。省下来的Token是真金白银。&lt;/p&gt;
&lt;h2 id="2-pipeline全景10步流水线"&gt;2. Pipeline全景：10步流水线
&lt;/h2&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;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&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; ① blog-writer ② reviewer Fan-out
&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; │ 写原始文章 │──────▶│ 内容审核 │──PASS│ 并行分发 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ (glm-5.1) │ 7min │ PII/事实/AI味 │12min └──────┬──────────┘
&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&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; ③ blog-creator ④ mp-creator
&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; │ Markdown+部署 │ │ HTML+封面+上传│
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ (glm-4.7) │ │ (glm-4.7) │
&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&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; ⑤ reviewer ⑥ reviewer
&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; │ Blog格式审核 │ │ 公众号格式审核 │
&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; PASS ✅ FAIL ❌
&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&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; │ ⟳ 审核修复循环×3轮 │
&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; │ →⑩审核 PASS ✅ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;/p&gt;
&lt;ul&gt;
&lt;li&gt;◆ &lt;strong&gt;Step ①②&lt;/strong&gt;：Writer写完文章，交给Reviewer审核内容&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Fan-out&lt;/strong&gt;：审核通过后，同时派给Blog和公众号两个渠道&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step ③④&lt;/strong&gt;：两个Creator并行工作，互不等待&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step ⑤⑥&lt;/strong&gt;：各自的Reviewer再审一遍格式&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step ⑦-⑩&lt;/strong&gt;：公众号没过，进入修复循环&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Blog那边一次通过，公众号那边经历了3轮修复。为什么？&lt;/p&gt;
&lt;p&gt;因为公众号对&lt;strong&gt;段落长度&lt;/strong&gt;有严格限制（每段≤100字），模型对&amp;quot;手机屏幕3行&amp;quot;的物理感知不够精确。&lt;/p&gt;
&lt;h2 id="3-依赖链怎么让agent自动接力"&gt;3. 依赖链：怎么让Agent自动接力
&lt;/h2&gt;&lt;p&gt;核心机制是&lt;strong&gt;Kanban的parents依赖&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;创建任务时指定parents，意思是：&amp;ldquo;等这些父任务完成后，我才启动&amp;rdquo;。&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建Writer任务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban_create&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;title&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="nv"&gt;assignee&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;blog-writer&amp;#34;&lt;/span&gt;&lt;span class="o"&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;# 创建Reviewer任务，依赖Writer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban_create&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;title&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="nv"&gt;assignee&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;reviewer&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;t_writer_xxx&amp;#34;&lt;/span&gt;&lt;span class="o"&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;# 创建两个Creator任务，依赖Reviewer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban_create&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;title&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="nv"&gt;assignee&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;blog-creator&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;t_reviewer_xxx&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban_create&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;title&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="nv"&gt;assignee&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mp-creator&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;t_reviewer_xxx&amp;#34;&lt;/span&gt;&lt;span class="o"&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;注意看最后两行——它们的parents是同一个Reviewer任务。&lt;/p&gt;
&lt;p&gt;这意味着Reviewer通过后，Blog和公众号&lt;strong&gt;同时启动&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这就是Fan-out（扇出）：一个任务完成，触发多个下游并行执行。&lt;/p&gt;
&lt;h2 id="4-质量门禁fail就卡住"&gt;4. 质量门禁：FAIL就卡住
&lt;/h2&gt;&lt;p&gt;Reviewer不是走过场。它有&lt;strong&gt;5级审核维度&lt;/strong&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;PII信息脱敏&lt;/td&gt;
 &lt;td&gt;手机号/邮箱/IP必须处理&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;tr&gt;
 &lt;td&gt;🟡 3处FAIL&lt;/td&gt;
 &lt;td&gt;AI味检测&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;tr&gt;
 &lt;td&gt;🔵 格式规范&lt;/td&gt;
 &lt;td&gt;平台适配&lt;/td&gt;
 &lt;td&gt;Blog/公众号各有专项检查&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;关键机制&lt;/strong&gt;：Reviewer判定FAIL时，在kanban_complete的metadata里写入问题列表。&lt;/p&gt;
&lt;p&gt;下游任务的parents依赖没满足，&lt;strong&gt;不会自动启动&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;必须创建修复任务，修好后再提交审核。这就是&amp;quot;门禁&amp;quot;——&lt;/p&gt;
&lt;p&gt;不是标记一下就过了，是真的&lt;strong&gt;挡住&lt;/strong&gt;，修好才放行。&lt;/p&gt;
&lt;h2 id="5-实战3轮修复循环"&gt;5. 实战：3轮修复循环
&lt;/h2&gt;&lt;p&gt;说说真实发生的事。&lt;/p&gt;
&lt;p&gt;第一轮公众号HTML生成后，Reviewer发现&lt;strong&gt;11个段落超标&lt;/strong&gt;（限制100字/段）。&lt;/p&gt;
&lt;p&gt;其中3个段落超过150字，在手机上会显示成一大坨。&lt;/p&gt;
&lt;p&gt;mp-creator收到问题列表，拆分段落。&lt;/p&gt;
&lt;p&gt;Reviewer二轮审核——&lt;strong&gt;还有5段超标&lt;/strong&gt;。继续修。&lt;/p&gt;
&lt;p&gt;第三轮审核——&lt;strong&gt;91个段落全部≤100字&lt;/strong&gt;，PASS。&lt;/p&gt;
&lt;p&gt;整个过程零人工介入。Reviewer自动FAIL，mp-creator自动读问题列表修复。&lt;/p&gt;
&lt;p&gt;从第一次FAIL到最终PASS，&lt;strong&gt;修复循环自动跑了3轮&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;教训：模型对&amp;quot;手机屏幕3行=100字&amp;quot;这种物理约束，理解不够精确。需要多轮迭代。&lt;/p&gt;
&lt;h2 id="6-模型分级省钱的关键"&gt;6. 模型分级：省钱的关键
&lt;/h2&gt;&lt;p&gt;4个Agent不是都用最贵的模型。按&lt;strong&gt;职责复杂度&lt;/strong&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;glm-5.1（强）&lt;/td&gt;
 &lt;td&gt;需要创造力和上下文&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;内容审核&lt;/td&gt;
 &lt;td&gt;glm-5.1（强）&lt;/td&gt;
 &lt;td&gt;找错需要精确理解&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;格式转换&lt;/td&gt;
 &lt;td&gt;glm-4.7（省）&lt;/td&gt;
 &lt;td&gt;机械任务，够用即可&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;辅助工具&lt;/td&gt;
 &lt;td&gt;glm-4.5-air（最省）&lt;/td&gt;
 &lt;td&gt;压缩/搜索等轻量任务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实际效果：写作和审核两个最关键的环节用强模型保证质量。&lt;/p&gt;
&lt;p&gt;格式转换这种&amp;quot;体力活&amp;quot;用弱模型，成本直接砍半。&lt;/p&gt;
&lt;p&gt;而且reviewer在下游兜底，弱模型出了问题也能被拦截。&lt;/p&gt;
&lt;h2 id="7-搭建要点回顾"&gt;7. 搭建要点回顾
&lt;/h2&gt;&lt;p&gt;如果你也想搭这样的Pipeline，关键步骤：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 1&lt;/strong&gt;：为每个角色创建独立Profile&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 2&lt;/strong&gt;：写SOUL.md定义行为规范&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 3&lt;/strong&gt;：配置review skill的审核checklist&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 4&lt;/strong&gt;：用kanban的parents参数搭建依赖链&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 5&lt;/strong&gt;：按职责复杂度分配模型&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最关键的设计决策是&lt;strong&gt;质量门禁&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;没有它，Agent就是各干各的，错误会一路传到最终发布。&lt;/p&gt;
&lt;p&gt;有了它，每个环节都有人把关，问题在传播之前就被拦截。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;关注 varkm，一起学习，一起成长&lt;/p&gt;
&lt;p&gt;多Agent协作系列第3篇 · 第4篇将分享踩坑最佳实践&lt;/p&gt;</description></item><item><title>Andrej Karpathy</title><link>https://blog.kalend.top/wiki/entities/karpathy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/entities/karpathy/</guid><description>&lt;h1 id="andrej-karpathy"&gt;Andrej Karpathy
&lt;/h1&gt;&lt;h2 id="概述"&gt;概述
&lt;/h2&gt;&lt;p&gt;AI 研究者，曾任 Tesla AI 总监、OpenAI 联合创始成员。提出 LLM Wiki 概念——让 AI 增量构建持久化知识库的文件结构规范。&lt;/p&gt;
&lt;h2 id="相关实体"&gt;相关实体
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;[[llm-wiki]] — 提出的知识库规范&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="来源"&gt;来源
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="raw/articles/rwayne-hermes-obsidian-llm-wiki-2026.md" &gt;raw/articles/rwayne-hermes-obsidian-llm-wiki-2026.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Hermes Agent</title><link>https://blog.kalend.top/wiki/entities/hermes-agent/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/entities/hermes-agent/</guid><description>&lt;h1 id="hermes-agent"&gt;Hermes Agent
&lt;/h1&gt;&lt;h2 id="概述"&gt;概述
&lt;/h2&gt;&lt;p&gt;Hermes Agent 是 [[nous-research]] 开发的开源自主 AI 代理框架。支持多平台（CLI、Telegram、Discord、微信等）、多模型提供商，核心特点是内置技能学习循环和五层记忆架构。&lt;/p&gt;
&lt;h2 id="核心架构"&gt;核心架构
&lt;/h2&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;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;config.yaml&lt;/td&gt;
 &lt;td&gt;主配置：模型、工具、网关、MCP&lt;/td&gt;
 &lt;td&gt;🟡&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;核心&lt;/td&gt;
 &lt;td&gt;.env&lt;/td&gt;
 &lt;td&gt;API密钥与机密&lt;/td&gt;
 &lt;td&gt;🔴&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;核心&lt;/td&gt;
 &lt;td&gt;SOUL.md&lt;/td&gt;
 &lt;td&gt;Agent性格，每轮加载无需重启&lt;/td&gt;
 &lt;td&gt;🟢&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;数据&lt;/td&gt;
 &lt;td&gt;state.db&lt;/td&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;sessions/&lt;/td&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;memories/&lt;/td&gt;
 &lt;td&gt;MEMORY.md + USER.md 热记忆&lt;/td&gt;
 &lt;td&gt;🟡&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;数据&lt;/td&gt;
 &lt;td&gt;memory.db&lt;/td&gt;
 &lt;td&gt;记忆后端（可删，数据在.md）&lt;/td&gt;
 &lt;td&gt;🟢&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;数据&lt;/td&gt;
 &lt;td&gt;kanban.db&lt;/td&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;skills/&lt;/td&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;scripts/&lt;/td&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;hooks/&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;h3 id="profile-隔离系统"&gt;Profile 隔离系统
&lt;/h3&gt;&lt;p&gt;每个 profile 位于 &lt;code&gt;profiles/&amp;lt;name&amp;gt;/&lt;/code&gt;，是独立的 Hermes home：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;拥有独立的 config.yaml、SOUL.md、sessions、memories、skills、auth、cron、kanban&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键限制&lt;/strong&gt;：全局 skills/ 对 profile worker 不可见，需手动复制到 &lt;code&gt;profiles/&amp;lt;name&amp;gt;/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;适用场景：多角色隔离（如 blog-writer、reviewer 等独立 profile）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="skill-系统"&gt;Skill 系统
&lt;/h3&gt;&lt;p&gt;按分类组织在 &lt;code&gt;skills/&lt;/code&gt;，每个技能包含 SKILL.md 与可选的 refs/templates/scripts。技能从经验中积累可复用程序化知识，跨会话持久化，且不会被 Hermes 更新覆盖。&lt;/p&gt;
&lt;h3 id="记忆系统"&gt;记忆系统
&lt;/h3&gt;&lt;p&gt;五层记忆架构（详见 [[memory-layered-architecture]]）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L0: Persona (SOUL.md) — 每轮注入&lt;/li&gt;
&lt;li&gt;L1: 热记忆 (MEMORY.md + USER.md) — 每轮注入&lt;/li&gt;
&lt;li&gt;L2: [[mempalace]] 语义检索 — 按需&lt;/li&gt;
&lt;li&gt;L3: 知识图谱 — 按需&lt;/li&gt;
&lt;li&gt;L4: 会话历史 — 按需&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="多平台网关"&gt;多平台网关
&lt;/h3&gt;&lt;p&gt;支持 CLI、Telegram、Discord、微信（WeChat）、WhatsApp、Slack 等。网关状态保存在 gateway_state.json 和各平台子目录中。&lt;/p&gt;
&lt;h2 id="版本"&gt;版本
&lt;/h2&gt;&lt;p&gt;当前 v0.14.0。更新命令：&lt;code&gt;hermes update&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="相关"&gt;相关
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;[[nous-research]] — 开发团队&lt;/li&gt;
&lt;li&gt;[[llm-wiki]] — 知识库方案&lt;/li&gt;
&lt;li&gt;[[obsidian]] — 笔记工具集成&lt;/li&gt;
&lt;li&gt;[[mempalace]] — 记忆系统&lt;/li&gt;
&lt;li&gt;[[opencode]] — 编程Agent，可通过delegate_task编排&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>IMA OpenAPI</title><link>https://blog.kalend.top/wiki/entities/ima-openapi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/entities/ima-openapi/</guid><description>&lt;h1 id="ima-openapi"&gt;IMA OpenAPI
&lt;/h1&gt;&lt;h2 id="概述"&gt;概述
&lt;/h2&gt;&lt;p&gt;腾讯 IMA（ima.qq.com）的 OpenAPI 接口，提供云端笔记管理和知识库操作能力。与 [[mempalace]] 的本地记忆互补，负责云端文档管理。&lt;/p&gt;
&lt;h2 id="功能模块"&gt;功能模块
&lt;/h2&gt;&lt;h3 id="notes-笔记管理"&gt;Notes 笔记管理
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;搜索笔记、浏览笔记本、获取笔记内容&lt;/li&gt;
&lt;li&gt;创建笔记（import_doc）、追加内容（append_doc）&lt;/li&gt;
&lt;li&gt;写入前强制 UTF-8 编码校验（否则乱码不可修复）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="knowledge-base-知识库"&gt;Knowledge-base 知识库
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;上传文件到知识库、添加网页链接&lt;/li&gt;
&lt;li&gt;搜索知识库内容、浏览知识库条目&lt;/li&gt;
&lt;li&gt;获取可添加的知识库列表&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="认证"&gt;认证
&lt;/h2&gt;&lt;p&gt;Client ID + API Key，HTTP POST + JSON Body 发送到 ima.qq.com。&lt;/p&gt;
&lt;h2 id="注意事项"&gt;注意事项
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;文件上传到知识库时保持原样不转码&lt;/li&gt;
&lt;li&gt;PowerShell 5.1 环境需特殊处理（GBK 编码问题）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="在记忆系统中的位置"&gt;在记忆系统中的位置
&lt;/h2&gt;&lt;p&gt;作为 [[memory-layered-architecture]] 中的外部知识源，处理需要跨设备/持久化的大文件和文档管理。与 Hermes 的集成优先级低于 [[mempalace]] 的深度集成。&lt;/p&gt;
&lt;h2 id="相关"&gt;相关
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;[[mempalace]] — 本地记忆系统（互补）&lt;/li&gt;
&lt;li&gt;[[hermes-agent]] — 通过 skill 系统集成&lt;/li&gt;
&lt;li&gt;[[memory-layered-architecture]] — 整体记忆架构&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>MemPalace</title><link>https://blog.kalend.top/wiki/entities/mempalace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/entities/mempalace/</guid><description>&lt;h1 id="mempalace"&gt;MemPalace
&lt;/h1&gt;&lt;h2 id="概述"&gt;概述
&lt;/h2&gt;&lt;p&gt;本地优先的 AI 记忆操作系统。逐字存储对话历史，不摘要不压缩，支持语义检索和知识图谱。与 [[hermes-agent]] 集成后形成五层记忆架构。&lt;/p&gt;
&lt;h2 id="项目信息"&gt;项目信息
&lt;/h2&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;GitHub&lt;/td&gt;
 &lt;td&gt;&lt;a class="link" href="https://github.com/MemPalace/mempalace" target="_blank" rel="noopener"
 &gt;https://github.com/MemPalace/mempalace&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Stars&lt;/td&gt;
 &lt;td&gt;47,687&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;版本&lt;/td&gt;
 &lt;td&gt;v3.3.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;许可证&lt;/td&gt;
 &lt;td&gt;MIT&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;安装&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pip install mempalace&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="核心能力"&gt;核心能力
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;宫殿结构&lt;/strong&gt;：Wing(人/项目) → Room(日期/话题) → Drawer(逐字原文块)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;混合搜索&lt;/strong&gt;：BM25 关键词 + ChromaDB 向量语义&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识图谱&lt;/strong&gt;：SQLite 三元组存储实体关系&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP Server&lt;/strong&gt;：29 个 MCP 工具，支持 &lt;code&gt;mempalace_store/recall/knowledge&lt;/code&gt; 等&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多实例隔离&lt;/strong&gt;：不同系统使用独立 palace 实例&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="基准成绩"&gt;基准成绩
&lt;/h2&gt;&lt;p&gt;LongMemEval R@5 = 98.4%（无需 LLM）&lt;/p&gt;
&lt;h2 id="嵌入模型"&gt;嵌入模型
&lt;/h2&gt;&lt;p&gt;从 all-MiniLM-L6-v2（英文为主，中文命中率 50%）迁移到 Qwen3-Embedding-0.6B（中英双语，中文命中率 100%），通过 [[ollama]] 本地部署。&lt;/p&gt;
&lt;h2 id="实际部署"&gt;实际部署
&lt;/h2&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;th&gt;使用者&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Hermes 主&lt;/td&gt;
 &lt;td&gt;~/.mempalace/palace/&lt;/td&gt;
 &lt;td&gt;40 drawers&lt;/td&gt;
 &lt;td&gt;Hermes MCP Server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;OpenClaw&lt;/td&gt;
 &lt;td&gt;~/.mempalace/palace-openclaw/&lt;/td&gt;
 &lt;td&gt;659 drawers&lt;/td&gt;
 &lt;td&gt;OpenClaw 定时挖掘&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Yuan&lt;/td&gt;
 &lt;td&gt;~/.mempalace/palace-yuan/&lt;/td&gt;
 &lt;td&gt;预留&lt;/td&gt;
 &lt;td&gt;Yuan profile&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="与-hermes-集成"&gt;与 Hermes 集成
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;路径A（已实施）&lt;/strong&gt;：MCP 工具方式 — config.yaml 配置 mempalace MCP Server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;路径B（待实施）&lt;/strong&gt;：MemoryProvider 插件 — 实现自动 prefetch/sync_turn 深度集成&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="相关"&gt;相关
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;[[hermes-agent]] — 通过 MCP 集成&lt;/li&gt;
&lt;li&gt;[[memory-layered-architecture]] — 五层记忆架构&lt;/li&gt;
&lt;li&gt;[[ollama]] — 本地嵌入模型部署&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Nous Research</title><link>https://blog.kalend.top/wiki/entities/nous-research/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/entities/nous-research/</guid><description>&lt;h1 id="nous-research"&gt;Nous Research
&lt;/h1&gt;&lt;h2 id="概述"&gt;概述
&lt;/h2&gt;&lt;p&gt;Nous Research 是 Hermes Agent 的开发团队，专注于开源 AI 代理框架。&lt;/p&gt;
&lt;h2 id="代表项目"&gt;代表项目
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hermes Agent&lt;/strong&gt; — 自主 AI 代理框架，支持多平台、多模型、技能系统&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="相关实体"&gt;相关实体
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;[[hermes-agent]] — 旗舰产品&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="来源"&gt;来源
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="raw/articles/rwayne-hermes-obsidian-llm-wiki-2026.md" &gt;raw/articles/rwayne-hermes-obsidian-llm-wiki-2026.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>OpenClaw</title><link>https://blog.kalend.top/wiki/entities/openclaw/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/entities/openclaw/</guid><description>&lt;h1 id="openclaw"&gt;OpenClaw
&lt;/h1&gt;&lt;h2 id="概述"&gt;概述
&lt;/h2&gt;&lt;p&gt;OpenClaw（小龙虾🦞）是 [[hermes-agent]] 的直接竞品，定位为全平台个人 AI 助手。&lt;/p&gt;
&lt;h2 id="项目信息"&gt;项目信息
&lt;/h2&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;GitHub Stars&lt;/td&gt;
 &lt;td&gt;37.2万&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;语言&lt;/td&gt;
 &lt;td&gt;TypeScript&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;许可证&lt;/td&gt;
 &lt;td&gt;MIT&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;创建时间&lt;/td&gt;
 &lt;td&gt;2025-11&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;赞助商&lt;/td&gt;
 &lt;td&gt;OpenAI、GitHub、NVIDIA、Vercel&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="核心特性"&gt;核心特性
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;20+ 渠道支持（含微信/QQ）&lt;/li&gt;
&lt;li&gt;Voice Wake（语音唤醒）&lt;/li&gt;
&lt;li&gt;Live Canvas（实时画布）&lt;/li&gt;
&lt;li&gt;原生 App（桌面+移动）&lt;/li&gt;
&lt;li&gt;ClawHub：5400+ 社区 skills&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="与-hermes-的设计哲学差异"&gt;与 Hermes 的设计哲学差异
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;维度&lt;/th&gt;
 &lt;th&gt;OpenClaw&lt;/th&gt;
 &lt;th&gt;Hermes Agent&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;终端 Agent 框架 + 多 Agent 编排&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;语言&lt;/td&gt;
 &lt;td&gt;TypeScript&lt;/td&gt;
 &lt;td&gt;Python&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;记忆系统&lt;/td&gt;
 &lt;td&gt;内置&lt;/td&gt;
 &lt;td&gt;五层架构 + [[mempalace]]&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;扩展&lt;/td&gt;
 &lt;td&gt;ClawHub 社区&lt;/td&gt;
 &lt;td&gt;Skill 系统 + Kanban Pipeline&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;编排&lt;/td&gt;
 &lt;td&gt;单 Agent&lt;/td&gt;
 &lt;td&gt;多 Agent（orchestrator + worker）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="共存部署"&gt;共存部署
&lt;/h2&gt;&lt;p&gt;在同一台机器上同时运行 Hermes 和 OpenClaw。OpenClaw 使用独立的 [[mempalace]] 实例（/root/.mempalace/palace-openclaw/），避免 ChromaDB 并发写冲突。&lt;/p&gt;
&lt;h2 id="相关"&gt;相关
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;[[hermes-agent]] — 直接竞品&lt;/li&gt;
&lt;li&gt;[[mempalace]] — 共享记忆系统（隔离实例）&lt;/li&gt;
&lt;li&gt;[[opencode]] — 终端编程助手（互补而非竞争）&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Understand Anything</title><link>https://blog.kalend.top/wiki/entities/understand-anything/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/entities/understand-anything/</guid><description>&lt;h1 id="understand-anything"&gt;Understand Anything
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;25.8K 星代码理解工具，把整个项目变成交互式知识图谱。Tree-sitter + LLM 混合架构，7-agent pipeline。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="概述"&gt;概述
&lt;/h2&gt;&lt;p&gt;Understand Anything（Lum1104/Understand-Anything）是一个基于 Tree-sitter + LLM 的代码理解工具，能将整个代码库转化为交互式知识图谱。通过 7-agent 流水线实现代码分析、关系提取和可视化展示。支持 15+ 主流开发平台。&lt;/p&gt;
&lt;h2 id="核心数据"&gt;核心数据
&lt;/h2&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;GitHub Stars&lt;/td&gt;
 &lt;td&gt;25.8K&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Forks&lt;/td&gt;
 &lt;td&gt;2.2K&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Commits&lt;/td&gt;
 &lt;td&gt;539&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;许可证&lt;/td&gt;
 &lt;td&gt;MIT&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;主语言&lt;/td&gt;
 &lt;td&gt;TypeScript&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;最后更新&lt;/td&gt;
 &lt;td&gt;2026-05-24&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="技术架构"&gt;技术架构
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tree-sitter&lt;/strong&gt;: 语法解析层，提取代码结构（AST）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM&lt;/strong&gt;: 语义理解层，分析代码关系和意图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;7-Agent Pipeline&lt;/strong&gt;: 多代理协作完成分析任务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;交互式知识图谱&lt;/strong&gt;: 可视化展示模块间关系&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="支持平台"&gt;支持平台
&lt;/h2&gt;&lt;p&gt;Claude Code、Cursor、VS Code + Copilot、[[opencode]]、Codex、Gemini CLI 等 15+ 平台。&lt;/p&gt;
&lt;h2 id="安装与使用"&gt;安装与使用
&lt;/h2&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&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;curl -fsSL https://raw.githubusercontent.com/Lum1104/Understand-Anything/main/install.sh &lt;span class="p"&gt;|&lt;/span&gt; bash
&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;# 针对 OpenCode 平台&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://raw.githubusercontent.com/Lum1104/Understand-Anything/main/install.sh &lt;span class="p"&gt;|&lt;/span&gt; bash -s opencode
&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;/understand &lt;span class="c1"&gt;# 分析代码库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/understand-dashboard &lt;span class="c1"&gt;# 打开可视化面板&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/understand --language zh &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;h2 id="与-opencode-的关系"&gt;与 [[opencode]] 的关系
&lt;/h2&gt;&lt;p&gt;Understand Anything 原生支持 [[opencode]] 作为宿主平台。在 OpenCode 中安装后，可通过 &lt;code&gt;/understand&lt;/code&gt; 命令直接调用，将当前项目的代码结构转为知识图谱，辅助理解和导航。&lt;/p&gt;
&lt;h2 id="与-hermes-agent-的关系"&gt;与 [[hermes-agent]] 的关系
&lt;/h2&gt;&lt;p&gt;作为代码理解工具，Understand Anything 的知识图谱输出可以作为 [[hermes-agent]] 编排编码任务时的上下文输入，帮助 Agent 更好地理解项目结构。&lt;/p&gt;
&lt;h2 id="来源"&gt;来源
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;2026-05-25 cron 会话：微信公众号文章研究与撰写（&amp;ldquo;25K星的代码理解神器：把整个项目变成知识图谱&amp;rdquo;）&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>五层记忆架构</title><link>https://blog.kalend.top/wiki/concepts/memory-layered-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/concepts/memory-layered-architecture/</guid><description>&lt;h1 id="五层记忆架构"&gt;五层记忆架构
&lt;/h1&gt;&lt;h2 id="概述"&gt;概述
&lt;/h2&gt;&lt;p&gt;[[hermes-agent]] 的记忆系统由五层组成，从每轮注入到按需检索，形成完整的长短期记忆链路。设计原则：&lt;strong&gt;热记忆 = 指路牌（只放每次都需要的），MemPalace = 百科全书（按需检索）&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="五层结构"&gt;五层结构
&lt;/h2&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;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;L0&lt;/td&gt;
 &lt;td&gt;Persona&lt;/td&gt;
 &lt;td&gt;SOUL.md&lt;/td&gt;
 &lt;td&gt;~3000字符&lt;/td&gt;
 &lt;td&gt;每轮注入&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;L1&lt;/td&gt;
 &lt;td&gt;热记忆&lt;/td&gt;
 &lt;td&gt;MEMORY.md + USER.md&lt;/td&gt;
 &lt;td&gt;~2200字符上限&lt;/td&gt;
 &lt;td&gt;每轮注入（启动时冻结）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;L2&lt;/td&gt;
 &lt;td&gt;语义检索&lt;/td&gt;
 &lt;td&gt;[[mempalace]] ChromaDB&lt;/td&gt;
 &lt;td&gt;无硬限&lt;/td&gt;
 &lt;td&gt;按需 mempalace_recall&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;L3&lt;/td&gt;
 &lt;td&gt;知识图谱&lt;/td&gt;
 &lt;td&gt;[[mempalace]] SQLite 三元组&lt;/td&gt;
 &lt;td&gt;无硬限&lt;/td&gt;
 &lt;td&gt;按需 mempalace_knowledge&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;L4&lt;/td&gt;
 &lt;td&gt;会话历史&lt;/td&gt;
 &lt;td&gt;session_search (FTS5)&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;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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;热记忆(L0+L1) → MemPalace语义搜索(L2) → session_search(L4) → 结构化文件
&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;h2 id="溢出机制"&gt;溢出机制
&lt;/h2&gt;&lt;p&gt;当热记忆超过 ~70% 容量时，非核心信息下沉到 [[mempalace]]：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网络拓扑、环境配置 → 下沉&lt;/li&gt;
&lt;li&gt;项目细节、技术记录 → 下沉&lt;/li&gt;
&lt;li&gt;核心偏好、高频踩坑 → 保留&lt;/li&gt;
&lt;li&gt;行为规则、授权声明 → 保留&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="三工具协同"&gt;三工具协同
&lt;/h2&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;[[hermes-agent]] 内置&lt;/td&gt;
 &lt;td&gt;记忆编排中枢&lt;/td&gt;
 &lt;td&gt;L0 + L1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;[[mempalace]]&lt;/td&gt;
 &lt;td&gt;本地长期语义记忆&lt;/td&gt;
 &lt;td&gt;L2 + L3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;[[ima-openapi]]&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;p&gt;使用 Qwen3-Embedding-0.6B（4096维，通过 [[ollama]] 部署），中文命中率从 50% 提升到 100%。&lt;/p&gt;
&lt;h2 id="相关"&gt;相关
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;[[mempalace]] — L2/L3 实现&lt;/li&gt;
&lt;li&gt;[[hermes-agent]] — 中枢&lt;/li&gt;
&lt;li&gt;[[ima-openapi]] — 云端知识源&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>知识库自动化工作流</title><link>https://blog.kalend.top/wiki/concepts/knowledge-base-workflow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/concepts/knowledge-base-workflow/</guid><description>&lt;h1 id="知识库自动化工作流"&gt;知识库自动化工作流
&lt;/h1&gt;&lt;h2 id="核心链路"&gt;核心链路
&lt;/h2&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;文档导入 → AI 整理 → Wiki 生成 → 双向链接 → 无限循环
&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;h2 id="步骤"&gt;步骤
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;下达指令&lt;/strong&gt;：告诉 Hermes「把这篇文章写入知识库」&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hermes 自动整理&lt;/strong&gt;：提取实体/概念/关系，创建结构化 Markdown&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件结构生成&lt;/strong&gt;：按 LLM Wiki 规范创建带 frontmatter 的页面&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obsidian 展示&lt;/strong&gt;：打开知识库目录，双向链接浏览 + Graph View&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;循环积累&lt;/strong&gt;：每次导入新文档，已有页面自动更新，矛盾标注，关联增强&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="关键规则"&gt;关键规则
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;「写入知识库」「导入知识库」→ 触发写入操作&lt;/li&gt;
&lt;li&gt;「结合知识库」「查一下知识库」→ 触发检索&lt;/li&gt;
&lt;li&gt;日常普通对话不触发知识库操作&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="优势"&gt;优势
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;全程不需要手动操作图形界面&lt;/li&gt;
&lt;li&gt;知识持续积累而非每次从零开始&lt;/li&gt;
&lt;li&gt;矛盾自动标注，来源可追溯&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="相关概念"&gt;相关概念
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;[[llm-wiki]] — 文件结构规范&lt;/li&gt;
&lt;li&gt;[[bidirectional-links]] — 关联机制&lt;/li&gt;
&lt;li&gt;[[hermes-agent]] — 自动化引擎&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="来源"&gt;来源
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="raw/articles/rwayne-hermes-obsidian-llm-wiki-2026.md" &gt;raw/articles/rwayne-hermes-obsidian-llm-wiki-2026.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>