使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本If you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
构建一个基于RAG的文档助手(分块、嵌入和搜索)
你将获得什么
我构建了一个基于RAG的文档助手,并将其打包成一个你可以立即使用的模板。
- 附带一个可直接使用的应用程序(Next.js + OpenAI API)
- 包含一个可用的RAG流程(分块、嵌入、余弦相似度)
- 提供一个用React构建的完整聊天机器人UI
- 所有UI组件均可使用Tailwind CSS完全编辑
- 记录每个用户查询,帮助识别缺失的文档、用户痛点和产品机会
RAG 流程是如何工作的
从高层次来看,我使用的流程如下:
- 文档分块 大型 Markdown 文件被拆分成多个块。分块可以让上下文只包含文档中相关的部分。
- 生成嵌入向量 每个块通过 OpenAI 的嵌入 API(text-embedding-3-large)或向量数据库(Chroma、Qdrant、Pinecone)转换成向量。
- 索引与存储 嵌入向量被存储在一个简单的 JSON 文件中(用于我的演示),但在生产环境中,你可能会使用向量数据库。
- 检索(RAG 中的 R) 用户查询被转换为嵌入向量,计算余弦相似度,并检索最匹配的文本块。
- 增强与生成(RAG 中的 AG) 这些文本块被注入到 ChatGPT 的提示中,使模型能够基于实际文档上下文进行回答。
- 查询日志反馈 每个用户查询都会被存储。这对于理解痛点、缺失文档或新机会非常宝贵。
第2步:将文档分块
为什么要分块?因为语言模型有上下文限制。给它们整本文档是行不通的。
所以思路是将文本拆分成可管理的块(例如每块500个token),并且有重叠部分(例如100个token)。重叠确保连续性,这样你不会在块的边界处丢失意义。
示例:
- 块1 → “…那座许多人已遗忘的旧图书馆。它高耸的书架上摆满了书籍…”
- 块2 → “…书架上摆满了各种想象得到的书籍,每本都在低语故事…”
重叠确保两个块包含共享的上下文,因此检索保持连贯。
这种权衡(块大小与重叠)是 RAG 效率的关键:
- 太小 → 会产生噪音。
- 太大 → 会导致上下文大小爆炸。
第三步:生成嵌入向量
文档被分块后,我们生成嵌入向量, 表示每个块的高维向量。
我使用了 OpenAI 的 text-embedding-3-large 模型,但你也可以使用任何现代嵌入模型。
嵌入示例:
复制代码到剪贴板
[ -0.0002630692, -0.029749284, 0.010225477, -0.009224428, -0.0065269712, -0.002665544, 0.003214777, 0.04235309, -0.033162255, -0.00080789323, //...+1533 个元素];每个向量都是文本的数学指纹,支持相似度搜索。
结论
RAG 是使大型语言模型(LLM)实用的最简单且最强大的方法之一。通过结合检索 + 生成,您可以将静态文档转变为智能助手,同时获得持续的产品洞察流。
对我来说,这个项目表明 RAG 不仅仅是一个技术技巧。它是一种将文档转变为:
- 交互式支持系统
- 反馈渠道
- 产品策略工具
如果您也在尝试使用 RAG,我很想了解您是如何使用它的。
评论
暂无评论。成为第一个分享您想法的人吧。