DALL-E 是 OpenAI 开发的一种生成式预训练转换器 (GPT) 模型,可以根据文本描述生成图像。它在文本和图像数据集上进行训练,使其能够理解两者之间的关系并生成与给定文本描述相匹配的图像。该 API 可供开发人员使用,并且可以与各种编程语言(如 JavaScript、Python 等)集成。在本教程中,您将学习如何将 DALL-E 与 Node.js 结合使用。
为了在 Node.js 中使用 DALL-E,我们需要先准备一个项目。如何清除计算机上的 DNS 缓存因此,让我们从创建一个新的空项目文件夹开始:
$ mkdir dalle-nodejs
并更改为新创建的项目文件夹:
$ cd dalle-nodejs
让我们使用以下命令创建一个 package.json 文件:
$ npm init -y
然后我们准备安装 openai npm 包:
$ npm install openai
OpenAI Node.js 库提供了从 Node.js 应用程序对 OpenAI API 的便捷访问。在接下来的步骤中,我们将使用这个库来实现我们的 Node.js 示例应用程序。
接下来我们要安装 express、body-parser 和 cors 包。
npm install express body-parser cors
此外,我们确实需要安装 dotenv 包:
$ npm install dotenv --save
要开始实施,请在项目文件夹中创建一个名为 index.js 的新文件和一个新文件 .env:
$ touch index.js .env
在文本编辑器中打开文件 .env 并插入以下环境变量,该变量保存来自您的 OpenAI 帐户的 API 密钥:
OPENAI_API_KEY="INSERT YOUR OPENAI API KEY HERE"
获取 OpenAI API 密钥
要获取 OpenAI API 的 API 密钥,您需要在 OpenAI 网站 (https://openai.com/) 上注册一个免费的 OpenAI 帐户:
![](https://img-blog.csdnimg.cn/img_convert/7f0d91f88157469e861abdda19471b10.png)
要注册一个帐户,请单击主页右上角的“注册”按钮,然后按照提示创建一个新帐户。创建帐户后,您可以通过访问帐户设置的“API”部分来获取 API 密钥。
在“API”部分,您会找到一个标有“生成 API 密钥”的按钮。单击此按钮可生成一个新的 API 密钥,然后您可以使用该密钥从您的 Node.js 应用程序向 OpenAI API 发出请求。请务必妥善保管您的 API 密钥,不要与其他任何人共享。
![](https://img-blog.csdnimg.cn/img_convert/907279608c79426786784d523fbde34c.png)
实施 Node.js 应用程序
现在打开 index.js 并开始在文件顶部包含以下两个 require 语句:
const { Configuration, OpenAIApi } = require("openai");
require('dotenv').config()
在下面添加以下三行代码:
const express = require("express");
const cors = require("cors");
const bodyParser = require("body-parser");
此代码导入三个模块:express、cors 和 body-parser。
express是一个流行的 Node.js 网络框架,可以轻松路由和处理 HTTP 请求。
cors是一种中间件,可以通过各种选项启用跨源资源共享 (CORS)。
body-parser是解析 HTTP 请求正文的中间件,可以更轻松地从请求中提取数据。
我们将在下面使用所有三个包来设置 Node.js / Express 服务器。
接下来将以下代码添加到 index.js 中:
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
此代码使用 API 密钥初始化 OpenAI API。
第一行创建 Configuration 类的一个新实例,它接收一个包含 API 密钥的对象。API 密钥取自 process.env.OPENAI_API_KEY,它使我们能够访问存储在 .env 文件中的 API 密钥。
第二行创建 OpenAIApi 类的一个新实例,它接受在第一行中创建的配置对象。这将创建一个 OpenAI API 客户端实例,可用于向 OpenAI 的 API 服务发出 API 请求。
接下来让我们通过包含以下代码行来创建和配置 Express 服务器实例:
// Set up the server
const app = express();
app.use(bodyParser.json());
app.use(cors());
此代码设置一个 Express.js 服务器并将其配置为使用 body-parser 和 cors 中间件。
const app = express()创建 Express.js 应用程序的实例并将其分配给常量变量 app。
app.use(bodyParser.json())` 用于配置 body-parser 中间件以解析请求正文中发送的 JSON 数据。这允许服务器将请求正文中的 JSON 数据作为请求对象中的对象进行访问。
app.use(cors())用于配置cors中间件。该中间件允许跨源资源共享,这意味着可以从与其托管的域不同的域访问服务器。
让我们继续设置端点 ( /image),它将用于从文本描述生成图像:
// Set up the DALL-E endpoint
app.post("/image", async (req, res) => {
// Get the prompt from the request
const { prompt } = req.body;
// Generate image from prompt
const response = await openai.createImage({
prompt: prompt,
n: 1,
size: "1024x1024",
});
// Send back image url
res.send(response.data.data[0].url);
});
此代码为 DALL-E 图像生成服务设置端点。
app.post("/image", async (req, res) => {为路径 /image 的 POST 请求设置路由。它是一个异步函数,将请求和响应对象作为参数。
const { prompt } = req.body;从请求主体中提取提示变量,预计为 JSON 格式。
const response = await openai.createImage({用于使用 OpenAI API 从提示生成图像。createImage 函数将一个对象作为参数,参数如下:
提示:用于生成图像的文本提示。
n:要生成的图像数。
size:生成图片的大小。
res.send(response.data.data[0].url);用于将生成的图像的 URL 作为响应发回。
最后我们需要激活服务器来监听端口 8080:
// Start the server
const port = 8080;
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
竞争源代码
最后,让我们看一下 index.js 中现在应该可用的完整源代码:
const { Configuration, OpenAIApi } = require("openai");
require("dotenv").config();
const express = require("express");
const cors = require("cors");
const bodyParser = require("body-parser");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
// Set up the server
const app = express();
app.use(bodyParser.json());
app.use(cors());
// Set up the DALL-E endpoint
app.post("/image", async (req, res) => {
// Get the prompt from the request
const { prompt } = req.body;
// Generate image from prompt
const response = await openai.createImage({
prompt: prompt,
n: 1,
size: "1024x1024",
});
// Send back image url
res.send(response.data.data[0].url);
});
// Start the server
const port = 8080;
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
测试 Node.js 应用程序
现在是时候测试我们的应用程序了。因此,我们需要使用以下命令启动 Node.js 应用程序:
$ node index.js
然后您应该看到一条消息信息,表明服务器现在正在端口 8080 上运行。
![](https://img-blog.csdnimg.cn/img_convert/1946268f5f604258999c13f5f7c02357.png)
让我们直接通过命令行使用 curl 命令向 /image 端点发送 HTTP POST 请求:
$ curl -X POST -H "Content-Type: application/json" -d '{"prompt":"A moose in the snow"}' http://localhost:8080/image
POST 请求的正文格式为 JSON 并包含提示属性。分配给此属性的文本值包含我们希望由 DALL-E 生成的图像的描述。
如果您执行此命令,几秒钟后您将在命令行上收到一个指向生成的图像的 URL。
![](https://img-blog.csdnimg.cn/img_convert/e4e1f6ea8e964358bb99f8dd91fa1064.png)
将此 URL 字符串(需要删除 URL 字符串末尾的 % 符号)复制到浏览器中。应加载并显示图像文件:
![](https://img-blog.csdnimg.cn/img_convert/b754f905e3514f949fc710202c6790d8.png)
结论
DALL-E 是一个强大的 AI,用于从文本描述生成图像。DALL-E 提供了一个 API,可以在您自己的应用程序中轻松使用。在本文中,您了解了如何轻松地将 DALL-E 的 API 集成到您的 Node.js 应用程序中。