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

Python调用OpenAI API:如何确保指定格式输出的一致性?

提升GPT-3.5-turbo格式输出一致性的实用技巧

1. 强化提示词的精确约束

  • 把格式规则前置并明确加粗,用无歧义的语言定义每个标记的固定格式,示例如下:

    你必须严格按照以下格式生成10篇新闻,每篇结构不可修改、不可遗漏:
    --Headline (n) Begin--
    [标题内容]
    --Headline (n) End--
    --Subheadline (n) Begin--
    [副标题内容]
    --Subheadline (n) End--
    --Body (n) Begin--
    [正文内容]
    --Body (n) End--
    其中n为1到10的连续整数,编号必须与新闻顺序严格对应,任何格式偏差都会导致内容无效。

  • 在提示词末尾补充示例,直接给出1-2篇完全符合要求的新闻模板,让模型明确预期输出样式。

2. 调整API参数降低随机性

  • 设置temperature为0.1-0.3:大幅降低温度值,减少模型的发散性输出,让结果更贴合预设规则。
  • 启用top_p为0.2-0.4:限制模型仅从概率最高的候选内容中选择,进一步提升输出的确定性。

3. 改用结构化输出替代自定义标记

  • 要求模型输出JSON格式,将每篇新闻的标题、副标题、正文作为JSON对象的字段,编号作为属性,示例要求:

    请将10篇新闻以标准JSON格式输出,结构如下:
    {
    "news_list": [
    {
    "id": 1,
    "headline": "标题文本",
    "subheadline": "副标题文本",
    "body": "正文文本"
    },
    ...
    ]
    }
    这种方式可通过Python的json.loads()直接解析,即使模型有小偏差,也能快速修复,比自定义标记稳定性高得多。

4. 新增输出校验与自动修复逻辑

  • 在Python脚本中添加格式校验函数,用正则匹配标记并检查完整性:
    import re
    
    def check_output_format(output):
        # 匹配所有标记
        all_markers = re.findall(r'--(Headline|Subheadline|Body) (\d+) (Begin|End)--', output)
        # 检查编号连续性
        valid_ids = set(int(m[1]) for m in all_markers)
        for n in range(1, 11):
            if n not in valid_ids:
                return False, f"缺失编号{n}的新闻标记"
            # 检查单篇新闻的三类标记是否完整
            marker_types = [m[0] for m in all_markers if int(m[1]) == n]
            if not ("Headline" in marker_types and "Subheadline" in marker_types and "Body" in marker_types):
                return False, f"编号{n}的标记不完整"
        return True, "格式合规"
    
  • 校验失败时,将错误信息和原始输出作为新提示词传入API,要求模型修正格式后重新输出。

5. 采用分批生成策略

  • 不要一次性生成10篇新闻,改为每次生成2-3篇,每批调用都传递完整的格式规则和示例。缩小生成范围后,模型的注意力更集中,能有效避免编号混乱、标记缺失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:47:19