Node.js AI项目榜单:大模型API工程化实战
从零搭建 Node.js AI 项目:调用大模型 API 的工程化实践
先说一个核心判断:现在市面上几乎所有的 AI 项目和 Agent 项目,本质上都是后端项目。不管你是调用 DeepSeek、ChatGPT 还是 Claude,技术路径其实高度一致——项目初始化、安装依赖、配置密钥、调用 API,这几个步骤一个都不能少。
这篇文章就用 DeepSeek 的 API 来做个完整示范,带你走一遍规范的 Node.js AI 项目搭建全流程。
一、项目初始化
1.1 创建项目
mkdir ai-demo && cd ai-demo
npm init -y
npm init -y 这一步会生成 package.json,它是 Node.js 项目的核心配置文件,所有项目信息和依赖关系都记录在这里。
1.2 启用 ESM 模块
需要在 package.json 中添加 "type": "module":
{
"name": "ai-demo",
"version": "1.0.0",
"type": "module",
"dependencies": {
"openai": "^6.41.0",
"dotenv": "^17.4.2"
}
}
为什么要多这一步?
Ja vaScript 的模块化方案走了很长一段路:
CommonJS (CJS) → ES Modules (ESM)
require/module import/export
ESM 是 ES6 时代推出的现代化模块方案,用的是 import/export 语法。不过 Node.js 默认还是 CommonJS,所以得靠 "type": "module" 来显式声明一下——让 Node 知道,这个项目要用 ESM。
二、安装依赖
2.1 为什么推荐 pnpm?
npm install -g pnpm
| 对比项 | npm | pnpm |
|---|---|---|
| 安装速度 | 较慢 | 快(软链接机制) |
| 磁盘占用 | 每个项目各存一份 | 全局存储,项目间共享 |
| 适合场景 | 小型项目 | 多项目/monorepo |
pnpm 真正的杀手锏是软链接:同一个包只安装一次,不同项目之间通过软链接引用。如果平时维护的项目比较多,或者在做 monorepo 架构,这能省下不少磁盘空间。
2.2 安装具体的依赖
pnpm i openai dotenv
- openai:OpenAI 官方 SDK,现在基本成了大模型 API 调用的事实标准,DeepSeek、Claude 这些模型都兼容这套接口。
- dotenv:负责从
.env文件读取环境变量,后面会详细说。
三、API Key 安全管理
3.1 为什么不能把 API Key 写死在代码里?
API Key 属于敏感信息,如果直接硬编码在代码中并提交到 Git 仓库,密钥泄露只是时间问题。英伟达这类公司在证书和密钥管理方面有着非常严格的规范,应该照着那个标准来。
3.2 正确的做法:.env 文件
在项目根目录创建 .env 文件:
DEEPSEEK_API_KEY=your-api-key-here
DEEPSEEK_API_URL=
.env 文件的格式要求:
- 每行定义一个环境变量
- 格式:
KEY=VALUE(KEY 通常大写) - 不要加多余的空格
3.3 .gitignore 必须忽略 .env
在 .gitignore 中添加:
node_modules/
.env
这样一来,.env 文件就只存在于本地开发环境,不会出现在远程仓库中。
3.4 dotenv 如何读取环境变量
import dotenv from 'dotenv'dotenv.config()console.log(process.env.DEEPSEEK_API_KEY)
整个流程其实很简洁:
.env 文件 → dotenv.config() → process.env 对象 → 代码中使用
四、理解 process 全局对象
4.1 process 到底是什么?
process 是 Node.js 的全局对象,简单说,它代表当前正在运行的 Node.js 进程。
node index.mjs → 启动一个进程 → process 就是这个进程的对象
顺便提一句,进程是操作系统的核心概念——它是分配内存、CPU、IO 等资源的最小单位。
4.2 process.env 有什么用?
process.env 是一个对象,包含了当前进程的所有环境变量:
console.log(process.env) // 所有环境变量
console.log(process.env.DEEPSEEK_API_KEY) // 特定变量
无论是系统自带的全局环境变量,还是 .env 文件中定义的变量,最终都会出现在 process.env 里。
五、调用大模型 API
5.1 实例化 OpenAI 客户端
import dotenv from 'dotenv'
import { OpenAI } from 'openai'dotenv.config()const client = new OpenAI({
apiKey: process.env.DEEPSEEK_API_KEY,
baseURL: process.env.DEEPSEEK_API_URL
})
5.2 用 async/await 控制异步流程
这部分是整篇文章的核心重点。API 请求是典型的异步操作,必须借助 async/await 来保证执行顺序符合预期。
const main = async () => {
console.log('程序开始运行') // await 会"卡住"这里,等 API 返回结果
const result = await client.chat.completions.create({
model: 'deepseek-chat',
messages: [{ role: 'user', content: 'hello' }]
}) console.log(result.choices[0].message.content)
console.log('程序运行结束')
}main()
5.3 为什么必须用 async/await?
Ja vaScript 是单线程语言,这意味着代码的编写顺序和执行顺序有时候并不一致:
// 没有 async/await 的情况
console.log('1')
const result = client.chat.completions.create({...}) // 异步,不等待
console.log('3') // 立即执行,不会等 API 返回
// 有 async/await 的情况
console.log('1')
const result = await client.chat.completions.create({...}) // 等待完成
console.log('3') // API 返回后才执行
async/await 是 ES8 新增的异步编程语法,它让异步代码写起来跟同步代码一样直观,可读性提升非常明显。
| 概念 | 说明 |
|---|---|
async | 修饰函数,表示该函数是异步的 |
await | 只能在 async 函数中使用,等待异步操作完成 |
| 返回值 | async 函数返回 Promise |
5.4 完整的项目入口文件
// main.mjs - 单点入口文件
import dotenv from 'dotenv'
import { OpenAI } from 'openai'dotenv.config()const client = new OpenAI({
apiKey: process.env.DEEPSEEK_API_KEY,
baseURL: process.env.DEEPSEEK_API_URL
})const main = async () => {
console.log('程序开始运行') const result = await client.chat.completions.create({
model: 'deepseek-chat',
messages: [{ role: 'user', content: 'hello' }]
}) console.log(result.choices[0].message.content)
console.log('程序运行结束')
}main()
六、使用 nodemon 提升开发效率
开发时每次修改代码都要手动重启,体验确实不好。nodemon 可以监听文件变化,自动重启程序:
npm install -g nodemon
nodemon index.mjs
改完代码保存后,nodemon 会自动检测变化并重启,开发体验直接上个台阶。
七、项目结构总结
ai-demo/
├── node_modules/ # 依赖包(pnpm 软链接)
├── .env # 环境变量(API Key)️ 不提交到 Git
├── .gitignore # Git 忽略配置
├── package.json # 项目配置
├── pnpm-lock.yaml # 依赖锁定文件
└── main.mjs # 单点入口文件
八、AIGC 项目开发流程总结
搭建一个 AI 项目的标准路径:
1. npm init -y → 初始化项目
2. 添加 type: "module" → 启用 ESM
3. pnpm i openai dotenv → 安装依赖
4. 创建 .env 文件 → 配置 API Key
5. 配置 .gitignore → 忽略敏感文件
6. 编写 main.mjs → 单点入口
7. async/await 调用 API → 控制异步流程
8. nodemon 监听重启 → 提升开发效率
这套流程跑通之后,无论换成 DeepSeek、ChatGPT 还是 Claude,都能快速上手。
九、核心知识点速查
| 知识点 | 说明 |
|---|---|
| ESM | ES6 模块化,import/export,需 "type":"module" |
| pnpm | 软链接机制,节省磁盘,比 npm 更快 |
| dotenv | 从 .env 文件读取环境变量到 process.env |
| process | Node.js 全局对象,代表当前进程 |
| async/await | ES8 异步语法,让异步代码像同步一样可读 |
| OpenAI SDK | 大模型 API 调用的事实标准,兼容多家模型 |
| nodemon | 监听文件变化,自动重启 Node.js 程序 |
标签:Node.js AI 大模型 OpenAI DeepSeek AIGC 工程化
