一、关于RAG
RAG 是 “Retrieval-Augmented Generation”(检索增强生成)的缩写,是一种结合了信息检索和生成式模型的技术。 它的核心思想是:在生成答案或内容之前,先从外部知识库中检索出相关的信息,再将这些信息输入到生成模型中,从而生成更准确、更可靠、更有依据的回答。RAG 就是让大模型“先查资料再回答”,让它更聪明、更靠谱。
二、RAG之向量数据库的应用思路
向量数据库让 RAG 从“大海捞针”变成“精准投喂”,是实现低成本、高时效、可解释的企业级大模型应用的基石。
AI里面总提的token是什么意思 token 就是模型“看懂”文本的最小单位,表示文本的“基本单位”,模型用它来算钱、算长度、算理解 大模型按 token 收费、处理、限长(如 GPT-4 最大 32k tokens) 粗略估计:1 个汉字 ≈ 0.6 个 token(不是科学值,但够用)NLP---自然语言处理---向量数据库
1、RAG 的核心思路是“先查后答”: 先把知识切片向量化,存进向量数据库;用户提问时,用同一套嵌入模型把问题变成向量,去库里“按语义找邻居”,再把最相关的几条内容塞给大模型当“参考资料”,让它据此生成答案。 2、整个流程可拆成三步: 1)离线建库 文档→切块→向量化→入库(带元数据)。 切块大小、嵌入模型选型(BAAI/bge、OpenAI ada-002 等)直接决定后续检索质量。 2)在线检索 问题向量与库内向量做近似最近邻(ANN)搜索,返回 Top-K 段文本。 可再经重排序(rerank)或元数据过滤提升精度。 3)生成答案 把检索到的片段拼接成上下文,连同用户问题一起写进 Prompt,让 LLM“有据可依”地输出结果,显著降低幻觉。 3、向量数据库在此扮演“外挂记忆”的角色:负责毫秒级语义匹配,解决大模型记不住、记不准、更新慢的问题。实际落地时, 可按业务场景选配不同策略: 1)对时效性强的知识(新闻、股价)可缩小切块、缩短刷新周期; 2)对专业文档(法律、医疗)可引入层级检索:先按标题/章节粗筛,再精排段落; 3)对隐私数据可本地部署 Milvus、FAISS,避免外传。1、加载文件内容
2、
三、RAG调优之文档及文档分割
源文档体积较大,从头开始读取数据,消耗资源且效率低。需要将源文档拆分成多个文档,用于相似度查询
Langchain的文档拆分方式
LangChain 把“怎么切”这件事做成了分层、可组合、可插拔的“分割器宇宙”
1)固定长度 ---适合无结构文本
逻辑:
chunk_size = 400 字符,直接下刀,刀口可重叠 chunk_overlap=50。
特点:
零门槛,5 分钟上线;中文不会乱码。
零语义,容易把“罗密欧”切成“密欧”。
适用:
日志、聊天记录、无结构长文本,且业务对语义完整性不敏感。
代码:
from langchain.text_splitter import CharacterTextSplitter splitter = CharacterTextSplitter(chunk_size=450, chunk_overlap=50) chunks = splitter.split_text(raw_text)2)Token 级 --适合英文/代码
逻辑:
按真实 token 数(默认 cl100k_base)下刀,与 GPT-4/3.5 的上下文窗口精准对齐。
特点:
中英文 token 化差异大,中文常被拆成半个字 → 乱码。
适合英文或代码场景;中文慎用。
代码:
from langchain.text_splitters import TokenTextSplitter splitter = TokenTextSplitter(chunk_size=256, chunk_overlap=20)3)递归字符---★最常用,适合官方文档
逻辑:
先按优先级列表尝试“温柔下刀”:
["\n\n", "\n", "。", "!", "?", ". ", ",", " ", ""]
若切完仍超长,再对子片段递归调用,直到≤chunk_size。
特点:
兼顾“长度限制”与“语义边界”,社区实测召回率 +40%。
支持中文标点,可自定义正则。
适用:
90% 的通用场景:博客、报告、FAQ、医疗/法律条文。
代码:
from langchain_text_splitters import RecursiveCharacterTextSplitter splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50, separators=["\n\n", "\n", "。", "!", "?", ". ", ",", " ", ""], is_separator_regex=False ) docs = splitter.create_documents([raw_text])4)文档结构感知(按格式标签)-- 适合有结构的文档
4.1 MarkdownHeaderTextSplitter
逻辑:
按 #/##/### 层级切,把“标题”写进 metadata,后续可再递归细切。
适用:
产品手册、技术文档、README。
代码:
from langchain.text_splitter import MarkdownHeaderTextSplitter headers = [("#", "H1"), ("##", "H2"), ("###", "H3")] splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers) md_docs = splitter.split_text(md_text) # 先按标题切 # 再小粒度:转交给 RecursiveCharacterTextSplitter 二次切4.2 HTML / LaTeX / PDF 结构切
LangChain 提供HTMLHeaderTextSplitter、LatexTextSplitter,配合 Unstructured/pdfplumber 先抽取标题、表格、正文元素,再按元素类型切块,保证“表格不劈半、标题带路”。
适用:
财报、论文、网页爬取内容。
5)语义感知拆分 ---(最精细,GPU 消耗最高)
5.1 SemanticChunker(Kamradt 思路)
步骤:
① 先拆句 → ② 滑窗生成嵌入 → ③ 计算相邻窗余弦距离 → ④ 距离突变>95% 分位点视为“主题断层”,在此下刀。
特点:
Chunk 大小不固定,易超长,需要再套一层“硬截断”。
能把“航班延误”与“不可抗力条款”聚到同一段,问答关联度 ↑。
5.2 ClusterSemanticChunker(Chroma 2025 新版)
步骤:
① 50 token 小片嵌入 → ② 动态规划聚类 → ③ 输出固定 200/400 token 的“语义内聚”块。
特点:
全局最优,适合专业书籍、长 wiki。
GPU 显存≥8 G,账单可能 ×7。
6 )二次精加工:重叠、元数据、后处理
重叠比例:
法律/医疗 15–20%,技术手册 10%,日志 5% 即可。元数据锚点:
把“章节”“页码”“表格编号”写进 doc.metadata,后续检索可过滤,命中率 ↑3×。重排序 + 上下文压缩:
先向量召回 Top-20,再用 cross-encoder 精排,最后把 Top-5 塞进 LLM,减少噪声。
四、RAG调优之Embedding嵌入模型
Embedding 调优就是“把问答对儿当成拉杆,消除RAG幻觉
外网地址:模型仓库:https://huggingface.co/
智普AI也提供一些大模型仓库
选择下载最多的,且支持中文的自然语言处理大模型
把 Embedding 模型放在 RAG pipeline 里,它的任务只有一句话:
“让‘问题向量’和‘知识向量’处在同一个语义空间里,并且挨得越近越好。”
所谓 “RAG 调优之 Embedding 嵌入模型”,其实就是不断折腾这个语义空间的几何形状,使得
cosine(q , k+) ↑ 且 cosine(q , k-) ↓
(k+ 是能回答问题的段落,k- 是无关段落)。
Step-1 选基座
中文优先 BAAI/bge-large-zh-v1.5(维度 1024,MTEB 中文榜第一,免费商用)。
英文优先 thenlper/gte-large 或 Alibaba/gte-Qwen2-7B-instruct(长文本 8k token)。
Step-2 造数据
低成本:把知识段落复制一份当“伪问题”,构造 (段落, 段落) 自监督对。
高质量:用线上真实“用户问题 → 点击段落”日志,一条问答对就是天然 (q, k+)。
难例:在 Top-50 里把“看着像答案其实不对”的段落标成 k-,训练时用 InfoNCE 拉近 q-k+、推远 q-k-。
Step-3 微调脚本
(HuggingFace + Sentence-Transformers 一行命令)
bash
复制
pip install sentence-transformers python -m sentence_transformers.fit \ --model_name BAAI/bge-large-zh-v1.5 \ --train_file qp_pairs.jsonl \ --loss cosent \ --batch_size 64 \ --epochs 1 \ --output_path ./bge-finetune-zh1 万张问答对,单卡 A100 6 小时完事。
Step-4 上线验证
指标:Recall@k、MRR、Hit@1。
速度:千万级库用 FAISS-IVF1024 + 16 线程,P99 < 50 ms。
回退:如果新模型效果降,用 Ensemble(老向量 0.5 + 新向量 0.5)灰度发布。
五、RAG调优之向量召回检索准确性调优
score_threshold 值越大,相似度越高的内容排在前面
看需要返回几个文档,相似度最高的返回的优先级最高
六、大模型增强之FunctionCalling工具调用
聚合数据:https://www.juhe.cn/
做系统设定,用户发一条消息,然后ai发消息,然后工具发消息