如何在js中引入ai并使用

40 阅读4分钟

🚀 使用 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 后端项目结构吗?