Qwen3.5 在Ollama API中关闭思考模式!

1,878 阅读3分钟

Qwen3.5的开源模型各方面表现都还不错,但是思考时间特别长,有时候我们并不希望他想这么久。

只要关闭思考能力,速度可以提升一个数量级。

而且我发现不少人和我有一样的想法,所以今天就专门说一下这个问题。

在之前的一篇文章《Qwen3.5和GLM4.7Flash疯狂提速,Ollama关闭思考的两种方式!》我其实已经分享过了两种方式。

但是这两种方式都是基于命令的。

今天来分享一种基于API的方式。

先来说一种错误的方式!

如果你去问AI,目前大部分AI可能会建议你采用openai兼容模式的代码。

比如这样:

def stream_chat(client, messages, model=MODEL, enable_think=DEFAULT_ENABLE_THINK):
    """
    流式调用 Ollama OpenAI 兼容 API
​
    Args:
        client: OpenAI 客户端
        messages: 对话消息列表
        model: 模型名称
        enable_think: 是否启用思考功能(默认 False)
​
    Yields:
        流式返回的内容片段
    """
    try:
        response = client.chat.completions.create(
            model=model,
            messages=messages,
            stream=True,
            extra_body={
                "chat_template_kwargs": {
                    "enable_thinking": enable_think
                }
            }
        )
​
        for chunk in response:
            if chunk.choices and chunk.choices[0].delta.content:
                yield chunk.choices[0].delta.content
​
    except Exception as e:
        print(f"错误:请求失败 - {e}", file=sys.stderr)
        sys.exit(1)

比如这样:

def stream_chat(client, messages, model=MODEL, think=DEFAULT_THINK):
    """
    流式调用 Ollama OpenAI 兼容 API
​
    Args:
        client: OpenAI 客户端
        messages: 对话消息列表
        model: 模型名称
        think: 是否启用思考功能(默认 False)
​
    Yields:
        流式返回的内容片段
    """
    try:
        response = client.chat.completions.create(
            model=model,
            messages=messages,
            stream=True,
            extra_body={
                "think": think  # Ollama 原生协议:控制思考模式
            }
        )
​
        for chunk in response:
            if chunk.choices and chunk.choices[0].delta.content:
                yield chunk.choices[0].delta.content
​
    except Exception as e:
        print(f"错误:请求失败 - {e}", file=sys.stderr)
        sys.exit(1)

虽然说得头头是道,有理有据,但是这两种方法都不管用!

真正管用的是,下面这段代码:

def stream_chat(messages, model=MODEL, enable_think=True):
    """
    流式调用 Ollama API
​
    Args:
        messages: 对话消息列表,格式为 [{"role": "user|assistant", "content": "消息内容"}]
        model: 模型名称
        enable_think: 是否启用模型的 think 功能
​
    Yields:
        流式返回的内容片段
    """
    payload = {
        "model": model,
        "messages": messages,
        "stream": True,  # 启用流式输出
        "think": enable_think  # Ollama 原生协议:控制模型是否进行思考
    }
​
    try:
        response = requests.post(OLLAMA_API, json=payload, stream=True)
        response.raise_for_status()
​
        # 逐行读取流式响应
        for line in response.iter_lines():
            if line:
                data = json.loads(line.decode('utf-8'))
​
                # 处理 think 字段(思考过程)
                if 'think' in data and data['think']:
                    think_content = data['think']
                    yield f"\033[90m[思考] {think_content}\033[0m\n"
​
                # 处理 message 字段(正式回复)
                if 'message' in data and 'content' in data['message']:
                    content = data['message']['content']
                    yield content
​
    except requests.exceptions.ConnectionError:
        print("错误:无法连接到 Ollama 服务,请确保 Ollama 正在运行 (ollama serve)", file=sys.stderr)
        sys.exit(1)
    except requests.exceptions.RequestException as e:
        print(f"错误:请求失败 - {e}", file=sys.stderr)
        sys.exit(1)
    except json.JSONDecodeError as e:
        print(f"错误:JSON 解析失败 - {e}", file=sys.stderr)
        sys.exit(1)

我已经实测过9B的模型,可以正常关闭。输出速度直接起飞!

这个问题的关键是,目前只有Ollama的原生协议支持关闭思考。

所以有两个关键点。

一个是 API地址:

OLLAMA_API = "http://localhost:11434/api/chat"

这个地址必须是原生接口!不能用OpenAI的兼容接口!

另一个是参数格式:

payload = {
        "model": model,
        "messages": messages,
        "stream": True,  # 启用流式输出
        "think": enable_think  # Ollama 原生协议:控制模型是否进行思考
    }

必须是think,后面可以跟True或者Flase!

通过这种方式调用Qwen3.5系列模型,就可以自由控制思考模式了,这种方式不仅仅适用于Qwen3.5,也应该同样适用于GLM4.7Flash这一类开源模型!