如何在网站后台删除栏目,用node和vue做的网站,南宁做网站开发的公司,百度seo优化是什么七大场景 企业级RAG检索实战#xff08;附源码#xff09;
RAG 落地生产环境#xff0c;如何解决 “检索准确性”#xff08;事实一致性/语境完整性/领域术语召回#xff09;和 “多模态解析”#xff08;PDF 图表、图片甚至视频#xff09;两大难题#xff1f;
本文通…七大场景 企业级RAG检索实战附源码RAG 落地生产环境如何解决 “检索准确性”事实一致性/语境完整性/领域术语召回和 “多模态解析”PDF 图表、图片甚至视频两大难题本文通过 Llama-Index 七大企业实战场景全面解析高精准文本检索与Excel/PDF/视频全模态处理。拒绝理论空谈全篇代码实战文末免费领取完整源码️ Part 1. 快速热身3分钟搭建 RAG 基线在开始介绍进阶技术之前我们先用最精简的代码跑通一个基础 RAG 流程。这几行代码在后台完成了 ETL、索引构建、检索生成的全流程。1.1 环境准备import os from dotenv import load_dotenv import llama_index.core # 1. 加载环境变量 load_dotenv() # 2. 检查 Llama-Index 版本 print(fLlama-Index Version: {llama_index.core.__version__})1.2 加载数据与查询import os file_path ./data/创新科技股份有限公司员工手册.txt with open(file_path, r, encodingutf-8) as f: md_content f.read() # 预览前1000字符 md_content[:1000]from llama_index.core import VectorStoreIndex, SimpleDirectoryReader # 1. 数据摄入 (Loading) documents SimpleDirectoryReader(data).load_data() # 2. 索引构建 (Indexing) index VectorStoreIndex.from_documents(documents) # 3. 引擎配置 (Query Engine) query_engine index.as_query_engine() # 4. 执行查询 (Execution) response query_engine.query(请问我们公司有病假政策么请用中文进行回复。) # 配置 LLM (如 GPT-4o) from llama_index.core import Settings from llama_index.llms.openai import OpenAI base_urlos.getenv(BASE_URL) api_keyos.getenv(OPENAI_API_KEY) Settings.llm OpenAI( modelgpt-4o, api_keyapi_key, api_basebase_url ) Part 2. 拒绝断章取义Small-to-Big 策略 (Sentence Window)痛点切片太小LLM 看不懂上下文切片太大检索全是噪声。解法“搜的时候用句子给的时候用窗口”。索引时只存单句向量保证精准检索后将该句前后的上下文大窗口提供给 LLM保证完整。2.1 核心代码# 检查数据 if not os.path.exists(./data/创新科技股份有限公司员工手册.txt): print(❌ 错误请确保 ./data 目录下存放了员工手册 txt 文件) else: print(✅ 环境检查通过正在加载数据...) documents SimpleDirectoryReader(./data).load_data() print(f 成功加载文档共 {len(documents)} 页/部分。) # 构建进阶 RAG (Small-to-Big) from llama_index.core.node_parser import SentenceWindowNodeParser from llama_index.core.postprocessor import MetadataReplacementPostProcessor import re print( 正在构建进阶 RAG 索引 (Small-to-Big)...) # --- ️ 关键修复定义中文句子切分函数 --- def chinese_sentence_splitter(text): # 按中文标点切分保留标点 return re.split(r(?[。\n]), text) # 1. 定义窗口切分器 node_parser SentenceWindowNodeParser.from_defaults( sentence_splitterchinese_sentence_splitter, window_size3, # 核心前后各取3句 window_metadata_keywindow, original_text_metadata_keyoriginal_text, ) # 2. 手动切分文档 nodes node_parser.get_nodes_from_documents(documents) print(f 文档被切分为 {len(nodes)} 个句子节点) # 3. 建立索引 (对单句进行向量化) advanced_index VectorStoreIndex(nodes) # 4. 创建引擎 (带偷梁换柱功能的后处理器) advanced_engine advanced_index.as_query_engine( similarity_top_k5, node_postprocessors[ MetadataReplacementPostProcessor(target_metadata_keywindow) ] ) print(✅ 进阶 RAG 系统就绪)2.2 效果对比# 效果对比展示 from IPython.display import display, Markdown # 建立一个普通 Baseline 对比 base_index VectorStoreIndex.from_documents(documents) base_engine base_index.as_query_engine(similarity_top_k2) test_questions [ Q1: 如果我这个月迟到了 4 次会受到什么样的具体处理如果连续 3 天没打卡呢, Q2: 我想周末和春节都来公司加班多赚点钱工资分别怎么算我一年最多能加多少小时班有没有封顶, Q3: 我还在试用期最近家里有事想请半个月15天的假按规定可以请吗会不会影响我转正 ] def compare_answers(question): response_base base_engine.query(question) response_adv advanced_engine.query(question) display(Markdown(f### ❓ 提问: {question})) table_md f | 普通 RAG (Baseline) | 进阶 RAG (Small-to-Big) | | :--- | :--- | | {response_base.response} | {response_adv.response} | display(Markdown(table_md)) display(Markdown(---)) for q in test_questions: compare_answers(q) Part 3. 拯救“搜不到”混合检索 (Hybrid Search)痛点搜“ROWE工作制”或具体人名向量模型完全懵圈因为它只懂语义不懂字符。解法“左手向量右手关键词”。结合 Vector Search懂语义和 BM25懂字面用 RRF 算法进行排名融合专治各种生僻词和精准匹配。3.1 核心代码import nest_asyncio import jieba from typing import List from llama_index.core.node_parser import SentenceSplitter nest_asyncio.apply() # 1. 定义中文分词函数 (给 BM25 用) def chinese_tokenizer(text: str) - List[str]: return list(jieba.cut(text)) # 2. 切分文档 splitter SentenceSplitter(chunk_size512, chunk_overlap50) nodes splitter.get_nodes_from_documents(documents) # 3. 构建向量索引 vector_index VectorStoreIndex(nodes) # 构建混合检索系统 import inspect from llama_index.retrievers.bm25 import BM25Retriever from llama_index.core.retrievers import VectorIndexRetriever, QueryFusionRetriever from llama_index.core.query_engine import RetrieverQueryEngine print( 正在构建混合检索系统 (Hybrid Search)...) # --- ️ 自动侦测 FusionMode 类型 (防御性编程) --- try: sig inspect.signature(QueryFusionRetriever.__init__) ModeEnum sig.parameters[mode].annotation if hasattr(ModeEnum, RECIPROCAL_RANK): target_mode ModeEnum.RECIPROCAL_RANK else: target_mode reciprocal_rank except Exception: target_mode reciprocal_rank # 1. 创建 BM25 检索器 (字面匹配) bm25_retriever BM25Retriever.from_defaults( nodesnodes, similarity_top_k2, tokenizerchinese_tokenizer ) # 2. 创建向量检索器 (语义匹配) vector_retriever VectorIndexRetriever(indexvector_index, similarity_top_k2) # 3. 创建融合检索器 (RRF 算法) fusion_retriever QueryFusionRetriever( [vector_retriever, bm25_retriever], similarity_top_k4, num_queries1, modetarget_mode, use_asyncTrue ) # 4. 组装引擎 hybrid_engine RetrieverQueryEngine.from_args(retrieverfusion_retriever) print(✅ 混合检索就绪)3.2 效果对比# 针对生僻词和实体的测试 questions [ Q1: 请问法务合规部的负责人是谁我想发邮件给他邮箱是多少, Q2: 公司关于 BYOD (自带设备) 的具体政策要求是什么, 我是研发部的老员工听说有个‘ROWE’工作制具体需要满足哪些硬性条件才能申请 ] # 普通向量引擎 vector_engine vector_index.as_query_engine(similarity_top_k2) def compare_hybrid(question): response_base vector_engine.query(question) response_hybrid hybrid_engine.query(question) display(Markdown(f### ❓ 提问: {question})) table_md f | 普通 RAG (Vector Only) | 混合检索 (Vector BM25) | | :--- | :--- | | {response_base.response} | {response_hybrid.response} | display(Markdown(table_md)) display(Markdown(---)) for q in questions: compare_hybrid(q) Part 4. 告别“一刀切”智能路由 (Router Query Engine)痛点问细节如“补贴多少钱”需要精准切片问总结如“公司价值观”需要全文档摘要。普通 RAG 只能二选一。解法“给系统装个大脑”。构建两个工具细节工具 总结工具让 Router 根据用户问题自动判断该派谁上场。4.1 核心代码from llama_index.core import SummaryIndex, VectorStoreIndex # 1. 构建双索引 # 向量索引 (查细节) vector_index VectorStoreIndex(nodes) # 摘要索引 (查全貌) summary_index SummaryIndex(nodes) from llama_index.core.tools import QueryEngineTool from llama_index.core.selectors import LLMSingleSelector from llama_index.core.query_engine import RouterQueryEngine # 2. 定义工具 (Description 是关键写给 AI 看的) vector_tool QueryEngineTool.from_defaults( query_enginevector_index.as_query_engine(similarity_top_k2), description专门用于查询具体的、特定的事实细节例如补贴金额、电话号码、具体政策条款等。 ) summary_tool QueryEngineTool.from_defaults( query_enginesummary_index.as_query_engine(response_modetree_summarize), description专门用于对文档进行宏观的总结、概括全文主题、分析整体结构或提取跨章节的综合信息。 ) # 3. 构建 Router 引擎 print( 正在构建智能路由引擎...) router_engine RouterQueryEngine( selectorLLMSingleSelector.from_defaults(), query_engine_tools[summary_tool, vector_tool], verboseTrue # 开启日志看它怎么思考 ) print(✅ Router 引擎就绪)4.2 智能分发测试questions [ # 宏观总结题 - 应该走 Summary Tool Q1: 这份员工手册主要包含了哪几个章节请简要列出目录结构并概括每个章节的主题。, # 微观细节题 - 应该走 Vector Tool Q2: 公司的健身房补贴每年最高是多少钱 ] base_engine vector_index.as_query_engine(similarity_top_k2) def clean_text(text): return str(text)[:300].replace(\n, br) ... for q in questions: display(Markdown(f### ❓ 提问: {q})) response_base base_engine.query(q) response_router router_engine.query(q) table_md f | 普通 RAG (Top-2) | 智能路由 (Router) | | :--- | :--- | | {clean_text(response_base.response)} | {clean_text(response_router.response)} | display(Markdown(table_md)) display(Markdown(---)) 中场小结从文本到多模态如果说前四章解决了“非结构化文本”的检索难题那么接下来的四章我们将挑战更复杂的数据形态——表格、PDF、图片和视频。让我们看看 LlamaIndex 如何“降伏”这些异构数据。扫码加入赋范空间领取完整源码还有更多 Agent、RAG 等技术教程以及 15 工业级项目实战多模态RAG、实时语音助手、文档审核、AI ppt 等 Part 5. 让 RAG 看懂 ExcelPandas 结构化数据分析实战痛点问“流失用户平均消费多少”普通 RAG 只会搜文本不会算数。解法Pandas Query Engine。它不是去搜答案而是把自然语言翻译成 Python 代码直接在 DataFrame 上执行运算精准度 100%。5.1 核心代码import pandas as pd from llama_index.experimental.query_engine import PandasQueryEngine from llama_index.core import Settings from llama_index.llms.openai import OpenAI from dotenv import load_dotenv load_dotenv(overrideTrue) Settings.llm OpenAI(modelgpt-4o) # 1. 加载数据 df pd.read_csv(telco_data.csv) # 2. 注入中文指令 (让 AI 用中文回答且代码不许乱写) chinese_instruction_str ( 你是一位精通 Python Pandas 的数据分析专家。\n 你的任务是将用户的自然语言问题转换为可执行的 Python 代码并基于执行结果回答问题。\n 请严格遵守以下规则\n 1. 代码必须是有效的 Pandas 操作。\n 2. 代码的最后一行必须是一个返回结果的表达式不要用 print()。\n 3. **最终结果必须强制使用中文回答**。\n ) # 3. 初始化引擎 query_engine PandasQueryEngine( dfdf, verboseTrue, # 显示生成的代码方便调试 synthesize_responseTrue, # 让 LLM 把运算结果翻译成人话 instruction_strchinese_instruction_str ) # 4. 复杂统计提问 query_str 按合同类型(Contract)分组统计流失和未流失用户的数量。 print(f❓ 问题: {query_str}) response query_engine.query(query_str) print(\n 分析结果:) print(response) print(\n 生成的代码:) print(response.metadata[pandas_instruction_str]) Part 6. 图表不再是盲区MinerU Qwen-VL 搞定复杂 PDF痛点PDF 里的架构图、统计表普通解析工具直接丢弃导致关键信息丢失。解法MinerU (解析) Qwen-VL-Embedding (向量化)。先用 MinerU 提取出 markdown 和图片再用多模态模型把图文都变成向量存起来。6.1 定义 MinerU 解析器import requests import zipfile import shutil import os from pathlib import Path from typing import List from llama_index.core import Document from llama_index.core.schema import ImageDocument class MinerUAPIReader: def __init__(self, api_key: str, output_dir./mineru_output): self.api_key api_key self.base_url https://mineru.net/api/v4 self.output_dir Path(output_dir) def load_data(self, pdf_url: str) - List[Document]: # 1. 提交任务 print(f [MinerU] 提交解析任务...) headers {Authorization: fBearer {self.api_key}} data {url: pdf_url, model_version: vlm, is_ocr: True, lang: auto} resp requests.post(f{self.base_url}/extract/task, headersheaders, jsondata) task_id resp.json()[data][task_id] # 2. 轮询等待 (简化版代码生产环境需增加超时处理) import time while True: time.sleep(3) status requests.get(f{self.base_url}/extract/task/{task_id}, headersheaders).json()[data] if status[state] done: result_url status[full_zip_url] break # 3. 下载解压并封装 Document (代码略见完整版) return self._process_zip(result_url, str(task_id)) # _process_zip 方法实现略核心逻辑是读取 full.md 和 images 目录6.2 构建多模态索引与问答from llama_index.core.indices.multi_modal import MultiModalVectorStoreIndex from llama_index.llms.openai import OpenAI # 1. 解析数据 reader MinerUAPIReader(api_keyos.getenv(MINERU_API_KEY)) documents reader.load_data(https://example.com/tech_report.pdf) # 2. 构建图文索引 (需自定义 Qwen Embedding 类见完整版) index MultiModalVectorStoreIndex.from_documents( documents, embed_modelqwen_embed_model, # 文本向量化 image_embed_modelqwen_embed_model # 图片向量化 ) # 3. 多模态问答 llm OpenAI(modelgpt-4o) query_engine index.as_query_engine(llmllm, image_similarity_top_k1) response query_engine.query(根据文档内容LangChain 的整体架构包含哪几个核心层请结合架构图进行说明。) display(Markdown(f### AI 回答:\n\n{response.response}))️ Part 7. 以图搜图构建企业级多模态图片知识库痛点只有一张家具照片想在产品库里找同款或者想用文字搜“男士穿搭推荐”。解法CLIP / Qwen-VL 向量空间对齐。将图片和文本映射到同一个向量空间计算 Cosine 相似度。7.1 核心代码from llama_index.core import SimpleDirectoryReader from llama_index.core.indices import MultiModalVectorStoreIndex # 1. 加载图片库 documents SimpleDirectoryReader(test_images).load_data() # 2. 构建索引 index MultiModalVectorStoreIndex.from_documents( documents, image_embed_modelqwen_embed_model # 使用 Qwen2.5-VL ) # 3. 文搜图 retriever index.as_retriever(image_similarity_top_k1) results retriever.text_to_image_retrieve(最近家里装修希望推荐一些好看的家具) # 4. 图搜图 results retriever.image_to_image_retrieve(./test_images/query_chair.png) Part 8. 视频也能 RAGTwelve Labs 带来的时空对齐技术痛点传统方法把视频切成图片丢失了动作连贯性和声音信息。解法Twelve Labs (Marengo/Pegasus)。专门为视频设计的向量模型能理解“时空”概念直接返回精确到秒的视频片段。8.1 核心代码from twelvelabs import TwelveLabs # 1. 初始化客户端 client TwelveLabs(api_keyos.getenv(TL_API_KEY)) # 2. 创建索引 (Marengo Pegasus) index client.indexes.create( index_namevideo_rag, models[ {model_name: marengo2.6, model_options: [visual, audio]}, {model_name: pegasus1.1, model_options: [visual, audio]} ] ) # 3. 上传视频 with open(DeepSeek-V3.mp4, rb) as f: task client.tasks.create(index_idindex.id, filef) client.tasks.wait_for_done(task.id) # 4. 语义检索 (找片段) results client.search.query( index_idindex.id, query找到解释模型架构的部分, options[visual, audio] ) for clip in results.data: print(f 片段: {clip.start}s - {clip.end}s (置信度: {clip.score})) # 5. 生成式问答 (Pegasus) answer client.generate.text( video_idresults.data[0].video_id, promptDeepSeek-V3 的模型架构有什么创新点 ) print(f AI 回答: {answer.data}) 总结与展望从 Small-to-Big 的上下文窗口优化到 Hybrid Search 的混合检索增强从 Router Engine 的智能意图分发到 Pandas Engine 的精准数据分析再到 MinerU Qwen-VL 的复杂文档解析、CLIP 的以图搜图以及 Twelve Labs 的视频理解。我们通过七大实战场景完整构建了一个能处理文本、表格、图片、视频的全能型 RAG 系统。LlamaIndex 强大的组件化设计让我们能够像搭积木一样灵活组合这些核心技术。RAG 的进化还在继续希望这份指南能成为你打造企业级 AI 应用的坚实基石扫码加入赋范空间领取完整源码还有更多 Agent、RAG 等技术教程以及 15 工业级项目实战多模态RAG、实时语音助手、文档审核、AI ppt 等如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2025 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《AI大模型入门进阶学习资源包》下方扫码获取~① 全套AI大模型应用开发视频教程包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点② 大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通③ 大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。④ AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。⑤ 大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。⑥ 大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。以上资料如何领取为什么大家都在学大模型最近科技巨头英特尔宣布裁员2万人传统岗位不断缩减但AI相关技术岗疯狂扩招有3-5年经验大厂薪资就能给到50K*20薪不出1年“有AI项目经验”将成为投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取