惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Secure Thoughts
博客园 - 【当耐特】
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
博客园 - 司徒正美
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
P
Privacy & Cybersecurity Law Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
B
Blog
The GitHub Blog
The GitHub Blog
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
Martin Fowler
Martin Fowler
博客园 - 叶小钗
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Tenable Blog
S
Securelist
博客园 - 三生石上(FineUI控件)
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
T
Threat Research - Cisco Blogs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
F
Full Disclosure
Cloudbric
Cloudbric
The Cloudflare Blog
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Hacker News: Front Page
腾讯CDC
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
V2EX - 技术
V2EX - 技术
GbyAI
GbyAI
TaoSecurity Blog
TaoSecurity Blog
I
Intezer
The Last Watchdog
The Last Watchdog
G
GRAHAM CLULEY
Google Online Security Blog
Google Online Security Blog
T
The Blog of Author Tim Ferriss

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12) Snack JSONPath 项目架构分析 Claude Code Buddy 小析:一个非核心功能,如何体现产品的细节完成度 AI新时代下的图床管理方案-Cloudflare图床+MCP+Skills方案指南 化繁为简:顺丰速运App如何通过 HarmonyOS SDK实现专业级空间测量 从零实现富文本编辑器#13-React非编辑节点的内容渲染 AI开发-python-langchain框架(3-23-OpenAI Functions风格Tool Calling智能助手) .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut PbootCMS 网站内容数量多导致访问慢?这些实用优化方案帮你提速! - 家兴网络技术工作室 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 网站漏洞怎么发现并修复?一篇实用指南(附完整流程) - 家兴网络技术工作室 开了 TUN 模式还是直连?90% 的人都踩过这个坑 Github日报|2026年04月12日 - AI一族 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术 Etsy 把 1000 个 MySQL 分片迁进 Vitess:425TB 数据背后的真正问题不是性能,而是运维规模 MicroPython LVGL基础知识和概念:底层渲染与性能优化 - FreakStudio 数据库草图算法 Python 潮流周刊#146:CPython 引入 Rust 的进展 - 豌豆花下猫 最小生成树 - mofei1116 红日靶场七:从外网入口、容器逃逸到 AD 接管的完整利用链复盘 - YouDiscovered1t 分享四款开源且实用的 Kafka 管理工具 - 追逐时光者 vLLM 权重加载机制全解析:从挑战到理想架构 LCT 学习笔记 - ACehomoxue Avalonia UI 12.0.0 正式发布:架构演进和性能飞跃 - 张善友 当 AI Agent 把调用链拉长,延迟开始成为一门生意 conhost.exe 无法显示 U+2717 - 145a 太秀了,我把自己蒸馏成了 Skill!已开源 - 程序员鱼皮 ASP.NET Core 内存缓存实战:一篇搞懂该怎么配、怎么避坑 基于 Ghostty 带有分割标签页和为 Claude 编程设计的通知终端 - BugShare AI 焊死入口:教育的“操作系统级”重塑 - 郝hai 初级Java开发工程师使用sql脚本编写代码的过程是简单而且不糊涂 - CoderOilStation Claude Code通关手册(六):MCP协议完全指南 - 暮色之狐 边框灯光环绕动画特效实现指南 - Newbe36524 开源:子木蒸馏版的 SEO 审计工具 seo-audit-skill v1.0 我所理解的Python元模型 【从0到1构建一个ClaudeAgent】规划与协调-TodoWrite - 程序员Seven Claude 和 Codex 在审计 Skill 上性能差异探究 - ACai_sec AScript如何实现中文脚本引擎 - rockey627 【渗透测试】HTB Season10 Garfield 全过程wp - dynasty_chenzi Android 开发者为什么必须掌握 AI 能力?端侧视角下的技术变革 树状数组正确性证明 - AC-wyr 你的 AI 焦虑,可能比 AI 本身更危险——ATM 机没有消灭银行柜员,但恐慌消灭了你的判断力 - 我没有三颗心脏 一个拉胯的分库分表方案有多绝望?整个部门都在救火! - 冰河团队 动态规划入门必学之走方格问题 - Ofnoname PostgREST 与 PostgreSQL 角色权限配置全解析(生产级实践) - SheepDog1998 使用 UEFI 图形输出协议 GOP 在屏幕上显示图像的方法 - 阿源- Claude Code通关手册(五):组建你的AI专家团队,子代理系统 - 暮色之狐 一个程序员到架构师的催婚路之感悟(整整10年后的催婚相亲感悟) - MisterLip 用 Agent Skill 自动生成工作周报 - 赵康
RAG学习笔记:让大模型先查资料再回答问题
养肥胖虎 · 2026-05-16 · via 博客园_首页

