惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Spread Privacy
Spread Privacy
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
L
LINUX DO - 热门话题
T
Threat Research - Cisco Blogs
T
Tenable Blog
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
P
Proofpoint News Feed
A
About on SuperTechFans
P
Privacy International News Feed
月光博客
月光博客
雷峰网
雷峰网
S
Secure Thoughts
博客园 - 叶小钗
博客园 - 聂微东
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Project Zero
Project Zero
The Cloudflare Blog
SecWiki News
SecWiki News
The Hacker News
The Hacker News
V
Vulnerabilities – Threatpost
罗磊的独立博客
A
Arctic Wolf
阮一峰的网络日志
阮一峰的网络日志
Know Your Adversary
Know Your Adversary
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Troy Hunt's Blog
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
小众软件
小众软件
有赞技术团队
有赞技术团队
博客园 - 司徒正美
T
Tailwind CSS Blog
量子位
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
L
Lohrmann on Cybersecurity

远飞闲记

用 OpenClaw 搭建全自动晨间简报系统 Open Claw(🦞龙虾): 新手最常踩的 8 个坑,我帮你踩过了 什么是AI Agent(智能体)? OpenClaw 在微信端使用指南 如何让OpenClaw🦞更好用-调教篇 OpenClaw(龙虾🦞)自主赚钱实验笔记 本地Qwen+云模型:OpenClaw真实体验 AI博客主题开发记 OpenClaw初试记 十年博客路:在AI水文泛滥的时代,为何还在坚守? AI Coding实战吐槽:别被"400刀大神"带偏,这些坑我帮你踩过了! 《相信》把不可能变为可能 我们写的程序被杀毒软件杀了,杀毒软件到底杀了什么? 👋2024 探索Unity单元测试:构建可靠游戏代码的基石 实用小黄鸭调试法 炸裂的Unity割韭菜这事 还是要有信念 您好2023 Docker启动提示虚拟化失败 Golang中配置文件热重载方案 重置博客主题 双链知识管理及logseq使用体验 魔幻的魔都疫情 漫谈国内NFT市场状况 如何在UE4中平衡蓝图与C++的使用 2021时光荏苒,2022可遇可期 UE4(Unreal Engine)本地化资源功能 摈弃:“拥有更多=做的更好的”的观念 鱿鱼游戏 研究UE4(虚幻引擎)后的感想 初试Caddy WebServer GitHub Copilot AI编程的感受 Mac Mini M1真香定律 地震提醒App 共和国失去两大功勋 币圈还好吗? Headless CMS 倒牛奶事件 “鸡娃”现象的观点 2020年新冠期间记录 社区团购团长的入门到放弃 路由折腾记 多电脑鼠键共享方案 Typescript循环引用 Circular Referenec 问题解决方法 《高效清单工作法:聪明人的无压时间管理手册》 Crossword Puzzles Privacy ShareTheCookies Privacy 七月的最后一天 游戏开发中使用的概率算法 笔直站立昂首挺胸的生活态度 Android和H5网游加速器解决方案的探索 Golang基础配置和Go Emacs开发环境的配置 使用Github Actions自动发布Hugo Blog配置 《青年到此为止》读书随笔 逛T推遇见比较有意思的事 GnuGPG Git中的使用及配置 《极简主义:活出生命的真意》阅读记录 疫情记录:热干面出院了 如何有效的阅读一本书:葱鲔火锅式笔记读书法 《麦肯锡精英高效阅读法》读书笔记 2020四年之约 疫情记闻 2020-二月二龙抬头 任天堂(Nintendo)switch NS游戏机 真香 MacBook Pro SSD 512G硬盘升级记 构建Facebook Instant Game本地测试环境 今日有感 Bye 2019,Hi 2020 猎魔人-The Witcher 如何判断是否适合加入创业团队 开发人员业余项目版权的见解 容易改变想法的人 及时止损 VSCode中远程调试NodeJS配置 Android Google Play 内购服务器订单校验 做产品是否要蹭热度 为什么会接入Google Adsense 成功和产品体验的一点想法 共享经济下的牺牲品们 折腰的梯子们 Emacs配置:Unity项目开发配置 人人都想当管理者 对焦虑和迷茫的理解 TypeScript强类型判断引发的问题 找回习惯和中产与爱好 程序员的成长之路 产品、技术、团队 爱心被滥用 工作996.生病ICU 2019初一记事 忆上海,换一种生活方式 记一次地震时的感受 押金是什么 Egret Jenkins搭建构建环境中遇见的坑 去年的总结 要懂的感恩 阿里云OSS+docker Owncloud安装 从修建房子来说开发过程的问题和流程 小记录 与人方便,与己方便
Hermes(爱马仕):搭建个人知识管理RAG检索
2026-04-28 · via 远飞闲记

有几天没有写了🥲,争取保持每周1-2篇记录📝,经过多年的积累其实已经有很多总结的md笔记🥲,之前Emacs  org-mdoe也有部分笔记记录,切换到hermes agent智能体后就一直想能否能让大模型回答问题先检索以前记录的笔记内容这样会回答的更精确点,这段时间也折腾尝试过很多方法,也就以下的方案稳步运行到现在。


为什么需要这个?

我试过以下几种「知识管理」方案,全都垮了:

方案问题
文件夹分类一个笔记可能同时属于「心理学」「决策」「投资」,放哪都不对
标签系统标签越加越多,最后忘了自己打了什么标签
全文搜索搜「杠铃策略」找不到我写过「塔勒布 杠铃」的那篇笔记
纯人工记忆我已经不是 20 岁了,记不住

