作为刚接触 AIGC 的小白,我曾以为 "用代码调用 AI 生成内容" 又难又复杂 ------ 直到亲手用 OpenAI 的 DALL-E 模型画出第一张图,才发现只要找对工具(比如用 pnpm 代替 npm 提速)、搞懂 Prompt(给 AI 的指令),新手也能快速上手。今天就把从 "环境搭建" 到 "生成 AI 图片" 的全流程拆解,重点讲清楚 pnpm 的优势和 Prompt 的小技巧,小白跟着做就能成!
🏃一、先明确:我们要做的 AIGC 核心事
在写代码前,先搞懂两个关键 ------ 不然容易被 "名词" 吓退,其实本质很简单。
1. 目标:用 AIGC 生成一张图
我们要实现的是生成式 AI(AIGC) 的经典场景:通过代码给 OpenAI 的 dall-e-3 模型(专门画图的 AIGC 模型)发 "指令",让它生成一张 "宇宙飞船在宇宙中飞行" 的图片,最后拿到图片链接直接在浏览器打开。
2. 核心工具:3 个 "关键角色" 要记清
这次实战里,pnpm、OpenAI 包、Prompt 是核心,先搞懂它们的作用,后续步骤就顺理成章:
- pnpm :比 npm 快 2 倍的包管理器,装工具时能省磁盘空间(避免重复安装),是这次提速的关键;
- OpenAI 包:别人写好的 "对接 AIGC 接口的工具",有了它不用自己写复杂的网络请求,直接调用函数就能连 OpenAI;
- Prompt :给 AIGC 模型的 "指令",比如 "画一艘未来感宇宙飞船",Prompt 写得越清晰,AI 生成的图越符合预期(这也是 AIGC 的核心技巧)。
🏃二、第一步:用 pnpm 搭环境,比 npm 快多了
以前我用 npm 装工具总觉得慢,换成 pnpm 后才知道,原来搭环境也能这么快。这一步跟着做,5 分钟就能搞定。
1. 先装 Node.js:AIGC 代码的 "运行底座"
AIGC 代码是用 JavaScript 写的,需要 Node.js 让它在电脑上运行(不用依赖浏览器)。
2. 装 pnpm:比 npm 更快的 "工具商店"
为什么不用 npm?我特意查了资料:pnpm 用 "硬链接 + 符号链接" 技术,装相同工具时不会重复存文件,不仅省空间,安装速度还比 npm 快 2-3 倍。
- 装 pnpm:终端输入npm install -g pnpm(-g表示全局安装,所有项目都能用);
- 验证:输入pnpm -v,看到版本号就说明装好了。
3. 初始化项目:生成 "AIGC 项目说明书"
在电脑上新建一个文件夹(比如叫 "AIGC-Image-Demo"),然后用终端进入这个文件夹(输入cd 文件夹路径,比如cd Desktop/AIGC-Image-Demo),接着执行:
            
            
              bash
              
              
            
          
          pnpm init -y- 执行后会生成package.json文件,这是 "AIGC 项目的说明书",会记录我们装的工具版本,后续分享给别人时,对方用 pnpm 一键就能装齐所有工具;
- 加-y是为了 "跳过所有提问",小白不用纠结项目名、作者这些细节,直接用默认配置就行。
4. 装 AIGC 必备工具:openai+dotenv
这次要装两个工具:openai(对接 AIGC 接口)和dotenv(安全存 AIGC 接口的 "密钥",避免泄露)。用 pnpm 装比 npm 快很多:
            
            
              bash
              
              
            
          
          pnpm i openai@4.71.0 dotenv@17.2.3- i是- install的缩写,- @后面是固定版本号(避免后续版本更新出问题);
- 装完后文件夹里会多一个node_modules(放工具文件)和pnpm-lock.yaml(记录工具版本,确保别人装的和你一样),这两个文件不用手动改。
🏃三、第二步:配 AIGC 密钥 + 写核心代码
这一步是实战的核心,重点讲 "怎么安全存密钥" 和 "怎么写 AIGC 调用代码",尤其是 Prompt 的写法,小白也能学会。
1. 先拿 OpenAI 密钥:AIGC 接口的 "门禁卡"
调用 OpenAI 的 AIGC 模型需要 "密钥"(相当于门禁卡),没有密钥接口会拒绝访问。
- 去agicto官网注册账号,生成密钥;
2. 用 dotenv 存密钥:安全不泄露
绝对不能把密钥直接写在代码里(会被别人看到),用 dotenv 工具把密钥存到专门的文件里:
- 
在项目文件夹里新建一个 .env文件(注意前面有个点);
- 
打开 .env,只写一行内容(把 "你的密钥" 换成刚复制的密钥):plaintextOPENAI_API_KEY=你的密钥(比如sk-xxxxxx123456)
🏃四、第四步: 写 AIGC 调用代码
新建一个main.mjs文件(.mjs 后缀支持模块化导入,就是代码里的import语法),把下面的代码复制进去,我会逐句用大白话解释:
1. 模块化导入:精准拿需要的工具(比之前更优化)
            
            
              javascript
              
              
            
          
          // 导入整个 OpenAI 工具(后续用它创建客户端、调用接口)
