上周五,我参加了在阿姆斯特丹举行的 AI 黑客马拉松,在那里我和我的团队构建了一个应用程序,可以扫描来自政府的困难信件,并帮助为低文化水平的人简化它们(顺便说一句,它赢得了一个奖项 :))。您可以查看此推文中的视频音高。
我们制作的应用程序与 OpenAI API 接口,以发送带有我们设计提示的扫描信件,进而接收由 text-DaVinci-03 模型生成的输出。我们的提示设计为模型输出的文本为 JSON 格式并且可以轻松解析。这使我们能够轻松地将数据放在应用程序中的正确位置。
在这篇文章中,我将提供构建此应用程序的一些技巧和发现,以及如何提示 text-DaVinci-03 等 GPT3 模型返回 JSON 格式的文本。我们从 Jordi Bruin 那里得到了及时的工程帮助,所以一定要在Twitter上查看他的项目。
什么是 GPT3 和 JSON?GPT3 是一种强大的语言模型,可以根据给定的提示生成文本。它能够理解自然语言,并能生成连贯且与给定提示相关的文本。GPT3 可用于为各种应用程序生成文本,例如总结对话、生成故事和生成代码。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它是一种基于文本的格式,用于存储和交换数据。JSON 易于读写,通常用于在服务器和 Web 应用程序之间交换数据。
应用程序可以通过向 API 发出 HTTP 请求来与 API 交互。然后应用程序可以解析来自 API 的响应并在应用程序中使用数据。在这种情况下,应用程序可以向 OpenAI API 发出 HTTP 请求,以根据请求返回的给定提示生成文本。
让 GPT3 生成 JSON为 GPT3 编写提示时,重要的是为模型提供足够的上下文以生成有效响应。提示应首先包含您希望模型处理的文本。接下来,您要给出有关处理输入文本的任何说明,例如将内容总结或重写为一首诗。最后,添加输出应采用 JSON 格式文本结构的要求。GPT3 非常擅长推断需要在必填字段中填写哪些信息。
JSON 输出需求的写法有两种:给出一个示例结构,或者通过提及字段和子字段的键来描述一个结构。
示范性结构
我们有一封泰山从丛林写给简的信。我们要处理这封信,并将相关信息放入 JSON 中。您可以在下面看到完整的提示,我们首先看到该字母,然后是处理说明和一个示例 JSON 结构。
考虑以下消息:--------亲爱的简,当我在丛林中荡秋千时,我在想你。你好,Tarzan --------将此消息放入以下 JSON 结构中{ "sender": "..", "message": "..", "list_of_words": [ "..", ". 。” ] “地址”:“..”, “字数”:.. }
此提示的输出是:
{ "sender" : "Tarzan" , "message" : "亲爱的简,当我在丛林中荡秋千时,我在想你。你好,泰山" , "list_of_words" : [ "Dear" , "Jane" , "I " , "am" , "thinking" , "about" , "you" , "when" , "I" , "am" , "swinging" , "through" , "the" , “丛林” , “问候” , “泰山” , ], “地址” : “简” , “字数” : 16 }
所述结构
使用描述的结构,给出的信息甚至更少,请考虑以下提示,现在使用描述的 JSON 结构:
考虑以下消息:--------亲爱的简,当我在丛林中荡秋千时,我在想你。你好,Tarzan --------将此消息放入一个 JSON 中,键为“sender”、“message”、“list_of_words”、“addressed”和“amount_of_words”:
此提示的输出是:
{ "sender" : "Tarzan" , "message" : "亲爱的简,当我在丛林中荡秋千时,我在想你。你好,泰山" , "list_of_words" : [ "Dear" , "Jane" , "I " , "am" , "thinking" , "about" , "you" , "when" , "I" , "am" , "swinging" , "through" , "the" , “丛林” , “问候” , “泰山” ] , “地址” : “简” , “字数” : 16 }
尽管在这两种情况下我们都没有描述什么list_of_words和amount_of_words应该包含什么,但键的描述性足以让 GPT3 推断它应该从字母中创建一个单词数组并在将它们放入 JSON 之前对这些单词进行计数,这太神奇了!list_of_words另一件有趣的事情是,当我们有一个示例性结构时,我们根据我们的示例在新行上有元素。使用所描述的结构,list_of_words包含在一行中!
另一个例子:总结聊天对话。假设我们想要总结 Slack 或其他群聊中的对话。我们可以为 GPT3 编写一个提示,其中包括所需的输出格式 (JSON) 和对话的上下文。例如,提示可以是:
考虑以下聊天记录:-------- 14:09 PM - 约翰:“让我们将文本转语音添加到我们的阅读应用程序中吧!我认为这将使我们的客户受益匪浅。” 14:09 PM - Jane:“让我们同时加入男声和女声。” 下午 14:10 - 艾哈迈德:“我会和开发团队谈谈,看看谁会接受它。” 14:10 PM - 约翰:“谢谢大家!” 下午 14:15 - 艾哈迈德:“鲍勃会接受它,他以前有文本到语音实现的经验”下午 14:17 - 简:“令人兴奋!当第一个版本实现时给我发送一个演示。” --------为每个人总结他们在聊天记录中所说的话。将此数据放入带有“name”、“summary”键的 JSON 列表中
此提示的输出是:
[ { "name" : "John" , "summary" : "建议将文本转语音添加到阅读应用程序并感谢该小组。" , "amount_of_messages" : 2 } , { "name" : "Jane" , "summary" : "建议包括男声和女声。" , "amount_of_messages" : 2 } , { "name" : "Ahmed" , "summary" : " : 2 } ]
如您所见,它并不完美。在Jane的总结中,并没有提到她在第一个版本实现的时候要求demo。需要一些额外的及时工程和测试才能产生更稳定的响应。
省略字段不幸的是,该模型有时做得不好的一件事是要求它在没有数据时将字段留空。例如,当一段文本可能包含也可能不包含位置时。对于以下提示,模型正确地将字段留空,但以防万一我们添加了一个布尔标志,显示字段“City”是否存在。如果模型有时无法将字段留空,这是一个很好的回退。
考虑以下句子:------ “我爱巴黎,它有最好的羊角面包。” “东京的夜晚很美。” “山是我平静的地方。” ------将句子放入 JSON 列表中,键为“sentence”、“has_city”和“city”。如果句子不包含城市,请将该字段留空:
输出:
[ { "sentence" : "我爱巴黎,它有最好的羊角面包。" , "has_city" : true , "city" : "Paris" } , { "sentence" : "东京的夜晚很美。" , "has_city" : true , "city" : "Tokyo" } , { "sentence" : "山是我平静的地方。" , “has_city” : 假, “城市” : 结论
编写 GPT3 提示以输出到 JSON 是一种从给定提示接收格式化和结构化数据的强大方法。通过在提示中提供足够的上下文,GPT3 可以生成可以在应用程序中轻松使用的有效 JSON 对象。请注意,您必须始终检查是否返回了有效的 JSON 并非常彻底地测试提示,因为无效的 JSON 会导致解析错误。
作者:Erwin Russel
出处:https://blog.devgenius.io/how-to-get-gpt3-to-output-in-json-4e14c46aa5b6
相关文章
猜你喜欢