在企业中,人工智能引起了广泛关注,但要真正成为更高效和更具生产力的开发者,你必须学习如何使AI模型执行你所希望的任务。
本教程将解释如何使用OpenAI API将来自各种模型的信息合成到一个有用的响应中。为此,我们将完成以下任务:
- 请求AI模型编译并返回在威廉·莎士比亚的戏剧《奥赛罗》和《冬天的故事》中提到的动物列表。
- 将该响应数据纳入第二个提示,以便为另一个AI模型创建插图,该插图包含列表中的动物,并采用选定的图形渲染风格,例如科幻或现实主义。
所有讨论的概念和技术将在一个存储在GitHub仓库中的Node.JS项目中演示。
我们将首先简要概述如何使用OpenAI API。
使用OpenAI API
OpenAI API为开发者提供了编程级别的人工智能服务。开发者可以像终端用户与OpenAI发布的ChatGPT网站交互一样,在代码中与OpenAI API进行交互。
通过OpenAI API,开发者可以执行许多任务,例如自然语言处理、语言翻译、代码生成与完成以及图像生成。对于本文,我们将使用OpenAI API来研究一些特定数据,并根据研究结果生成图像。
图1展示了本教程中讨论的演示用例的工作流程。
图1. 本文描述的演示用例的工作流程。
使用OpenAI API的第一步是注册其网站,提供一些个人资料信息并获取一个API密钥,以允许你的代码访问API。
图2. 在OpenAI网站上创建API密钥。
OpenAI API并不是免费服务。你必须在设置过程中提供信用卡信息。根据对API的调用量和复杂性,你将被收费。然而,实验使用OpenAI API的成本是最小的。典型的实验大约需要小额投资10美元。
图3. 用户使用OpenAI API时的收费情况。
一旦你获得了API密钥并提供了支付信息,就可以开始使用OpenAI API访问的各种模型进行编程。
与AI模型的协作
如前所述,开发者使用OpenAI编写代码,利用API提供的一个或多个AI模型。例如,GPT系列模型支持语言处理,因此开发者可以使用它以自然语言格式提出查询或执行指令,例如“显示两个加两个的和。”Dall-E模型用于生成图像,而Codex模型用于执行代码补全。
开发者通过特定语言的库和SDK与OpenAI API合作。一旦在其编程环境中安装了OpenAI API库,你就可以为特定任务选择一个特定模型。图4展示了Node.JS OpenAI npm包中可用的一些模型。
图4. 在Node.js中编码OpenAI包时选择模型。
演示代码将在接下来的部分中讨论,使用了两个模型。一个是GPT-4 Turbo,我们将用它来发现《奥赛罗》和《冬天的故事》中提到的动物。另一个模型是Dall-E 3,它将生成包含列表中动物的图像。我们将以链式方式使用这两个模型。
使用模型链进行编程
图5中的代码块展示了函数generateImage(selectedStyle)的Node.js代码。该函数封装了所有逻辑,指示OpenAI模型发现莎士比亚戏剧中提到的动物列表,然后生成包含这些动物的图像。(再次强调,所有代码都在上述GitHub仓库中。)
请注意,OpenAI API中的模型调用是以链式方式进行的。前两个调用是对gpt-4-turbo模型的调用,分别在第17行获取戏剧中的动物和第27行将JSON格式的信息转换为简单的动物列表。第40行调用dall-e-3模型生成包含这些动物的图像,响应是OpenAI生态系统中引用生成图像的URL。
还要注意,模型调用使用自然语言提示,在第13、24和37行创建。OpenAI API的一个关键特性是它接受以自然语言表达的编程语句。这种新颖的软件开发方法在范式成熟时将产生重大影响。
图5. 此代码提示OpenAI模型获取动物列表,并根据这些动物生成图像。
最后,请注意,对OpenAI API特定调用的提示在一个JSON对象中声明,并作为参数传递给特定的API方法。该JSON对象的配置取决于所调用的API功能。例如,第17-21行的调用将提示声明为JSON参数的messages属性的值:
let response = await openai.chat.completions.create({ model: 'gpt-4-turbo', messages: [{"role": "user", "content": query_1}], max_tokens: 300});
而第40-45行则使用prompt属性声明提示:
const imageResponse = await openai.images.generate({ model: 'dall-e-3', prompt: imagePrompt, n: 1, size: "1024x1024"})
此外,请注意,每个API调用所使用的模型在model属性中声明。
运行代码
演示代码使用npm包readline来方便地与终端窗口中的应用进行控制台交互。以下是第一次控制台交互的示例,询问用户声明将生成的图像的图形风格。
根据编号选择图像风格:
1. 科幻 2. 动漫 3. 奇幻 4. 抽象 5. 现实主义 输入你的选择(1-5):1 你选择了科幻,正在生成图像……
接下来是对OpenAI API中GPT-4 Turbo模型的提示结果:
动物有:
根据提供的JSON对象,这里是莎士比亚戏剧《奥赛罗》和《冬天的故事》中提到的所有动物的列表:
《奥赛罗》:
- 马
- 猫
- 山羊
- 猴子
- 狼
- 熊
- 苍蝇
- 蟾蜍
《冬天的故事》:
- 羊
- 羔羊
- 熊
- 骆驼
- 鹿
- 鱼
- 卡美洛特(注:“卡美洛特”可能是一个错误,因为它通常被认为是与亚瑟王相关的城堡,而不是动物。这可能是原始数据中的一个错误。)
- 麻雀
- 云雀
- 乌鸦
- 小牛
- 公牛
- 乌鸦
- 乌鸦(注:“乌鸦”可能是一个拼写或转录错误,除非它指的是戏剧中不常见的特定上下文。更常见的是,这可能指的是猫头鹰。)
这个来自JSON对象的全面列表详细描述了这些动物的描绘,为这些莎士比亚戏剧增添了主题层次和象征意义。
以下是提示dall-e-3模型以根据所选图形风格和在《奥赛罗》和《冬天的故事》中发现的动物列表创建图像的结果:
获取生成图像的以下URL:
由OpenAI API发布的该URL是临时的,几小时后将会过期。要长期保存图像,请将其保存到本地计算机。
最后但同样重要的是,图6是根据定义的动物列表以科幻风格呈现的插图。
OpenAI API的优缺点
使用OpenAI API非常简单。访问API只需最少的设置时间和极少的支出。
然而,使用OpenAI API进行编程并不完美。目前,复杂提示的结果并不确定,这意味着相同的复杂提示在不同时间返回不同的结果。例如,提示“给我看两个加两个的和”将始终返回四,而提示“给我看莎士比亚戏剧《奥赛罗》和《冬天的故事》中提到的所有动物”则返回的结果可能会有显著不同。这是由于提示处理的机制所致。
然而,请记住,AI技术仍在不断成熟。在语音识别的早期,用户训练识别引擎以识别特定用户的声音,但如今,语音识别引擎可以将任何母语者说的音频转换为文本,而无需训练。我们可以期待人工智能技术,尤其是OpenAI API,能够达到同样的改进。
使用OpenAI API为软件开发开辟了许多新的可能性。自然语言交互的强大能力,以及每个模型提供的智能范围,使开发者能够快速创建多功能和强大的应用程序。将AI提示和模型串联在一起,增强了这些应用的能力。
OpenAI API是一个颠覆性工具,将人工智能的力量放在所有开发者的指尖。这为计算机编程开辟了一条新路径,将极大地惠及开发者及其服务的对象。
Bob Reselman是一名软件开发者、系统架构师和作家。他的专业领域涵盖软件开发技术、技术和文化。