news 2026/6/15 11:25:52

LangChain框架在高炉炼铁智能化领域的应用~系列文章07:RAG检索增强生成 — 高炉知识库的“百科全书“

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain框架在高炉炼铁智能化领域的应用~系列文章07:RAG检索增强生成 — 高炉知识库的“百科全书“

📚 第7期:RAG检索增强生成 — 高炉知识库的"百科全书"

专栏:《LangChain框架在高炉炼铁智能化领域的应用》
前情回顾:上期我们用 Chain 串起了 AI 处理流水线
本期重点:RAG(检索增强生成)—— 让 AI 学会"查资料"再回答问题


📖 引言:AI 的"知识瓶颈"

想象一个场景 👇

你问 AI:

👨‍🏭:“5号高炉在2023年3月那次悬料事故是怎么处理的?”

🤖AI(自信满满):“那场事故是因为风量突然下降导致的,建议减风加焦……”

然后你翻出了档案记录:

📄档案记录:“2023年3月悬料事故根本原因是原燃料质量波动,执行了排风+空吹操作……”

😱AI 完全说错了!

大模型的问题

  • ❌ 训练数据截止日期之后的信息不知道
  • ❌ 企业内部专有数据没见过
  • ❌ 会"幻觉"——编造看似合理但错误的内容

