月鼠小说免费阅读
65.7MB · 2025-10-27
随着人工智能生成内容(AIGC)技术的迅猛发展,大语言模型(LLM)已成为开发者手中的“魔法笔”。而 OpenAI 作为该领域的引领者,其 GPT 系列模型已成为事实上的行业标准。本文将带你从零开始,使用 Node.js 和 OpenAI SDK 构建一个歌词生成器,并深入解析背后的技术原理。
OpenAI 自推出 GPT-3 以来,迅速定义了现代大语言模型的能力边界。其模型不仅在自然语言理解与生成方面表现出色,还通过简洁、稳定的 API 接口,让开发者能够轻松集成 AI 能力到各类应用中。我们来先了解一下这几个名词缩写
那么,到底怎么实现人工智能生成内容(AIGC)技术呢?
目前,OpenAI 提供了两种主要的文本生成接口:
completions 接口:适用于传统的文本补全任务,输入一个提示(prompt),模型返回补全内容。chat 接口:基于对话的交互模式,支持多轮对话和系统角色设定,更适合聊天机器人等场景。本文将使用 completions 接口来实现一个创意歌词生成器。
Node.js 以其轻量、高效和基于 JavaScript 的特性,成为中小型项目和快速原型开发的首选。我们首先初始化一个项目:
npm init -y
该命令会生成 package.json 文件,用于描述项目元信息和依赖。
接下来,安装 OpenAI SDK(本文使用 v4.71.0):
//openai:官方 SDK,封装了与 OpenAI API 的交互
//dotenv:用于加载 .env 环境变量,保护敏感信息如 API Key。
npm install [email protected] dotenv
该命令运行后项目内会出现一个文件夹node_modules,如图
项目结构如下:
song/
├── main.mjs # 入口文件
├── .env # 环境变量配置
├── package.json
└── node_modules/ # 依赖模块
我们创建 main.mjs 作为主入口文件,代码如下:
import OpenAI from 'openai';
import dotenv from 'dotenv';
dotenv.config();
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.302.ai/v1'
});
const response = await client.completions.create({
model: 'gpt-3.5-turbo-instruct',
max_tokens: 256,
prompt: `
假如你是林夕这样的爱情歌曲作词大家,
请你写一首100字,为汪峰,写一首他爱上森林北的歌曲。
森林北是一位美丽,勇敢,会骑马的女孩儿
`
});
const result = response.choices[0].text;
console.log('歌词是:' + result);
import OpenAI from 'openai';
作用:从 openai 包中导入 OpenAI 类。
细节:
import ... from 是 ES6 模块语法,用于导入模块。OpenAI 是一个类,用于创建与 OpenAI API 交互的客户端实例。npm install openai 安装,其版本信息在 package.json 中定义为 ^4.71.0。import dotenv from 'dotenv';
dotenv.config();
作用:加载环境变量配置文件。
细节:
dotenv 是一个 Node.js 模块,用于将 .env 文件中的键值对加载到 process.env 对象中。.env 文件通常包含敏感信息,如 API 密钥、数据库密码等,避免硬编码在代码中。dotenv.config() 执行后,.env 文件中的变量(如 OPENAI_API_KEY=sk-...)将变为 process.env.OPENAI_API_KEY 的值。.env 加入 .gitignore,防止密钥泄露。const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.302.ai/v1'
});
作用:实例化一个 OpenAI 客户端,用于后续 API 调用。
细节:
const client:声明一个常量 client,存储 OpenAI 实例。new OpenAI({...}):调用 OpenAI 构造函数,传入配置对象。apiKey:认证凭据。使用 process.env.OPENAI_API_KEY 从环境变量读取,确保安全性。baseURL:API 的基础 URL。此处指向 https://api.302.ai/v1const response = await client.completions.create({
model: 'gpt-3.5-turbo-instruct',
max_tokens: 256,
prompt: `
假如你是林夕这样的爱情歌曲作词大家,
请你写一首100字,为汪峰,写一首他爱上森林北的歌曲。
森林北是一位美丽,勇敢,会骑马的女孩儿
`
});
作用:向 OpenAI 的 completions 接口发送请求,生成文本。
细节:
await:因为 API 调用是异步的(网络请求),必须使用 await 等待结果。注意:这要求代码在 async 函数中运行,或在支持顶层 await 的环境(如 Node.js .mjs 文件)中执行。
client.completions.create():调用 SDK 提供的方法,对应 OpenAI 的 /completions API 端点。该方法本质上是向指定 URL 发送一个 POST 请求:
model: 'gpt-3.5-turbo-instruct':
gpt-3.5-turbo-instruct。gpt-3.5-turbo-instruct 是 GPT-3.5 系列中专为指令式文本生成优化的模型,适合根据提示生成连贯内容。max_tokens: 256:
prompt:核心输入,即“提示词”。
使用反引号(`)定义多行字符串,便于编写复杂指令。
Prompt 设计分析:
“假如你是林夕” —— 引导模型模仿著名词人林夕的文艺、深情风格。“写一首100字...的歌曲” —— 明确输出格式和长度。“汪峰...森林北...” —— 提供创作背景和情感元素,激发模型的联想能力。设计原则:清晰、具体、富有上下文的 Prompt 能显著提升生成质量。
const result = response.choices[0].text;
console.log('歌词是:' + result);
作用:从 API 响应中提取生成的文本并打印到控制台。
细节:
response.choices:API 返回一个包含多个候选结果的数组(choices),即使只请求一个结果,也以数组形式返回。[0]:取第一个(通常也是唯一一个)结果。.text:访问该结果的生成文本内容。console.log():将结果输出到终端,便于查看和调试。首先建一个 .env 文件,在文件内编辑以下内容
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
在 .mjs 文件的第7行进行以下修改,即可防止密钥泄露。
将 apiKey: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
改为 apiKey: process.env.OPENAI_API_KEY
completions.create(),传入模型、长度限制和精心设计的 Prompt。| 概念 | 说明 |
|---|---|
| Node.js | JavaScript 的后端运行时,允许在服务器端执行 JS 代码。 |
| ES6 模块 | .mjs 文件使用 import/export 语法,现代 JS 模块化标准。 |
| dotenv | 环境变量管理工具,提升安全性。 |
| OpenAI SDK | 官方提供的客户端库,简化 API 调用。 |
| Prompt Engineering | 设计高质量提示词的艺术,直接影响 AI 输出质量。 |
| Async/Await | 处理异步操作的语法,使代码更易读。 |
在项目根目录执行:
node main.mjs
你可能会看到类似以下的输出:
一首充满画面感与情感张力的歌词就此诞生!
通过本文,我们完成了:
初始化 Node.js 项目
集成 OpenAI SDK
调用 completions 接口生成创意文本
理解 LLM 工作原理与 Prompt 设计技巧
OpenAI 的 LLM 不仅是技术工具,更是创意的催化剂。技术的演进,让创造的门槛前所未有地降低。从一行代码到一首歌词,我们见证了人工智能如何赋能个体表达。OpenAI 的 LLM 不仅是算法的胜利,更是人与机器协作的桥梁。未来已来,与其等待,不如执笔——用 Prompt 做诗,以代码为弦,让每一次灵感的闪现,都成为 AI 时代的回响。