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

RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践

重磅推荐专栏:
《大模型AIGC》
《课程大纲》
《知识星球》

本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经验分享,旨在帮助读者更好地理解和应用这些领域的最新进展

一、什么是 RAG Agent?

1. 从信息处理到智能生成

在自然语言处理领域,传统问答系统往往面临两大难题:如何突破模型知识边界?如何保障回答的可信度?RAG(Retrieval-Augmented Generation)架构应运而生。而当我们以工程视角实现RAG时,就需要一个标准化的载体——RAG Agent。

2. 代码解构:RAG Agent的骨骼

观察示例代码中的RAGAgent类,我们可以看到一个典型实现:

class RAGAgent(BaseAgent):def retrieve(self, query: str, **kwargs) -> Tuple[List[RetrievalResult], int, dict]:# 检索核心逻辑def query(self, query: str, **kwargs) -> Tuple[str, List[RetrievalResult], int]:# 端到端查询流程

这个类继承自BaseAgent,体现了面向接口编程思想。两个核心方法retrievequery分别对应RAG的两大阶段:

2.1 检索阶段(Retrieve)

• 输入:自然语言查询
• 处理:向量数据库相似度检索
• 输出:RetrievalResult列表(包含文档片段、相似度分数等)

# 示例返回结构
[RetrievalResult(content="深度学习模型...", score=0.92),RetrievalResult(content="神经网络结构...", score=0.88)
]

2.2 生成阶段(Generate)

• 输入:原始查询 + 检索结果
• 处理:LLM融合信息生成最终回答
• 输出:自然语言回答 + 参考溯源

3. 技术实现的三重保障

1. 可观测性设计

返回元组中的int类型token计数器,为成本监控提供基础:

def query(...) -> Tuple[str, List[RetrievalResult], int]:# 最后一个int即为token消耗总量

2. 扩展性架构

**kwargs参数的设计允许灵活接入:
• 检索参数控制(top_k、相似度阈值)
• 生成参数调节(temperature、max_length)
• 多路召回扩展

3. 类型安全

通过类型注解确保接口规范:
List[RetrievalResult]保证检索结果结构统一
Tuple明确约定返回顺序

4. RAG Agent的独特优势

对比传统问答系统,该架构具有显著优势:

维度传统问答RAG Agent
知识边界依赖训练数据动态扩展
数据新鲜度静态知识实时更新
可解释性黑盒响应溯源支持
维护成本全量重训增量更新

5. 典型应用场景

  1. 企业知识库问答
    将内部文档库作为检索源,确保回答符合企业规范

  2. 学术研究助手
    连接论文数据库,生成带文献引用的综述

  3. 智能客服系统
    基于最新产品文档生成准确话术

二、揭秘Naive RAG:从代码实例看检索增强生成系统的核心架构

1. 智能路由系统:知识库的"导航助手"

1.1 路由决策的核心代码

当我们向系统提问"如何预防糖尿病并发症"时,路由模块通过以下代码实现知识库选择:

# 生成路由提示模板
prompt = """
"QUESTION": 如何预防糖尿病并发症
"COLLECTION_INFO": [{"collection_name": "medical_encyclopedia", "description": "疾病百科全书"},{"collection_name": "drug_database", "description": "药品说明书库"}
]
"""# 大模型返回的响应示例
model_response = "['medical_encyclopedia']"# 解析模型响应
selected_collections = literal_eval(model_response)  # 得到['medical_encyclopedia']

1.2 路由异常处理机制

当遇到未描述的知识库时,系统自动将其纳入检索范围:

# 处理无描述的知识库
for collection in all_collections:if not collection.description:selected_collections.append(collection.name)  # 自动加入检索列表# 包含默认知识库
if vector_db.default_collection:selected_collections.append("default_medical")  # 确保基础医学库被检索

2. 智能检索引擎:知识挖掘的"矿工"

2.1 分布式检索实现

当选择3个知识库且设置top_k=15时,检索分配逻辑如下:

top_k_per_collection = 15 // 3 = 5  # 每个库检索5条
results = []
for collection in selected_collections:res = vector_db.search(query_vector, top_k=5,filter="category=='糖尿病'")results.extend(res)

2.2 上下文扩展技术

原始检索结果与扩展后对比:

