如何要求AI以正确的方式返回JSON
#javascript #ai #node #json

通常,当您要求AI向您发送JSON时,它会响应任何内容,而不是JSON,或者JSON只是其中的一部分。

North Carolina GIF by GIPHY News

有一些方法可以解决此

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个以上的步骤进行操作。

  1. 生成名称:

  2. 生成名称Generate ${count} different real product names for a product category "${info}", respond with a JSON {names: string[]}

  3. 从上一个请求中为每个产品名称生成单个产品: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 {};
  }
}

一些逐线说明

  1. 创建一个完成并等待响应

    const completion = await openai.createChatCompletion

  2. 尝试分析

  try {
    return JSON.parse(output);
  }
  1. 如果响应不是JSON,请重复
catch (err) {
    if (retryAttempts > currentAttempt) {
      return createChatCompletition(prompt, retryAttempts, currentAttempt + 1)
    }

    return {};
  }

我们到了

现在,您可以使用有时会发生的AI随机响应进行战斗。使用它!

请分享您解决此问题的解决方案的评论。

The Walking Dead Easy Peasy GIF

Twitter上关注我
Linkedin上连接