一文学会如何构建无向量 RAG 系统

一文快速学会基于Milvus构建多模态RAG问答系统 本系统预期目标是构建一个多模态的 RAG 系统,此系统可实现多种模态的数据导入,包括如 PDF、Word、Excel、图片等(仅结构化数据),并可通过对话进行检索,进行整理和返回结果,返回结果和包括图片和文本等。 阅读详情

本文将构建一个无向量的、基于推理的 RAG 系统,使用分层页面索引。文档被转换为树结构,LLM 在树中推理以找到答案。无需嵌入。无需相似性搜索。

这与我们在现实生活中搜索信息的方式非常相似。当你想在教科书中查找某些内容时,你不会从头开始阅读每一页。你会打开目录,找到正确的章节,查看其中的小节,然后直接跳到你需要的部分。

PageIndex 的工作方式相同。你给它一个文档,它从该文档构建一棵树,其中每个分支是一个章节,每个叶子是实际文本。然后当你提问时,LLM 逐层导航这棵树以找到正确答案。

完整代码:https://github.com/vixhal-baraiya/pageindex-rag


整体计划

在编写任何代码之前,这是完整的计划:

步骤 1:将文档解析为层次树

我们将文档发送给 LLM,要求它将文本拆分为顶级章节。然后对于每个足够长、可以进一步拆分的章节,我们再次发送给 LLM 获取子章节。这为我们提供了一个多层树结构。短章节保持为叶子节点。长章节成为带有子节点的内部节点。

步骤 2:自底向上总结每个节点

我们从叶子到根遍历树。每个叶子节点获得其原始文本的简短 LLM 生成摘要。每个内部节点从其子节点的摘要构建摘要。根节点最终获得整个文档的摘要。

步骤 3:保存索引

我们将树序列化为 JSON 文件。这就是索引。我们构建一次并重复使用。

步骤 4:通过遍历树进行检索

在查询时,我们从根开始。我们向 LLM 显示所有子节点的摘要,询问应该进入哪个子节点。我们移动到该子节点。重复此过程直到到达叶子。叶子的原始文本就是我们检索到的上下文。

步骤 5:生成答案

我们将检索到的上下文和问题传递给 LLM 并获得答案。


架构

让我们看看数据如何在系统中流动。

索引时(运行一次)

图片

查询时(每个问题运行一次)

图片

现在我们知道了要构建什么以及各部分如何组合,让我们开始编写代码。


步骤 1:设置项目

pageindex-rag/
    pageindex/
        __init__.py
        node.py
        parser.py
        indexer.py
        retriever.py
        storage.py
    main.py
    document.md

创建项目:

mkdir pageindex-rag
cd pageindex-rag
mkdir pageindex
touch pageindex/__init__.py

步骤 2:定义节点(pageindex/node.py)

文档的每个部分都成为一个 PageNode。它存储标题、原始文本、稍后生成的摘要以及其子节点。

from dataclasses import dataclass, field
from typing import Optional

@dataclass
class PageNode:
    title: str
    content: str        # 原始文本,在叶子节点填充
    summary: str        # 由 LLM 生成,由索引器填充
    depth: int          # 0 = 根, 1 = 章节, 2 = 子章节
    children: list = field(default_factory=list)
    parent: Optional["PageNode"] = None

    def is_leaf(self) -> bool:
        return len(self.children) == 0

步骤 3:解析文档(pageindex/parser.py)

我们通过两遍构建树。首先,我们要求 LLM 将整个文档拆分为顶级章节。然后,对于任何足够长、值得进一步拆分的章节(超过 300 个单词),我们将其发送回 LLM 获取子章节。短章节保持为叶子节点。长章节成为带有子节点的内部节点。

_segment 是执行一级拆分的辅助函数。parse_document 调用它两次:一次用于整个文档,一次用于每个长章节。

import json
import openai
from .node import PageNode

client = openai.OpenAI()

SUBSECTION_THRESHOLD = 300  # 单词数

def _segment(text: str) -> list:
    prompt = f"""Split the following text into logical sections.
Return a JSON object with a "sections" key. Each item has:
- "title": short title (5 words or less)
- "content": the text belonging to this section

Text:
{text[:8000]}"""

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        max_completion_tokens=3000,
        response_format={"type": "json_object"},
    )
    parsed = json.loads(response.choices[0].message.content)
    return parsed.get("sections", [])

