前言
GPT-4 (GPT4o)
GPT-4是OpenAI推出的第四代生成式预训练转换器(Generative Pre-trained Transformer)。相比前几代模型,GPT-4在多个方面都有显著提升,包括但不限于语言理解、生成质量、对话连贯性和多模态能力等。
- 多模态:在信息处理或交流过程中,同时使用两种或更多种不同的模式或媒介来传递和理解信息。(例如:文本生成图像、传入图像生成文字解释等)
在Node.js中高效地集成OpenAI API
安装Open AI:
在我们日常编程中,如果需要装配 OpenAI ,需要以下几个步骤:
npm init -y
:快速初始化一个新的 Node.js 项目的命令,并且自动生成一个package.json
文件,其包含了项目的基本配置信息。npm i openai
:安装 OpenAI 官方 Node.js SDK 的命令,其可以使我们轻松调用OpenAI中各种API。
在漫长的等待后我们的项目中就安装好了 OpenAI ,但是我们会发现,在安装这一步骤我们需要花费大量时间,这点会严重拖慢开发节奏,并且如果我们需要开发多个项目,需要一个个分别安装 OpenAI ,不仅仅浪费时间,而且占用内存,那能不能优化这一点呢?当然!
优化:
由于npm是国外维护的,我们国内调用很慢,所以我们可以使用阿里在国内的npm镜像以便于我们提速。
npm config set registry https://registry.npmmirror.com
:输入此指令后我们就可以使用国内的镜像了。
而为了解决多次安装 OpenAI 浪费时间和占用内存这一问题,我们有几个解决方案:
npm i -g openai
:其中-g
为全局安装,不建议使用,因为全局安装的包可能会影响其他项目,污染全局。npm i -g pnpm
:用于全局安装pnpm
包管理器的命令,pnpm
是一个快速、节省磁盘空间的 npm 替代品,它通过使用符号链接来避免重复安装相同的包,从而提高性能和减少磁盘占用,推荐使用此方法。
Node.js项目中最佳实践:从初始化到部署
现在我们已经完成了OpenAI的安装,那么接下来我们就开发一个 OpenAI 描述图片内容的功能。
如何访问 API 密钥:
由于我们代码会经常提交到 github 等平台上,为保护我们 key 的资产(考虑资产的安全风险),所以我们会通过调用其他文档来访问 API 密钥,而访问的这个文档不会上传到平台上
- 创建一个名为
.env
的文档,在其内部添加环境变量,例如:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2. 安装 dotenv
包,可以同通过npm进行安装:
npm install dotenv
- 加载
.env
文件,通常是在入口文件(如index.js
或main.js
)的顶部加载:
import dotenv from "dotenv";
// 加载 .env 文件中的环境变量
dotenv.config();
- 使用环境变量,通过
process.env
对象访问这些环境变量:
const apiKey = process.env.OPENAI_API_KEY;
console.log(apiKey); // 调试用
这样的话我们就完成了创建和使用 .env
文件来保护敏感信息(如 API 密钥)
1. 导入必要的模块:
首先,我们需要导入 dotenv
和 OpenAI
模块,并加载环境变量。
import dotenv from "dotenv";
import OpenAI from "openai";
// 加载 .env 文件中的环境变量
dotenv.config();
// 打印 API 密钥(调试用)
// console.log(process.env.OPENAI_API_KEY, "////");
dotenv
模块用于从.env
文件中加载环境变量。OpenAI
模块是 OpenAI 的官方 SDK,用于与 OpenAI API 进行交互。dotenv.config()
方法加载.env
文件中的环境变量到process.env
对象中。
2.实例化 OpenAI 客户端:
实例化 OpenAI 客户端并配置 API 密钥和基本 URL。
// 实例化 OpenAI 客户端
const client = new OpenAI({
// 访问 OpenAI 的 API 密钥
apiKey: process.env.OPENAI_API_KEY,
// OpenAI API 的基本 URL
baseURL: "https://api.openai.com/v1" // 注意:这里应该是正确的 OpenAI API 地址
});
new OpenAI({ ... })
创建一个 OpenAI 客户端实例。apiKey
参数设置为从环境变量中获取的 API 密钥。baseURL
参数设置为 OpenAI API 的基本 URL。
3.定义主函数:
// 主函数,执行的入口,单点入口
const main = async () => {
try {
// 调用 OpenAI API 获取响应
const response = await client.chat.completions.create({ // 创建一个openai的创建一个通过聊天完成请求的方法
model: "gpt-4o",
// 对话列表(模拟聊天内容)
messages: [
{
role: "user", // 角色
content: [ // 内容
{
type: "text",
text: "请描述一下图片的内容"
},
{
type: "image_url",
image_url: {
url: "/* 图片地址 */"
}
}
]
}
],
max_tokens: 300
});
// 输出响应内容
console.log(response.choices[0].message.content);
} catch (err) {
// 捕获并输出错误信息
console.log(err);
}
};
const main = async () => {}
此处使用了 es6 的箭头函数,比传统函数更简洁,它没有自己的this
、arguments
、super
或new.target
绑定,即进行了const main
的申明,对main
赋值为一个函数,相当于赋值main = () => {}
。
// 传统函数
function main(){
console.log("ai 全栈开始了")
}
//箭头函数
const main = () => {
console.log("ai 全栈开始了")
}
- es7功能的
async
函数修饰符 +await
他们为一对(await
只能在async
函数中使用)即异步函数。await
等待 --->await
会阻塞当前async
函数的执行,直到等待的问题被解决或拒绝。 const response = await client.chat.completions.create
我们可以拆分理解,client
为先前定义的 OpenAI 客户端实例,chat
为调用聊天的方式,completions
为调用完成问答的方式,create
为创建,即可以翻译为创建一个openai的创建一个通过聊天完成请求的方法try { ... } catch (err) { ... }
用于捕获和处理可能发生的错误,很多新手容易遗忘这一点。
4.调用主函数:
main();
完整代码展示:
import dotenv from "dotenv";
import OpenAI from "openai";
dotenv.config();
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: "https://api.openai.com/v1"
});
const main = async () => {
try {
const response = await client.chat.completions.create({
model: "gpt-4",
messages: [
{
role: "user",
content: [
{
type: "text",
text: "请描述一下图片的内容"
},
{
type: "image_url",
image_url: {
url: "图片地址"
}
}
]
}
],
max_tokens: 300
});
console.log(response.choices[0].message.content);
} catch (err) {
console.log(err);
}
};
main();
小结:
本文详细介绍了如何在 Node.js 项目中高效地集成和使用 OpenAI API,涵盖从初始化项目到部署的整个流程。主要内容包括:安装 OpenAI SDK,保护敏感信息,实例化 OpenAI 客户端,调用 OpenAI API。
通过以上步骤,你可以高效地在 Node.js 项目中集成和使用 OpenAI API,确保代码的安全性和可维护性。
---欢迎各位点赞、收藏、关注,如果觉得有收获或者需要改进的地方,希望评论在下方,不定期更新