# 深度思考

深度思考(Deep Thinking / Reasoning)是部分大模型提供的增强推理能力。模型在回答前会先进行内部"思考" ,输出推理过程后再给出最终答案,适合数学、逻辑、代码分析等复杂任务。

# 适用模型

模型 默认行为 说明
hy3-preview 默认 low(轻量推理),通过 reasoning_effort 调节深度 推荐,灵活控制推理深度
deepseek-r1 默认始终思考 无需额外参数,始终输出 reasoning_content

使用不支持深度思考的模型时传入相关参数不会报错,但不会产生思考内容。

# 启用方式

在请求参数中添加 reasoning_effort 即可开启深度思考,支持三个级别:

说明 适用场景
low 轻量推理,推理步数少,速度快 简单任务
medium 平衡模式 大多数日常、逻辑适中的复杂任务
high 深度思维链推理,推理时间最长 高难度数学、编程、复杂逻辑推理

不传该参数时,hy3-preview 默认使用 low 级别(轻量推理)。

# 使用示例

# 非流式调用

const model = wx.cloud.extend.AI.createModel("cloudbase");

const res = await model.generateText({
    model: "hy3-preview",
    reasoning_effort: "high", // 开启深度思考
    messages: [{role: "user", content: "证明 √2 是无理数"}],
});

// 获取思考过程和最终回答
const message = res.choices[0].message;
console.log("思考过程:", message.reasoning_content);
console.log("最终回答:", message.content);

# 流式调用

const model = wx.cloud.extend.AI.createModel("cloudbase");

const res = await model.streamText({
    data: {
        model: "hy3-preview",
        reasoning_effort: "high",
        messages: [{role: "user", content: "证明 √2 是无理数"}],
    },
});

for await (const event of res.eventStream) {
    if (event.data === "[DONE]") break;

    const data = JSON.parse(event.data);
    const delta = data.choices[0]?.delta;

    // 思考过程
    if (delta?.reasoning_content) {
        console.log("[思考]", delta.reasoning_content);
    }

    // 最终回答
    if (delta?.content) {
        console.log(delta.content);
    }
}

注意: 流式调用中需要使用 eventStream 而非 textStream 来获取 reasoning_content,因为 textStream 只返回最终回答的文本片段。

# 在小程序中展示思考过程

思考过程通常较长,建议以可折叠的方式展示。以下是一个完整的页面示例:

thinking.js:

Page({
    data: {
        reasoning: "",
        answer: "",
        showThinking: false,
        isLoading: false,
    },

    toggleThinking() {
        this.setData({showThinking: !this.data.showThinking});
    },

    async ask() {
        this.setData({reasoning: "", answer: "", isLoading: true});

        try {
            const model = wx.cloud.extend.AI.createModel("cloudbase");

            const res = await model.streamText({
                data: {
                    model: "hy3-preview",
                    reasoning_effort: "high",
                    messages: [{role: "user", content: "9.11 和 9.9 哪个大?"}],
                },
            });

            let reasoning = "";
            let answer = "";

            for await (const event of res.eventStream) {
                if (event.data === "[DONE]") break;

                const data = JSON.parse(event.data);
                const delta = data.choices[0]?.delta;

                if (delta?.reasoning_content) {
                    reasoning += delta.reasoning_content;
                    this.setData({reasoning});
                }

                if (delta?.content) {
                    answer += delta.content;
                    this.setData({answer});
                }
            }
        } catch (error) {
            console.error("调用失败:", error);
        } finally {
            this.setData({isLoading: false});
        }
    },
});

thinking.wxml:


<view class="container">
    <!-- 思考过程(可折叠) -->
    <view wx:if="{{reasoning}}" class="thinking-block">
        <view class="thinking-header" bindtap="toggleThinking">
            <text>{{showThinking ? '▼' : '▶'}} 思考过程</text>
        </view>
        <view wx:if="{{showThinking}}" class="thinking-content">
            <text>{{reasoning}}</text>
        </view>
    </view>

    <!-- 最终回答 -->
    <view class="answer">{{answer}}</view>

    <button bindtap="ask" disabled="{{isLoading}}">
        {{isLoading ? '思考中...' : '提问'}}
    </button>
</view>

# 多轮对话中的注意事项

使用深度思考模型进行多轮对话时,不要将 reasoning_content 追加到 messages 历史中

const chatHistory = [];

async function chat(userInput) {
    chatHistory.push({role: "user", content: userInput});

    const model = wx.cloud.extend.AI.createModel("cloudbase");
    const res = await model.generateText({
        model: "hy3-preview",
        reasoning_effort: "high",
        messages: chatHistory,
    });

    const message = res.choices[0].message;

    // ✅ 正确:只追加 content 到历史
    chatHistory.push({
        role: "assistant",
        content: message.content,
    });

    // ❌ 错误:不要追加 reasoning_content
    // chatHistory.push({
    //   role: "assistant",
    //   content: message.reasoning_content + message.content,
    // });

    return {
        reasoning: message.reasoning_content,
        answer: message.content,
    };
}

将思考过程追加到 messages 会导致:

  1. 输入 token 快速膨胀(思考过程通常很长)
  2. 模型回复质量下降
  3. 可能出现格式异常

# 适用场景

场景 推荐 原因
数学证明 / 推理 ✅ 推荐 需要严谨的逐步推理
代码 Bug 分析 ✅ 推荐 需要追踪执行流程
复杂逻辑判断 ✅ 推荐 需要考虑多种条件
简单问答 ❌ 不推荐 增加不必要的延迟和成本
实时对话 ❌ 不推荐 思考过程导致首字延迟较高
创意写作 ⚠️ 视情况 短文案不需要,长篇规划可能有帮助

# 成本与性能

指标 深度思考模型 普通模型
首字延迟 较高(需完成思考) 较低
输出 Token 较多(含思考内容) 较少
回答准确性 较高(复杂任务) 一般
计费 思考 Token 也计费 仅回答内容计费

根据任务复杂度选择推理深度:简单任务不传 reasoning_effort(默认 low,轻量推理),复杂推理任务设为 "high"(深度思考)。