解决方案 = RAG(Retrieval-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_splitter=RecursiveCharacterTextSplitter(chunk_size=500,# 每段500字符chunk_overlap=50,# 重叠50字符,避免切碎关键信息separators=["\n\n","\n","。","."," ",""],length_function=len)chunks=[]fordocindocuments:splits=text_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"):"""将文档片段向量化并存入向量数据库"""embeddings=OpenAIEmbeddings(model="doubao-seed-2-0-lite-260215",# 支持向量化的模型api_key=os.getenv("COZE_WORKLOAD_IDENTITY_API_KEY"),base_url=os.getenv("COZE_INTEGRATION_MODEL_BASE_URL"),)# 创建向量存储vector_store=Chroma.from_texts(texts=chunks,embedding=embeddings,persist_directory=persist_dir)# 持久化保存vector_store.persist()print(f"💾 向量库已保存至:{persist_dir}")print(f"📊 向量维度:{len(vector_store.get()[0])ifhasattr(vector_store,'get')else'N/A'}")returnvector_store# ─────────── 执行构建 ───────────if__name__=="__main__":print("🚀 开始构建高炉知识库...")docs=load_blast_furnace_documents()chunks=split_documents(docs)vector_store=create_vector_store(chunks)print("✅ 知识库构建完成!")

Step 5~9:RAG 问答系统

# 📁 rag_qa_system.py# 基于RAG的高炉知识问答系统fromlangchain_openaiimportChatOpenAI,OpenAIEmbeddingsfromlangchain_community.vectorstoresimportChromafromlangchain.chainsimportRetrievalQAfromlangchain.promptsimportPromptTemplateimportos# ─────────── Step 5: 加载知识库 ───────────defload_vector_store(persist_dir:str="./bf_knowledge_db"):"""加载已持久化的向量库"""embeddings=OpenAIEmbeddings(model="doubao-seed-2-0-lite-260215",api_key=os.getenv("COZE_WORKLOAD_IDENTITY_API_KEY"),base_url=os.getenv("COZE_INTEGRATION_MODEL_BASE_URL"),)returnChroma(persist_directory=persist_dir,embedding_function=embeddings)# ─────────── Step 6: 构建检索器 ───────────defbuild_retriever(vector_store,k:int=3):""" 构建检索器 k=3:每次检索返回最相关的3个文档片段 """returnvector_store.as_retriever(search_type="similarity",# 相似度检索search_kwargs={"k":k}# 返回Top-K结果)# ─────────── Step 7: 设计 RAG Prompt ───────────rag_prompt_template="""你是一名高炉炼铁专家。请基于以下参考资料回答用户的问题。 【参考资料】 {context} 【用户问题】 {question} 回答要求: 1. 优先使用参考资料中的内容回答 2. 如果参考资料不足以回答,请明确告知 3. 引用参考资料时说明来源 4. 回答要专业、具体、可操作 【回答】"""rag_prompt=PromptTemplate(template=rag_prompt_template,input_variables=["context","question"])# ─────────── Step 8: 构建 RAG Chain ───────────defbuild_rag_chain(vector_store):"""构建完整的RAG问答链"""llm=ChatOpenAI(model="doubao-seed-2-0-lite-260215",temperature=0.2,# 低温度,严格基于资料回答timeout=600)retriever=build_retriever(vector_store,k=3)# 使用 LangChain 内置的 RetrievalQAqa_chain=RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",# 把所有检索结果一起塞给LLMretriever=retriever,chain_type_kwargs={"prompt":rag_prompt,"verbose":True# 显示检索过程},return_source_documents=True# 返回检索到的原文)returnqa_chain# ─────────── Step 9: 执行问答 ───────────defask_rag(qa_chain,question:str):"""向RAG系统提问"""result=qa_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_store=load_vector_store()qa_chain=build_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️⃣ 检索策略优化

# 混合检索:相似度 + 关键词retriever=vector_store.as_retriever(search_type="mmr",# Maximum Marginal Relevancesearch_kwargs={"k":5,"fetch_k":20,# 先取20个候选"lambda_mult":0.5# 多样性系数(0~1)})

2️⃣ 文档重排序

fromlangchain.retrieversimportContextualCompressionRetrieverfromlangchain.retrievers.document_compressorsimportLLMChainExtractor# 用LLM对检索结果进行"精炼"——只保留最相关内容compressor=LLMChainExtractor.from_llm(llm)compression_retriever=ContextualCompressionRetriever(base_compressor=compressor,base_retriever=retriever)

3️⃣ 针对高炉场景的文档分片策略

# 高炉文档的特殊分片:按"主题"切分,而非简单按字符bf_splitter=RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200,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期连载中,精彩内容不要错过!
作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。

👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)
🔔 关注专栏,不错过后续精彩内容!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:22:51

DNS服务器地址大全

DNS服务器 DNS&#xff08;域名系统&#xff09;是互联网的“电话簿”&#xff0c;负责将易于记忆的域名解析为具体的IP地址&#xff0c;使得计算机能够理解并连接到目标服务器。选择一个响应速度快、稳定性高的DNS服务器&#xff0c;不仅可以提升网络访问速度&#xff0c;还能…

作者头像 李华
网站建设 2026/6/15 11:20:01

AI专著撰写技巧:使用AI工具,20万字专著高效产出的秘诀!

对于许多学者来说&#xff0c;撰写学术专著最让人困扰的&#xff0c;就是“有限的时间和精力”与“无限的写作需求”之间的矛盾。专著的创作通常需要三到五年&#xff0c;甚至更长的时间&#xff0c;但研究者们平时还要面对教学、科研项目、学术交流等各种任务&#xff0c;他们…

作者头像 李华
网站建设 2026/6/15 11:15:55

HsMod:炉石传说终极增强插件,解锁55项游戏优化功能

HsMod&#xff1a;炉石传说终极增强插件&#xff0c;解锁55项游戏优化功能 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的炉石传说多功能增强插件&#…

作者头像 李华
网站建设 2026/6/15 11:13:49

手把手搭建高可靠工业级RAG应用:从文档预处理到生成约束

1. 项目概述&#xff1a;为什么一个“简单”的RAG应用值得你花两小时认真搭一遍“Lets Build Simple RAG Application”——这个标题看起来像教程网站上随手点开的入门级小项目&#xff0c;但在我过去三年带团队落地17个企业级知识助手的经验里&#xff0c;它恰恰是最常被低估、…

作者头像 李华
网站建设 2026/6/15 11:08:55

Linux上MySQL 8启动踩坑记:从‘Permission denied’到成功启动的完整复盘

Linux上MySQL 8启动踩坑记&#xff1a;从‘Permission denied’到成功启动的完整复盘作为一名常年与数据库打交道的运维工程师&#xff0c;我本以为MySQL的安装配置早已轻车熟路。直到那天在Redhat环境部署MySQL 8时&#xff0c;那个看似普通的权限错误让我经历了从自信满满到怀…

作者头像 李华