如何配置OpenAI createChatCompletion返回指定结构的JSON输出?
配置OpenAI API生成指定格式的Material Design调色板JSON
一、通过对话示例固定输出格式
要让模型严格返回你指定的JSON结构,最直接的方式是在对话上下文里加入2-3组用户请求-助手响应的示例,明确格式要求。你需要在现有messages数组中,在system提示之后、当前用户prompt之前插入这些示例对话。
示例对话可参考以下结构:
// 示例1:浪漫风格品牌 {"role": "user", "content": "品牌名:浪漫花店"}, {"role": "assistant", "content": `{ "primary": "#7B2CBF", "onPrimary": "#FFFFFF", "secondary": "#F093FB", "onSecondary": "#000000", "surface": "#FFFFFF", "onSurface": "#1D1B20", "background": "#FDF4FF", "onBackground": "#1D1B20" }`}, // 示例2:科技风格氛围 {"role": "user", "content": "氛围:科技感十足"}, {"role": "assistant", "content": `{ "primary": "#0693E3", "onPrimary": "#FFFFFF", "secondary": "#74DEFF", "onSecondary": "#000000", "surface": "#FFFFFF", "onSurface": "#1D1B20", "background": "#E8F7FF", "onBackground": "#1D1B20" }`}
这些示例会让模型清晰理解需要返回的字段、格式和配色逻辑,确保后续生成的结果严格匹配要求。
二、seed参数的实现方法
seed参数是gpt-3.5-turbo-1106及更高版本模型支持的参数,作用是固定生成的随机性基准——相同的prompt、seed值和其他参数设置下,模型会返回一致的结果。
使用时只需在createChatCompletion的配置对象中添加seed字段,赋值为任意整数(比如42、123等):
seed: 42
注意:如果需要完全一致的输出,建议将temperature调低(比如设为0);保留temperature:0.9则能在保证风格多样性的同时,让相同seed下的结果保持逻辑一致。
修改后的完整代码
const completion = await openai.createChatCompletion({ messages: [ {"role": "system", "content": "你会收到品牌名称或氛围描述,任务是生成符合指定结构的Material Design网站调色板JSON,必须严格遵循给定的字段和格式,不要添加任何额外说明文字。"}, // 示例1:浪漫风格品牌 {"role": "user", "content": "品牌名:浪漫花店"}, {"role": "assistant", "content": `{ "primary": "#7B2CBF", "onPrimary": "#FFFFFF", "secondary": "#F093FB", "onSecondary": "#000000", "surface": "#FFFFFF", "onSurface": "#1D1B20", "background": "#FDF4FF", "onBackground": "#1D1B20" }`}, // 示例2:科技风格氛围 {"role": "user", "content": "氛围:科技感十足"}, {"role": "assistant", "content": `{ "primary": "#0693E3", "onPrimary": "#FFFFFF", "secondary": "#74DEFF", "onSecondary": "#000000", "surface": "#FFFFFF", "onSurface": "#1D1B20", "background": "#E8F7FF", "onBackground": "#1D1B20" }`}, // 当前用户请求 {"role": "user", "content": prompt}, ], model: "gpt-3.5-turbo-1106", temperature: 0.9, response_format: { type: "json_object" }, seed: 42 // 添加seed参数固定随机性基准 });
内容的提问来源于stack exchange,提问作者Sharan
相关产品推荐
相关产品推荐