def parse_document(text: str) -> PageNode:
    root = PageNode(title="root", content="", summary="", depth=0)

    for item in _segment(text):
        title = item.get("title", "Section")
        content = item.get("content", "")

        node = PageNode(title=title, content="", summary="", depth=1)
        node.parent = root

        word_count = len(content.split())
        if word_count > SUBSECTION_THRESHOLD:
            subsections = _segment(content)
            if len(subsections) > 1:
                for sub in subsections:
                    child = PageNode(
                        title=sub.get("title", "Subsection"),
                        content=sub.get("content", ""),
                        summary="",
                        depth=2,
                    )
                    child.parent = node
                    node.children.append(child)
            else:
                node.content = content  # 拆分没有产生有用结果,保持为叶子
        else:
            node.content = content  # 足够短,保持为叶子

        root.children.append(node)

    return root

完成后,短章节是带有内容的叶子节点。长章节是带有子章节子节点的内部节点。此时所有摘要字段都为空。索引器接下来会填充这些。


步骤 4:构建摘要(pageindex/indexer.py)

我们以后序(子节点先于父节点)遍历树。每个叶子总结自己的内容。每个内部节点(如根节点,或任何有子章节的章节)从其子节点的摘要构建摘要。后序保证每个子节点在父节点需要之前都有摘要。

import openai
from .node import PageNode

client = openai.OpenAI()

def _summarize(text: str, section_name: str = "") -> str:
    hint = f"This is the section titled: {section_name}./n" if section_name else ""
    prompt = f"""{hint}Summarize the following in 2-3 sentences. Be specific and factual. Do not add anything not in the text.

{text[:3000]}"""
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
        max_completion_tokens=150,
    )
    return response.choices[0].message.content.strip()

def build_summaries(node: PageNode):
    # 后序:子节点优先
    for child in node.children:
        build_summaries(child)

    if node.is_leaf():
        if node.content.strip():
            node.summary = _summarize(node.content, node.title)
        else:
            node.summary = "(empty section)"
    else:
        # 从子节点的摘要构建父节点摘要
        children_text = "/n/n".join(
            f"[{c.title}]: {c.summary}" for c in node.children
        )
        node.summary = _summarize(children_text, node.title)

运行 build_summaries(root) 后,树中的每个节点都有有意义的摘要。


步骤 5:保存和加载索引(pageindex/storage.py)

我们将树序列化为 JSON,这样我们只构建一次。

import json
from .node import PageNode

def save(node: PageNode, path: str):
    def to_dict(n: PageNode) -> dict:
        return {
            "title": n.title,
            "content": n.content,
            "summary": n.summary,
            "depth": n.depth,
            "children": [to_dict(c) for c in n.children],
        }
    with open(path, "w") as f:
        json.dump(to_dict(node), f, indent=2)

def load(path: str) -> PageNode:
    def from_dict(d: dict) -> PageNode:
        node = PageNode(
            title=d["title"],
            content=d["content"],
            summary=d["summary"],
            depth=d["depth"],
        )
        for child_dict in d["children"]:
            child = from_dict(child_dict)
            child.parent = node
            node.children.append(child)
        return node
    with open(path) as f:
        return from_dict(json.load(f))

步骤 6:通过树搜索检索(pageindex/retriever.py)

从根开始,LLM 读取子节点的摘要并选择最佳分支。如果该子节点是内部节点(它有子章节),我们在这个级别重复。我们继续直到到达叶子。while 循环处理任何深度。

import openai
from .node import PageNode

client = openai.OpenAI()

def _pick_child(query: str, node: PageNode) -> PageNode:
    options = "/n".join(
        f"{i + 1}. [{c.title}]: {c.summary}"
        for i, c in enumerate(node.children)
    )
    prompt = f"""You are navigating a document tree to find the answer to a question.

Current section: "{node.title}"
Question: {query}

Children of this section:
{options}

Which child section most likely contains the answer? Reply with only the number."""

    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
        max_completion_tokens=5,
    )
    try:
        index = int(response.choices[0].message.content.strip()) - 1
        return node.children[index]
    except (ValueError, IndexError):
        return node.children[0]

