不再有非结构化的数据输出;将ChatGPT的完成结果转化为结构化的JSON!

几个月前,OpenAI向公众发布了他们的API,这让许多开发者感到兴奋,他们希望能以系统化的方式利用ChatGPT的输出结果。虽然这个API的发布非常令人兴奋,但对于编程人员来说,这也是一个噩梦,因为我们通常在处理结构化数据类型。我们喜欢整数、布尔值和列表。处理非结构化字符串可能会变得难以控制,为了获得一致的结果,程序员需要面对他们最糟糕的噩梦:开发适当解析的正则表达式(Regex)。🤢
当然,适当的提示工程可以在一定程度上解决问题,但仍然不完美。例如,如果你想让ChatGPT分析电影评论的情感,判断其积极性或消极性,你可以构造一个类似下面这样的提示:
prompt = f'''请对以下电影评论进行情感分析:{MOVIE_REVIEW_TEXT}请将您的回答输出为一个单词:要么是"Positive"(积极),要么是"Negative"(消极).'''
这个提示实际上做得相当不错,但结果并不完全一致。例如,我曾经看到ChatGPT生成了以下这些关于电影情感的输出:
PositivepositivePositive.
这看起来可能不是什么大问题,但在编程世界中,它们是不相等的。虽然对于这样简单的例子,你可以通过一点点的正则表达式来解决,但除了大多数人(包括我自己)不擅长编写正则表达式之外,还有一些情况下,甚至正则表达式也无法正确解析信息。
正如你可以看出的,程序员们一直希望OpenAI能够添加支持结构化JSON输出的功能,而OpenAI通过函数调用的形式实现了这一点。函数调用就如其名,它允许ChatGPT生成能够与自定义函数进行交互的参数,从而使用结构化的数据类型。是的,不再需要繁琐的提示工程和靠运气得到正确结果的正则表达式。在这个…