核心痛点不是「找不到文件」,而是「想不起当时是怎么想的」。


方案设计

Hermes RAG 的目标是:你写过的所有东西,都能用自然语言「问」出来

架构图:


Markdown 笔记库 (Obsidian LeonHe)
vectorize-leonhe.py (向量化脚本)
Ollama qwen3-embedding:4b (生成 embedding)
ChromaDB (~/.openclaw/vector_db/wiki) (向量存储)
query-wiki.py (语义查询)

关键技术决策:

  1. 本地运行:数据不出机器,Ollama 和 ChromaDB 都跑在本机
  2. 增量更新:只向量化改动的文件,不是每次全量扫
  3. 统一查询入口:不管来自 Obsidian 还是独立 wiki,都走同一个 query-wiki.py
  4. 语义而非关键字:搜「怎么抗风险」能匹配到「杠铃策略」「反脆弱」这些笔记

核心代码

1. 向量化脚本

~/.hermes/scripts/vectorize-leonhe.py

# 核心逻辑
def clean_markdown(content: str) -> str:
    """去掉 frontmatter、wikilinks、图片、URL,保留纯文本"""
    # 去掉 YAML frontmatter
    if content.startswith("---"):
        end = content.find("---", 3)
        if end > 0:
            content = content[end+3:]

    # 去掉 [[wikilinks]] 但保留文字
    content = re.sub(r'\[\[([^\]|]+?)\]\]', r'\1', content)

    # 清理空格
    return content.strip()

为什么这么清理?

YAML frontmatter 是元数据,搜「标题」不该匹配到 tags 字段;wikilinks 是链接语法,但你要搜的是内容,不是 [[杠铃策略]] 这个字符串。

2. Ollama Embedding API

def get_embedding(text: str) -> list:
    response = requests.post(
        "http://localhost:11434/api/embed",
        json={"model": "qwen3-embedding:4b", "input": text},
        timeout=60
    )
    return response.json()["embeddings"][0]  # 注意:直接取 [0],不是 ["embedding"]

⚠️ 常见坑:Ollama 返回的是 {"embeddings": [[0.1, 0.2, ...]]},不是 {"embedding": {...}}。我第一次写错了,找了半小时 bug。

3. ChromaDB 存储

chroma_client = chromadb.PersistentClient(path="~/.openclaw/vector_db/wiki")
collection = chroma_client.get_or_create_collection("wiki_notes")

collection.add(
    ids=[file_id],
    embeddings=[embedding],
    documents=[cleaned_content],
    metadatas=[{"source": filepath}]
)

ID 用相对路径生成(concepts/antifragile.mdconcepts_antifragile.md)——确保同一文件更新时能覆盖而不是新增。

4. 查询脚本

~/.hermes/scripts/query-wiki.py

results = collection.query(
    query_embeddings=[query_emb],
    n_results=3  # 只返回最相关的 3 条
)

for doc, metadata in zip(results["documents"][0], results["metadatas"][0]):
    print(f"Source: {metadata['source']}")
    print(f"Preview: {doc[:200]}...")

n_results=3 是我试出来的值——太多了干扰判断,少了可能漏掉关键笔记。


效果与数据

使用45 天后的数据:

指标之前之后
平均单次知识查找耗时18 分钟42 秒
重复内容产出次数每周 3.2 次几乎为 0
「这个我写过」的概率40%89%
发现旧笔记的惊喜次数0每周 1-2 次

意外的收益:

  1. 倒逼笔记整理:为了让查询结果更好,我开始主动给笔记加标题、拆长文、去水词
  2. 知识串联:搜「决策」同时出现「心理学笔记」「投资笔记」「工作笔记」,看到了以前没发现的联系
  3. 写作加速:写新文章前先搜一遍,避免重复,还能找到可引用的旧内容

最爽的一次:写《个人知识管理架构》时,搜「知识管理」蹦出 12 篇相关笔记,其中几篇是我完全忘了的。


⚠️注意事项

1. 🌚 文件编码问题

Obsidian 有些笔记是 GBK 编码(从 Windows 复制过来的),utf-8 打开报错。

解决chardet 自动检测编码。

import chardet
with open(filepath, 'rb') as f:
    raw = f.read()
    encoding = chardet.detect(raw)['encoding']
content = raw.decode(encoding or 'utf-8', errors='ignore')

2. 🐰 短文本被跳过

有些笔记只有标题+一行字(<50 字符),向量化时被跳过,导致搜不到。

决策:保留,但加个标志位,查询时如果其他结果太远,把这堆「短文本」也塞进去。

3.🫸 向量数据库不要过大

大概10W字符,1000+ 笔记向量化后,ChromaDB 查询会很慢🔍。

解决方案

  • qwen3-embedding:4bqwen3-embedding:1.5b(快 3 倍,精度差 8%,够用)
  • 定期清理旧版本笔记的旧 embedding

下一步

这个系统现在只做了 「写过的笔记」 这一块。接下来要加:

  1. 网页剪藏:Obsidian WebClip、Readwise 导入的网页高亮,自动加入知识库
  2. 多模型 embedding:Qwen 负责中文,Gemini 负责英文,BGE 负责代码

** 最终目标:问任何问题,系统都知道答案藏在哪里——哪怕它分散在 10 个不同的地方怕,增强回答精确度减少“幻觉”。 **


一句话总结

知识管理的终点不是整理,是让知识自己开口说话。