def retrieve(query: str, root: PageNode) -> str:
    node = root
    while not node.is_leaf():
        if not node.children:
            break
        node = _pick_child(query, node)
    return node.content

步骤 7:整合在一起(main.py)

import os
from pageindex.parser import parse_document
from pageindex.indexer import build_summaries
from pageindex.retriever import retrieve
from pageindex import storage
import openai

client = openai.OpenAI()
INDEX_PATH = "index.json"

def build_index(doc_path: str):
    print("Parsing document...")
    text = open(doc_path).read()
    tree = parse_document(text)

    print("Building summaries (this makes LLM calls)...")
    build_summaries(tree)

    print(f"Saving index to {INDEX_PATH}")
    storage.save(tree, INDEX_PATH)
    return tree

def ask(query: str) -> str:
    if not os.path.exists(INDEX_PATH):
        raise FileNotFoundError("Index not found. Run build_index() first.")

    tree = storage.load(INDEX_PATH)
    context = retrieve(query, tree)

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "user",
            "content": f"Answer using only the context below./n/nContext:/n{context}/n/nQuestion: {query}"
        }],
        max_completion_tokens=500,
    )
    return response.choices[0].message.content.strip()

if __name__ == "__main__":
    # 首次运行:构建索引
    build_index("document.md")

    # 然后查询
    print(ask("Your Question"))

索引示例

运行 build_index 后,打开 index.json,你会看到类似这样的内容:

{
  "title": "root",
  "summary": "Document covers returns, shipping options, and account setup.",
  "content": "",
  "depth": 0,
  "children": [
    {
      "title": "Returns and Refunds",
      "summary": "Refunds are processed within 14 days of receiving the returned item.",
      "content": "We accept returns within 30 days...",
      "depth": 1,
      "children": []
    },
    {
      "title": "Shipping Options",
      "summary": "Covers domestic (3-5 days) and international shipping (7-14 days).",
      "content": "",
      "depth": 1,
      "children": [
        {
          "title": "Domestic Shipping",
          "summary": "Standard delivery takes 3-5 business days via USPS.",
          "content": "We ship domestically via USPS...",
          "depth": 2,
          "children": []
        },
        {
          "title": "International Shipping",
          "summary": "International orders ship via DHL and arrive in 7-14 days.",
          "content": "International shipping is available to 50+ countries...",
          "depth": 2,
          "children": []
        }
      ]
    },
    {
      "title": "Account Setup",
      "summary": "Instructions for creating and verifying a new account.",
      "content": "To create an account, visit...",
      "depth": 1,
      "children": []
    }
  ]
}

短章节保持为 depth-1 的叶子节点。长章节(如「Shipping Options」)成为带有 depth 2 子章节的内部节点。检索逐层导航直到到达叶子。


常见问题

问题解决方案
LLM 总是选错分支摘要太模糊。在 _summarize 中尝试更强的模型,或在提示词中添加更多细节
LLM 分段在不好的位置切断章节当 parse_document 处理长文档时,有时会在思考中途拆分。通过增加分段调用中的 max_tokens 来修复,或者在发送之前将文档拆分为约 3000 个单词的块
叶子内容很长如果叶子的内容超过约 1500 个 token,降低 SUBSECTION_THRESHOLD,以便更多章节被拆分为子章节

总结

这个无向量 RAG 系统的核心思想是:

  1. 1. 分层索引:将文档构建为树结构,模拟人类查找信息的方式

  2. 2. LLM 推理:使用 LLM 逐层导航树结构找到相关内容

  3. 3. 自底向上摘要:从叶子到根构建摘要,确保每个节点都有有意义的描述

  4. 4. 一次构建,多次使用:索引只需构建一次,可持久化存储

与传统向量 RAG 相比,这种方法不需要嵌入模型和向量数据库,更适合结构化文档的精确检索。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

👇👇扫码免费领取全部内容👇👇
在这里插入图片描述

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

在这里插入图片描述

4. 2026行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇
在这里插入图片描述

