用 Node.js 调用 OpenAI 文本模型写一首情歌——AIGC 实战入门指南
在当今 AI 技术飞速发展的时代,AIGC(Artificial Intelligence Generated Content) 已经不再是未来的概念。
无论是写文案、写代码,还是创作歌词,大语言模型(LLM)都在改变我们的工作方式。
本文将带你完成一个有趣的项目:
使用 Node.js 调用 OpenAI 文本生成接口,让 AI 模拟著名词人林夕的风格,为汪峰创作一首关于“森林北”的爱情歌曲。
通过这个项目,你将学会如何在后端系统中集成大语言模型能力,非常适合以下开发者:
- 前端转全栈的开发者
- Node.js 初学者
- 对 AI 编程和 AIGC 实践感兴趣的人
一、初始化项目:搭建 Node.js 环境
首先,创建一个基础的 Node.js 项目:
npm init -y
该命令会生成一个默认的 package.json 文件,标志着项目的起点。
接着安装两个核心依赖:
npm install openai dotenv
openai:OpenAI 官方 SDK,用于简化 API 调用。dotenv:加载.env文件中的环境变量,用于保护 API Key 等敏感信息。
安装完成后,你的 package.json 中应包含以下内容:
"dependencies": {
"dotenv": "^17.2.3",
"openai": "^4.71.0"
}
二、配置 API 密钥:使用 .env 管理凭据
为了避免在代码中暴露密钥,在项目根目录创建 .env 文件:
OPENAI_API_KEY=sk-your-real-api-key-here
在主文件 index.js 中引入:
import dotenv from 'dotenv';
dotenv.config();
这样就可以通过 process.env.OPENAI_API_KEY 安全地读取密钥。
建议将
.env文件加入.gitignore,防止上传到远程仓库导致密钥泄露。
三、实例化 OpenAI 客户端
使用官方 SDK 创建客户端实例:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: "https://api.302.ai/v1" // 可选代理地址,用于调试或加速
});
baseURL 可根据网络环境修改为国内镜像地址,以提升访问速度和稳定性。
四、调用 Completion 接口生成歌词
OpenAI 提供两种主要的文本生成接口:
completions.create:传统的单轮文本生成模式chat.completions.create:支持上下文和多轮对话
本例使用 completions.create,调用 gpt-3.5-turbo-instruct 模型,该模型针对指令执行优化,生成速度快、成本较低。
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);
参数说明
| 参数 | 说明 |
|---|---|
model | 使用的模型名称,如 gpt-3.5-turbo-instruct |
max_tokens | 控制输出长度,1 token 约等于 1 个汉字 |
prompt | 提示词,引导模型生成指定风格的内容 |
通过合理设计 Prompt,可以让模型更好地模拟林夕的文风,创作出汪峰风格的爱情歌词。
五、运行结果:AI 写出的情歌
执行脚本后,控制台可能输出如下结果:
歌词是:
烈焰燃烧在无边荒原,
你骑着骏马闯进我视线。
森林北啊 北方的星辰,
照亮我沉睡多年的心门。
黄沙卷起命运的轨迹,
你在风中笑得那么坚定。
我不是诗人 却为你提笔,
写下这狂野又温柔的诗句。
爱如火山喷发无法压抑,
只为拥抱你 不顾一切奔袭。
这首歌词融合了汪峰的激情与林夕的细腻,意境辽阔、情感真挚。
而这一切,仅用几十行代码就能完成。
六、理解 package-lock.json 与依赖管理
运行 npm install 后会生成 package-lock.json 文件,用于记录依赖树和具体版本号。例如:
"openai": {
"version": "4.71.0",
"dependencies": {
"abort-controller": "^3.0.0",
"node-fetch": "^2.6.7"
}
}
这说明:
openai使用node-fetch发送 HTTP 请求;- 使用
AbortController实现请求中断; - 所有底层逻辑均被 SDK 封装,开发者只需调用高层接口即可。
这体现了现代 SDK 的核心设计理念:隐藏复杂性,提供简洁直观的接口。
七、扩展:Chat 模式的更多可能
在实际应用中,推荐使用 chat.completions.create,它支持上下文和角色设定,更灵活。
例如:
const response = await client.chat.completions.create({
model: "gpt-3.5-turbo",
messages: [
{ role: "system", content: "你是一位擅长写华语摇滚情歌的作词人,风格像林夕。" },
{ role: "user", content: "请为汪峰写一首关于他爱上的女孩‘森林北’的歌,她美丽勇敢,会骑马。100字以内。" }
]
});
这种方式适合用于聊天机器人、歌词生成器、创作辅助工具等场景。
八、AIGC 的实际应用场景
这个项目虽然简单,却展示了 AIGC 的广阔潜力:
- 自动生成内容:广告语、短视频文案、推文。
- 个性化推荐:为用户生成定制化营销话术或问候语。
- 辅助创作:小说、剧本、歌词的灵感参考。
- 教育与培训:自动生成练习题或作文范文。
只要 Prompt 设计得当,AI 就能成为高效的创作助手。
九、开发最佳实践
- 精心设计 Prompt:明确角色、语气与格式。
- 控制输出长度:合理设置
max_tokens。 - 添加错误处理:使用
try-catch防止程序中断。 - 关注调用成本:不同模型价格差异较大,按需选择。
- 优先本地调试:可使用 mock 数据进行快速开发。
十、结语
通过本次实践,我们从项目初始化、依赖安装、API 调用到结果输出,完成了一个完整的 AIGC 小项目。
事实证明,接入大语言模型的过程并不复杂。
未来属于懂得如何“指挥 AI”的开发者。
掌握 Prompt 工程、理解 API 调用机制、实现工程化集成,将成为每一位技术人的重要能力。
当你下次需要写邮件、生成文案或创作歌词时,不妨让 AI 先动笔。
你只需扮演“导演”的角色,让 AI 成为你的创作工具。
参考资料
如果你觉得这篇文章有帮助,欢迎点赞、收藏和分享,获取更多 AI + 开发实战内容。