【P04_AI大模型RAG检索增强】
2026/7/15 15:31:51 网站建设 项目流程

一、关于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 提供HTMLHeaderTextSplitterLatexTextSplitter,配合 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-zh

1 万张问答对,单卡 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发消息,然后工具发消息

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询