# 原始文本片段
原始结果: "血糖监测是糖尿病管理的基础"# 扩展后文本
{"text": "血糖监测是糖尿病管理的基础","wider_text": "《糖尿病防治指南》第3章指出:患者应定期进行血糖监测...(完整段落)"
}

3. 答案生成引擎:信息整合的"分析师"

3.1 结构化提示模板

系统将检索结果转换为XML格式的输入:

mini_chunk_str = '''
<chunk_1>
《中国2型糖尿病防治指南》建议:所有糖尿病患者...
</chunk_1>
<chunk_2>
美国ADA指南强调:饮食控制需要配合定期运动...
</chunk_2>'''

3.2 生成过程示例

最终提交给LLM的提示模板:

您是一位医疗分析专家,请根据以下资料回答问题:原始问题:如何预防糖尿病并发症?相关文献:
<chunk_1>...糖尿病监测标准...</chunk_1>
<chunk_2>...饮食控制方案...</chunk_2>

4. 核心架构设计解析

4.1 模块化设计思想

类初始化展现的组件解耦:

class NaiveRAG:def __init__(self, llm, embedding_model, vector_db):self.llm = llm               # 可替换GPT-4/Claude等模型self.embedding = embedding   # 支持多种文本编码器self.vector_db = vector_db   # 兼容各类向量数据库

4.2 全链路可观测性

系统运行时的关键日志输出:

