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!🎉

相关推荐
时速GEO系统16 分钟前
初元 AI V1.1 版本升级,首个正式版发布一周・实现生成、部署、上线、优化全流程自动化闭环
人工智能·数据挖掘·node.js
ServBay1 小时前
ChatGPT Pro 20X 限时回归
gpt·chatgpt·openai
全栈弄潮儿2 小时前
AI 生成的代码,哪些地方最容易埋坑?
aigc·openai·ai编程
程序员Better3 小时前
我终于遇到一台懂 AI 编程的专业编程显示器!
人工智能·openai·编译器
杨杨杨大侠3 小时前
Jev 不是 Agent:TypeSafe System One 如何成为离 LLM 最近的决策层
aigc·openai·ai编程
console.log('npc')5 小时前
06 — Model 层:数据模型与操作
前端·后端·node.js·express
右耳朵猫AI6 小时前
Web前端周刊2026W38 | React 19.3 发布、StyleX 深潜、jsdom 30.1 提速
前端·javascript·react.js·typescript·node.js
杨杨杨大侠6 小时前
知识库已经有了,Java 程序员还要做什么?Spring AI RAG 实战
java·openai·ai编程
咬代码的兽7 小时前
GPT-6 Astra API 上手指南:5 档推理强度怎么选,272K 计费门槛怎么算
openai·gpt-6