作者:
    Creation:2025-09-10Last update:2025-09-10

    构建一个基于RAG的文档助手(分块、嵌入和搜索)

    你将获得什么

    我构建了一个基于RAG的文档助手,并将其打包成一个你可以立即使用的模板。

    • 附带一个可直接使用的应用程序(Next.js + OpenAI API)
    • 包含一个可用的RAG流程(分块、嵌入、余弦相似度)
    • 提供一个用React构建的完整聊天机器人UI
    • 所有UI组件均可使用Tailwind CSS完全编辑
    • 记录每个用户查询,帮助识别缺失的文档、用户痛点和产品机会

    👉 在线演示 👉 代码模板

    RAG 流程是如何工作的

    RAG Pipeline

    从高层次来看,我使用的流程如下:

    1. 文档分块 大型 Markdown 文件被拆分成多个块。分块可以让上下文只包含文档中相关的部分。
    2. 生成嵌入向量 每个块通过 OpenAI 的嵌入 API(text-embedding-3-large)或向量数据库(Chroma、Qdrant、Pinecone)转换成向量。
    3. 索引与存储 嵌入向量被存储在一个简单的 JSON 文件中(用于我的演示),但在生产环境中,你可能会使用向量数据库。
    4. 检索(RAG 中的 R) 用户查询被转换为嵌入向量,计算余弦相似度,并检索最匹配的文本块。
    5. 增强与生成(RAG 中的 AG) 这些文本块被注入到 ChatGPT 的提示中,使模型能够基于实际文档上下文进行回答。
    6. 查询日志反馈 每个用户查询都会被存储。这对于理解痛点、缺失文档或新机会非常宝贵。

    第2步:将文档分块

    为什么要分块?因为语言模型有上下文限制。给它们整本文档是行不通的。

    所以思路是将文本拆分成可管理的块(例如每块500个token),并且有重叠部分(例如100个token)。重叠确保连续性,这样你不会在块的边界处丢失意义。

    示例:

    • 块1 → “…那座许多人已遗忘的旧图书馆。它高耸的书架上摆满了书籍…”
    • 块2 → “…书架上摆满了各种想象得到的书籍,每本都在低语故事…”

    重叠确保两个块包含共享的上下文,因此检索保持连贯。

    这种权衡(块大小与重叠)是 RAG 效率的关键:

    • 太小 → 会产生噪音。
    • 太大 → 会导致上下文大小爆炸。

    第三步:生成嵌入向量

    文档被分块后,我们生成嵌入向量, 表示每个块的高维向量。

    我使用了 OpenAI 的 text-embedding-3-large 模型,但你也可以使用任何现代嵌入模型。

    嵌入示例:

    js
    [  -0.0002630692, -0.029749284, 0.010225477, -0.009224428, -0.0065269712,  -0.002665544, 0.003214777, 0.04235309, -0.033162255, -0.00080789323,  //...+1533 个元素];

    每个向量都是文本的数学指纹,支持相似度搜索。

    结论

    RAG 是使大型语言模型(LLM)实用的最简单且最强大的方法之一。通过结合检索 + 生成,您可以将静态文档转变为智能助手,同时获得持续的产品洞察流。

    对我来说,这个项目表明 RAG 不仅仅是一个技术技巧。它是一种将文档转变为:

    • 交互式支持系统
    • 反馈渠道
    • 产品策略工具

    👉 在此试用演示 👉 在 GitHub 查看代码模板

    如果您也在尝试使用 RAG,我很想了解您是如何使用它的。

    评论

    暂无评论。成为第一个分享您想法的人吧。