[SYSTEM] 在[

相关文章:

RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

6.过拟合处理:确保模型泛化能力的实践指南——大模型开发深度学习理论基础

在深度学习开发中&#xff0c;过拟合是一个常见且具有挑战性的问题。当模型在训练集上表现优秀&#xff0c;但在测试集或新数据上性能大幅下降时&#xff0c;就说明模型“记住”了训练数据中的噪声而非学习到泛化规律。本文将从实际开发角度系统讲解如何应对过拟合&#xff0c;…...

【玩转23种Java设计模式】结构型模式篇:组合模式

软件设计模式&#xff08;Design pattern&#xff09;&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...

专业工具,提供多种磁盘分区方案

随着时间的推移&#xff0c;电脑的磁盘空间往往会越来越紧张&#xff0c;许多人都经历过磁盘空间不足的困扰。虽然通过清理垃圾文件可以获得一定的改善&#xff0c;但随着文件和软件的增多&#xff0c;磁盘空间仍然可能显得捉襟见肘。在这种情况下&#xff0c;将其他磁盘的闲置…...

SELinux 概述

SELinux 概述 概念 SELinux&#xff08;Security-Enhanced Linux&#xff09;是美国国家安全局在 Linux 开源社区的帮助下开发的一个强制访问控制&#xff08;MAC&#xff0c;Mandatory Access Control&#xff09;的安全子系统。它确保服务进程仅能访问它们应有的资源。 例…...

【十三】Golang 通道

&#x1f4a2;欢迎来到张胤尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 通道通道声明初始化缓冲机制无缓冲通道代码示例 带…...

DeepSeek专题:DeepSeek-V2核心知识点速览

AIGCmagic社区知识星球是国内首个以AIGC全栈技术与商业变现为主线的学习交流平台&#xff0c;涉及AI绘画、AI视频、大模型、AI多模态、数字人以及全行业AIGC赋能等100应用方向。星球内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AI课程、AIGC模型、AIGC数据集和源码等…...

Oracle19c进入EM Express(Oracle企业管理器)详细步骤

以下是使用Oracle 19c进入Oracle Enterprise Manager Database Express&#xff08;EM Express&#xff09;的详细步骤&#xff1a; ### **步骤 1&#xff1a;确认EM Express配置状态** 1. **登录数据库服务器** 使用Oracle用户或管理员权限账户登录操作系统。 2. **查看EM…...

游戏引擎学习第140天

回顾并为今天的内容做准备 目前代码的进展到了声音混音的部分。昨天我详细解释了声音的处理方式&#xff0c;声音在技术上是一个非常特别的存在&#xff0c;但在游戏中进行声音混音的需求其实相对简单明了&#xff0c;所以今天的任务应该不会太具挑战性。 今天我们会编写一个…...

C++--迭代器(iterator)介绍---主要介绍vector和string中的迭代器

目录 一、迭代器&#xff08;iterator&#xff09;的定义 二、迭代器的类别 三、使用迭代器 3.1 迭代器运算符 3.2 迭代器的简单应用&#xff1a;使用迭代器将string对象的第一个字母改为大写 3.3 将迭代器从一个元素移动到另外一个元素 3.4 迭代器运算 3.5 迭代器的复…...

RuleOS:区块链开发的“新引擎”,点燃Web3创新之火

RuleOS&#xff1a;区块链开发的“新引擎”&#xff0c;点燃Web3创新之火 在区块链技术的浪潮中&#xff0c;RuleOS宛如一台强劲的“新引擎”&#xff0c;为个人和企业开发去中心化应用&#xff08;DApp&#xff09;注入了前所未有的动力。它以独特的设计理念和强大的功能特性&…...

机器学习之强化学习

引言 在人工智能的众多分支中&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09; 因其独特的学习范式而备受关注。与依赖标注数据的监督学习或探索数据结构的无监督学习不同&#xff0c;强化学习的核心是智能体&#xff08;Agent&#xff09;通过与环境…...

基于 uni-app 和 Vue3 开发的汉字书写练习应用

基于 uni-app 和 Vue3 开发的汉字书写练习应用 前言 本文介绍了如何使用 uni-app Vue3 uview-plus 开发一个汉字书写练习应用。该应用支持笔画演示、书写练习、进度保存等功能&#xff0c;可以帮助用户学习汉字书写。 在线演示 演示地址: http://demo.xiyueta.com/case/w…...

每天五分钟深度学习PyTorch:向更深的卷积神经网络挑战的ResNet

本文重点 ResNet大名鼎鼎,它是由何恺明团队设计的,它获取了2015年ImageNet冠军,它很好的解决了当神经网络层数过多出现的难以训练的问题,它创造性的设计了跳跃连接的方式,使得卷积神经网络的层数出现了大幅度提升,设置可以达到上千层,可以说resnet对于网络模型的设计具…...

electron + vue3 + vite 主进程到渲染进程的单向通信

用示例讲解下主进程到渲染进程的单向通信 初始版本项目结构可参考项目&#xff1a;https://github.com/ylpxzx/electron-forge-project/tree/init_project 主进程到渲染进程&#xff08;单向&#xff09; 以Electron官方文档给出的”主进程主动触发动作&#xff0c;发送内容给渲…...

《白帽子讲 Web 安全》之身份认证

目录 引言 一、概述 二、密码安全性 三、认证方式 &#xff08;一&#xff09;HTTP 认证 &#xff08;二&#xff09;表单登录 &#xff08;三&#xff09;客户端证书 &#xff08;四&#xff09;一次性密码&#xff08;OTP&#xff09; &#xff08;五&#xff09;多因…...

postgrel

首先按照惯例&#xff0c;肯定是需要对PostgreSQL数据库进行一系列信息收集的&#xff0c;常用的命令有以下这些&#xff1a;-- 版本信息select version();show server_version;select pg_read_file(PG_VERSION, 0, 200);-- 数字版本信息包括小版号SHOW server_version_num;SEL…...

Java基础——java8+新特性——方法引用(::)

1. 什么是方法引用&#xff1f; 定义&#xff1a;Java 8 引入的语法糖&#xff0c;用于 简化 Lambda 表达式&#xff0c;直接引用已有的方法。 符号&#xff1a;使用 :: 双冒号操作符。 本质&#xff1a;将方法作为函数式接口的实例传。 2. 方法引用的四种类型 类型 语法 …...

基于SpringBoot的商城管理系统(源码+部署教程)

运行环境 数据库&#xff1a;MySql 编译器&#xff1a;Intellij IDEA 前端运行环境&#xff1a;node.js v12.13.0 JAVA版本&#xff1a;JDK 1.8 主要功能 基于Springboot的商城管理系统包含管理端和用户端两个部分&#xff0c;主要功能有&#xff1a; 管理端 首页商品列…...

uniapp实现的个人中心页面(仿小红书)

采用 uniapp 实现的一款仿小红书个人中心页面模板&#xff0c;支持vue2、vue3, 同时适配H5、小程序等多端多应用。 简约美观大方 可到插件市场下载尝试&#xff1a; https://ext.dcloud.net.cn/plugin?id22516 示例...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...