上证指数30年k线图_金融占星简单解读上证指数30年历史行情 阅读此文需要一定的占星基础知识,本人对于金融知识了解甚少,如有描述错误请包涵指正!影响大众事件发展趋势的都是外行星,即木星-冥王星这5颗,由于时间跨度长达30年,绘制社会行星的K线图工作量太大,所以只以时代行星对这30年行情的简单解读作为分享,在今后的短期分析中会逐渐加入社会行星,甚至在个股分析上还会加入个人行星。那即使只绘制时代行星,所展现出来的信息也无法在一张图上画出来,否则太乱难以分辨,所以... 阅读详情

相关推荐

使用WSL2安装ubuntu系统并配置深度学习环境

wsl2安装ubuntu部署深度学习环境的方法

u013358093的博客 2701

收藏!一文掌握RAG核心技术:用Python和Ollama构建检索增强生成系统

本文详细介绍了检索增强生成(RAG)技术的工作原理和实现方法。通过Python和Ollama工具,从零构建了一个简单的RAG系统,包括索引阶段(文本向量化)、检索阶段(相似度匹配)和生成阶段(基于检索结果回答问题)。文章解释了RAG系统的核心组成部分,分析了当前实现的局限性,并简要介绍了Graph RAG、Hybrid RAG等进阶实现方式,为读者提供了全面了解和入门RAG技术的实用指南。

datian1234的博客 885

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

m0_51658788的博客 3606

【一文读懂】RAG的重要组成-向量数据库

首先,向量数据库中保存的就是向量数据了,那什么是向量呢?向量是一个数学概念,它可以表示为一个包含多个数值的列表,这些数值(也称为分量)按照一定顺序排列。在不同的上下文中,向量可以用来表示不同的事物。比如在日常生活中向量可以这样表示:假设你想描述从家到学校的路线,你可以创建一个向量 [3, 2]。这里,3 表示向东走3个单位,2 表示向北走2个单位。在3D建模中,物体的每个顶点位置都是通过三维空间中的向量来定义的。例如,一个点在3D空间中的位置可以表示为向量 [x, y, z]。

m0_59235945的博客 3057

告别环境依赖!用PyInstaller把PaddleOCR项目打包成独立EXE(附完整spec文件配置)

本文详细介绍了如何使用PyInstaller将PaddleOCR项目打包成独立EXE文件,彻底解决Python环境依赖问题。通过完整的spec文件配置和实战技巧,开发者可以轻松创建开箱即用的OCR工具,特别适合需要交付给非技术用户的场景。文章涵盖环境配置、模型打包、性能优化等关键环节,并提供了解决常见问题的方案。

weixin_33712987的博客 573

TEC 高精度控温算法:实现精准升降温与恒温控制

本文深入解析了TEC高精度控温算法的核心原理与工程实践。针对TEC非线性、时变的特性,算法通过智能状态机实现精准升降温与恒温控制,并详细阐述了参数整定、硬件协同及调试优化的系统性方法,为半导体激光器、PCR仪等高精度温控应用提供了一套完整的解决方案。

weixin_29212867的博客 1013

一文彻底学会RAG应用中常见的10种向量数据库及其区别,建议收藏!

在构建能够理解和生成自然语言的智能应用时,大型语言模型(LLMs)展现出了强大的能力。然而,这些模型通常依赖于训练时所拥有的知识,对于特定领域或最新信息的掌握可能存在不足。为了弥补这一缺陷,检索增强生成(RAG)技术应运而生。 RAG通过在LLM生成答案之前,先从外部知识库中检索相关信息,从而显著提升了LLM在特定任务上的性能和知识覆盖范围。在RAG应用中,向量数据库扮演着至关重要的角色,它们负责存储和高效检索这些外部知识,使得LLM能够基于最新的、领域特定的信息生成更准确、更具上下文相关性的答案。

2401_85373691的博客 2073

测绘程序设计——试题一:出租车轨迹数据计算

仅展示试题1的原文,如需了解其余内容,请自行购买图书李老师著作主页-http://ybli.users.sgg.whu.edu.cn/book/

chengzilhc的博客 891

当时序数据库学会语义:DolphinDB 的向量引擎与 RAG 实践