RAG学习笔记:让大模型先查资料再回答问题

好家伙,

这次我们来聊 RAG.

RAG 这个词最近出现得很多,但如果只是记住它的英文全称,其实没什么用.

我更关心的是:

它到底解决什么问题?
为什么一个普通大模型问答不够用?
文档是怎么变成知识库的?
用户提问时系统背后到底发生了什么?

所以这篇文章不准备一上来堆概念.

还是从一个很实际的问题开始:

我有一堆项目文档,配置表,接口说明,设计笔记.
我想直接问它们问题.

比如:

某个配置字段是什么意思?
有哪些文档提到了某个角色?
这个系统的部署流程是什么?
某个功能的设计依据在哪里?

如果直接问普通大模型,它很可能不知道.

因为这些资料在我的本地,不在它的训练数据里.

那么问题来了:

我不希望模型瞎猜.

我希望它先查我的资料,再回答.

这就是 RAG 最核心的价值.

0.背景:为什么需要RAG

先看普通大模型问答.

它的流程大概是:

用户问题 -> 大模型 -> 答案

这个流程很简单.

但它有几个问题.

0.1 大模型不知道我的私有资料

大模型知道很多通用知识.

但它不知道我电脑里的:

项目文档
策划案
配置表
部署笔记
内部接口说明
个人学习笔记

如果这些资料没有被放进上下文,模型就只能靠已有知识猜.

这个时候它回答得越流畅,反而越危险.

因为你很难分辨它是在基于资料回答,还是在编.

0.2 文档太多,人工翻效率低

项目一大,资料会越来越多.

比如一个游戏项目里可能有:

文案文档
战斗配置表
技能配置表
装备配置表
后端部署文档
接口说明
测试记录

人工一个个搜,效率很低.

而且有些问题不是关键词能直接搜出来的.

比如:

这个字段是不是和套装效果有关?
有没有哪个文档解释过战斗监控?
这个配置表里的 name 和 title 有什么区别?

这些问题更偏语义.

传统搜索不一定好用.

0.3 我们想要的是先找证据

所以真正想要的流程应该是:

用户提问
  -> 系统先找相关资料
  -> 把资料交给大模型
  -> 大模型基于资料回答
  -> 最后给出来源

这就是 RAG.

它不是让模型凭空变聪明.

而是给模型加了一个"查资料"的步骤.

1.RAG是什么

RAG 的全称是:

Retrieval-Augmented Generation

拆开看:

Retrieval  检索
Augmented  增强
Generation 生成

连起来就是:

检索增强生成

我自己的理解更简单:

RAG = 先从知识库找资料,再让大模型基于资料回答.

普通问答:

问题 -> 大模型 -> 答案

RAG 问答:

问题
  -> 检索知识库
  -> 找到相关资料
  -> 资料 + 问题 一起给大模型
  -> 答案 + 来源

噢,这样一看就清楚了.

RAG 不是替代大模型.

它是给大模型补上一个外部知识来源.

2.RAG整体流程

一个基础 RAG 系统,大概分两部分:

1. 建库阶段
2. 查询阶段

2.1 建库阶段

建库阶段就是把资料整理成可以检索的形式.

流程大概是:

读取文档
  -> 清洗文本
  -> 切成片段
  -> 生成 embedding
  -> 写入向量数据库

比如:

Markdown 文档
Word 文档
txt 文本
Excel 配置表

都会被转成一条条知识记录.

每条记录一般包含:

文本内容
向量
来源文件
chunk 序号
额外元数据

2.2 查询阶段

用户提问时,流程大概是:

