🌟 前言:今天就来开启你的 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 中提取生成文本:
arduinojs 编辑 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: completions 和 chat/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 的安全性?
✅ 参考回答:
- 绝不硬编码在代码中
- 使用
.env文件 +dotenv加载环境变量 .gitignore忽略.env- 前端禁止直接调用 OpenAI API(防止泄露)
- 通过后端代理请求,结合 JWT/OAuth 鉴权
💡 加分项:提到"密钥轮换"、"访问日志审计"、"使用云密钥管理服务(如 AWS KMS)"
❓ Q3: 如果用户输入太长,超过 token 限制怎么办?
✅ 参考回答:
LLM 有上下文长度限制(如 16k tokens),解决方案:
- 截断(Truncation) :保留开头或结尾
- 滑动窗口:保留最近 N 条对话
- 摘要压缩:用 LLM 自动总结历史
- RAG 架构:将长文档存入向量数据库,按需检索相关内容注入上下文
- 分块处理:切片 → 分别处理 → 合并结果
🎯 工业界主流方案: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 对请求频率有限制,常见应对策略:
- 指数退避重试(Exponential Backoff)
- 使用 SDK 内置重试机制
- 缓存常见问答结果
- 使用队列控制并发
- 升级账户提高配额
💡 加分项:提到"熔断机制"、"降级策略"、"请求批处理"
✅ 面试加分建议
| 能力 | 是否必须 |
|---|---|
| ✅ 独立调用 OpenAI API | ✔️ 必须 |
| ✅ 区分 completions vs chat | ✔️ 必须 |
| ✅ 安全管理 API Key | ✔️ 必须 |
| ✅ 实现流式输出 | ✔️ 推荐 |
| ✅ 理解 Temperature / Top_p | ✔️ 推荐 |
| ✅ 了解 Function Calling / RAG | ✔️ 大厂加分项 |
| ✅ 设计错误重试、限流机制 | ✔️ 高级加分项 |
🛠️ 实战建议
- 搭建一个 Express 服务 ,暴露
/ai/generate接口 - 前端通过 Axios 调用后端,避免前端直接暴露 Key
- 集成流式响应,提升用户体验
- 加入内容审核(如 OpenAI Moderation API),防止生成违规内容
- 记录日志,便于调试和审计
📚 延伸学习
- OpenAI 官方文档
- 《LangChain 实战》
- Coursera: "Prompt Engineering for Developers"
- 极客时间:《AI 大模型应用开发实战》
🎯 总结 :
你已经掌握了 OpenAI 的基础调用,下一步是:
- 构建完整项目(前后端 + 流式 + 安全)
- 深入理解大厂关注的架构设计、安全、性能问题
- 准备好回答高频面试题
祝你顺利进入 AI 开发领域,斩获 Offer!🎉