大模型应用普及之后,检索重新成了数据库领域最热闹的考场:语义检索要向量数据库,全文检索要搜索引擎,结构化筛选要时序库或数仓——一个 RAG 应用背后常常站着三套系统,各自存储、各自索引,结果在应用层对齐。

qq_2778465975的博客 1万+

AOSP 8.0.0编译中的ANDROID_DATA缺失问题解决方案

在AOSP编译过程中,环境变量和路径设置的正确性至关重要。遇到相关的错误时,检查并修正环境配置通常是解决问题的关键。希望本文提供的分析和解决方案能帮助你顺利编译AOSP。

m0_74337424的博客 398

智能工厂评估模型研究

摘要:通过对国内外现有智能制造评估模型的研究,结合重庆制造业行业领跑者与落后者之间差距大的现状,以实现全要素全连接的数字化工厂为出发点,融合工业互联网标识,构建实践可行的智能工厂评估模型推动中小型企业参与智能制造转型,缓和两极分化问题。本评估模型包含工厂体系架构的3个层级,提供用于推动智能制造转型的参考,包括设计、生产、管理的全过程评估。关键词:智能制造评估模型;智能制造转型;全连接工厂;工业互联网标识0 引言受行业需求与技术创新的影响,全球制造业在历经了工业1.0机械化、工业2.0电气化和工业3.0自动

罗伯特技术屋 677

小白也能学会:构建Agent驱动的RAG系统实战指南

文章详细介绍了构建Agent驱动的生产级RAG系统全流程,包括数据预处理、多策略分块、智能体规划、思维链推理及自动化评估。通过工业设备维修手册案例,展示了使用LangChain、LangGraph和RAGAS等工具实现从原始数据到高质量智能问答系统的技术细节与开发思路,为开发者提供了实用的参考。

lvaolan的博客 1070

LPDDR6 技术标准详解(JESD209-6)

是继 LPDDR5/5X 之后的新一代低功耗 DRAM 标准,专为满足移动终端、AI、边缘计算等高带宽、低功耗场景而设计。该标准通过全新架构、动态功耗控制机制和增强型数据完整性机制,实现性能、能效与可靠性的全面升级。LPDDR6 并非仅是速度升级,更是内存架构设计思路的演进,围绕“低功耗 + 高带宽 + 强安全”的三维目标,构建下一代 SoC 平台关键基础。✅ 高带宽:支持 32B/64B 动态突发✅ 低功耗:动态电压、通道切换✅ 高可靠性:ECC + 自测试 + 安全区。

weixin_43199439的博客 2580

构建基于RAG检索的智能客服系统

RAG(Retrieval-Augmented Generation)检索技术是一种结合信息检索(Retrieval)和生成(Generation)的混合模型方法,旨在通过检索相关信息来增强生成模型的性能。RAG 技术特别适用于需要复杂背景信息或大规模知识库支持的任务,如问答系统、对话系统和文本生成等。

