阿里云大模型调用思考模型时输出思考后无法输出回复

简介: 在使用部分OpenAI模型(如deepseek-r1)时,官方代码只能输出思考过程而无法输出最终回复。问题源于代码中未正确判断思考数据为空字符串的情况。修正方法是增加对`delta.reasoning_content`和`delta.content`非空的判断条件。此外,`deepseek-v3`模型的输出格式不规范,包含无意义的信息且标签未闭合,建议避免使用该模型。

部分模型调用官方代码时只能输出思考无法输出回复

官方调用模式如下:

from openai import OpenAI
import os

# 初始化OpenAI客户端
client = OpenAI(
    # 如果没有配置环境变量,请用百炼API Key替换:api_key="sk-xxx"
    api_key = os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

reasoning_content = ""  # 定义完整思考过程
answer_content = ""     # 定义完整回复
is_answering = False   # 判断是否结束思考过程并开始回复

# 创建聊天完成请求
completion = client.chat.completions.create(
    model="deepseek-r1",  # 此处以 deepseek-r1 为例,可按需更换模型名称
    messages=[
        {"role": "user", "content": "9.9和9.11谁大"}
    ],
    stream=True,
    # 解除以下注释会在最后一个chunk返回Token使用量
    # stream_options={
    #     "include_usage": True
    # }
)

print("\n" + "=" * 20 + "思考过程" + "=" * 20 + "\n")

for chunk in completion:
    # 如果chunk.choices为空,则打印usage
    if not chunk.choices:
        print("\nUsage:")
        print(chunk.usage)
    else:
        delta = chunk.choices[0].delta
        # 打印思考过程
        if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:
            print(delta.reasoning_content, end='', flush=True)
            reasoning_content += delta.reasoning_content
        else:
            # 开始回复
            if delta.content != "" and is_answering == False:
                print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n")
                is_answering = True
            # 打印回复过程
            print(delta.content, end='', flush=True)
            answer_content += delta.content

问题原因是判断思考数据时没有判断思考数据为空字符串

#delta.reasoning_content增加delta.reasoning_content不等于空值的判断
if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None and delta.reasoning_content != '':
#同理delta.content增加不等于None的判断
if delta.content != "" and delta.content != None and is_answering == False:

以下是模型回复的几个例子

模型 思考过程 最终回复
deepseek-r1-distill-llama-70b chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, role=None, tool_calls=None, reasoning_content='愉快!\n'), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-r1-distill-llama-70b', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None) chunk == ', choices=[Choice(delta=ChoiceDelta(content='!欢迎来', function_call=None, role=None, tool_calls=None, reasoning_content=''), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-r1-distill-llama-70b', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None)
deepseek-r1 chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content=None, function_call=None, role=None, tool_calls=None, reasoning_content='。'), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-r1', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None) chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, role=None, tool_calls=None, reasoning_content=None), finish_reason='stop', index=0, logprobs=None)], created=, model='deepseek-r1', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None)

三、deepseek-v3输出思考过程是在content中,输出模式跟其他模型完全不同,这个可能得特殊处理,但API示例用的同一套代码误导严重

建议不使用deepseek-v3模型,输出毫无规律,随性至极。

目前看出的问题:
1、content中<\think><\/think>标签无闭合,markdown无法识别
2、chunk中会包含content='思考过程===================='等意义不明的信息。

模型 思考过程 最终回复
deepseek-v3 chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content='<think', function_call=None, role=None, tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-v3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None) chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content=None, function_call=None, role=None, tool_calls=None, reasoning_content='对话。\n</think'), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-v3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None)
2025-02-26 13:00:55,044 - INFO - chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, role='assistant', tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-v3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None)
2025-02-26 13:00:55,044 - INFO - chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content='================', function_call=None, role=None, tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-v3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None)
2025-02-26 13:00:55,124 - INFO - chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content='====', function_call=None, role=None, tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-v3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None)
2025-02-26 13:00:55,297 - INFO - chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content='完整', function_call=None, role=None, tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-v3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None)
2025-02-26 13:00:55,789 - INFO - chunk == ChatCompletionChunk(id='', choices=[Choice(delta=ChoiceDelta(content='思考过程====================', function_call=None, role=None, tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=, model='deepseek-v3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=None)
相关实践学习
如何快速创建插件agent
阿里云百炼应用基于Assistant API技术架构,结合大语言模型(LLM)的推理、知识检索增强、插件调度等能力,构建应对各类复杂场景任务的场景应用。通过集成化、直观易用的产品界面,为开发者提供了丰富的应用配置选项,包括大型语言模型(LLM)选择、Pro
相关文章
|
机器学习/深度学习 PyTorch TensorFlow
TensorRT 模型加速——输入、输出、部署流程
本文首先简要介绍 Tensor RT 的输入、输出以及部署流程,了解 Tensor RT 在部署模型中起到的作用。然后介绍 Tensor RT 模型导入流程,针对不同的深度学习框架,使用不同的方法导入模型。
1931 1
射极输出器
射极输出器(Emitter Follower)是一种常见的放大电路,也称为共射输出器。它由一个晶体管组成,通常是NPN型晶体管。
441 0
|
2月前
|
机器学习/深度学习 数据采集 自然语言处理
Transformer 学习小结(输出输入)
在模型处理中,输入文本需经预处理,包括分词、词汇表构建及填充(padding),并使用填充掩码避免无效计算。位置嵌入为Transformer提供顺序信息,编码器通过自注意力机制和前馈网络处理输入序列。输出处理中,解码器根据编码器输出生成目标序列,使用序列掩码防止信息泄露,逐步生成单词,并在测试阶段采用贪婪或束搜索优化输出。
|
8月前
|
JavaScript 前端开发 开发者
数据输出方法
【8月更文挑战第30天】
73 3
|
5月前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
1120 52
|
7月前
输出
输出。
46 1
YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)
YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)
|
11月前
L1-023 输出GPLT
L1-023 输出GPLT
65 0
|
11月前
输出GPLT(2016)
输出GPLT(2016)
64 0
Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行
Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行
457 0
下一篇
oss创建bucket