【P04_AI大模型RAG检索增强】

【P04_AI大模型RAG检索增强】
一、关于RAGRAG 是 “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_overlap50。特点零门槛5 分钟上线中文不会乱码。零语义容易把“罗密欧”切成“密欧”。适用日志、聊天记录、无结构长文本且业务对语义完整性不敏感。代码from langchain.text_splitter import CharacterTextSplitter splitter CharacterTextSplitter(chunk_size450, chunk_overlap50) chunks splitter.split_text(raw_text)2Token 级 --适合英文/代码逻辑按真实 token 数默认 cl100k_base下刀与 GPT-4/3.5 的上下文窗口精准对齐。特点中英文 token 化差异大中文常被拆成半个字 → 乱码。适合英文或代码场景中文慎用。代码from langchain.text_splitters import TokenTextSplitter splitter TokenTextSplitter(chunk_size256, chunk_overlap20)3递归字符---★最常用适合官方文档逻辑先按优先级列表尝试“温柔下刀”[\n\n, \n, 。, , , . , , , ]若切完仍超长再对子片段递归调用直到≤chunk_size。特点兼顾“长度限制”与“语义边界”社区实测召回率 40%。支持中文标点可自定义正则。适用90% 的通用场景博客、报告、FAQ、医疗/法律条文。代码from langchain_text_splitters import RecursiveCharacterTextSplitter splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50, separators[\n\n, \n, 。, , , . , , , ], is_separator_regexFalse ) 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_onheaders) md_docs splitter.split_text(md_text) # 先按标题切 # 再小粒度转交给 RecursiveCharacterTextSplitter 二次切4.2 HTML / LaTeX / PDF 结构切LangChain 提供HTMLHeaderTextSplitter、LatexTextSplitter配合 Unstructured/pdfplumber 先抽取标题、表格、正文元素再按元素类型切块保证“表格不劈半、标题带路”。适用财报、论文、网页爬取内容。5语义感知拆分 ---最精细GPU 消耗最高5.1 SemanticChunkerKamradt 思路步骤① 先拆句 → ② 滑窗生成嵌入 → ③ 计算相邻窗余弦距离 → ④ 距离突变95% 分位点视为“主题断层”在此下刀。特点Chunk 大小不固定易超长需要再套一层“硬截断”。能把“航班延误”与“不可抗力条款”聚到同一段问答关联度 ↑。5.2 ClusterSemanticChunkerChroma 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维度 1024MTEB 中文榜第一免费商用。英文优先 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 上线验证指标Recallk、MRR、Hit1。速度千万级库用 FAISS-IVF1024 16 线程P99 50 ms。回退如果新模型效果降用 Ensemble老向量 0.5 新向量 0.5灰度发布。五、RAG调优之向量召回检索准确性调优score_threshold 值越大相似度越高的内容排在前面看需要返回几个文档相似度最高的返回的优先级最高六、大模型增强之FunctionCalling工具调用聚合数据https://www.juhe.cn/做系统设定用户发一条消息然后ai发消息然后工具发消息