本文为本人学习英伟达生成式 AI 证书的个人复习笔记,全程面向零基础初学者,用最通俗的语言讲透 AIGC 项目从 0 到 1 的标准工程化流程,看完就能直接上手写第一个 AI 接口调用项目。
一、前置认知:AIGC 项目本质
所有 AI 项目 / Agent 项目,几乎都是 Node.js 后端项目
- 核心逻辑:本地写代码 → 调用大模型 API → 拿到返回结果
- 不需要前端页面,纯后端脚本即可完成所有功能
- 这也是为什么我们全程用 Node.js、pnpm、终端命令来开发
二、第一步:环境准备
1. 安装 Node.js
官网下载 LTS 长期支持版即可,安装完成后终端执行以下命令验证:
bash
运行
node -v
npm -v
2. 安装 pnpm(强烈推荐,替代 npm)
bash
运行
npm install -g pnpm
为什么一定要用 pnpm 而不是 npm?
表格
| 对比维度 | npm | pnpm |
|---|---|---|
| 磁盘占用 | 每个项目单独复制一份依赖,10 个项目装 openai 就存 10 份,C 盘越用越满 | 同一个版本的包全电脑只存 1 份,所有项目靠链接引用,省 60%-80% 磁盘空间 |
| 安装速度 | 每次都要下载 + 复制文件,速度慢 | 第一次下载存全局,第二次同版本直接秒装,速度快 2-3 倍 |
| 依赖管理 | 扁平化导致幽灵依赖,没写在 package.json 的包也能引用,升级容易报错 | 严格管控,只能导入显式安装的包,项目稳定性更高 |
三、项目初始化:给项目 "上户口"
命令
在你新建的空项目文件夹终端执行:
bash
运行
npm init -y
作用
- 快速创建 Node.js 项目,相当于给项目 "上户口"
- 执行后会自动生成
package.json文件,这是项目的 "身份证" - 必须先执行这一步,才能安装任何第三方依赖
package.json 是什么?
- 记录项目名称、版本、描述、作者等基本信息
- 记录项目安装的所有依赖包和版本号
- 配置项目启动脚本、打包脚本等命令
四、安装核心依赖
1. 安装大模型 SDK
bash
运行
pnpm i openai
- 作用:给项目安装大模型连接插件,让你的代码能和 OpenAI、DeepSeek、通义千问等所有兼容 OpenAI 接口的大模型通信
- 注意:所有兼容 OpenAI 接口的大模型,都可以用这个 SDK 调用,不需要单独安装其他包
2. 安装环境变量工具
bash
运行
pnpm i dotenv
- 作用:读取项目根目录下的
.env文件,把里面的配置加载到 Node.js 的全局进程对象中
五、最重要的安全问题:API 密钥保护
绝对禁止的错误写法
js
// 千万不要这么写!!!
const apiKey = "sk-xxxxxxxxxxxxxxxxxxxx"
- 只要你把密钥硬写在代码里,一旦提交到 Gitee/GitHub,密钥会永久留在提交记录里
- GitHub 有大量爬虫 24 小时扫描公开仓库的密钥,几分钟内就会被盗刷,产生巨额费用
正确做法:.env + .gitignore
第一步:新建.env文件
在项目根目录新建.env文件,格式要求:
env
# 变量名建议全大写,等号左右不要加空格,不要加引号
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
第二步:新建.gitignore文件
在项目根目录新建.gitignore文件,写入以下内容:
gitignore
# 忽略环境变量文件,永远不会提交到远程仓库
.env
# 忽略依赖文件夹,体积巨大,不需要提交
node_modules/
# 忽略日志文件
*.log
第三步:在代码中读取密钥
js
// 加载.env配置
import 'dotenv/config'
// 从全局进程对象中读取密钥
const apiKey = process.env.DEEPSEEK_API_KEY
原理
.env:本地单独存放私密配置,和业务代码分离.gitignore:告诉 Git 哪些文件不需要提交,从根源上防止密钥泄露- 二者缺一不可,只有同时使用才能真正保护你的 API 密钥
六、模块化规范:.mjs vs .js
核心区别
表格
| 后缀 | 默认模块规范 | 导入语法 | 导出语法 |
|---|---|---|---|
.js | CommonJS | require('xxx') | module.exports = xxx |
.mjs | ES Module(ESM) | import xxx from 'xxx' | export default xxx |
为什么推荐用.mjs?
- ES Module 是 JavaScript 官方标准,浏览器和 Node.js 通用
- 语法更简洁,支持静态分析,打包体积更小
- 不需要修改任何配置,Node.js 原生支持
- 现在所有新的前端 / 后端项目,都在全面转向 ESM 规范
注意事项
.mjs文件中不能使用 require () ,写了会直接报错- ESM 默认开启严格模式,不需要手动写
'use strict'
七、开发效率神器:nodemon
问题
原生 Node.js 开发时,每次修改代码都需要:
- 按
Ctrl+C停止当前进程 - 重新执行
node index.mjs启动 - 反复操作非常浪费时间
解决方案:nodemon
- 作用:监听文件变化,自动重启 Node.js 进程
- 安装:
bash
运行
pnpm add -g nodemon
- 使用:
bash
运行
# 替代原来的 node index.mjs
nodemon index.mjs
- 效果:只要你保存代码,项目就会自动重启,不需要手动操作
八、异步编程核心:async/await
为什么需要异步?
调用大模型 API 不是立刻返回结果的,需要等待几百毫秒到几秒不等。如果用同步写法,程序会卡住不动。
核心语法
js
// 1. 在函数前面加 async,标记这是一个异步函数
async function main() {
// 2. 在异步操作前面加 await,等待结果返回再往下执行
const result = await client.chat.completions.create({
model: "deepseek-chat",
messages: [{ role: "user", content: "你好" }]
})
console.log(result.choices[0].message.content)
}
// 3. 调用异步函数
main()
最简单记忆
async:告诉 JS,这个函数里面有需要等待的操作await:告诉 JS,等这个操作完成,拿到结果再往下走- 没有 async 就不能用 await,没有 await async 就没有意义
九、标准 AIGC 工程化开发流程(必背)
- 新建空项目文件夹
- 初始化项目:
npm init -y - 新建.gitignore:写入
.env和node_modules/ - 安装依赖:
pnpm i openai dotenv - 新建.env:写入你的 API 密钥
- 新建入口文件 index.mjs
- 实例化大模型客户端
- 编写 main 单点入口函数
- 在 main 函数中调用大模型 API
- 启动项目:
nodemon index.mjs
十、标准项目结构
plaintext
your-ai-project/
├── .env # 私密配置(不上传Git)
├── .gitignore # Git忽略文件
├── index.mjs # 单点入口文件
├── package.json # 项目配置
└── pnpm-lock.yaml # 依赖版本锁定文件(自动生成)
什么是单点入口?
- 单点入口文件:整个项目只从这一个文件开始运行,也就是你执行
node index.mjs的那个文件 - 单点入口函数:入口文件里的
main()函数,所有业务逻辑都从这里开始调用 - 好处:代码结构清晰,别人看你的项目一眼就知道从哪开始跑,方便后续部署和维护
十一、常见坑点汇总(踩过的坑都在这里)
-
process.env.xxx 返回 undefined
- 检查
.env文件是否在项目根目录 - 检查变量名是否完全一致(大小写敏感)
- 检查等号左右是否有空格
- 检查是否已经执行了
import 'dotenv/config'
- 检查
-
nodemon 命令不存在
- 没有全局安装 nodemon,执行
pnpm add -g nodemon - 或者用 npx 调用:
npx nodemon index.mjs
- 没有全局安装 nodemon,执行
-
await 只能在 async 函数中使用
- 把包含 await 的代码放到 async 函数里
- 不要在全局作用域直接使用 await
-
密钥泄露怎么办
- 立刻去大模型官网重置你的 API 密钥
- 检查 Git 提交记录,删除包含密钥的提交
- 以后严格按照
.env + .gitignore的方式管理密钥
十二、总结
AIGC 工程化开发其实非常简单,核心就是 "初始化项目 → 安装依赖 → 安全管理密钥 → 调用 API → 处理结果" 这几步。
对于初学者来说,不需要一开始就追求复杂的架构,先把这个标准流程跑通,能成功调用大模型返回结果,就是一个合格的 AIGC 项目了。后续再慢慢学习 Agent、RAG、流式输出等进阶内容。
希望这篇笔记能帮到和我一样刚入门 AIGC 开发的同学,也欢迎大家在评论区交流学习心得。