<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>RAG on FXIO 技术博客</title><link>https://fxio.site/tags/rag/</link><description>Recent content in RAG on FXIO 技术博客</description><generator>Hugo -- 0.157.0</generator><language>zh-cn</language><lastBuildDate>Tue, 04 Aug 2026 12:01:09 +0800</lastBuildDate><atom:link href="https://fxio.site/tags/rag/index.xml" rel="self" type="application/rss+xml"/><item><title>我把信息摄入、追踪、研究拼成了一条流水线：五个 GitHub 项目的组合拳</title><link>https://fxio.site/posts/ai/2026-08-04-personal-info-pipeline/</link><pubDate>Tue, 04 Aug 2026 12:01:09 +0800</pubDate><guid>https://fxio.site/posts/ai/2026-08-04-personal-info-pipeline/</guid><description>&lt;h1 id="我把信息摄入追踪研究拼成了一条流水线五个-github-项目的组合拳"&gt;我把信息摄入、追踪、研究拼成了一条流水线：五个 GitHub 项目的组合拳&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;单个 AI 工具解决单点问题，但信息工作的真实形态是一条链：格式转换 → 聚合 → 追踪 → 研究 → 沉淀。本文拆解五个各管一段的开源项目，以及它们怎么拼成一条个人信息流水线。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;先描述一个典型的信息工作日：早上要看行业新闻，盘中要盯持仓股票的异动，临时要调研一家公司近况，周末还要整理读书笔记。如果每件事都靠「打开 N 个网站 + 手动复制粘贴」，一天下来真正思考的时间所剩无几。&lt;/p&gt;
&lt;p&gt;我在 GitHub 上找到的解法不是一个全能工具，而是五个各管一段的项目。它们串起来的逻辑是：&lt;strong&gt;数据先变成 LLM 能吃的格式，再被聚合和追踪，最后由 AI 加工成结论。&lt;/strong&gt;&lt;/p&gt;
&lt;div class="mermaid"&gt;
graph LR
A[原始文档&amp;lt;br/&amp;gt;PDF/Office/网页] --&amp;gt;|markitdown| B[Markdown]
B --&amp;gt; C[open-notebook&amp;lt;br/&amp;gt;沉淀与问答]
D[各平台热榜] --&amp;gt;|newsnow| E[聚合看板/MCP]
F[社交平台噪音] --&amp;gt;|last30days-skill| G[社交相关性简报]
E --&amp;gt; H[AI Agent 消费]
G --&amp;gt; H
C --&amp;gt; H
&lt;/div&gt;
&lt;h2 id="入口段markitdown一切格式转-markdown"&gt;入口段：markitdown——一切格式转 Markdown&lt;/h2&gt;
&lt;p&gt;微软的 MarkItDown 解决的是流水线最脏最累的第一环：&lt;strong&gt;把任意文档变成 LLM 友好的文本。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PDF、Word、Excel、PPT、图片、音频、HTML、CSV，甚至 zip 包和网页 URL，一行命令转成结构清晰的 Markdown。它和普通文本提取工具的关键区别：&lt;strong&gt;保留标题层级、表格结构和列表语义&lt;/strong&gt;，而不是把文档拍平成一坨纯文本——下游模型能不能理解文档结构，差距就在这。&lt;/p&gt;
&lt;p&gt;架构是「转换器注册表」：核心类维护 MIME 类型到 Converter 的映射，每种格式一个转换器（pdfminer 管 PDF、python-docx/pptx/openpyxl 管 Office 三件套），可选挂 OCR、Whisper 转写、LLM 图片描述。已经有 AutoGen 和 LangChain 的官方集成。&lt;/p&gt;</description></item><item><title>向量检索太吃内存？turbovec 可能是你在找的东西</title><link>https://fxio.site/posts/ai/turbovec/</link><pubDate>Tue, 09 Jun 2026 23:00:00 +0800</pubDate><guid>https://fxio.site/posts/ai/turbovec/</guid><description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;最近在搞 RAG 相关的东西，向量数据库这块一直用的 FAISS。用着没啥大毛病，但有个痛点：内存占用太大。&lt;/p&gt;
&lt;p&gt;1000万条 1536 维的向量，float32 存储直接干到 31GB。服务器内存吃不住，量化方案又得单独跑 train 阶段，数据量小了码本质量还拉胯。&lt;/p&gt;
&lt;p&gt;然后在 arXiv 上刷到一篇 Google Research 的论文——TurboQuant（ICLR 2026），顺着论文找到了它的 Rust 实现：&lt;strong&gt;turbovec&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;试了一下，真香。&lt;/p&gt;
&lt;h2 id="turbovec-是什么"&gt;turbovec 是什么&lt;/h2&gt;
&lt;p&gt;一句话：&lt;strong&gt;基于 TurboQuant 算法的向量索引库，Rust 写的，有 Python 绑定。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;核心卖点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1000万 1536 维向量，31GB → &lt;strong&gt;4GB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有 train 阶段&lt;/strong&gt;，&lt;code&gt;add()&lt;/code&gt; 直接索引&lt;/li&gt;
&lt;li&gt;比 FAISS IndexPQFastScan 快 12-20%（ARM）/ 持平或略快（x86）&lt;/li&gt;
&lt;li&gt;纯本地，数据不出机器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GitHub: &lt;a href="https://github.com/RyanCodrai/turbovec"&gt;RyanCodrai/turbovec&lt;/a&gt;（9K+ stars）&lt;/p&gt;
&lt;h2 id="技术原理简化版"&gt;技术原理（简化版）&lt;/h2&gt;
&lt;p&gt;TurboQuant 的核心思路挺巧妙的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;归一化&lt;/strong&gt;：把向量长度去掉，变成超球面上的单位方向&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;随机正交旋转&lt;/strong&gt;：旋转之后，每个坐标独立服从已知的 Beta 分布。关键点——这个分布跟输入数据无关，是数学上能推导出来的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lloyd-Max 量化&lt;/strong&gt;：既然分布已知，最优的桶边界可以直接算出来，不需要从数据里学&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bit-pack&lt;/strong&gt;：1536维向量从 6144 字节压到 384 字节，16 倍压缩&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;省掉了 train 阶段，意味着：&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;/ul&gt;
&lt;h2 id="实际用法"&gt;实际用法&lt;/h2&gt;
&lt;div class="highlight"&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;pip install turbovec
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;基础用法真的很简单：&lt;/p&gt;</description></item><item><title>RAG 检索增强生成</title><link>https://fxio.site/posts/ai/rag/</link><pubDate>Mon, 23 Mar 2026 01:26:31 +0800</pubDate><guid>https://fxio.site/posts/ai/rag/</guid><description>&lt;h2 id="一什么是-rag"&gt;一、什么是 RAG？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;RAG&lt;/strong&gt; 全称是 &lt;strong&gt;Retrieval-Augmented Generation&lt;/strong&gt;（检索增强生成）。&lt;/p&gt;
&lt;p&gt;为了理解它，我们需要先了解大语言模型（LLM）的两大痛点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;知识滞后性&lt;/strong&gt;：大模型的训练数据截止于某个时间点，对于训练后发生的新闻、事件或企业内部数据，它一无所知。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;“幻觉”问题&lt;/strong&gt;：当面对未知领域的问题时，模型可能会自信地编造事实（Hallucination），导致输出内容看似通顺但内容错误。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;RAG 的核心理念非常简单：不要让大模型去“背”所有知识，而是给它配一个“图书馆”。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当用户提问时，RAG 系统不会直接让大模型生成答案，而是先执行两步操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;检索（Retrieval）&lt;/strong&gt;：在外部知识库中搜索与问题最相关的信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生成（Generation）&lt;/strong&gt;：将检索到的信息连同用户的问题一起交给大模型，让模型基于这些&lt;strong&gt;事实&lt;/strong&gt;生成最终回答。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一句话总结&lt;/strong&gt;：RAG = 大模型（生成能力） + 外部知识库（事实来源）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="二rag-是如何工作的工作流--代码示例"&gt;二、RAG 是如何工作的？（工作流 + 代码示例）&lt;/h2&gt;
&lt;p&gt;RAG 的工作流程通常包含以下四个关键步骤。下面我们通过一个&lt;strong&gt;具体的场景&lt;/strong&gt;，用伪代码和逻辑图解来展示它是如何运行的。&lt;/p&gt;
&lt;h3 id="-场景设定"&gt;🎯 场景设定&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;背景&lt;/strong&gt;：一家科技公司的 AI 客服。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识库（Vector DB）&lt;/strong&gt;：包含《员工手册 2024 版》和《最新产品 Q3 发布说明书》。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用户提问&lt;/strong&gt;：“我报销差旅费需要几个人审批？另外，Q3 发布的 AI 助手叫什么名字？”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;问题难点&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;审批人数在《员工手册》里，不在训练数据中。&lt;/li&gt;
&lt;li&gt;产品名字是刚发布的，模型不知道。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-步骤详解与代码逻辑"&gt;🔧 步骤详解与代码逻辑&lt;/h3&gt;
&lt;h4 id="1-数据准备与索引building-the-library"&gt;1. 数据准备与索引（Building the Library）&lt;/h4&gt;
&lt;p&gt;在系统上线前，我们需要将文档切片并转化为向量存入数据库。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 伪代码：建立知识库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;documents&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;《员工手册》：差旅费报销流程需经过直接主管和部门经理两级审批。&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;《Q3 发布说明书》：我们于 2023 年 10 月发布了名为 &amp;#39;Nebula AI&amp;#39; 的智能助手。&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;《Q3 发布说明书》：&amp;#39;Nebula AI&amp;#39; 支持自然语言处理和多模态交互。&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 将文本分块 (Chunking)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;chunks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;split_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documents&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 将文本转化为向量 (Embedding) 并存入向量数据库 (如 Pinecone, Milvus)&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;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;chunks&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;vector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;embedding_model&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="n"&gt;chunk&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;vector_db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;upsert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="2-用户提问query"&gt;2. 用户提问（Query）&lt;/h4&gt;
&lt;p&gt;用户输入：&amp;quot;&lt;em&gt;我报销差旅费需要几个人审批？另外，Q3 发布的 AI 助手叫什么名字？&lt;/em&gt;&amp;quot;&lt;/p&gt;</description></item></channel></rss>