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

Azure托管GPT-3.5-Turbo如何停止文本生成?

解决Azure托管GPT-3.5-Turbo生成指定长度列表时无法自动停止的问题

问题描述

我在使用Azure托管的OpenAI模型,需求是生成指定长度的句子或词汇列表。示例提示如下:

Give 10 Examples of pizza ingredients: 
1. tomatoes
2. mushrooms

text-davinci-003模型可按预期完成列表并停止,但GPT-3.5-Turbo模型会一直生成至令牌上限,即便明确告知任务完成后停止,少样本提示也无效。

尝试过的临时解决方案存在明显弊端:

  • 设置较低的max_tokens值,但因提示内容动态变化难以预估合适数值,且需额外后处理去除冗余令牌;
  • 为示例添加计数器并指定数字为停止序列,普通计数器易误触发,特殊计数器可能被模型变形导致无法停止。

是否存在像text-davinci-003那样简洁有效的停止生成方案?

可行的简洁停止方案

1. 强化提示词的终止指令

在提示词末尾添加明确的强制终止规则,同时锁定列表结束的边界。例如调整提示词为:

Give 10 Examples of pizza ingredients. Once you have listed all 10 items, stop immediately without adding any extra content:
1. tomatoes
2. mushrooms

GPT-3.5-Turbo对清晰的指令约束响应度更高,这种方式无需依赖复杂停止序列,靠语义指令限制生成行为。

2. 结合格式约束与精准停止序列

要求模型严格遵循编号列表格式,同时设置针对性的停止触发点。例如提示词:

Generate exactly 10 pizza ingredients in a numbered list. End the output right after the 10th item, do not add anything else:
1. tomatoes
2. mushrooms

同时将stop参数设置为["\n11."]——正常生成到第10项后,下一个预期的编号是11.,以此作为精准停止信号,避免单一数字的误触发。

3. 利用函数调用实现结构化输出(适用场景)

如果业务场景支持函数调用,可以定义一个接收固定长度列表的函数,让模型通过调用该函数返回结果。这种方式下模型会严格按照参数要求生成内容,完成后自动停止。例如定义函数结构:

{
  "name": "submit_ingredient_list",
  "description": "Submit a list of pizza ingredients",
  "parameters": {
    "type": "object",
    "properties": {
      "ingredients": {
        "type": "array",
        "items": {"type": "string"},
        "minItems": 10,
        "maxItems": 10
      }
    },
    "required": ["ingredients"]
  }
}

调用时指定该函数,模型会生成符合长度要求的列表并通过函数返回,不会产生冗余内容。

4. 组合式停止序列设计

使用多格式的停止序列组合,覆盖可能的列表编号形式,降低误触发概率。例如设置stop参数为["\n11.", "\n- 11", "11)", "\n11:"],覆盖常见的编号标点格式,确保生成到第10项后触发停止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:15:06