当前位置: 首页 > news >正文

RAG(检索增强生成)

先通过信息 检索模块 从外部知识库(如数据库、文档、网页等)中获取相关的上下文信息,然后再将这些信息与原始输入一起传递给生成模型,生成更具上下文关联的回复。

作用:降低了大模型直接生成内容时容易出现 “幻觉”的问题。

一、关键阶段

RAG 的三个关键阶段:

1. 检索(Retrieval)

  • 将用户问题转换为向量表示

  • 在向量数据库中搜索相似内容

  • 返回最相关的文档片段(top-n)

2. 增强(Augmentation)

  • 将检索到的文档与原始问题组合

  • 构建包含上下文的提示词(prompt)

3. 生成(Generation)

  • 将增强后的提示输入生成模型

  • 模型基于上下文生成最终回答

二、核心组成

1. 知识库(Knowledge Base)

  • 作用:存储结构化/非结构化知识

  • 形式

    • 文档数据库(PDF、Word、HTML等)

    • 向量数据库(ChromaDB、FAISS、Milvus)

    • 关系型数据库(MySQL、PostgreSQL)

    • 图数据库(Neo4j)

知识库三种检索方式:

  • 稀疏检索:基于关键词匹配(BM25、TF-IDF)

  • 稠密检索:基于语义相似度(Embedding模型)

  • 混合检索:结合稀疏和稠密方法

相似度计算:余弦相似度或欧氏距离

公式:similarity = cos(θ) = (A·B)/(||A||·||B||)

2. 嵌入模型(Embedding Model)

  • 作用:将文本(问题、知识库片段)转换为向量表示,实现「语义层面的数值化」(向量距离越近,语义越相似)

  • 示例:Sentence-BERT、bge-large-zh、text-embedding-ada-002 (OpenAI)

  • 关键特性

    • 语义相似度计算,

    • 支持长文本(可达8192 token)

 

3. 向量数据库(Vector Database)

  • 定义:专门用于存储和检索 “向量” 的数据库,支持高效的 “相似性搜索”。

  • 作用:提前将知识源中的文本(如文档段落)通过嵌入模型转换为向量,存储在向量数据库中(即 “构建知识库索引”);当用户查询时,将查询转换为向量后,在数据库中快速找到与查询向量 “最相似” 的向量(即最相关的知识片段)。

  • 示例:开源工具如 Chroma、Milvus、FAISS;云服务如 Pinecone、Weaviate 等。

 

4. 大语言模型(LLM)

  • 作用:基于“用户问题”和“检索到的知识”,生成自然语言回答。
  • 常用模型:GPT系列(GPT-3.5/4)、LLaMA、Claude、DeepSeek-R1、qwen、硅基流动

5. 提示词(Prompt)

由 用户问题 + 检索的上下文 组成

    三、工作流程

    1. 知识库构建

    • 数据收集:收集领域内的结构化数据(如数据库表结构、Excel)、非结构化数据(如文档、PDF、网页、对话记录)等。
    • 数据处理:对原始数据进行清洗、分割(如将长文档拆分为短片段,便于检索)、格式化(如提取关键词、生成向量)。
    • 向量存储:将处理后的文本片段转换为向量(通过嵌入模型,如 bge-large-zh、text-embedding-ada-002、BERT、Sentence-BERT),存储到向量数据库(如 Chroma、Pinecone、Milvus)中,形成「可检索的知识库」。

    2. 在线问答推理

    • 问题解析:用户输入问题后,先将问题转换为向量(与知识库向量用同一嵌入模型)。
    • 相似检索:通过向量数据库,计算问题向量与知识库中所有文本向量的相似度,检索出最相关的 top N 个文本片段(即「上下文信息」)。
    • 增强生成:将「问题 + 检索到的上下文信息」一起作为提示词 输入大模型,让模型基于这些外部事实生成回答(而非仅依赖自身知识)。

    四、关键技术

    1. 检索优化技术

    技术说明优势
    查询扩展使用LLM重写问题提升召回率
    多向量检索对文档分段+摘要分别建索引平衡精度与覆盖率
    元数据过滤按来源/日期/类型过滤提升结果相关性
    混合检索结合关键词+语义搜索兼顾精确匹配与语义理解

     

    2. 提示工程技术

    def build_rag_prompt(question, contexts) -> str:"""构建RAG提示模板"""prompt = """你是一位银行业务专家,请严格根据提供的上下文信息回答问题。上下文信息:{contexts}用户问题:{question}回答要求:1. 基于上下文回答,不要编造信息2. 如上下文未包含答案,请说明"根据现有资料未找到相关信息"3. 使用专业、简洁的语言4. 重要数据需标明来源""".format(contexts="\n\n".join([f"[来源:{c.metadata}] {c.content}" for c in contexts]),question=question)return prompt


    五、RAG的局限和解决方案

    挑战解决方案
    检索不相关混合检索 + 重新排序
    上下文长度限制文本摘要 + 关键信息提取
    多文档冲突信息来源可信度评估 + 信息聚合
    生成忽略上下文提示工程强化约束 + 自我验证
    实时性要求流式知识更新 + 版本控制

    http://www.dtcms.com/a/301295.html

    相关文章:

  • Vue 四个map的使用方法
  • MySQL读写分离部署
  • 【YOLO系列】YOLOv1详解:模型结构、损失函数、训练方法及代码实现
  • 前端面试专栏-前沿技术:31.Serverless与云原生开发
  • Spring AI 项目实战(二十一):Spring Boot + AI +DeepSeek驱动的智能题库系统(附完整源码)
  • Linux-文件与文本管理
  • 【语义分割】记录2:yolo系列
  • Java面试实战:安全框架与大数据技术深度解析
  • 代码随想录算法训练营二十八天|动态规划part01
  • C语言自定义数据类型详解(四)——联合体
  • 欧拉图与欧拉回路
  • Windows---动态链接库Dynamic Link Library(.dll)
  • 裴蜀定理应用
  • Ubuntu Linux 如何配置虚拟内存 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录8
  • GRPO强化学习缓解多模态大模型OCR任务的幻觉思路及数据生成思路
  • 【Oracle】Oracle分区表“排雷“指南:当ORA-14400错误找上门时如何优雅应对
  • 【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
  • 【Web安全】深入浅出理解“SQL注入-伪静态注入”及空格限制绕过技巧
  • linux 板卡实现vxi11服务
  • Qwen3安装使用教程:引领推理型大模型新时代
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-35,(知识点:三极管知识点,电路电压计算题,三极管电压计算,PNP三极管)
  • linux 部署 flink 1.15.1 并提交作业
  • 数据上新|最新省、地级市农业新质生产力2002-2025
  • Linux vimgrep 详解
  • 深度学习篇---优化器
  • 上位机知识篇---Tailwind CSS
  • Linux内核设计与实现 - 第15章 进程地址空间
  • python-列表推导式,迭代器和生成器,上下文管理器
  • Unity3D 平台宏定义
  • 双指针算法技巧