P.S. 挖到宝藏AI教程!全程通俗易懂,风趣幽默,零基础轻松入门,传送门https://blog.csdn.net/qq_34419312

前言

最近在刷英伟达的生成式AI证书,天天跟各种大模型API打交道。

本来我以为,调个接口嘛,有手就行,分分钟的事。

结果真上手才发现,从建项目到收到模型第一句回复,卡我的全是些鸡毛蒜皮的工程细节。

包管理、环境变量、模块规范、异步控制,单拎出来哪个都不难,凑一起就能给你整得明明白白。

踩了一圈坑之后,我把完整流程整理出来了,以DeepSeek为例,换别的兼容模型也一样能用。

废话不多说,直接开整。

一、项目初始化:pnpm 真的比 npm 香太多

第一步肯定是初始化项目,把空文件夹变成正经的 Node 项目。

命令很简单:

npm init -y

要调大模型接口,核心依赖就两个:openai 库用来调接口,dotenv 用来读环境变量。

搁以前我直接 npm install 就完事了,现在我真心劝大家,别用 npm 了,换 pnpm 吧。

npm 有多坑?每个项目都给你复制一份完整的 node_modules,就像你每次点外卖都送一套新餐具,攒俩月硬盘直接被占满,纯纯的资源浪费。

pnpm 就不一样了,所有包都存在全局仓库里,项目里只用硬链接引用,不重复存文件。装包速度快好几倍,还省硬盘空间。同时开好几个AI项目的时候,差距尤其明显。

全局安装 pnpm 就一行命令:

npm install -g pnpm

以后装依赖都用 pnpm add,体验顺滑不止一个档次。

pnpm add openai dotenv

二、API Key 绝对不能裸奔,泄露了真会哭

API Key 是什么?是你调用大模型的凭证,跟你银行卡密码差不多。

一旦泄露,别人拿着你的 Key 就能随便刷额度,月底账单出来直接原地心梗。

别觉得这事离你远,现在 GitHub 上一搜,还能搜到一大堆被误提交上去的有效密钥,纯纯的公开处刑。

行业标准解法很简单:把密钥存在 .env 文件里,再配好 .gitignore,本地能用,绝对传不到远程仓库。

在项目根目录建个 .env 文件,写上密钥和接口地址:

DEEPSEEK_API_KEY=sk-你的密钥
DEEPSEEK_BASE_URL=https://api.deepseek.com

注意格式:键名大写,等号直接连值,别加空格也别加引号。

再建个 .gitignore 文件,把这俩加上:

.env
node_modules

配完之后,就算你手滑执行 git add . ,私密文件和依赖包也不会被提交,从根上杜绝社死。

三、dotenv 底层到底是怎么干活的

配置好 .env 文件,代码里怎么读密钥?全靠 dotenv 这个库。

其实原理特别简单:执行 dotenv.config() 的时候,它会自动去找项目根目录的 .env 文件,逐行解析键值对,然后全部注入到 Node 的 process.env 对象里。

给大家通俗解释下:你运行 node 命令的时候,系统会开一个独立进程,process 就是这个进程的全局对象,process.env 专门存当前进程的环境变量。

代码里就两行引入配置:

import dotenv from 'dotenv'
dotenv.config()

之后项目里任何地方,都能通过 process.env.DEEPSEEK_API_KEY 读到密钥,全程不用写明文,安全得很。

四、模块规范:.mjs 和 type:module 怎么选

现在写 Node 项目,基本都用 ES Module 的 import/export 语法了。

但 Node 有个老毛病:默认把 .js 文件当成旧版 CommonJS 模块,不支持 import 语法,一跑就报错。

就像你去饭店想吃中餐,结果默认给你拿刀叉,别扭得不行。

想用 ESM 只有两种方式:
要么把文件后缀改成 .mjs,要么在 package.json 里加个 “type”: “module” 配置。

这俩效果完全一样,没有谁好谁坏,看场景选就行:

如果是新旧代码混用的项目,推荐用 .mjs,看后缀就知道是什么模块,一目了然。

如果是全新的纯 ESM 项目,直接配 “type”: “module”,全局统一规范,不用挨个改文件名。

五、开发摸鱼神器:nodemon 告别手动重启

开发调试的时候最烦啥?改一行代码,就得切到终端,Ctrl+C 停服务,再敲命令重启。

一天重复几十次,手指头都快按出茧子了,本来上班就累,还给自己加体力活。

nodemon 就是专门解决这个问题的,Node 开发必备神器。它能监听文件变动,你一改代码保存,它自动重启服务,体验跟前端的热更新差不多。

全局安装:

npm install -g nodemon

启动项目直接用:

nodemon index.mjs

改完代码保存就自动运行,省下来的时间多喝两杯奶茶不好吗。

提醒一句:如果用 .mjs 后缀的文件,启动命令一定要写完整文件名,不然 nodemon 可能找不到文件。

六、异步核心:async/await 才是正确姿势

基础配置都弄完,就可以写接口调用逻辑了。

先初始化模型客户端:

import { OpenAI } from 'openai'

const client = new OpenAI({
  apiKey: process.env.DEEPSEEK_API_KEY,
  baseURL: process.env.DEEPSEEK_BASE_URL
})

这里划重点:openai 库默认连的是官方接口,对接国产模型一定要手动配 baseURL,不然直接报错连不上,别问我怎么知道的。

很多新手刚开始写接口调用,容易踩一个大坑:直接拿返回值,结果打印出来是个 Promise 对象,人都傻了。

这就像你刚点完外卖,就伸手要饭,人家骑手还在商家取餐呢,能给你啥?只能给你一个订单承诺,告诉你“饭会送到的,等着吧”。

网络请求是异步的,耗时不确定,JS 不会等它跑完再往下走,直接执行后面的代码,当然拿不到真实结果。

这就是 async/await 的用处:await 会在 async 函数里暂停执行,等请求完成、数据返回了,再跑后面的代码。既保证了执行顺序,又不会卡住整个程序,性能和可读性都有了。

给大家一份能直接跑的完整代码:

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()

不管接口响应多久,代码都会按顺序执行,逻辑清清楚楚,调试也方便。

七、最后总结:六步搞定全流程

整套 DeepSeek 大模型 API 工程化搭建,核心就六步,学会了换别的兼容模型也一样用:

  1. npm init -y 初始化标准 Node 项目
  2. pnpm add openai dotenv 安装核心依赖
  3. .env 存密钥,.gitignore 防泄露
  4. 用 ESM 模块化规范开发
  5. async/await 控制异步执行顺序
  6. nodemon 监听文件,自动重启服务

都是踩坑踩出来的实战经验,照着走能少走很多弯路。

P.S. 挖到宝藏AI教程!全程通俗易懂,风趣幽默,零基础轻松入门,传送门https://blog.csdn.net/qq_34419312

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