思维链(Chain of Thought, CoT)是昇思(MindSpore)大模型解决复杂推理任务的核心技术,通过提示词引导 + 分步推理 + 中间结果显式生成,让模型模拟人类思考逻辑,将复杂问题拆解为多步子问题,显著提升数学、逻辑、多跳问答、代码分析等任务准确率。昇思依托 MindFormers 套件、盘古 / DeepSeek 等大模型原生支持 CoT,支持零样本 CoT、少样本 CoT、自洽采样(Self-Consistency)、思维树(ToT) 等范式,配合昇腾 NPU 硬件加速,可实现高效、稳定、可解释的推理输出。从原理、使用方法、代码实践、场景优化四方面展开。

一、思维链推理核心原理

1. 技术本质

CoT 不修改模型权重,仅通过提示模板强制模型生成中间推理步骤,将 “输入→输出” 转化为 “输入→步骤 1→步骤 2→…→答案” 的链式结构。昇思大模型(如盘古、DeepSeek-R1、Qwen)基于 Transformer 架构,通过上下文注意力机制关联中间步骤,激活预训练知识完成逻辑推导。

2. 核心范式

  • 零样本 CoT:无需示例,直接在提示末尾加 “请一步步思考并解释”“Let's think step by step”,适合快速验证。
  • 少样本 CoT:提供 2-8 个 “问题 + 分步推理 + 答案” 示例,引导模型复刻推理模式,复杂任务准确率提升 30%+。
  • 自洽 CoT:同一问题采样多条推理链,投票选最优答案,减少幻觉与错误。
  • 深度思考模式:昇思原生支持 “快慢思考”,通过think=truereasoning_effort参数控制推理深度。

3. 适用场景

  • 数学计算、方程求解、逻辑证明
  • 多跳知识问答、常识推理、文本分析
  • 代码调试、算法理解、复杂规则判断
  • 医疗 / 法律 / 金融等需严谨逻辑的专业场景

二、昇思环境准备

1. 核心依赖

# 安装昇思框架与MindFormers套件
pip install mindspore==2.6.0 mindformers==1.0.0
# 安装分词与工具库
pip install tokenizers sentencepiece numpy pandas

2. 模型加载

昇思支持直接加载盘古 α、DeepSeek-R1、Qwen 等支持 CoT 的大模型,通过AutoModelAutoTokenizer一键初始化:

import mindspore as ms
from mindformers import AutoModel, AutoTokenizer, GenerationConfig

# 初始化昇腾环境
ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend", device_id=0)

# 加载DeepSeek-R1推理模型(支持深度CoT)
model_name = "deepseek-r1-7b-chat"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(
    model_name,
    dtype=ms.float16,  # 昇腾FP16加速
    use_past=True      # 增量推理优化
)

# 生成配置(支持CoT参数)
gen_config = GenerationConfig(
    max_new_tokens=2048,    # 支持长思维链
    temperature=0.3,        # 低随机性保证逻辑稳定
    top_p=0.9,
    do_sample=True,
    repetition_penalty=1.1,
    pad_token_id=tokenizer.pad_token_id,
    eos_token_id=tokenizer.eos_token_id
)

三、代码实践:四种 CoT 推理实现

1. 零样本 CoT(最简实现)

直接添加引导指令,适合快速推理:

def zero_shot_cot_infer(question):
    # 零样本CoT提示模板
    prompt = f"""问题:{question}
请一步步详细思考,给出完整推理过程,最后给出明确答案。
思考:"""
    # 分词与推理
    inputs = tokenizer(prompt, return_tensors="ms", padding=True, truncation=True)
    outputs = model.generate(**inputs, generation_config=gen_config)
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return response

# 测试数学推理
question = "一个长方形长12cm,宽比长短4cm,求面积与周长之和。"
result = zero_shot_cot_infer(question)
print("=== 零样本CoT结果 ===")
print(result)

2. 少样本 CoT(高精度推理)

提供示例引导,适合复杂逻辑任务:

