📘 AI 综述:AIGC 与提示工程入门(两个例子)

88 阅读11分钟

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 根据你的提示生成的图像!

image.png 非常帅气


💡 优化建议:

  1. 改进 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"
    更清晰的描述 = 更高质量的图像。

  2. 保存图片链接
    可以将 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) ,采用模板字符串构建,包含:

  1. 角色设定You are an AI data analysis assistant... —— 让模型明确自己的身份和任务。
  2. 上下文输入:插入 reference_date 数据,为分析提供依据。
  3. 任务指令:要求模型根据数据回答问题。
  4. 格式控制:使用 \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() 函数,传入销售数据和问题:“根据上述销售数据,给出销售策略”。

✅ 输出示例:

image.png


🎯 总结

这段代码展示了 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,'根据上述销售数据,给出销售策略');