/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
第 10 期 | Claude 的 Thinking 模式:高炉炉况的深度推理 🧠
摘要:工业决策往往需要"想深一点",而默认的"快答"模式很容易让大模型凭表面特征下判断。Anthropic 在 Claude 系列中引入的 Extended Thinking(扩展思考) 能力,允许模型在给出答案前进行一段受控的链式推理(Chain-of-Thought),对高炉这样的"多信号耦合、需因果推理"场景价值巨大。本文将从原理与工程两个层面展开:首先解释 Extended Thinking 的机制与"思考预算(budget_tokens)"配置;其次给出面向炉况诊断的结构化推理提示模板;再次用代码演示如何在 API 层启用 thinking 并解析思考/回答两段输出;最后给出"何时该开想、何时别开想"的工程权衡与成本控制。
〇、引言:给模型"装上’三思而后行’的开关"
高炉炉况诊断绝不是"看一眼参数就下结论"。炉温异常可能是风量、焦比、炉料透气性、甚至上一炉的操作共同作用的结果。让模型直接"快答",很容易把"相关性"误当"因果性"。Extended Thinking 的价值,就是强制模型把"证据→推理→结论"的链条显式展开,从而显著降低这种"浅层误判"。
一、Extended Thinking 的机制与预算 ⚙️
| 思考(token) | 模型在回答前"隐藏思考"生成的内容 |
| budget_tokens | 你为思考分配的最大 token 预算 |
| 签名(signature) | 思考与最终回答在响应中的分离字段 |
#mermaid-svg-6Fzc6n51LXV8gMwX{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-6Fzc6n51LXV8gMwX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-6Fzc6n51LXV8gMwX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-6Fzc6n51LXV8gMwX .error-icon{fill:#552222;}#mermaid-svg-6Fzc6n51LXV8gMwX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6Fzc6n51LXV8gMwX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-6Fzc6n51LXV8gMwX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6Fzc6n51LXV8gMwX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6Fzc6n51LXV8gMwX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-6Fzc6n51LXV8gMwX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6Fzc6n51LXV8gMwX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6Fzc6n51LXV8gMwX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6Fzc6n51LXV8gMwX .marker.cross{stroke:#333333;}#mermaid-svg-6Fzc6n51LXV8gMwX svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6Fzc6n51LXV8gMwX p{margin:0;}#mermaid-svg-6Fzc6n51LXV8gMwX .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-6Fzc6n51LXV8gMwX .cluster-label text{fill:#333;}#mermaid-svg-6Fzc6n51LXV8gMwX .cluster-label span{color:#333;}#mermaid-svg-6Fzc6n51LXV8gMwX .cluster-label span p{background-color:transparent;}#mermaid-svg-6Fzc6n51LXV8gMwX .label text,#mermaid-svg-6Fzc6n51LXV8gMwX span{fill:#333;color:#333;}#mermaid-svg-6Fzc6n51LXV8gMwX .node rect,#mermaid-svg-6Fzc6n51LXV8gMwX .node circle,#mermaid-svg-6Fzc6n51LXV8gMwX .node ellipse,#mermaid-svg-6Fzc6n51LXV8gMwX .node polygon,#mermaid-svg-6Fzc6n51LXV8gMwX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6Fzc6n51LXV8gMwX .rough-node .label text,#mermaid-svg-6Fzc6n51LXV8gMwX .node .label text,#mermaid-svg-6Fzc6n51LXV8gMwX .image-shape .label,#mermaid-svg-6Fzc6n51LXV8gMwX .icon-shape .label{text-anchor:middle;}#mermaid-svg-6Fzc6n51LXV8gMwX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-6Fzc6n51LXV8gMwX .rough-node .label,#mermaid-svg-6Fzc6n51LXV8gMwX .node .label,#mermaid-svg-6Fzc6n51LXV8gMwX .image-shape .label,#mermaid-svg-6Fzc6n51LXV8gMwX .icon-shape .label{text-align:center;}#mermaid-svg-6Fzc6n51LXV8gMwX .node.clickable{cursor:pointer;}#mermaid-svg-6Fzc6n51LXV8gMwX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-6Fzc6n51LXV8gMwX .arrowheadPath{fill:#333333;}#mermaid-svg-6Fzc6n51LXV8gMwX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6Fzc6n51LXV8gMwX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6Fzc6n51LXV8gMwX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6Fzc6n51LXV8gMwX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-6Fzc6n51LXV8gMwX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6Fzc6n51LXV8gMwX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-6Fzc6n51LXV8gMwX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6Fzc6n51LXV8gMwX .cluster text{fill:#333;}#mermaid-svg-6Fzc6n51LXV8gMwX .cluster span{color:#333;}#mermaid-svg-6Fzc6n51LXV8gMwX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-6Fzc6n51LXV8gMwX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-6Fzc6n51LXV8gMwX rect.text{fill:none;stroke-width:0;}#mermaid-svg-6Fzc6n51LXV8gMwX .icon-shape,#mermaid-svg-6Fzc6n51LXV8gMwX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6Fzc6n51LXV8gMwX .icon-shape p,#mermaid-svg-6Fzc6n51LXV8gMwX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-6Fzc6n51LXV8gMwX .icon-shape .label rect,#mermaid-svg-6Fzc6n51LXV8gMwX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6Fzc6n51LXV8gMwX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-6Fzc6n51LXV8gMwX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-6Fzc6n51LXV8gMwX :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
输入: 多信号炉况
思考阶段(隐藏)显式列出证据/假设/因果
回答阶段给出结论+依据
💡 知识卡片:思考预算越高,模型想得越久,但也越慢、越贵。工业上建议按任务复杂度配置:简单查询低预算,复杂诊断高预算。
二、面向炉况诊断的结构化推理模板 📋
与其让模型"自由想象",不如用模板规定思考的骨架,引导它按"证据-机制-结论-不确定性"组织推理,并用 JSON 输出便于下游解析:
# 任务:高炉炉温异常诊断
## 输入信号
– 热风压力: {p} MPa; 风温: {t}℃; 富氧率: {o2}; 焦比: {cr}
– 最近炉温变化: {trend}
## 思考要求(请务必先推理再回答)
1. 证据梳理:列出与炉温相关的每个信号及其可能机制;
2. 因果分析:区分"直接诱因"与"伴生现象";
3. 不确定性:明确哪些信息缺失、当前判断置信度;
4. 处置建议:给出分优先级、可执行的操作。
## 输出(严格 JSON)
{"诊断": str, "置信度": 0~1, "诱因": [str], "建议": [str], "待确认": [str]}
📌 实战要点:先思考后 JSON、把不确定性显式输出——这两点是工业落地铁律。它让模型既能给出结论,又敢于承认"我不知道",避免在产线上"一本正经胡说"。
三、代码:在 API 层启用并解析 Extended Thinking 🔬
# agent/thinking_llm.py —— 使用支持 Extended Thinking 的模型
from openai import OpenAI
import os, json, time
client = OpenAI(
api_key=os.getenv("ARK_API_KEY"),
base_url=os.getenv("ARK_BASE_URL"),
)
def diagnose_lf(obs: dict) –> dict:
resp = client.chat.completions.create(
model="doubao-seed-2-0-XX", # 支持 extended_thinking 的模型
messages=[{"role": "user", "content": PROMPT_TEMPLATE.format(**obs)}],
thinking={ # 开启扩展思考
"type": "enabled",
"budget_tokens": 2048,
},
)
msg = resp.choices[0].message
# 解析: 部分模型在 content 前提供 reasoning_content
reasoning = getattr(msg, "reasoning_content", None) or ""
answer = msg.content
try:
structured = json.loads(extract_json(answer))
except Exception:
structured = {"raw": answer}
return {"reasoning": reasoning, "answer": structured, "latency_s": round(time.time()–start(), 1)}
🎯 要点:工程上把"思考段"存进审计日志、只把"回答段"到下游。这样既保推理质量,又不让冗长思考污染业务数据接口。对账、复盘时再回看思考段。
四、何时开想、何时别开想:工程权衡 ⚖️
| 炉况复杂诊断 | 开(高预算) | 多因耦合需深推 |
| 简单查询/取数 | 关(低预算) | 省钱又快,无需深想 |
| 告警解释 | 开(中预算) | 需要可解释的因果链路 |
| 批量预测推理 | 关 | 追求吞吐与稳定延迟 |
⚠️ 提醒:thinking 不是"想得越多越好"。它只放大"推理的充分性",不改变"知识的边界"。对超出模型已知范围的冷门机理题,再高的预算也可能"想偏"——此时应回退到知识库/专家复核,而不是盲目信任"深度思考"。
〇、附录:提示词中的"推理护栏"设计 🧭
Thinking 模式的威力与风险并存——它可能想得很深,也可能想偏。本附录补一套"推理护栏"提示词设计:约束推理必须"先分步、后给依据、再下结论",并给出可复用的提示模板骨架。
# 炉况推理护栏 Prompt 骨架
1. 先列出已知炉况事实(风量/风温/压力/料速)
2. 分步推理: 每一步说明"由什么现象,推断着什么"
3. 给出矛盾点: 若有信号互相冲突, 先指出
4. 结论必带置信度: 结论(高/中/低) + 一句话依据
5. 不确定时的默认动作: 建议人工复核, 不硬下结论
# thinking/guardrails.py —— 对LLM结论做结构校验(骨架)
def validate_reasoning(parsed):
need = {"facts": list, "steps": list, "conflict": str,
"conclusion": str, "confidence": {"high", "med", "low"}}
for k in need:
if k not in parsed:
return False, f"缺字段: {k}"
return (parsed["confidence"] in need["confidence"]), "ok"
📌 实战要点:给 Thinking 套"结构化护栏",比放任它自由发挥更可靠——既保留深度推理的优点,又用"分步 + 依据 + 置信度"防止它跑偏或过度自信。
⚠️ 提醒:深度推理的致命伤是"过度自信"——它可能把"高置信"建立在错误假设上(熟能生巧地编)。因此必须配合"字段校验 + 矛盾点显式化 + 默认人工复核",守住可靠性(呼应第 26 期)。
🎯 本期小结
🔧 本期工具箱
- 参数:thinking={"type":"enabled","budget_tokens":N};解析 reasoning_content 与 content;
- 模板:第二部分的结构化推理模板可直接复制到你的系统提示词;
- 延伸阅读:Anthropic《Extended thinking best practices》;第 04 期(技术栈)记忆部分。
下一期预告:工具已逐步熟练,下一步将聚焦更具挑战性的任务。第 11 期《Codex 批量重构老系统:激活 20 年 DCS/PLC 存量代码》,围绕"以 AI 释放存量资产价值"展开规模化实践。
作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 + 交叉领域。
👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。
🔔 关注专栏,不错过后续精彩内容