import OpenAI from "openai";
// ES6 解构导入:只从 dotenv 包中拿 config 函数(不用导入整个包,更省资源)
import { config } from 'dotenv';这里和你最初的代码有个小优化:
- 最初是 import dotenv from "dotenv"(导入整个 dotenv 包),然后用dotenv.config();
- 现在是 import { config } from 'dotenv'(只导入需要的config函数),然后直接用config();
- 核心区别:后者更「轻量」,不用加载 dotenv 里用不上的功能,是前端 / Node.js 里的常见优化写法。
👉 关键语法:import { 某个功能 } from "包名" 叫「解构导入」,专门用来从包中精准提取需要的部分,避免冗余。
2. 加载环境变量:和之前功能一样,写法简化
            
            
              javascript
              
              
            
          
          config({
  path: '.env'
});- 等价于之前的 dotenv.config({ path: ".env" }),只是因为前面用了解构导入,直接调用config()就行;
- 作用还是:读取 .env文件里的OPENAI_API_KEY(你的 OpenAI 密钥),把它放到process.env里,后续用process.env.OPENAI_API_KEY就能拿到。
3. 验证环境变量:确认密钥加载成功
            
            
              javascript
              
              
            
          
          console.log(process.env);- 作用:在终端打印所有环境变量 配置或参数,帮你确认.env里的密钥是不是真的加载了;
- 运行后如果终端能看到 OPENAI_API_KEY: "sk-xxxxxx"(你的密钥),说明加载成功;如果没看到,可能是.env文件路径错了,或文件没写对。
4. 初始化 OpenAI 客户端:创建「调用接口的工具人」
            
            
              javascript
              
              
            
          
          const client = new OpenAI({
  // 传入 API 密钥(从环境变量拿,避免硬写在代码里泄露)
  apiKey: process.env.OPENAI_API_KEY,
  
  // 自定义请求地址:不调用 OpenAI 官方服务器,转而调用第三方代理(agicto.cn)
  baseURL: 'https://api.agicto.cn/v1'
});这是核心步骤之一,相当于「给 AI 接口办一张「访问卡」,后续用这张卡发请求」:
- 
const client = new OpenAI({ ... }):- new OpenAI(...):用导入的- OpenAI工具创建一个「客户端实例」(可以理解为「专门帮你对接 AI 接口的工具人」);
- const client:把这个工具人存到- client变量里,后续用- client.xxx就能调用接口(比如画图、聊天)。
 
