【HCIA-AI笔记(微认证2)】4.1 构建RAG RAG技术核心目标增强领域适配性引入外部知识解决LLM在特定领域的知识时效性问题减少模型产生幻觉的风险。实现企业私有数据利用动态检索与安全调用企业私有数据将企业内部文档、数据库等信息集成到智能应用中。构建端到端流程涵盖数据预处理、信息检索、答案生成以及评估与优化提升智能应用性能和可靠性。RAG核心工作流程索引环节对领域知识库进行数据预处理将文档智能分块用嵌入模型将文本块转换为向量表示存储到向量数据库。检索阶段用户提问时将查询语句向量化在向量数据库中进行相似度搜索返回topk个文档片段。生成阶段将检索到的文档与用户问题输入到大语言模型生成精准回答。数据预处理数据加载支持多种数据格式接入去除文档中的噪音数据。文本分块采用固定长度分块如500词一块和按段落或语义分割的智能分块方式使用Langchain的character text splitter工具设置重要参数保证上下文连贯性。separator\n分割分隔符这里指定换行符 \n 作为优先切割标记。chunk_size1000单个文本块最大字符长度上限这里设为 1000 个字符。chunk_overlap50相邻两个文本块之间重叠字符数量此处前后块重叠 50个字符。核心目的防止关键语义被切割在两块交界处丢失提升检索时的召回完整性。length_functionlen用于计算文本长度的函数默认使用 Python 内置len()统计字符数。split_text(text)拆分方法传入原始完整长文本返回分块后的字符串列表 [chunk1, chunk2,chunk3…]。向量化与存储嵌入模型选择有开源模型路线如BGE、NOMIC、embedded等和商业API方案如Openai的embedding服务。向量数据库部署主流工具包括轻量级的Bromadb和高性能的Faiss展示了Faiss的批量插入实现代码。混合检索策略语义检索基于向量相似度进行文档匹配使用余弦相似度根据用户问题语义特征在知识库中找相关文档片段。生成回答将匹配的文档作为上下文请求Deepseek 1.5B模型生成最终回答展示了关键代码实现。.similarity_search()执行向量相似度匹配answer_question()封装了调用deepseek的逻辑通过 Streamlit 网页把结果返回给用户上下文注入prompt模板设计模板结构包含系统指令要求模型仅基于资料回答、检索结果动态插入相关文档片段、用户问题。工具示例利用Langchain的retriever QA链简化流程展示了关键代码示例实现全流程自动化。temperature0.5控制随机性。较低值回答更稳定model_name“DeepSeek:1.5b”指定模型chain_type“stuff”使用stuff模式合并上下文。最简单的上下文注入策略逻辑把所有检索到的docs文档全部拼接一次性塞进 Prompt 的{context}占位符完整注入上下文适合检索文档总长度较短、不超过 LLM 上下文窗口的场景。问答系统代码分析函数定义定义answer question函数根据知识库内容回答用户问题。参数设置设置Openai API密钥、基础URL选择模型如Deepseek 21从session state获取温度值控制生成文本随机性。侧边栏设置使用streamlit侧边栏构建滑块控件让用户调整温度参数解释参数含义和作用。生成回答流程检查知识库是否加载使用向量数据库检索相关文档调用answer question函数生成答案。大模型回答指标准确性衡量模型生成答案与标准答案的匹配程度是核心指标。响应速度目标是保持端到端延迟在2秒以内提供流畅体验。幻觉率衡量回答中虚构内容的比例需尽可能降低。查看效果与优化方向效果评估关注检索结果相关性、生成回答准确性检查是否存在信息遗漏或冗余。分块策略调整通过调整chunk size和chunk overlap优化分块策略对比不同分块粒度对检索的影响。提升智能小助手工作效率模型参数优化调整模型参数如温度提高模型准确性和效率。检索算法优化使用向量索引和近似最近邻搜索技术加速检索过程提高响应速度。提高生成速度采用分块策略调整提升生成速度。A 选项OpenAI Embeddings 是商业 API 闭源嵌入服务不属于开源模型路线。B 选项FAISS 是 Meta 开源的向量检索引擎 / 向量数据库工具不是嵌入模型。C 选项ChromaDB 是轻量级向量数据库不是嵌入模型。D 选项BGE 是国内开源的高质量嵌入模型属于开源嵌入模型路线的典型示例。限制对话轮数是硬性约束手段不是对多轮对话本身效果的优化只是粗暴截断对话不属于优化方向。A. 可以是开源预训练模型 ✅RAG 的基座大模型没有闭源强制要求Llama、Qwen、GLM 这类开源预训练模型都能作为 RAG 的生成端基座该选项正确。B. 必须针对特定任务微调 ❌RAG 的核心是靠检索外部知识库补充信息不需要一定对大模型做任务微调只用提示词把检索到的片段喂给模型就能完成生成微调只是优化手段、不是硬性要求该选项错误。C. 负责生成最终答案 ✅检索模块只负责找出相关参考文本把检索结果和用户问题拼接后由大语言模型整合信息、输出最终回答这是 LLM 在 RAG 里的核心职责该选项正确。D. 与检索模块相互独立 ❌RAG 的流程是先检索、再把检索结果输入大模型二者是强联动的上下游环节不是相互独立的该选项错误。A. 初始化 LLM 连接load_qa_chain接收已经初始化好的 LLM 实例作为入参它本身不会创建、初始化 LLM 连接LLM 需要提前外部实例化所以 A 错误。B. 加载问答链load_qa_chain是工厂函数核心作用就是根据传入的 LLM、chain_type参数创建 / 加载对应的文档问答链对象B 正确你图里勾选的这一项是对的。C. 采用 “stuff” 模式合并上下文函数可以通过设置chain_typestuff指定使用 stuff 模式内部会用StuffDocumentsChain把检索到的多段文档拼接合并为单段上下文这是该函数支持的核心能力之一C 正确。D. 调用模型生成回答load_qa_chain只是构建链结构只有后续执行chain.run()/chain()调用链实例时才会触发 LLM 生成回答函数本身不会直接调用模型产出结果D 错误。