用户问题
  -> 生成问题 embedding
  -> 去向量数据库检索相似内容
  -> 取 Top K 相关片段
  -> 拼成 Prompt
  -> 让大模型回答
  -> 返回答案和来源

这里最关键的是:

大模型看到的不是空问题.
它看到的是问题 + 检索出来的资料.

所以它的回答就有了依据.

3.文档怎么进入知识库

RAG 的第一步不是问答.

而是文档处理.

如果文档处理得很粗糙,后面模型再强也救不回来.

3.1 文本类文档

像 Markdown,txt,Word 这种文档,一般先提取文本.

然后按段落切块.

比如:

原文档
  -> chunk 0
  -> chunk 1
  -> chunk 2

切块时要注意两个问题:

块太大,检索不精准
块太小,上下文容易断

所以常见做法是:

按段落切块 + 保留一点 overlap

也就是相邻片段之间保留一点重叠内容.

这样可以避免一句话刚好被切断.

3.2 Excel配置表

Excel 就不能完全按普通文本处理.

尤其是游戏项目里的配置表.

常见结构可能是:

第 1 行: 中文字段名
第 2 行: 字段 code
第 3 行以后: 数据记录

这种表格更适合按行处理.

也就是说:

一行配置 = 一条知识记录

并且要保存:

文件路径
Sheet 名
行号
中文字段名
字段 code

否则后面回答时,只能说"查到了相关配置".

但说不清到底在哪个表,哪个 sheet,哪一行.

这就不够可用.

4.Embedding和向量是什么

RAG 里面经常会提到 embedding.

这个词听起来有点抽象.

我现在这样理解:

embedding = 把文本变成一组数字

比如一句话:

RAG 适合做项目知识库问答

经过 embedding 模型以后,会变成:

[0.12, -0.08, 0.33, ...]

这一组数字就是向量.

它表示这段文本的语义位置.

如果两段文本意思接近,它们的向量距离也会比较接近.

比如:

RAG 适合做知识库问答
检索增强生成可以用于内部文档问答

这两句话虽然字面不完全一样,但语义接近.

所以向量检索能把它们关联起来.

这就是 RAG 比普通关键词搜索更灵活的地方.

5.向量数据库负责什么

向量生成出来以后,要存到一个地方.

这个地方就是向量数据库.

常见的有:

Qdrant
Milvus
Chroma
Weaviate

向量数据库主要做几件事:

1. 保存文档片段的向量
2. 保存文档片段的 payload
3. 根据问题向量检索相似片段
4. 返回相似度分数 score

这里 payload 很重要.

不要只存向量.

一条比较完整的 payload 可能长这样:

{
  "text": "File: skill.xlsx\nSheet: Skill\nRow: 12\n名称(name): 火球术",
  "source": "配置表/skill.xlsx",
  "fileType": ".xlsx",
  "sheet": "Skill",
  "rowNumber": 12,
  "chunkIndex": 0
}

向量负责:

找得准

payload 负责:

说得清

没有 payload,最后就很难展示来源.

6.用户提问时发生了什么

假设用户问:

套装描述的方法是什么?

系统第一步不是直接调用大模型.

而是先把这个问题也变成向量:

问题文本 -> 问题向量

然后拿问题向量去向量数据库里搜.

比如取前 6 条:

Top 1 score=0.72
Top 2 score=0.66
Top 3 score=0.51
Top 4 score=0.31
Top 5 score=0.28
Top 6 score=0.20

这里要注意:

不是所有结果都应该给大模型.

如果 score 太低,说明它可能只是"看起来有点像",但并不能真正回答问题.

所以需要设置一个最低相关度.

比如:

score >= 0.48 才进入上下文

如果没有任何片段达到阈值,系统应该回答:

根据当前资料无法确定。

这句话很重要.

因为 RAG 系统最怕的不是回答少.

最怕的是资料不够还硬编.

7.Prompt怎么约束模型

检索到资料以后,还要把资料放进 prompt.

这里 prompt 不能太随便.

一个比较稳的 prompt 思路是:

你是一个项目内部知识库助手.
请使用中文回答.
只能使用提供的资料.
如果资料足够,直接回答.
如果资料只提供部分线索,说明"资料只提供了部分线索".
如果资料不足,说明"根据当前资料无法确定".
最后附上来源.

