You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ollama与Python生成长文本时提前终止的问题排查

Ollama生成文本频繁触发stop终止的排查与解决

核心问题排查与修复步骤

  • 移除重复参数:你的options字典中重复定义了两次"temperature": temperature,虽然不会直接导致stop终止,但可能引发参数解析异常,先删除其中一个冗余项。

  • 区分num_ctx与num_predict的作用:

    • num_ctx是模型的总上下文窗口大小(包含输入prompt+生成文本的token总数),并非控制生成文本的最大长度。
    • 要指定单次生成的最大token数,必须添加"num_predict": max_gen_tokens参数。如果仅设置num_ctx,模型会沿用默认的num_predict值(通常为2048),导致生成提前终止。
  • 匹配模型原生上下文限制:llama3.2:1B的官方默认上下文窗口为8192,你设置的30000远超模型原生支持范围,Ollama会强制将参数截断为模型支持的最大值,导致你的自定义设置失效。即使开启上下文扩展,也需确保模型支持对应窗口大小,否则参数不生效。

  • 注意stop参数的追加逻辑:Ollama的stop参数是追加到模型默认终止序列中,而非替换。如果模型本身自带默认终止token(如<|end_of_text|>),生成时触发这些token仍会终止。可以通过ollama show llama3.2:1 --details命令查看模型默认stop序列,再针对性调整。

  • 检查prompt是否包含终止序列:如果你的prompt中存在模型默认的终止token或特定分隔符,生成时会被模型识别为终止信号,导致提前stop。

修正后的代码示例

modelname = 'llama3.2:1'
max_gen_tokens = 30000  # 控制生成文本的最大token数
max_ctx = 8192  # 匹配llama3.2:1B的原生上下文上限
stop=["OloLol0"]

completion = ollama.generate(
    model=modelname,
    prompt=prompt,
    stream=stream,
    options={
        "temperature": temperature,
        "num_ctx": max_ctx,
        "num_predict": max_gen_tokens,
        "stop": stop,
        "seed": seed                         
    },
)

内容的提问来源于stack exchange,提问作者Nick Mikhailovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:54:54