🚀 快速集成 OpenAI API,让 Node.js 项目瞬间升级!🌟

1,049 阅读5分钟

前言

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 密钥,而访问的这个文档不会上传到平台上

  1. 创建一个名为.env的文档,在其内部添加环境变量,例如:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2. 安装 dotenv包,可以同通过npm进行安装:

npm install dotenv
  1. 加载.env文件,通常是在入口文件(如 index.jsmain.js)的顶部加载:
import dotenv from "dotenv"; 

// 加载 .env 文件中的环境变量 
dotenv.config();
  1. 使用环境变量,通过 process.env 对象访问这些环境变量:
const apiKey = process.env.OPENAI_API_KEY; 
console.log(apiKey); // 调试用

这样的话我们就完成了创建和使用 .env 文件来保护敏感信息(如 API 密钥)

1. 导入必要的模块:

首先,我们需要导入 dotenvOpenAI 模块,并加载环境变量。

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 的箭头函数,比传统函数更简洁,它没有自己的 thisargumentssupernew.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,确保代码的安全性和可维护性。

---欢迎各位点赞、收藏、关注,如果觉得有收获或者需要改进的地方,希望评论在下方,不定期更新

0bae-hcffhsw0416753.gif