LangChain框架在高炉炼铁智能化领域的应用~系列文章07:RAG检索增强生成 — 高炉知识库的“百科全书“ 第7期RAG检索增强生成 — 高炉知识库的百科全书专栏《LangChain框架在高炉炼铁智能化领域的应用》前情回顾上期我们用 Chain 串起了 AI 处理流水线本期重点RAG检索增强生成—— 让 AI 学会查资料再回答问题 引言AI 的知识瓶颈想象一个场景 你问 AI‍你“5号高炉在2023年3月那次悬料事故是怎么处理的”AI自信满满“那场事故是因为风量突然下降导致的建议减风加焦……”然后你翻出了档案记录档案记录“2023年3月悬料事故根本原因是原燃料质量波动执行了排风空吹操作……”AI 完全说错了大模型的问题❌ 训练数据截止日期之后的信息不知道❌ 企业内部专有数据没见过❌ 会幻觉——编造看似合理但错误的内容解决方案 RAGRetrieval-Augmented Generation‍♂️ RAG 是什么三句话RAG 检索Retrieve 增强Augment 生成Generate 1️⃣ 检索从知识库中找到相关的文档片段 2️⃣ 增强把检索到的内容拼接到 Prompt 中 3️⃣ 生成让 AI 基于这些资料回答问题核心原理图用户问题 ──→ [检索] ──→ 向量知识库 │ ↑ │ ┌────┴────┐ │ │ 文档分片 │ │ │ 向量化 │ ▼ └─────────┘ [增强 Prompt] │ [生成回答] ▼ 最终答案 ✅类比高炉场景没有RAG的AI → 凭经验开高炉的老师傅记忆有限、会忘事 有RAG的AI → 带着操作手册开高炉的老师傅随时翻书、准确率高️ 搭建RAG系统的完整流程9步详解Step 1~4文档处理构建知识库# rag_knowledge_base.py# 高炉知识库构建脚本fromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain_community.vectorstoresimportChromafromlangchain_openaiimportOpenAIEmbeddingsfromtypingimportList,Dictimportos# ─────────── Step 1: 加载文档 ───────────defload_blast_furnace_documents()-List[str]: 加载高炉相关的知识文档 实际场景中这些文档来自操作手册、技术标准、历史案例、论文等 documents[# 模拟知识文档片段 【高炉悬料处理规程】 当出现悬料征兆时风压升高0.45MPa风量下降10% 第一步立即减风 10-15%稳定压量关系 第二步如 5 分钟后无改善进一步减风至 50% 第三步如仍未崩料执行排风操作 注意事项严禁在悬料状态下强行加风 , 【炉温判断标准】 铁水温度正常范围1480-1520°C 硅含量正常范围0.35-0.55% 炉渣碱度正常范围1.10-1.25 当铁温1480°C或硅含量0.35%时判定为炉温偏低 当铁温1520°C或硅含量0.55%时判定为炉温偏高 , 【布料矩阵调整原则】 正常生产时使用平台漏斗布料模式 边缘发展时适当增加边缘矿量 中心发展时适当增加中心焦量 布料角度通常控制在 8°-45° 之间 ]returndocuments# ─────────── Step 2: 文档分割 ───────────defsplit_documents(documents:List[str])-List:将长文档切分成合适的片段text_splitterRecursiveCharacterTextSplitter(chunk_size500,# 每段500字符chunk_overlap50,# 重叠50字符避免切碎关键信息separators[\n\n,\n,。,., ,],length_functionlen)chunks[]fordocindocuments:splitstext_splitter.split_text(doc)chunks.extend(splits)print(f 原始文档:{len(documents)}篇)print(f✂️ 分割后:{len(chunks)}个片段)returnchunks# ─────────── Step 3: 向量化存储 ───────────defcreate_vector_store(chunks:List[str],persist_dir:str./bf_knowledge_db):将文档片段向量化并存入向量数据库embeddingsOpenAIEmbeddings(modeldoubao-seed-2-0-lite-260215,# 支持向量化的模型api_keyos.getenv(COZE_WORKLOAD_IDENTITY_API_KEY),base_urlos.getenv(COZE_INTEGRATION_MODEL_BASE_URL),)# 创建向量存储vector_storeChroma.from_texts(textschunks,embeddingembeddings,persist_directorypersist_dir)# 持久化保存vector_store.persist()print(f 向量库已保存至:{persist_dir})print(f 向量维度:{len(vector_store.get()[0])ifhasattr(vector_store,get)elseN/A})returnvector_store# ─────────── 执行构建 ───────────if__name____main__:print( 开始构建高炉知识库...)docsload_blast_furnace_documents()chunkssplit_documents(docs)vector_storecreate_vector_store(chunks)print(✅ 知识库构建完成)Step 5~9RAG 问答系统# rag_qa_system.py# 基于RAG的高炉知识问答系统fromlangchain_openaiimportChatOpenAI,OpenAIEmbeddingsfromlangchain_community.vectorstoresimportChromafromlangchain.chainsimportRetrievalQAfromlangchain.promptsimportPromptTemplateimportos# ─────────── Step 5: 加载知识库 ───────────defload_vector_store(persist_dir:str./bf_knowledge_db):加载已持久化的向量库embeddingsOpenAIEmbeddings(modeldoubao-seed-2-0-lite-260215,api_keyos.getenv(COZE_WORKLOAD_IDENTITY_API_KEY),base_urlos.getenv(COZE_INTEGRATION_MODEL_BASE_URL),)returnChroma(persist_directorypersist_dir,embedding_functionembeddings)# ─────────── Step 6: 构建检索器 ───────────defbuild_retriever(vector_store,k:int3): 构建检索器 k3每次检索返回最相关的3个文档片段 returnvector_store.as_retriever(search_typesimilarity,# 相似度检索search_kwargs{k:k}# 返回Top-K结果)# ─────────── Step 7: 设计 RAG Prompt ───────────rag_prompt_template你是一名高炉炼铁专家。请基于以下参考资料回答用户的问题。 【参考资料】 {context} 【用户问题】 {question} 回答要求 1. 优先使用参考资料中的内容回答 2. 如果参考资料不足以回答请明确告知 3. 引用参考资料时说明来源 4. 回答要专业、具体、可操作 【回答】rag_promptPromptTemplate(templaterag_prompt_template,input_variables[context,question])# ─────────── Step 8: 构建 RAG Chain ───────────defbuild_rag_chain(vector_store):构建完整的RAG问答链llmChatOpenAI(modeldoubao-seed-2-0-lite-260215,temperature0.2,# 低温度严格基于资料回答timeout600)retrieverbuild_retriever(vector_store,k3)# 使用 LangChain 内置的 RetrievalQAqa_chainRetrievalQA.from_chain_type(llmllm,chain_typestuff,# 把所有检索结果一起塞给LLMretrieverretriever,chain_type_kwargs{prompt:rag_prompt,verbose:True# 显示检索过程},return_source_documentsTrue# 返回检索到的原文)returnqa_chain# ─────────── Step 9: 执行问答 ───────────defask_rag(qa_chain,question:str):向RAG系统提问resultqa_chain.invoke({query:question})print(f\n{*50})print(f❓ 问题:{question})print(f{*50})print(f 回答:\n{result[result]})print(f\n 参考来源 ({len(result[source_documents])}篇):)fori,docinenumerate(result[source_documents],1):print(f [{i}]{doc.page_content[:100]}...)returnresult# ─────────── 运行 ───────────if__name____main__:print( 初始化RAG系统...)vector_storeload_vector_store()qa_chainbuild_rag_chain(vector_store)# 测试几个问题questions[铁水温度低于1480°C应该怎么办,高炉悬料怎么处理,布料矩阵调整的原则是什么]forqinquestions:ask_rag(qa_chain,q)print(\n) RAG vs 纯LLM对比实验我们用一个真实的高炉场景问题来对比问题“铁水温度 1475°C硅含量 0.32%应该怎么调整”维度❌ 纯LLM回答✅ RAG回答回答速度快不用查资料稍慢需检索内容“温度偏低需要加焦”“根据《炉温判断标准》铁温1475°C低于正常下限1480°C硅含量0.32%低于0.35%下限。建议①加焦3-5kg/t ②减风50m³/min ③加密观察”准确性可能漏关键信息有据可查准确完整幻觉风险高低基于资料回答结论工业场景强烈推荐 RAG✅✅✅ 实战进阶高炉操作案例库RAG构建一个高炉历史操作案例的 RAG 系统让 AI 能从历史事故中学习 # 模拟一个高炉历史案例数据结构historical_cases[ 案例编号CASE-2023-0315 时间2023年3月15日 高炉4号高炉3200m³ 事件类型悬料 前兆风压在30分钟内从0.38MPa升至0.46MPa 风量从5200m³/min降至4700m³/min 透气性指数从35降至26 处理措施1. 立即减风15% 2. 减风后5分钟无改善二次减风至50% 3. 执行排风操作炉料崩落 4. 恢复风量至80%观察15分钟后逐步加风 结果成功处理未造成设备损坏 经验总结悬料初期果断减风是成功的关键 , 案例编号CASE-2024-0108 时间2024年1月8日 高炉5号高炉2500m³ 事件类型炉凉 前兆铁水温度从1510°C连续8小时降至1465°C 硅含量从0.48%降至0.30% 炉渣颜色变黑 处理措施1. 加焦总量15吨分批加入 2. 适当降低风量5% 3. 检查冷却设备发现漏水 4. 处理漏水后炉温逐步恢复 结果48小时后炉温恢复正常 经验总结炉凉要查冷却系统是否有漏水 ]# 将这些案例也向量化存入知识库# 这样AI就能在遇到类似问题时回忆起历史案例的处置方法⚡ RAG优化技巧高炉场景专用1️⃣ 检索策略优化# 混合检索相似度 关键词retrievervector_store.as_retriever(search_typemmr,# Maximum Marginal Relevancesearch_kwargs{k:5,fetch_k:20,# 先取20个候选lambda_mult:0.5# 多样性系数0~1})2️⃣ 文档重排序fromlangchain.retrieversimportContextualCompressionRetrieverfromlangchain.retrievers.document_compressorsimportLLMChainExtractor# 用LLM对检索结果进行精炼——只保留最相关内容compressorLLMChainExtractor.from_llm(llm)compression_retrieverContextualCompressionRetriever(base_compressorcompressor,base_retrieverretriever)3️⃣ 针对高炉场景的文档分片策略# 高炉文档的特殊分片按主题切分而非简单按字符bf_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200,separators[\n## ,# 一级标题\n### ,# 二级标题\n【,# 高炉规范常用【】标记\n案例编号,# 案例库标记\n\n,\n, ,]) 本期小结知识点一句话总结RAG是什么检索 增强 生成 带知识库的AI文档处理分片 → 向量化 → 存储检索策略相似度检索 Top-K增强Prompt把检索结果拼入Prompt高炉场景价值让AI基于企业内部知识回答问题核心心法RAG 是工业 AI 的基础设施——没有 RAG 的 AI 是纸上谈兵有 RAG 的 AI 是实战专家。在要求高准确率的高炉场景中RAG 不是可选项而是必选项 下期预告第8期《Agents智能体给高炉装上自主决策大脑》Chain 学会了按步骤执行RAG 学会了查资料——但还不够真正的工业场景中AI 需要自主判断什么时候该查数据什么时候该调知识库什么时候该调用计算工具甚至——该不该拉响警报这就是Agent智能体的威力它不再是被动回答而是主动思考、自主行动下一期我们进入整个专栏的高潮部分——打造一个能自主决策、能操作工具、能多步推理的高炉智能体16期连载中精彩内容不要错过作者高炉炼铁智能化技术研究者专注钢铁冶金与人工智能 交叉领域。 如果觉得有帮助请点赞、收藏、转发版权归作者所有未经许可请勿抄袭套用商用(或其它具有利益性行为)。 关注专栏不错过后续精彩内容