- 
两个关键配置参数(必须对,否则调用失败): - apiKey: process.env.OPENAI_API_KEY:给工具人配「身份凭证」(API 密钥),AI 服务器要验证这个密钥才允许你调用;
- baseURL: 'https://api.agicto.cn/v1':给工具人指「服务器地址」(默认是 OpenAI 官方服务器- https://api.openai.com/v1),这里改成了第三方代理(可能是因为国内访问 OpenAI 官方需要翻墙,代理可以直接访问)。
 
👉 小白注意:如果这个代理地址失效了,你可以改成其他代理,或用 OpenAI 官方地址(但需要翻墙)。
5. 异步函数:处理「需要等的任务」(核心语法)
            
            
              javascript
              
              
            
          
          // async:标记这个函数是「异步函数」,里面可以用 await(等待任务完成)
const main = async () => {
  // 这里是函数体,后面讲
}
// 调用这个函数(让函数执行)
main();这是 JavaScript 处理「耗时任务」的核心语法,必须搞懂:
- 
为什么需要 async/await?- 调用 AI 接口是「耗时任务」(你的代码要发请求到服务器,服务器生成图片再返回,需要几秒时间);
- 如果不用 async/await,代码会「不等服务器返回就继续跑」,最后拿不到图片链接,还会报错;
- 类比:你去奶茶店点单(调用接口),需要等奶茶做好(服务器处理)才能拿,async/await就是让你「原地等,拿到再走」。
 
- 
语法拆解: - const main = async () => { ... }:定义一个叫- main的「异步箭头函数」(- () => {}是箭头函数,比普通- function main() {}写法简洁);
- main():最后必须调用这个函数,否则函数里的代码永远不会执行(就像你写了一张购物清单,但不拿去超市,永远买不到东西)。
 
6. 调用 DALL・E 3 生成图片:核心业务逻辑
            
            
              javascript
              
              
            
          
          // 函数
// await:等待 client.images.generate() 这个任务完成,再往下执行
const response = await client.images.generate({
  model: "dall-e-3", // 指定用哪个 AI 画图模型(DALL·E 3 是 OpenAI 最新的画图模型,效果最好)
  prompt: "A spaceship flying through the universe", // 给 AI 的指令(画什么)
  n: 1, // 生成几张图片(n=1 就是生成 1 张)
  size: "1024x1024" // 图片尺寸(1024x1024 是正方形,常见尺寸还有 512x512、1792x1024 等)
})
// 打印图片的在线链接(从返回结果里提取)
console.log(response.data[0].url);这是代码的「核心功能」------ 让 AI 画图并拿到结果,逐句拆解:
- 
const response = await client.images.generate({ ... }):- client.images.generate(...):调用 OpenAI 客户端的「图片生成接口」(- images是图片相关功能,- generate是「生成」的意思);
- 括号里的 { model: ..., prompt: ... }:是「接口参数」(给 AI 发指令的详细信息),缺一不可;
- await:关键!让代码暂停在这里,等服务器返回图片结果后,再把结果存到- response变量里。
 
- 
4 个核心接口参数(小白必须会改): 参数名 作用 可选值 / 修改示例 model选择画图模型 DALL・E 3(效果好)、DALL・E 2(速度快、便宜) prompt告诉 AI 画什么(指令) 中文也可以,比如 "一只可爱的柯基在雪地里玩"n生成图片数量 1-10(OpenAI 限制,多了要花钱) size图片尺寸 1024x1024(默认)、512x512(小尺寸,快)、1792x1024(宽屏) 
- 
console.log(response.data[0].url):提取并打印图片链接- response:服务器返回的「完整结果」(像一个大包裹);
- response.data:包裹里的「图片数据数组」(因为- n=1,所以数组里只有 1 个元素);
- response.data[0]:数组里的第一个(也是唯一一个)图片对象;
- response.data[0].url:图片对象里的「在线访问链接」(AI 生成的图片存在 OpenAI / 代理服务器上,通过这个链接能直接打开);
- 执行后,终端会打印一个 https://xxx链接,复制到浏览器就能看到生成的图片。
 

👉小白必懂的 3 个关键语法
- 
解构导入 : import { 功能名 } from "包名"→ 精准拿工具,不冗余;
- 
async/await :处理耗时任务(调用接口、读文件等), async标记函数,await等待结果;
- 
箭头函数 : const 函数名 = () => { ... }→ 比普通函数简洁,现在主流写法。arduinomain.mjs 单点入口 方便管理 mjs 模块化的js import from 导入模块 程序运行后,将一个独立的进程(process) 进程是分配资源的最小单位 前端document ,后端process
👉小白实操步骤(跟着做就能跑通)
- 
确保你已经做了这些: - 项目文件夹里有 package.json(执行过npm init -y,且加了"type": "module");
- 安装了依赖(npm install openai dotenv);
- 根目录有 .env文件,里面写OPENAI_API_KEY=你的密钥(密钥从 OpenAI 官网或代理平台获取)。
 
- 项目文件夹里有 
- 
运行代码: - 终端进入项目文件夹,输入 node 你的文件名.mjs(比如node main.mjs),按回车;
- 等 2-5 秒(AI 生成图片需要时间),终端会打印一个链接;
- 复制链接到浏览器,就能看到图片啦!
 
- 终端进入项目文件夹,输入 
👉常见报错及解决办法(小白避坑)
- 报错「Cannot find module 'openai'」→ 没装工具,重新执行pnpm i openai@4.71.0 dotenv@17.2.3;
- 报错「import 语法错误」→ package.json里没加"type": "module",加上就行;
- 报错「API key is missing」→ .env文件没写对,或路径错了,检查.env里的OPENAI_API_KEY是否正确;
- 报错「Request failed with status code 404」→ baseURL失效了,换成 OpenAI 官方地址 ,或换其他代理;
- 没报错但没拿到链接 → 可能是 n=0(参数错了),改成n=1。
🏃五、小白总结:AIGC 入门的 3 个关键收获
- pnpm 真的快:对比之前用 npm 的经历,这次用 pnpm 装工具至少快了一半,而且省磁盘空间,以后做 AIGC 项目都用它;
- Prompt 是 AIGC 的 "灵魂" :同样的 AIGC 模型,Prompt 写得好,生成的内容质量完全不一样,新手可以从 "加细节" 开始练;
- AIGC 开发不复杂:以前总觉得 "调用 AI 接口" 是大神的事,实际动手后发现,只要跟着流程搭环境、写代码,小白也能 30 分钟搞定一个简单的 AIGC 功能。