type
summary
status
category
tags
slug
date
password
icon
状态
子标签
标签
日期
Jan 13, 2026 08:03 AM
CONTENT
基础概念
R:retrieval,检索
A:augmented,增强 的
G:generation,生成
现阶段,本质上是一种压缩,受限于LLM的上下文长度的妥协
流程:

涉及概念
流程
原始数据→清洗→切块chunking→embeddings→存储在向量数据库中vector database
ref

Embeddings
老东西,text to vector,文本向量化,在SD里也经常用
Chunking
切块,长文本切块,切法就是其算法
Vector Database
向量数据库,常见的:Pinecone,chroma,PostgreSQL+pgvector
缺点
- 分块的方式不合理,不能适配所有情况:
- 语义被机械切割
- 问题:为什么不交给LLM去切割(已经有类似的优化切割策略了)
- 比如:文章中某个字词出现了多少次(和每局都有微弱相关,但又不够相关,但和总体比较相关的问题)
- 问题:这种适合正则表达式之类的机械检索方式
实操:用RAG构建个人知识库
源文本选择
分块算法
- 针对特定篇文章的特定算法
- 先获取内容
- 两个回车为切割
- 优化:#开头的作为目录,不作切割
- 现有的算法:langchain的Recursive Character Text Splitter
将块embedding,存入向量数据库
- 选择适合的embedding模型
- 一般将分割这一动作交给第三方平台
- 所以只写接口的功能函数就行了
- 安装对应依赖
- 可能需要对应的api key
- 构建相应的输入函数embed.py
- 具体操作参考选择的模型的说明文档
- 如:Google的Gemini嵌入模型,数据分为了存储和查询两类
- 分类的目的是能靠其闭源算法拉近向量距理:
- 其他模型并没有这样的分类
如:a:1是2,b:3是4,c:13是什么?;分开存a,b和c,在问c时,能够直接定位到a和b。
- 直接返回向量数据
- 简单demo演示,用upsert
- 实际肯定要加入存储前的纠错机制
- 生成选择的向量数据库的实例,把向量和原文存入数据库
- 如chromadb的实例,生成实例
- 依次对每个chunk做embedding
- 用chromadb的upsert函数存入
- create db函数存入数据库
写查询函数query
- 先把question做embedding,
- 查询数据库中的相关片段n
- 组合prompt:
- question
- context
- 发给LLM
补充
- 分割方法改进
- 算法迭代
- 重排序模型
- 弥补一些返回数据chunk时,受限于n值的设置,只能返回部分chunk时,前面的几个质量不太行的问题
- reranker,用于把靠谱的往前排
- 全局视角的改进:调用MCP类工具处理
- RAG本质是返回部分相关的上下文context,用以补充
- 无法回答全局类型的统计类,结构类的全局条件下的问题
- 改进:调用MCP工具处理关系型数据库
- 如:postgres数据库中,用NPX配置,修改json文件中的数据库地址(按格式输入账号,密码等信息)
- 在prompt中给出数据库的存储表结构信息
- 其实就是现阶段RAG的天然缺陷,又被用户冠以全能,一站式的功能期待,导致这部分得集成之前有的结构化数据的处理方式,才能”正常“使用。
- 当然,还有粗暴的跟堆算力一样道理的方法:超长上下文
- 使用自适应RAG
- Author:Frank
- URL:https://blog.fqqblog.com/article/2e7bd4d9-052e-810a-8a33-c15b7e8886e7
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!

RAG