🚀 使用 OpenAI SDK 在 Node.js 后端调用 AIGC 模型
1. 初始化 Node.js 项目
Node.js 是基于 Chrome V8 引擎的 JavaScript 运行时,常用于构建轻量级、高性能的后端服务。
# 初始化项目(生成 package.json)
npm init -y
# 安装 OpenAI SDK(官方推荐)
npm i openai@4.71.0
✅ 优势:Node.js 轻量、异步非阻塞 I/O,适合中小型项目和快速原型开发,在现代 Web 开发中占据重要地位。
2. OpenAI 的 LLM 模型接口
OpenAI 提供了多种大模型(LLM),目前主要有两类 API 接口:
| 接口类型 | 用途 | 推荐模型 |
|---|---|---|
completions | 传统文本补全(单轮生成) | gpt-3.5-turbo-instruct |
chat | 多轮对话(推荐) | gpt-3.5-turbo, gpt-4, gpt-4o |
⚠️ 注意:
/completions接口适用于简单文本生成任务,但官方已推荐优先使用/chat/completions接口,因其支持更复杂的对话结构和系统提示。
3. 使用 gpt-3.5-turbo-instruct 进行文本生成(Completions)
安装 OpenAI SDK
npm i openai@4.71.0
示例代码:调用 Completions API
import OpenAI from 'openai';//引入openai
import dotenv from 'dotenv';//引入dotenv可以定义全局变量用于隐藏key
dotenv.config();// .env文件中的配置添加到当前的环境变量
// llm client
const client = new OpenAI({
// 电力,算力,凭据
apiKey: process.env.OPENAI_API_KEY,
// baseURL:'https://api.openai.com/v1',//openai网站国内无法访问,访问代理网站
baseURL:'https://api.302.ai/v1'
});
// 异步操作
// AIGC
const response = await client.completions.create({
// openai 模型家族
// 文本模型
// 价格平民
model:'gpt-3.5-turbo-instruct',
// 提示词是和llm交流的方式
// ES6 字符串模板``多行文本 详细且清晰的描述llm需要完成的任务
max_tokens:256,//最大的算力消耗
prompt:`
假如你是林夕这样的爱情歌曲作词大家,
请你写一首100字,为汪峰,写一首他爱上森林北的歌曲。
森林北是一位美丽,勇敢,会骑马的女孩儿`
})
// llm 一次性给我们返回多条内容
const result = response.choices[0].text; //获得response的choices数组的下标为0的text数据
console.log('歌词'+ result);
🔍 本质:SDK 封装了向
https://api.openai.com/v1/completions发送 POST 请求的逻辑。
4. 返回结构解析
API 响应示例:
PS C:\Users\MR\Desktop\workspace\lesson_jp\ai\opanai\song> node main.mjs//运行main.mjs文件
[dotenv@17.2.3] injecting env (1) from .env -- tip: ⚙️ suppress all logs with { quiet: true }
歌词,她的眼眸像是清晨的草原,散发着迷人的光芒。
《爱在森林北》
内心燃烧着熊熊的火 却找不到点燃的源头
看世界正在沸腾 我却被柔情所吞噬
在茫茫人海寻觅 终于发现了那个你
像五彩的云朵 安静又不羁的美丽
是否我是太执着 全心全意地爱了你
我愿意跋涉山川 去找到那片树林
为你点燃篝火 相爱在森林北
你是我心中的英雄 我愿是你肩膀的依靠
风吹过 水流淌 我
PS C:\Users\MR\Desktop\workspace\lesson_jp\ai\opanai\song>
提取生成文本:
const generatedText = response.choices[0].text;
如果不提取(展示ai完整返回值):
{
id: 'cmpl-CTr4r6gAW2jxh2gdbpxnwvGrtrW2b',
object: 'text_completion',
created: 1761231577,
model: 'gpt-3.5-turbo-instruct',
choices: [
{
text: '\n' +
'\n' +
'我在森林北的裂缝\n' +
'远远望见你\n' +
'你骑着马儿\n' +
'风情万种\n' +
'美丽的外表下是坚定的内心\n' +
'宛如一只不羁的狼\n' +
'在茫茫的森林里独自闯荡\n' +
'我为你心动\n' +
'为你迷醉\n' +
'希望成为你的守护者\n' +
'走过千山万水\n' +
'只为抵达你的身边\n' +
'无论是风雨磨砺\n' +
'抑或前路坎坷\n' +
'我终是发现\n' +
'你就是我追寻的方向\n' +
'在森林北的裂缝\n' +
'我发现了真爱\n' +
'它就是你\n' +
'美丽的森林北女孩儿\n' +
'我的汪峰\n' +
'我们的故事\n' +
'将永远在这片森林中继续\n' +
'风',
index: 0,
logprobs: null,
finish_reason: 'length'
}
],
usage: { prompt_tokens: 95, completion_tokens: 255, total_tokens: 350 }
}
5. 推荐升级到 Chat 模型(chat/completions)
虽然 completions 仍可用,但 OpenAI 更推荐使用 chat 接口,例如:
const response = await openai.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'system', content: '你是一个助手' },
{ role: 'user', content: '请写一段关于秋天的描述' }
],
max_tokens: 150
});
const text = response.choices[0].message.content;
✅ 优势:支持多轮对话、角色设定、更自然的交互。
6. 环境变量安全配置
不要将 apiKey 硬编码在代码中,建议使用 .env 文件,在文件中定义隐藏变量:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
安装 dotenv:
npm i dotenv
在代码顶部加载:
import OpenAI from 'openai';
总结
| 项目 | 说明 |
|---|---|
| 技术栈 | Node.js + OpenAI SDK |
| 核心功能 | 调用 LLM 进行文本生成 |
| 主要模型 | gpt-3.5-turbo-instruct(补全),gpt-3.5-turbo(对话) |
| 接口类型 | completions.create() 或 chat.completions.create() |
| 安全建议 | 使用环境变量管理 API Key |
如果你想把这个项目进一步扩展,可以考虑:
- 添加 Express.js 构建 RESTful API
- 增加中间件处理错误和日志
- 集成前端进行交互
- 使用缓存(如 Redis)优化重复请求
需要我帮你搭建一个完整的 Express + OpenAI 后端项目结构吗?