2401_84204207的博客 2573

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【干货】LangChain实战:构建RAG系统解决大模型幻觉问题(小白也能学会

本文介绍利用LangChain框架构建RAG系统,通过文档加载切分、向量化存储(FAISS)、大模型接入等步骤,实现检索增强问答链。系统先检索相关文档片段,再结合大模型生成答案,有效提升回答准确性和可解释性。文章包含完整代码示例,并建议优化方案如使用更强Embedding模型和向量数据库。文末附赠大模型学习资料,包含学习路线、实战项目、必读书籍和面试题库,适合零基础入门。

优快云_430422的博客 669

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

vLLM推理镜像如何配合向量数据库构建RAG系统?

本文介绍如何利用vLLM推理镜像和向量数据库构建高性能RAG系统。通过PagedAttention和连续批处理技术,vLLM提升GPU利用率和推理效率;向量数据库实现语义检索,支持海量文档毫秒级召回。二者结合可显著降低延迟和成本,适用于企业级知识问答场景。

weixin_36235398的博客 476

一文搞懂RAG:基于LangChain构建大模型问答应用!

本文详细介绍基于RAG(检索增强生成)的大模型问答系统构建方法,涵盖索引(加载、切分、存储)和检索与生成两大核心环节,并展示使用LangChain 1.0的RAG Agent和RAG Chain两种实现方式。文章还提供大模型AI学习系统路径,分为初阶应用、高阶应用、模型训练和商业闭环四个阶段,帮助读者从零掌握大模型技术。

bugyinyin的博客 763

【一文看懂】什么是RAG的原理:让AI学会做笔记,看这一篇就够了!

自2023年GPT爆火全球后,RAG就作为弥补大模型记忆能力短板的关键组件,同时也爆火了。 时至今日,RAG仍是大家津津乐道的技术。 如果想要充分发挥大模型的潜力,懂一些RAG的基本原理还是非常关键的。 今年智能体Agent爆火,RAG技术同样是当前Agent增强记忆能力的关键技术。

大模型教程的博客 883

【Java AI实战】让AI学会“开卷考试“:RAG与向量数据库实战指南

恭喜你,你已经掌握了Spring AI中最强大、最核心的RAG技术!通过结合和ChatClient,你现在已经有能力构建出能够学习和利用私有知识的、真正智能的AI应用了。🏢 企业内部的智能知识库和客服💻 能够理解代码库并回答技术问题的编程助手📝 个人的智能笔记和信息检索系统🤔思考题:除了文本文档外,你还能想到哪些类型的私有数据可以通过RAG技术让AI学习?如何将这些数据转化为AI可理解的形式?欢迎在评论区分享你的创意!函数调用(Function Calling)。

m0_65382359的博客 797

搭建RAG系统,主流向量数据库如何选择?如Milvus、Qdrant、Weaviate、FAISS、RediSearch等

在搭建RAG系统时,选择合适的向量数据库是至关重要的。向量数据库能够 高效地 存储和检索大规模的 向量数据,为RAG系统提供快速、准确的检索支持。今天针对当下主流的 Milvus、Qdrant、Weaviate、FAISS、RediSearch 等主流向量数据库,他们也都是 开源 的向量数据库,给大家简单介绍下,供您参考。Milvus支持多种高效的索引结构,如IVF、HNSW等,能够在 毫秒级响应 时间内完成相似性搜索。它采用 分布式架构,可以轻松应对大规模数据集的需求,支持水平扩展。

2401_85328934的博客 1840

一文彻底搞懂DeepSieve让RAG系统真正“学会思考”!

现在的RAG(检索增强生成)系统。您给它一个简单直接的问题,它能答得头头是道;可一旦问题需要稍微拐个弯,或者知识源一复杂,它就立刻“拉胯”,要么返回一堆不相干的东西,要么干脆就开始一本正经地胡说八道。今天来自罗格斯大学的研究者带来了DeepSieve,这是一个专为处理异构知识源的RAG框架,让RAG系统真正“学会思考”。

2401_84815887的博客 1076

小白也能学会:LangChain实战构建大模型RAG系统,解决幻觉问题!

本文详细介绍如何使用LangChain框架构建RAG系统解决大模型幻觉问题。通过文档加载与切分、向量数据库构建、大模型接入及问答链构建等步骤,实现检索增强生成。系统不仅提高了回答准确性,还能提供引用文档,增强可解释性。文末展示了完整代码和效果对比,适合初学者实践。

Z4400840的博客 617

震惊!企业级RAG系统构建的5个关键步骤,小白也能学会

本文聚焦企业级RAG系统在10万+文档规模下的工程实践,针对检索慢、召回率低、部署复杂三大痛点,详细介绍了文档预处理、Embedding模型选型、向量库优化、Rerank策略和生成阶段的技术要点,强调RAG本质是信息检索系统而非简单问答,提出量化评估方法和未来趋势,为RAG工程落地提供实战指导。

m0_59164520的博客 695

从零搭建 RAG 知识库:3 步搞定,小白也能学会

今天就来手把手教大家:怎么从零开始搭一个属于自己的 RAG 系统?其实核心就 3 步,哪怕是 AI 初学者也能看懂,赶紧码住~

2401_82469710的博客 1138
上一篇: 一文搞懂 RAG,手把手搭智能问答助手
下一篇: RAG存在的问题及解决方案
Llama-Turbo
博客等级 码龄4年 9901粉丝 2022原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值