通常,当您要求AI向您发送JSON时,它会响应任何内容,而不是JSON,或者JSON只是其中的一部分。
有一些方法可以解决此
1.要求最后返回JSON
例如,您的提示看起来像
Generate products that could be described as "Headphone", use the following structure "[{name: string, price: number}]
与JSON一起做出AI答案,并有更高的机会添加
.... Respond with an array of a flat objects in JSON
2.拆分提示和请求向API
假设您需要为您的市场解决方案生成产品。而不是要求AI如上示例中生成整个信息。最好以2个以上的步骤进行操作。
-
生成名称:
-
生成名称
Generate ${count} different real product names for a product category "${info}", respond with a JSON {names: string[]}
-
从上一个请求中为每个产品名称生成单个产品:
Generate a product description for a product that could be described as "${productName}", use the following structure "{name: string, description: string, price: number }", respond with a single product **as a flat** JSON
3.即使现在您有问题?让我们重试。
即使您特别询问并且发生了问题,但我知道唯一的解决方案是根据要求重新定位。这是我为此使用的方法。
async function createChatCompletition(prompt, retryAttempts = 2, currentAttempt = 1) {
const completion = await openai.createChatCompletion({
model: 'gpt-3.5-turbo',
messages: [{ "role": "user", "content": prompt }]
});
const output = completion.data.choices[0].message.content;
try {
return JSON.parse(output);
}
catch (err) {
if (retryAttempts > currentAttempt) {
return createChatCompletition(prompt, retryAttempts, currentAttempt + 1)
}
return {};
}
}
一些逐线说明
-
创建一个完成并等待响应
const completion = await openai.createChatCompletion
-
尝试分析
try {
return JSON.parse(output);
}
- 如果响应不是JSON,请重复
catch (err) {
if (retryAttempts > currentAttempt) {
return createChatCompletition(prompt, retryAttempts, currentAttempt + 1)
}
return {};
}
我们到了
现在,您可以使用有时会发生的AI随机响应进行战斗。使用它!
请分享您解决此问题的解决方案的评论。