1. AIGC(Artificial Intelligence Generated Content)
生成式人工智能(Generative AI) ,指利用 AI 自动生成文本、图像、音频等内容的技术。
常见生成能力示例:
- 文本生成:使用
gpt-3.5-turbo-instruct模型生成自然语言内容。 - 图像生成:使用
DALL·E 2模型根据文本描述生成高质量图像。
✅ AIGC 核心价值:提升内容创作效率,降低人力成本,实现个性化输出。
2. 开发环境搭建(Node.js + OpenAI)
技术栈选择建议
| 工具 | 说明 |
|---|---|
pnpm | 推荐替代 npm 的高性能包管理器,速度快、磁盘占用低 |
dotenv | 加载 .env 文件中的环境变量到 process.env |
openai | 官方 OpenAI SDK,用于调用 GPT、DALL·E 等 API |
✅ 安装与初始化流程
# 1. 全局安装 pnpm(若未安装)
npm install -g pnpm
# 2. 初始化项目(生成 package.json)
pnpm init -y
# 3. 安装依赖(高效且节省空间)
pnpm add dotenv openai
💡 为什么用 pnpm?
- 使用硬链接/符号链接避免重复包
- 安装速度更快,磁盘占用减少 50%~80%
- 支持 workspace(多包项目),适合长期维护
3. 项目结构与入口文件
创建主入口文件
touch main.mjs
使用 .mjs 扩展名的原因
- 明确启用 ES Modules(ESM)语法
- 支持现代
import / from模块导入方式 - 避免与 CommonJS(require)混淆
运行脚本
node main.mjs
- Node.js 会以独立进程(Process)运行该脚本
- 后端中
process是核心全局对象(类比前端的document)
4. 环境变量管理:dotenv
创建 .env 文件
OPENAI_API_KEY=sk-your-api-key-here
OPENAI_ORG_ID=org-xxxxx
在代码中加载
import dotenv from 'dotenv';
dotenv.config(); // 自动读取 .env 并注入 process.env
console.log(process.env.OPENAI_API_KEY); // 可直接使用
🔐 安全提示:
.env文件应加入.gitignore,防止密钥泄露!
5. Prompt(提示词)基础
什么是 Prompt?
- 向大模型输入的一段指令或对话文本
- 决定模型输出的内容、风格、格式
示例:
请用中文写一篇关于气候变化的科普文章,约300字,语气正式但易懂。
💬 Prompt 是你与 LLM “沟通”的唯一方式,设计好坏直接影响结果质量。
6. 提示工程(Prompt Engineering)
定义
通过系统性设计、测试、优化提示词,引导模型输出符合预期的结果。
核心原则
| 原则 | 说明 |
|---|---|
| 明确任务 | 清晰说明你要做什么(写文、翻译、总结…) |
| 设定角色 | “你是一位资深编辑” 比 “回答问题” 更有效 |
| 结构化输入 | 分步骤、加编号、使用分隔符(如 ``` ) |
| 示例引导 | 提供输入-输出样例(Few-shot prompting) |
| 迭代优化 | 不断调整 prompt,观察输出变化 |
示例优化过程:
❌ 初级 Prompt:
写点关于AI的东西。
✅ 优化后 Prompt:
你是一位科技专栏作家。请撰写一段 200 字左右的短文,介绍生成式AI在教育领域的应用前景,要求语言生动、举例具体、结尾提出一个思考问题。
7. 实践建议
🛠 开发小贴士
- 使用
main.mjs作为单点入口,便于调试和部署 - 将 API 调用封装成函数,提高复用性
- 记录每次 prompt 修改及其输出,形成“提示词日志”
- 结合版本控制(Git),管理不同阶段的 prompt 效果
8.🎓 代码讲解:使用 Node.js 调用 OpenAI 生成图片(DALL·E)
// 模块化导入
import OpenAI from "openai";
// 导入包的一部分,优化性能(只加载需要的功能)
import { config } from "dotenv";
// 加载 .env 文件中的环境变量
config({
path: '.env' // 指定环境变量文件路径
});
// 查看当前进程中的环境变量(调试用)
console.log(process.env);
🔍 讲解:
这一段是项目的“基础设施”。我们使用了 ES6 的 模块化语法(import),只从dotenv中导入我们需要的config函数,避免加载整个包,提升效率。
config()会读取.env文件,并把里面的键值对注入到process.env中,比如 API 密钥、服务地址等敏感信息就可以安全地外部管理。
// 创建 OpenAI 客户端实例
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY, // 从环境变量读取密钥
baseURL: 'https://api.agicto.cn/v1' // 自定义请求地址(可选)
});
🔍 讲解:
OpenAI是官方 SDK,已经成为 AIGC 领域的事实标准。
apiKey是身份认证的关键,必须保密。baseURL允许我们不直接访问 OpenAI 官方服务器,而是通过国内代理、反向代理或私有部署的 LLM 网关(如api.agicto.cn)来转发请求,解决网络访问问题。这种设计非常灵活,便于在不同环境(开发/测试/生产)中切换模型服务商。
// 定义主函数:异步执行图像生成任务
const main = async () => {
const response = await client.images.generate({
model: 'dall-e-3', // 使用 DALL·E 3 模型(最强大)
prompt: 'a black pig like a people', // 提示词:描述想要的画面
n: 1, // 生成 1 张图片
size: '1024x1024' // 图片尺寸
});
// 输出响应结果
console.log(response.data);
};
// 调用主函数
main();
🔍 讲解:
这里定义了一个async异步函数main,因为调用 AI 接口是一个耗时操作(网络请求),必须用await等待结果返回。
client.images.generate()是 OpenAI 提供的图像生成接口:
model: 'dall-e-3':选择最先进的图像模型,画质更高、理解力更强。prompt:这就是“提示工程”的核心!你描述得越清晰,生成效果越好。当前提示是“一只像人的黑猪”,可能会生成拟人化的卡通猪形象。n: 1:生成一张图(最多可生成 10 张)。size:支持'1024x1024'、'1792x1024'等尺寸。
最终,response.data 会包含生成图片的 URL 列表,你可以复制链接在浏览器中查看。
✅ 运行效果示例(假设成功):
[ { revised_prompt: "A surreal black pig that stands upright like a human, dressed in formal attire such as a tailored suit and tie. The pig has expressive eyes and its posture is confident and poised. The background features a soft, dreamlike setting with a gradient of pastel colors, evoking an otherworldly feel. The image is hyper-detailed, with attention to textures like the pig's skin, the fabric of its clothing, and the nuanced lighting enhancing the whimsical and surreal aesthetic.", url: 'https://dalleprodaue.blob.core.windows.net/private/images/e021e3aa-ef10-41d6-a059-67c4bfabf80f/generated_00.png?se=2025-10-30T15%3A12%3A47Z&sig=bfco68q8SridOyuSlG1F4wfc7P5adifsd1VKZP4d0wk%3D&ske=2025-11-04T13%3A05%3A12Z&skoid=f4f58869-78fa-4857-8a87-4ce5ae4ba8c3&sks=b&skt=2025-10-28T13%3A05%3A12Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02' }]
你只需点击这个 URL,就能看到 AI 根据你的提示生成的图像!
非常帅气
💡 优化建议:
-
改进 Prompt:
将"a black pig like a people"改为更具体的描述,例如:"A cartoon black pig wearing a suit and walking on two legs, city background, sunny day, high detail, 4K"
更清晰的描述 = 更高质量的图像。 -
保存图片链接:
可以将response.data[0].url写入文件或数据库,方便后续使用。
当然可以!以下是对这段代码的逐段详细讲解,适合用于学习、教学或技术分享:
import OpenAI from "openai";
import { config } from "dotenv";
config({
path: '.env'
});
🔍 讲解:
使用 ES 模块语法导入必要的库:
OpenAI:OpenAI 官方 SDK,用于调用其 API(如 GPT、DALL·E 等)。config:从dotenv中解构导入,用于加载.env文件中的环境变量。
config({ path: '.env' })指定配置文件路径,将.env中的OPENAI_API_KEY等变量注入到process.env,实现密钥与代码分离,更安全。
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.agicto.cn/v1'
});
🔍 讲解:
创建一个 OpenAI 客户端实例:
apiKey:从环境变量读取,避免硬编码密钥。baseURL:这里使用了代理地址https://api.agicto.cn/v1,说明没有直接访问 OpenAI 官方服务器,而是通过国内可用的反向代理服务中转请求。这对于网络受限的开发者非常实用。💡 这种方式在不修改代码逻辑的前提下,实现了“无缝切换”服务商,是现代 AIGC 应用常见的做法。
const saleData = `销售数据:
日期,产品,销量,单价,总收入
2023-01-01,iPhone 13,100,6000,600000
2023-01-01,iPhone 14,50,8000,400000
2023-01-02,iPhone 13,80,6000,480000
2023-01-02,iPhone 14,60,8000,480000
2023-01-03,iPhone 13,120,5800,696000
2023-01-03,iPhone 14,80,7800,624000
`;
🔍 讲解:
定义了一个多行字符串saleData,模拟真实的销售数据。格式为 CSV(逗号分隔值),包含:
- 日期、产品名称、销量、单价、总收入
这段数据将作为上下文信息传递给大模型,是后续分析的基础。注意:数据量不宜过大,否则可能超出 token 限制。
const main = async (reference_date, query) => {
const prompt = `
You are an AI data analysis assistant that generates sales reports based on
the given sales data.
here is the sales data:\n
${reference_date}\n\n
Please generate a report to answer the fllowing question:\n
${query}
`;
🔍 讲解:
定义了一个异步函数main,接收两个参数:
reference_date:实际传入的是销售数据(命名稍有误导,建议改为salesData)query:用户提出的问题,例如“给出销售策略”
prompt是核心——提示词(Prompt) ,采用模板字符串构建,包含:
- 角色设定:
You are an AI data analysis assistant...—— 让模型明确自己的身份和任务。- 上下文输入:插入
reference_date数据,为分析提供依据。- 任务指令:要求模型根据数据回答问题。
- 格式控制:使用
\n和\n\n增加可读性,帮助模型更好地区分数据与指令。
⚠️ 小提示:原句中
fllowing拼写错误(应为following),虽然不影响模型理解,但在生产环境中建议保持拼写准确。
let response = await client.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'user', content: prompt }
],
max_tokens: 1024,
temperature: 0.1,
});
🔍 讲解:
调用 OpenAI 的聊天补全接口:
model: 'gpt-3.5-turbo':使用性价比高、响应快的 GPT-3.5 模型。messages:以对话形式传入提示,role: 'user'表示这是用户输入。max_tokens: 1024:限制最大输出长度,防止结果过长。temperature: 0.1:设置为低随机性,让输出更稳定、更确定,适合数据分析类任务(对比:创意写作可用 0.7~1.0)。
console.log(response.choices[0].message.content);
};
main(saleData, '根据上述销售数据,给出销售策略');
🔍 讲解:
- 输出模型返回的分析结果。
response.choices[0].message.content就是 GPT 生成的文本。- 最后调用
main()函数,传入销售数据和问题:“根据上述销售数据,给出销售策略”。
✅ 输出示例:
🎯 总结
这段代码展示了 AIGC 在数据分析场景中的典型应用:
把结构化数据 + 自然语言问题 → 交给大模型 → 生成可读性强的分析报告
这正是“提示工程 + API 调用 + 数据驱动”的完美结合,也是现代智能应用的核心模式之一。
🧠 总结一句话:
我们通过一段简洁的 JavaScript 代码,结合提示工程与 OpenAI SDK,实现了“文字变图像”的生成式 AI 能力,而这正是 AIGC 的魅力所在——让创意即时发生。
总结
| 模块 | 关键点 |
|---|---|
| AIGC | 文本、图像生成是当前主流应用 |
| 环境搭建 | 推荐 pnpm + dotenv + ESM 技术组合 |
| 提示词 | 是控制 AI 输出的核心“遥控器” |
| 提示工程 | 是一门需要持续实践的“软技能” |
🎯 记住:好的 AI 应用 = 好的 Prompt + 好的工程实现
源代码
// 模块化导入
import OpenAI from "openai";
// 导入包的一部分,优化
// es6 解构
import {config} from "dotenv";
config({
path:'.env'
});
// 进程启动了
console.log(process.env);
const client = new OpenAI({
apiKey:process.env.OPENAI_API_KEY,
// openai sdk 是AIGC 事实标准
// 默认发送请求到openai
// 可以通过baseURL 自定义服务器地址 LLM 服务器代理商或其他模型
baseURL:'https://api.agicto.cn/v1'
});
// 箭头函数
// async 耗时性的任务 异步任务
const main = async () =>{
// 生成图片接口
const response = await client.images.generate({
model:'dall-e-3',//达芬奇
// prompt 给llm下达的指令
prompt:"a black pig like a people",
n:1,
size:'1024x1024'
})
console.log(response.data);
}
main();
import OpenAI from "openai";
import {config} from "dotenv";
config({
path:'.env'
});
const client = new OpenAI({
apiKey:process.env.OPENAI_API_KEY,
baseURL:'https://api.agicto.cn/v1'
})
const saleData = `销售数据:
日期,产品,销量,单价,总收入
2023-01-01,iPhone 13,100,6000,600000
2023-01-01,iPhone 14,50,8000,400000
2023-01-02,iPhone 13,80,6000,480000
2023-01-02,iPhone 14,60,8000,480000
2023-01-03,iPhone 13,120,5800,696000
2023-01-03,iPhone 14,80,7800,624000
`
const main = async (reference_date,query) => {
// 制定身份,找对人
//模板字符串
// 多行
// 准确的描述任务
// 数据,清楚说明+格式限定
// \n \n\n 边界效果
const prompt = `
You are an AI data analysis assistant that generates sales reports based on
the given sales data.
here is the sales data:\n
${reference_date}\n\n
Please generate a report to answer the fllowing question:\n
${query}
`
let response = await client.chat.completions.create({
model:'gpt-3.5-turbo',
messages: [
{ role: 'user', content: prompt }
],
max_tokens:1024,
temperature:0.1,
})
console.log(response.choices[0].message.content);
}
main(saleData,'根据上述销售数据,给出销售策略');