第二节:思维链提示
CoT 机制与内部推理

作者:小学子 📚 | 日期:2026年4月2日 | 第九阶段 · 模块九


# 第九阶段 · 模块九 · 第二节:思维链提示

核心问题

什么是思维链提示(Thinking)?Claude Code 如何实现思维链?adaptive thinking 是什么?


◇ 本节位置


        Claude Code 全局架构
        
        ┌─────────────────────────────────────────────────────────────────────┐
        │  高级主题                                                            │
        │                                                                      │
        │  思维链提示 ← 本节                                                 │
        │  ├── ThinkingConfig ──> thinking.ts                                 │
        │  ├── 思维模式 ──> adaptive/enabled/disabled                       │
        │  └── 模型支持 ──> modelSupportsThinking                          │
        └─────────────────────────────────────────────────────────────────────┘
        


一、思维链概述

1.1 什么是思维链


        思维链(Chain of Thought)= 模型在生成最终答案前先展示思考过程
        
        ┌─────────────────────────────────────────────────────────────────────┐
        │  无思维链:                                                          │
        │  问题 → 答案                                                        │
        │                                                                      │
        │  有思维链:                                                          │
        │  问题 → 思考过程 → 答案                                             │
        └─────────────────────────────────────────────────────────────────────┘
        

1.2 Claude Code 中的思维

源码位置:`src/utils/thinking.ts`


        export type ThinkingConfig =
          | { type: 'adaptive' }      // 自适应思维
          | { type: 'enabled'; budgetTokens: number }  // 启用思维
          | { type: 'disabled' }     // 禁用思维
        

1.3 五问分析

问 1:思维链有什么用?


        // 思维链的优势:
        
        // 1. 更清晰的推理
        // - 模型展示思考步骤
        // - 更容易发现错误
        
        // 2. 更复杂的推理
        // - 可以处理多步骤问题
        // - 可以尝试不同方法
        
        // 3. 更好的结果
        // - 尤其对于数学、代码问题
        


二、思维模式

2.1 三种模式

源码位置:`src/utils/thinking.ts`


        // 1. adaptive - 自适应(默认)
        // 模型自动决定是否使用思维链
        
        // 2. enabled - 启用
        // 强制使用思维链,可指定 token 预算
        
        // 3. disabled - 禁用
        // 不使用思维链
        

2.2 自适应思维


        // adaptive = 模型自动决定何时使用思维
        
        // 模型会根据问题复杂度自动判断:
        // - 简单问题:不使用思维(节省 token)
        // - 复杂问题:使用思维(提升效果)
        
        export function modelSupportsAdaptiveThinking(model: string): boolean {
          // 仅支持 Claude 4.6+ 的特定模型
          return canonical.includes('opus-4-6') ||
                 canonical.includes('sonnet-4-6');
        }
        

2.3 五问分析

问 1:adaptive 和 enabled 的区别?


        // adaptive:模型自己决定
        // - 更智能
        // - 节省 token
        // - 仅部分模型支持
        
        // enabled:强制思维
        // - 始终使用思维
        // - 消耗更多 token
        // - 所有支持的模型可用
        


三、思维预算

3.1 Token 预算


        // thinking 需要消耗 token
        // budgetTokens = 分配给思维的 token 数量
        
        { type: 'enabled', budgetTokens: 10000 }
        // 最多使用 10000 tokens 思考
        

3.2 配置方式


        # 命令行配置
        claude --thinking enabled
        claude --thinking adaptive
        claude --thinking disabled
        
        # 指定预算
        claude --thinking enabled --max-thinking-tokens 20000
        

3.3 五问分析

问 1:思维预算越大越好吗?


        // 不是
        
        // 优点:更深入的思考
        // 缺点:消耗更多 token,成本更高
        
        // 建议:
        // - 简单问题:adaptive 或较小的预算
        // - 复杂问题:较大的预算(10000-20000)
        


四、模型支持

4.1 支持的模型

源码位置:`src/utils/thinking.ts` 第 90 行


        export function modelSupportsThinking(model: string): boolean {
          const canonical = getCanonicalName(model);
          const provider = getAPIProvider();
        
          // 1P 和 Foundry:所有 Claude 4+ 模型
          if (provider === 'foundry' || provider === 'firstParty') {
            return !canonical.includes('claude-3-');
          }
        
          // 3P(Bedrock/Vertex):仅 Opus 4+ 和 Sonnet 4+
          return canonical.includes('sonnet-4') ||
                 canonical.includes('opus-4');
        }
        

