LangChain框架在高炉炼铁智能化领域的应用~系列文章09:工具调用Tool — 让AI学会操作高炉仪表盘

📅 2026/6/16 21:58:17
LangChain框架在高炉炼铁智能化领域的应用~系列文章09:工具调用Tool — 让AI学会操作高炉仪表盘
第9期工具调用Tool — 让AI学会操作高炉仪表盘专栏《LangChain框架在高炉炼铁智能化领域的应用》前情回顾上期我们构建了高炉Agent有了自主决策大脑本期重点Tool —— Agent的双手让AI真正动手操作 引言大脑再好也得有手上期我们把 Agent 比作有自主意识的 AI 员工。但你想过没有——一个员工光有大脑没有手能干啥 Agent (大脑) ↓ 思考我需要查一下当前风压数据 ↓ 决策还需要查一下历史趋势对比 ↓ 结论炉况有异常需要报警 ↓ 但……手呢谁来点鼠标谁来按按钮 卡住了这就是Tool工具的作用——它们是 Agent 的双手让 AI 能真正操作外部系统人 大脑(思考) 双手(操作) Agent LLM(决策) Tool(执行)️ LangChain 中的 Tool 体系工具的分类Tool 类型树 │ ├── 数据获取类 —— 查参数、查数据库、查知识库 ├── 计算分析类 —— 数值计算、统计分析、公式推导 ├── ✉️ 通知通讯类 —— 发飞书、发邮件、发短信 ├── 控制操作类 —— 调整参数、下发指令 └── 外部API类 —— 调用第三方服务高炉场景的工具清单工具类型作用Agent调用场景get_furnace_params数据获取查实时参数“看看当前炉况”get_param_history数据获取查历史趋势“铁温最近在下降吗”search_kb数据获取搜知识库“上次悬料怎么处理的”calculate_ti计算分析算透气性指数“帮我算下透气性”send_alert通知通讯发飞书告警“发现异常通知值班”write_report数据输出生成日报“帮我生成今天的日报” 进阶篇从基础工具到高阶技巧技巧1️⃣ 带参数校验的工具fromlangchain.toolsimporttoolfrompydanticimportBaseModel,Field# 定义工具的参数模型自动做校验classFurnaceQueryInput(BaseModel):高炉参数查询的输入校验furnace_name:strField(description高炉名称如5号高炉、6号高炉,min_length2,max_length20)param_type:strField(description参数类别temperature(温度) / pressure(压力) / all(全部),pattern^(temperature|pressure|all)$)tool(args_schemaFurnaceQueryInput)defquery_furnace_with_filter(furnace_name:str,param_type:str)-str:按类别筛选查询高炉参数all_params{5号高炉:{temperature:{风温:1205°C,铁水温度:1490°C},pressure:{风压:0.392MPa,顶压:0.22MPa}}}furnace_dataall_params.get(furnace_name,{})ifparam_typeall:result{}forvinfurnace_data.values():result.update(v)returnstr(result)returnstr(furnace_data.get(param_type,{}))# ✅ Agent调用时如果参数不对会自动报错提示技巧2️⃣ 组合式工具tooldefcomprehensive_furnace_analysis(furnace_name:str)-str: 综合高炉炉况分析一次调用完成参数查询关键指标计算初步诊断 furnace_name: 高炉名称 # 1. 获取参数paramsget_furnace_params_data(furnace_name)# 抽取公共逻辑# 2. 计算复合指标wind_volumefloat(params[风量].replace(m³/min,))wind_pressurefloat(params[风压].replace(MPa,))permeabilitywind_volume/(wind_pressure*10000)# 透气性指数# 3. 初步诊断iron_tempfloat(params[铁水温度].replace(°C,))ifiron_temp1480:temp_status⚠️ 偏低elifiron_temp1520:temp_status⚠️ 偏高else:temp_status✅ 正常returnf 【{furnace_name}综合诊断】 关键参数{params} 透气性指数{permeability:.1f}️ 铁温状态{temp_status}技巧3️⃣ 带状态的上下文感知工具fromdatetimeimportdatetime# 全局上下文模拟_global_context{current_shift:甲班,operator:张工,last_alert_time:None}tooldefsend_shift_alert(message:str,level:strinfo)-str: 发送班次告警/通知 message: 告警内容 level: 告警级别 (info/warning/critical) nowdatetime.now()_global_context[last_alert_time]now urgency{info:,warning:⚠️,critical:}iconurgency.get(level,)alertf{icon}【{level.upper()}】{now.strftime(%H:%M:%S)} 值班:{_global_context[current_shift]}-{_global_context[operator]}{message}# 真实场景这里会调用飞书/短信APIprint(f 告警已发送:{alert})returnf告警已发送{message} 实战高炉智能体完整工具集把前面所有技巧整合打造高炉Agent的完整工具箱 # bf_toolkit.py# 高炉Agent完整工具集fromlangchain.toolsimporttoolfromlangchain.agents.middlewareimportwrap_tool_callfromlangchain.messagesimportToolMessagefromtypingimportOptional,ListfrompydanticimportBaseModel,Fieldimportjson# ─────────── 1. 数据获取类工具 ───────────tooldefget_real_time_params(furnace_name:str)-str: 【高炉必用】获取高炉实时运行参数 furnace_name: 高炉名称编号如5号高炉 # 模拟连接SCADA系统params{5号高炉:{timestamp:2025-06-05 14:30:00,风温:1205°C,风压:0.392MPa,风量:4920m³/min,铁水温度:1490°C,硅含量:0.42%,炉渣碱度:1.18,透气性指数:33.8,料速:6.3批/h,顶温:185°C,顶压:0.22MPa}}dataparams.get(furnace_name)ifnotdata:returnf❌ 未找到{furnace_name}的实时数据returnjson.dumps(data,ensure_asciiFalse,indent2)tooldefget_historical_data(furnace_name:str,param_name:str,hours:int24,interval:str1h)-str: 【趋势分析】查询参数的历史变化趋势 furnace_name: 高炉名称 param_name: 参数名称 hours: 回溯小时数默认24 interval: 数据间隔默认1h # 模拟历史数据importrandom base_value{铁水温度:1500,硅含量:0.45,风温:1200,风压:0.39}basebase_value.get(param_name,100)trendbase-hours*0.5# 模拟下降趋势points[]foriinrange(min(hours,24)):valtrendi*0.3random.uniform(-0.5,0.5)points.append({time:f{i:02d}:00,value:round(val,2)})returnjson.dumps({furnace:furnace_name,param:param_name,trend:下降ifpoints[-1][value]points[0][value]else上升,data:points},ensure_asciiFalse)# ─────────── 2. 计算分析类工具 ───────────tooldefcalculate_comprehensive_index(wind_volume:float,wind_pressure:float,iron_temp:float,si_content:float)-str: 【专业计算】计算高炉综合评价指标 wind_volume: 风量 (m³/min) wind_pressure: 风压 (MPa) iron_temp: 铁水温度 (°C) si_content: 硅含量 (%) # 透气性指数tiwind_volume/(wind_pressure*10000)ifwind_pressure0else0# 炉热指数heat_indexiron_temp*0.7si_content*100*0.3# 综合评价score0score30if1100iron_temp1250else10score30if0.35si_content0.55else10score20if30ti38else5score20if1480iron_temp1520else5returnjson.dumps({透气性指数:round(ti,1),炉热指数:round(heat_index,1),综合评分:score,评价:优秀ifscore80else良好ifscore60else需关注,计算时间:2025-06-05 14:30:00},ensure_asciiFalse)# ─────────── 3. 告警通知类工具 ───────────tooldefsend_production_alert(furnace_name:str,alert_type:str,message:str,severity:strwarning)-str: 【告警通知】发送生产告警通知到中控室 furnace_name: 高炉名称 alert_type: 告警类型 (temperature/pressure/status) message: 告警内容 severity: 严重级别 (info/warning/critical) alert_record{timestamp:2025-06-05 14:30:00,furnace:furnace_name,type:alert_type,severity:severity,message:message,status:已发送}# 模拟发送通知icons{info:,warning:⚠️,critical:}print(f{icons.get(severity,)}已向{furnace_name}中控室发送告警)returnjson.dumps(alert_record,ensure_asciiFalse)# ─────────── 4. 工具错误处理 ───────────wrap_tool_calldefbf_tool_middleware(request,handler):高炉工具的全局错误处理中间件try:resulthandler(request)returnresultexceptValueErrorase:returnToolMessage(contentf参数错误:{str(e)}请检查输入参数格式,tool_call_idrequest.tool_call[id])exceptExceptionase:returnToolMessage(contentf工具执行异常:{str(e)}请稍后重试或联系系统管理员,tool_call_idrequest.tool_call[id])# ─────────── 5. 构建带完整工具集的Agent ───────────defbuild_full_agent():构建带完整工具集的高炉Agentfromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAI llmChatOpenAI(modeldoubao-seed-2-0-lite-260215,temperature0.2,timeout600)all_tools[get_real_time_params,get_historical_data,calculate_comprehensive_index,send_production_alert]agentcreate_agent(modelllm,system_prompt 你是高炉炼铁智能体拥有完整的高炉操作工具集。 【可用工具及使用场景】 1. get_real_time_params - 查实时参数任何时候先查数据 2. get_historical_data - 查历史趋势分析问题时使用 3. calculate_comprehensive_index - 计算综合评价指标 4. send_production_alert - 发送告警通知发现异常时使用 【工作流程】 1️⃣ 先获取实时数据 2️⃣ 如有需要查询历史趋势 3️⃣ 计算综合评价指标 4️⃣ 给出分析结论和建议 5️⃣ 如有异常及时发送告警 【安全规则】 - 告警需确认数据准确性后再发送 - critical级别告警必须附带数据依据,toolsall_tools,middleware[bf_tool_middleware])returnagent# ─────────── 运行测试 ───────────if__name____main__:agentbuild_full_agent()# 测试完整的炉况分析告警resultagent.invoke({messages:[{role:user,content:检查一下5号高炉炉况铁水温度1490°C硅含量0.38%风温1205°C风压0.392MPa风量4920m³/min。帮我分析并给出建议如果异常就发告警。}]})print(result[messages][-1].content)⚡ Tool 开发黄金法则法则1单一职责# ❌ 错误一个工具干所有事tooldefdo_everything(data:str)-str:...# ✅ 正确每个工具只干一件事tooldefget_temperature(furnace:str)-str:...# 只查温度tooldefget_pressure(furnace:str)-str:...# 只查压力法则2详细的工具描述# ❌ 抽象描述tooldefget_data(name:str)-str:获取数据...# ✅ 具体描述模型需要靠描述决定是否调用tooldefget_furnace_params(name:str)-str: 当用户需要查询高炉的实时运行参数时使用此工具。 参数包括风温、风压、风量、铁水温度、硅含量等。 适用于判断炉况、查看指标、日常巡检。 name参数为高炉编号如5号高炉。 ...法则3防呆设计tooldefquery_furnace(furnace_name:str)-str:查询高炉参数# 自动容错valid_names{5号高炉,5#高炉,BF-5,5号炉}iffurnace_nameinvalid_names:furnace_name5号高炉# 统一名称# ... 本期小结知识点一句话总结Tool是什么Agent的双手让AI能操作外部系统参数校验用 Pydantic 做输入校验防止乱传参组合工具一次调用完成多步操作错误处理用中间件统一处理工具异常开发法则单一职责、详细描述、防呆设计核心心法Tool 是 Agent 能力的边界——Agent 再聪明也只能做 Tool 允许它做的事。把工具设计得好用、可靠、安全Agent 才能发挥最大价值 下期预告第10期《多模态应用看图识炉视频监控高炉状态》️到目前为止我们的AI只处理文字——你问它答全是文本。但高炉现场有大量的图像和视频数据 炉顶红外热像图 风口摄像头画面 铁口出铁监控️ 炉壳表面温度扫描如果用文字描述要写1000字一张图只需要1秒钟下一期我们进入多模态世界——让AI不仅能读文字还能看图像从此你的高炉AI长了一双火眼金睛距离完结还有6期收藏追更不迷路~作者高炉炼铁智能化技术研究者专注钢铁冶金与人工智能 交叉领域。 如果觉得有帮助请点赞、收藏、转发版权归作者所有未经许可请勿抄袭套用商用(或其它具有利益性行为)。 关注专栏不错过后续精彩内容