这里的核心是:

限制模型不要脱离资料发挥.

也就是说,模型可以负责组织语言.

但证据必须来自检索结果.

这就是 RAG 和普通聊天最大的区别.

8.RAG为什么一定要显示来源

我觉得 RAG 里"来源"不是附加功能.

它是核心功能.

如果系统只回答:

套装描述通过 desc 字段配置。

这个答案看起来有用.

但用户还是会问:

你从哪看到的?
在哪个文件?
哪一行?

所以更好的回答应该带来源:

来源:
配置表/equip.xlsx / Sheet: Equip / Row: 12 / score=0.6231

这样用户可以回到原始资料验证.

对于项目知识库来说,能验证比会说更重要.

尤其是配置表,部署文档,接口说明这种内容.

答错了可能会直接影响开发和测试.

9.RAG适合什么场景

RAG 很适合这些场景:

1. 公司内部知识库
2. 项目文档问答
3. 游戏文案和配置表查询
4. 个人学习笔记检索
5. 客服知识库
6. 部署文档和故障排查

这些场景有一个共同点:

资料很多
资料会变
需要基于资料回答
最好能给来源

所以 RAG 很适合.

因为它不需要重新训练模型.

资料变了,重新导入知识库就行.

10.RAG不适合什么场景

RAG 也不是万能的.

有些场景不适合只靠 RAG.

10.1 精确数值筛选

比如:

找出攻击力大于 50 的装备

这个问题更适合数据库查询.

因为它是结构化筛选.

RAG 可以帮你解释字段含义.

但真正筛选数值,数据库更稳定.

10.2 复杂计算

比如:

按照这套公式计算最终伤害

这类问题应该走明确的计算逻辑.

不要让模型凭感觉算.

10.3 资料根本不存在

如果知识库里没有导入相关资料,RAG 也答不出来.

它不是凭空造知识.

它只是帮你更好地使用已有资料.

10.4 图片和扫描件

如果资料是图片或者扫描件,但没有 OCR,那系统读不到文字.

这种情况需要先做 OCR.

否则 RAG 根本不知道图片里写了什么.

11.本地RAG项目可以怎么搭

一个本地 RAG MVP 可以这样搭:

Ollama        跑本地模型
bge-m3        做 embedding
qwen 类模型   做回答
Qdrant        存向量
Node/Go/Python 提供 API
Web 页面       展示答案和来源

流程大概是:

文档目录
  -> 解析 Markdown / txt / docx / xlsx
  -> 切块或按行处理
  -> 生成 embedding
  -> 写入 Qdrant
  -> Web 页面提问
  -> 返回答案和来源

本地方案的好处:

1. 数据不出本机
2. 可以接内部资料
3. 成本低
4. 适合先做 MVP 验证

限制也很明显:

1. 速度取决于本地模型
2. 大批量导入会比较慢
3. 没有鉴权时只能本机或内网用
4. 高并发能力有限

所以一开始不要追求大而全.

先导入一小批真实资料.

然后准备 10 个真实问题去问.

如果答案能被来源验证,这个方向就有价值.

12.总结

这次整理 RAG,我最大的收获是:

RAG 的核心不是让模型记住资料.
而是让模型回答前先检索资料.

它的核心链路是:

文档
  -> 切块
  -> embedding
  -> 向量数据库
  -> 检索
  -> prompt
  -> 回答和来源

几个关键点:

1. 文档解析质量决定知识库质量
2. 切块策略会影响检索效果
3. payload 元数据决定答案能不能追溯
4. score 过滤可以减少低质量上下文
5. prompt 要限制模型只基于资料回答
6. 来源展示是 RAG 的核心能力

踩坑点也很清楚:

1. 不要把所有文档粗暴拼成一大段
2. 不要只存文本不存来源
3. 不要把低相关度结果硬塞给模型
4. 不要指望 RAG 替代结构化数据库
5. 不要让模型在资料不足时强行回答

最后一句话总结:

RAG 不是魔法.
它是一套让大模型先查资料,再回答问题的工程流程.

把这条流程跑通以后,大模型才真正能服务我们的项目文档,配置表和内部知识库.