0基础学习js之OpenAI AIGC:用OpenAI生成一首歌

🌟 前言:今天就来开启你的 AIGC 开发之旅

"AI 不是未来,而是现在。

你不需要成为数学天才,也不需要拥有超算设备------

今天,你只需掌握 3 个关键步骤,就能让大模型为你写诗、写歌、写故事。"# 🚀 OpenAI AIGC 模型学习笔记(增强版)


1. 初始化 Node.js 后端项目

Node.js 是 JavaScript 的服务器端运行环境,让 JS 可以脱离浏览器执行。

✅ 初始化项目

csharp 复制代码
bash
编辑
npm init -y
  • npm:Node Package Manager,管理依赖包
  • init:创建 package.json(它是一个 JSON 格式的文件,想了解的可以去学一下)
  • -y:跳过交互,使用默认配置

💡 适合中小型项目、微服务、API 接口开发,生态丰富,学习成本低。

📌 简单插入一个小知识

📌 简单理解:npx vs npm

命令 作用
npm install <package> 安装一个包(到项目或全局)
npx <command> 直接运行一个包中的命令,无需先安装

2. OpenAI SDK 与 LLM 接口

OpenAI 是当前大语言模型(LLM)领域的事实标准,提供官方 SDK 简化调用。

安装 OpenAI SDK

css 复制代码
bash
编辑
npm i openai@4.71.0

(1).package.json上右击集成终端运行以上命令 :安装 OpenAI 官方 SDK 的第 4.71.0 版本到当前项目中


3. LLM 核心概念

来源

  • 主要来自 OpenAI(GPT 系列)

  • 常见模型:

    • gpt-3.5-turbo(性价比高)
    • gpt-3.5-turbo-instruct(兼容旧版 completions)
    • gpt-4-turbo(更强理解与推理)

能力

  • 文本生成
  • 代码生成
  • 情感分析
  • 摘要扩写
  • 翻译润色

4. 调用流程详解

步骤 1:创建一个main.mjs的文档,实例化 OpenAI 客户端

php 复制代码
js
编辑
import OpenAI from 'openai';
import dotenv from 'dotenv';
dotenv.config();// .env 文件中的配置添加到环境变量
// llm client 实例化
const client = new OpenAI(
    {
        apiKey: process.env.OPENAI_API_KEY,
        // baseURL:'https://api.openai.com/v1'
        baseURL: 'https://api.302.ai/v1'
    }
    
);

🔐 安全提示:要建立一个gitignore的文档,再写入 .env, 来保护项目文件的隐私。

🔐 安全提示 :不要将 API Key 硬编码!使用 .env 文件 + dotenv 包。

  • 自己在该文件上创建一名字为 .env的文档,将你获得的API_key写上去。(注意:小心面试的时候回答不对被踢掉)

步骤 2:调用 completions.create 方法

javascript 复制代码
js
编辑
const response = await client.completions.create({
    // openai 模型家族
    // 文本模型
    // 价格平民
    model: 'gpt-3.5-turbo-instruct',
    max_tokens: 256,
    // 提示词是和LLM 交流的方式
    // es6 字符串模版 ``多行文本 详细且清晰的LLM需要完成的任务    "" ''
    prompt: `
  假如你是林夕这样的爱情歌曲作词大家,
  请你写一首100字,为汪峰,写一首他爱上森林北的歌曲。
  森林北是一位美丽,勇敢,会骑马的女孩儿
  `
})

⚙️ 技术细节:为什么用 completions.create 而不是 chat

接口 适用场景 为什么这里用 completions
completions.create 一次性文本生成(如写歌词、写诗) ✅ 任务明确、无需多轮对话
chat.completions.create 多轮对话(如聊天机器人) ❌ 不需要对话历史

🔍 本质原理

  • https://api.openai.com/v1/completions 发送 POST 请求

  • 请求体为 JSON,包含 model, prompt, max_tokens 等参数

