|
在 AI 应用中,检索增强生成(RAG)已成为提升大模型能力的核心手段。 在进入 RAG 正式搭建之前,我们先来学一个基础但超有用的技能:语义搜索。与传统的关键词匹配不同,语义搜索会根据“意思”而不是“字面”去检索文档。这样,即使你的查询语言不同(比如用中文搜英文文档),也能找到相关内容。本文带你一步步构建一个针对 PDF 文档的语义搜索引擎,核心流程如下: 1️⃣ 文档加载:让 PDF 进入 AI 世界LangChain 提供了Document Loader抽象接口,可以轻松把各种数据源导入 AI 应用。 我们用PyMuPDF4LLMLoader来加载 PDF: 每页会变成一个Document对象 metadata 会记录文件名、页码等信息
安装方法: pipinstalllangchain-pymupdf4llm 2️⃣ 文本切分:让语义更精准一页的内容通常太多,不利于精准匹配。 我们用RecursiveCharacterTextSplitter把文档切成: 每段1000 字符 段与段之间200 字符重叠 保留原始位置索引(方便溯源)
这样能避免切断重要上下文,提高检索效果。 3️⃣ 生成向量:把文字变成“数学坐标”语义搜索的核心思想是: 把文本转换为向量(Embedding),再通过向量相似度进行匹配。
这里我们使用阿里云 DashScope的text-embedding-v4模型: 生成后的向量可以直接进行相似度比较(如余弦相似度)。 4️⃣ 向量存储:用 Qdrant 管理语义信息有了向量,就需要一个“语义数据库”来存放它们。 我们选择Qdrant: 创建集合、批量写入向量后,就能通过 Qdrant 的搜索功能快速找到相关内容。 5️⃣ 检索器(Retriever):让搜索更智能LangChain 提供统一的Retriever接口,把底层的向量数据库封装成可直接调用的检索工具。
支持多种模式: 这样,你就能轻松将它与RAG 应用结合,实现“先检索,再生成”的强大功能。 🔚 总结通过以上 5 步,我们就能从零搭建一个PDF 语义搜索引擎,实现跨语言、高语义精度的文档查询。 下一步,把它和 LLM 结合起来,你就能做出一个智能问答系统——比如,直接用中文问“耐克在美国有多少配送中心?”,系统就能帮你从英文财报中找答案。 |