Qwen3.5模型:如何分割思考过程与最终回答

在自然语言处理和人工智能领域,越来越多的模型采用了“思考过程”和“最终回答”分离的方式。这种方式使得机器不仅能够给出答案,还能展示它的推理过程,有助于提高模型的透明度和可解释性。在这种情境下,如何从一段文本中正确地提取思考过程和最终回答,成为了一个重要的任务。

本文将介绍如何通过Python代码实现对Qwen3.5模型输出的“思考过程”和“最终回答”的分割。我们将给出具体的代码实现,分析代码逻辑,并提供一些应用场景和优化建议。


一、需求背景

在许多AI对话系统或生成模型中,除了输出最终答案外,通常还会输出一部分推理过程,这部分内容被称为“思考过程”或“推理过程”。这种结构可以帮助开发者或用户更好地理解模型的工作原理。

例如,对于一个复杂的数学问题,模型可能首先进行一些推理步骤,然后给出最终答案。此时,我们希望能从模型的输出中分离出这些推理步骤和最终答案。


二、常见的思考与回答分割方式

在实际应用中,Qwen3.5模型的输出格式可能有多种变体,其中最常见的两种分隔方式如下:

  1. 通过 </think> 标签分隔
    模型的推理过程和最终回答之间用 </think> 标签进行区分。推理过程通常位于 <think></think> 标签之间,而最终回答则位于 </think> 之后。

  2. 通过 \n\n\n 进行分割
    模型输出中可能没有明确的标签,推理过程和最终回答之间通常由三个换行符 \n\n\n 进行分隔。

我们的目标是根据这些分隔符,从文本中正确提取出推理过程和最终答案。


三、代码实现:分割思考过程与最终回答

以下是一个实现思考过程与最终回答分割的Python函数:

import re

def split_thinking(text: str):
    # 情况1:只有 </think> 标签
    if '</think>' in text:
        parts = text.split('</think>', 1)
        thinking = parts[0].strip()
        answer = parts[1].strip()
        return thinking, answer

    # 情况2:用 \n\n\n 分割
    if '\n\n\n' in text:
        parts = text.split('\n\n\n', 1)  # 只分割第一次出现
        thinking = parts[0].strip()
        answer = parts[1].strip()
        return thinking, answer

    # 无法分割,全部视为最终回答
    return "", text.strip()

# 测试输出
output = """这是思考过程的一部分
\n\n\n
这是最终回答"""

thinking, answer = split_thinking(output)
print("=== 思考过程 ===")
print(thinking)
print("=== 最终回答 ===")
print(answer)

1. 函数说明

  • split_thinking 函数接收一个字符串 text 作为输入,并根据两种情况来分割文本。

    1. 当文本中包含 </think> 标签时,推理过程被认为位于 <think></think> 之间,最终回答则位于 </think> 标签之后。

    2. 当文本中包含 \n\n\n(三个换行符)时,推理过程和最终回答用换行符进行分割。

    3. 如果文本中既没有 </think> 标签也没有 \n\n\n,则视为无法分割,直接返回整个文本作为最终回答。

2. 输出示例

假设输入文本是:

这是思考过程的一部分


这是最终回答

执行 split_thinking(output) 后,会输出:

=== 思考过程 ===
这是思考过程的一部分
=== 最终回答 ===
这是最终回答

这种分割方式使得开发者能够清晰地看到模型的思考过程和最终答案,便于调试和优化。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