🔍 一、核心参数详解

参数 作用与设计原理
model 'gpt-3.5-turbo-instruct' 关键选择 : - 专门针对指令式任务 优化的模型 - 比 gpt-3.5-turbo(对话模型)更适合文本生成任务 - 价格更低(约 $0.0005/1K tokens) - 适合歌词创作这类结构化文本生成
max_tokens 256 精确控制输出 : - 256 tokens ≈ 150-200个中文字符(100字歌词约需100-150 tokens) - 避免生成过长内容(如要求100字,256是安全上限) - 比 max_tokens: 100 更合理(防止截断)
prompt 多行提示词 精心设计的提示工程 : 1. 角色设定假如你是林夕这样的爱情歌曲作词大家 2. 任务要求写一首100字...歌曲 3. 关键信息森林北是一位美丽,勇敢,会骑马的女孩儿
  • 返回 JSON 中提取生成文本:

    arduino 复制代码
    js
    编辑
    const result = response.choices[0].text;
     console.log('歌词是:' + result);

🔍 一、完整结构解析

arduino 复制代码
javascript
编辑
response.choices[0].text

分解说明:

部分 含义 说明
response API 响应对象 await client.completions.create(...) 返回的 JSON 对象
.choices 生成结果数组 OpenAI 返回的多个候选文本(默认只返回 1 个)
[0] 第一个候选结果 数组索引(从 0 开始)
.text 生成的文本内容 该候选结果的实际内容

🔍在集成终端中输入:node main.mjs ,你将得到在prompt指令中想要得到的结果。

✅成果展示

一起来创作你喜欢的歌曲吧或故事吧!!!

✅ 补充:大厂高频面试题(AI 开发岗)

来源于字节、腾讯、阿里、百度等 AI 相关岗位真实面经


❓ Q1: completionschat/completions 有什么区别?为什么推荐后者?

参考回答:

