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
相关产品推荐
相关产品推荐