4.2 支持自适应思维的模型


        export function modelSupportsAdaptiveThinking(model: string): boolean {
          const canonical = getCanonicalName(model);
        
          // 仅 Claude 4.6+ 支持
          if (canonical.includes('opus-4-6') ||
              canonical.includes('sonnet-4-6')) {
            return true;
          }
        
          // 其他模型不支持
          return false;
        }
        

4.3 五问分析

问 1:哪些模型不支持思维?


        // Claude 3 系列不支持
        // - claude-3-opus
        // - claude-3-sonnet
        // - claude-3-haiku
        
        // 对于这些模型:
        // Claude Code 会自动禁用思维功能
        


五、ultrathink 关键词

5.1 ultrathink 触发

源码位置:`src/utils/thinking.ts` 第 32 行


        // 用户可以在提示中包含 ultrathink 关键词
        // 强制使用深度思维
        
        export function hasUltrathinkKeyword(text: string): boolean {
          return /\bultrathink\b/i.test(text);
        }
        

5.2 触发位置


        // 在消息中使用 ultrathink
        // 模型会进入深度思考模式
        
        // 示例:
        // "Write a sorting algorithm. ultrathink about the best approach."
        

5.3 五问分析

问 1:ultrathink 和 --thinking 有什么区别?


        // ultrathink:提示词中的关键词
        // - 用户在消息中触发
        // - 一次性深度思考
        
        // --thinking:命令行标志
        // - 全局启用思维
        // - 持续生效
        


六、思考过程可视化

6.1 彩虹动画

源码位置:`src/utils/thinking.ts`


        // 思维过程显示为彩虹色动画
        const RAINBOW_COLORS = [
          'rainbow_red',
          'rainbow_orange',
          'rainbow_yellow',
          'rainbow_green',
          'rainbow_blue',
          'rainbow_indigo',
          'rainbow_violet',
        ];
        
        // 动画效果让用户知道模型正在"思考"
        

6.2 显示位置


        ┌─────────────────────────────────────────────────────────────────────┐
        │  🤖 正在思考... ████████████████░░░░░░░░                        │
        └─────────────────────────────────────────────────────────────────────┘
        

6.3 五问分析

问 1:思维过程对用户可见吗?


        // 默认可见
        // Claude Code 会显示思维进度
        
        // 用户可以:
        // 1. 查看完整的思维过程
        // 2. 中断思维(如果时间过长)
        // 3. 配置是否显示
        


七、使用场景

7.1 适合思维的问题


        // 适合:
        // - 算法设计
        // - 代码优化
        // - 复杂调试
        // - 多步骤推理
        // - 架构设计
        
        // 不适合:
        // - 简单查询(今天天气?)
        // - 快速回答(定义什么是变量)
        // - 闲聊对话
        

7.2 性能影响


        // 思维会消耗额外的时间和 token
        
        // 时间:可能增加 2-5 倍
        // Token:可能增加 10-30%
        
        // 但通常能获得更准确的结果
        

7.3 五问分析

问 1:什么时候应该禁用思维?


        // 禁用思维的场景:
        
        // 1. 需要快速响应
        // - 简单问题
        // - 只需要确认
        
        // 2. 成本敏感
        // - token 预算有限
        // - 简单任务
        
        // 3. 模型不支持
        // - Claude 3 系列
        


八、思考题

思考题 1:如何选择思维模式?

答案


        // 建议:
        
        // 1. 默认使用 adaptive
        // - 模型自动决定
        // - 平衡效果和成本
        
        // 2. 复杂问题使用 enabled + 大预算
        // - 算法设计
        // - 架构决策
        
        // 3. 快速任务使用 disabled
        // - 简单查询
        // - 闲聊
        


思考题 2:思维会影响 API 成本吗?

答案


        // 会
        
        // 思维消耗的 token 也需要付费
        // 约增加 10-30% 的 token 消耗
        
        // 但可能减少重试次数
        // 总体可能更划算
        


思考题 3:如何调试思维过程?

答案


        # 启用 verbose 模式
        claude --verbose
        
        # 查看思维日志
        # Claude Code 会显示:
        # - 思维开始
        # - 思维进度
        # - 思维完成
        


九、延伸阅读

文件核心内容
`src/utils/thinking.ts`思维链实现
`src/cli/print.ts`思维显示


十、下节预告

下一节我们将深入 代码库索引

- 代码索引的工作原理

- 索引优化策略

- 语义搜索


*- 第一轮:□ 事实准确性*

*- 第二轮:□ 深度与洞见*

*- 第三轮:□ 可读性与价值*