def few_shot_cot_infer(question):
    # 少样本CoT示例(数学题)
    prompt = """示例1:
问题:小明有5个苹果,小红比小明多3个,两人共有多少?
思考:1. 小红苹果数=5+3=8个;2. 总数=5+8=13个。
答案:13个。

示例2:
问题:汽车速度60km/h,行驶3.5小时,路程多少?
思考:1. 路程=速度×时间;2. 60×3.5=210km。
答案:210km。

问题:{question}
请按示例一步步思考,最后给出答案。
思考:""".format(question=question)
    
    inputs = tokenizer(prompt, return_tensors="ms", padding=True, truncation=True)
    outputs = model.generate(**inputs, generation_config=gen_config)
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return response

# 测试多步计算
question = "商品原价200元,先涨价15%再打8折,最终价格多少?"
result = few_shot_cot_infer(question)
print("=== 少样本CoT结果 ===")
print(result)

3. 自洽 CoT(防错误优化)

多条推理链投票,提升稳定性:

def self_consistency_cot(question, num_chains=3):
    chains = []
    for _ in range(num_chains):
        # 轻微调整temperature增加多样性
        config = GenerationConfig(**gen_config.dict(), temperature=0.5)
        res = zero_shot_cot_infer(question)
        chains.append(res)
    # 投票选最一致答案(简化版)
    answers = [c.split("答案:")[-1].strip() for c in chains if "答案:" in c]
    final_answer = max(set(answers), key=answers.count) if answers else "无有效答案"
    return chains, final_answer

# 测试
chains, ans = self_consistency_cot("3.14×5²+√64等于多少?")
print("=== 自洽CoT多条推理链 ===")
for i, c in enumerate(chains):
    print(f"\n【推理链{i+1}】\n{c}")
print(f"\n【最终答案】{ans}")

4. 昇思原生深度思考模式

盘古 / DeepSeek-R1 支持think参数开启专业推理:

def deep_think_infer(question):
    # 昇思原生深度思考提示
    prompt = f"""[INST] <<SYS>>你是专业推理助手,必须完整分步思考,禁止省略步骤。<</SYS>>
问题:{question}
请开启深度思考模式,详细推导每一步。[/INST]"""
    
    inputs = tokenizer(prompt, return_tensors="ms")
    # 启用思维链参数
    outputs = model.generate(
        **inputs,
        generation_config=gen_config,
        **{"chat_template_kwargs": {"think": True, "reasoning_effort": "high"}}  # 高深度推理
    )
    return tokenizer.decode(outputs[0], skip_special_tokens=True)

# 测试逻辑题
result = deep_think_infer("所有A都是B,所有B都是C,那么部分C是A吗?请证明。")
print("=== 深度思考模式结果 ===")
print(result)

四、昇思 CoT 优化要点

  1. 提示词优化
    • 中文用 “一步步详细思考、分点推导、给出明确答案”
    • 专业场景加领域约束(如 “按数学定理推导”)
    • 避免模糊表述,强制中间步骤格式
  2. 昇腾硬件加速
    • 启用FP16混合精度、Flash Attention
    • 长文本开启Page Attention,支持 4k/8k/32k 上下文
    • 多卡并行用msrun_launcher分布式推理
  3. 结果后处理
    • 提取 “思考:”“答案:” 分隔内容
    • 校验中间步骤逻辑,过滤幻觉
    • 复杂任务用 RAG 检索补充知识

五、效果与总结

经昇思 CoT 优化后,复杂任务表现显著提升:

  • 数学推理:准确率从 50%→85%+
  • 多跳问答:错误率降低 40%,可解释性增强
  • 代码 / 逻辑:步骤完整,便于校验与调试

昇思思维链推理零代码改造、即插即用,依托 MindFormers 与昇腾硬件,兼顾效率与精度,是大模型落地复杂场景的核心技术。实际应用中,可按任务复杂度选择零样本 / 少样本 / 自洽模式,配合提示工程与硬件优化,实现最优推理效果。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