对比项 completions chat/completions
输入格式 prompt: string messages: [{role, content}]
上下文支持 弱(仅靠 prompt) 强(支持 system/user/assistant)
成本 高(如 text-davinci-003 低(gpt-3.5-turbo 便宜 90%)
多轮对话 不友好 原生支持
推荐程度 ❌ 仅维护 ✅ 新项目首选

📌 总结:chat 接口更适合产品化,是当前主流。


❓ Q2: 如何保证 API Key 的安全性?

参考回答:

  1. 绝不硬编码在代码中
  2. 使用 .env 文件 + dotenv 加载环境变量
  3. .gitignore 忽略 .env
  4. 前端禁止直接调用 OpenAI API(防止泄露)
  5. 通过后端代理请求,结合 JWT/OAuth 鉴权

💡 加分项:提到"密钥轮换"、"访问日志审计"、"使用云密钥管理服务(如 AWS KMS)"


❓ Q3: 如果用户输入太长,超过 token 限制怎么办?

参考回答:

LLM 有上下文长度限制(如 16k tokens),解决方案:

  1. 截断(Truncation) :保留开头或结尾
  2. 滑动窗口:保留最近 N 条对话
  3. 摘要压缩:用 LLM 自动总结历史
  4. RAG 架构:将长文档存入向量数据库,按需检索相关内容注入上下文
  5. 分块处理:切片 → 分别处理 → 合并结果

🎯 工业界主流方案:RAG(检索增强生成)


❓ Q4: 什么是 Temperature 和 Top_p?它们对输出有什么影响?

参数 说明 影响
temperature 控制随机性(0~2) 越高越随机,越低越确定
top_p 核采样(nucleus sampling) 动态选择最可能的词集

使用建议:

  • 写代码:temperature=0.2
  • 写诗/创意:temperature=0.8~1.0
  • 调试复现:设为 0

❓ Q5: 如何实现流式响应(Streaming)?有什么好处?

php 复制代码
js
编辑
const stream = await openai.chat.completions.create({
  model: "gpt-3.5-turbo",
  messages: [{ role: "user", content: "讲个故事" }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0].delta.content || "");
}

好处:

  • 用户无需等待,体验更流畅
  • 可实现"打字机效果"
  • 降低感知延迟(perceived latency)

🌐 应用:聊天机器人、语音助手、实时翻译


❓ Q6: 什么是 Function Calling?它能解决什么问题?

Function Calling 是 OpenAI 提供的机制,允许模型主动调用外部函数

json 复制代码
json
编辑
{
  "function_call": {
    "name": "getWeather",
    "arguments": "{"city": "北京"}"
  }
}

然后由开发者执行函数并返回结果,模型继续推理。

📌 核心价值:

  • 让 LLM 从"语言模型"变成"能行动的智能体(Agent)"
  • 实现天气查询、数据库操作、支付等真实世界交互

🧠 大厂非常关注此能力,是 AI Agent 的基础。


❓ Q7: 如何处理 rate limit(频率限制)?

OpenAI 对请求频率有限制,常见应对策略:

  1. 指数退避重试(Exponential Backoff)
  2. 使用 SDK 内置重试机制
  3. 缓存常见问答结果
  4. 使用队列控制并发
  5. 升级账户提高配额

💡 加分项:提到"熔断机制"、"降级策略"、"请求批处理"


✅ 面试加分建议

能力 是否必须
✅ 独立调用 OpenAI API ✔️ 必须
✅ 区分 completions vs chat ✔️ 必须
✅ 安全管理 API Key ✔️ 必须
✅ 实现流式输出 ✔️ 推荐
✅ 理解 Temperature / Top_p ✔️ 推荐
✅ 了解 Function Calling / RAG ✔️ 大厂加分项
✅ 设计错误重试、限流机制 ✔️ 高级加分项

🛠️ 实战建议

  1. 搭建一个 Express 服务 ,暴露 /ai/generate 接口
  2. 前端通过 Axios 调用后端,避免前端直接暴露 Key
  3. 集成流式响应,提升用户体验
  4. 加入内容审核(如 OpenAI Moderation API),防止生成违规内容
  5. 记录日志,便于调试和审计

📚 延伸学习

  • OpenAI 官方文档
  • 《LangChain 实战》
  • Coursera: "Prompt Engineering for Developers"
  • 极客时间:《AI 大模型应用开发实战》

🎯 总结

你已经掌握了 OpenAI 的基础调用,下一步是:

  • 构建完整项目(前后端 + 流式 + 安全)
  • 深入理解大厂关注的架构设计、安全、性能问题
  • 准备好回答高频面试题

祝你顺利进入 AI 开发领域,斩获 Offer!🎉

相关推荐
Zyx20075 小时前
用 OpenAI SDK 快速搭建你的第一个 AIGC 应用:从零开始生成文本
人工智能·node.js
小北爱滑雪5 小时前
OpenAI发布首款浏览器Atlas初体验
openai
爱吃的小肥羊5 小时前
重磅!OpenAI首款AI浏览器ChatGPT Atlas正式上线(附下载体验方式)
chatgpt·aigc·openai
api_180079054607 小时前
Node.js 接入淘宝 API 实战:构建商品信息实时同步服务
node.js
小白用python13 小时前
win10安装nodejs及better-sqlite3失败的解决方案
node.js·better-sqlite3
ikoala19 小时前
Node.js 25 正式发布:性能飙升、安全升级、全面向 Web 靠拢!
前端·面试·node.js
mortimer21 小时前
用一行 FFmpeg 命令,让噪音俯首,让语音转录更准确一点
ffmpeg·openai
前端架构师-老李1 天前
npm、yarn、pnpm的对比和优略
前端·npm·node.js·pnpm·yarn
机器之心1 天前
谷歌最强AI,被港科大开源超了?让海外创作者喊出「King Bomb」的P图大杀器来了
人工智能·openai