🆕 程式碼實作
/**
if (!prompt) throw new Error("必須提供 prompt");
const res = await openai.images.generate({
model: "gpt-image-1",
prompt,
size,
n,
});
if (!fs.existsSync(outputDir)) fs.mkdirSync(outputDir, { recursive: true });
const urls = [];
for (let i = 0; i < res.data.length; i++) {
const b64 = res.data[i].b64_json;
const buf = Buffer.from(b64, "base64");
const filename = path.join(outputDir, img_${Date.now()}_${i + 1}.png
);
fs.writeFileSync(filename, buf);
urls.push(filename);
}
return urls;
}
const args = Object.fromEntries(
process.argv.slice(2).reduce((acc, cur, i, arr) => {
if (cur.startsWith("--")) {
const key = cur.replace(/^--/, "");
const val = arr[i + 1] && !arr[i + 1].startsWith("--") ? arr[i + 1] : true;
acc.push([key, val]);
}
return acc;
}, [])
);
async function main() {
const task = args.task || "chat";
if (task === "image") {
const prompt = args.text || "一隻戴著太空頭盔的柴犬,漂浮在月球上,插著台灣國旗";
const size = args.size || "512x512";
const n = args.n ? Number(args.n) : 1;
const urls = await textToImage(prompt, { size, n });
console.log("\n=== 生成圖片 ===\n");
urls.forEach((f) => console.log("已儲存:" + f));
} else if (task === "chat") {
const sessionId = args.session || "default";
if (args.reset) {
resetSession(sessionId);
console.log(已重設會話:${sessionId}
);
return;
}
const input = args.text || "嗨,我想規劃 3 天 2 夜的台中旅遊行程。";
const { reply } = await chatOnce(input, { sessionId });
console.log(\n[${sessionId}] AI:\n${reply}\n
);
} else if (task === "teacher") {
const out = await englishTeacher(args.text || "He go to school every day.");
console.log("\n=== 英文老師 ===\n");
console.log(out);
} else if (task === "review") {
const out = await codeReview("function sum(arr){ return arr.reduce((a,b)=>a+b,0) }");
console.log("\n=== 程式碼審查 ===\n");
console.log(out);
} else if (task === "sentiment") {
const out = await sentimentClassify(args.text || "今天心情糟透了,事情一團亂。");
console.log("\n=== 情緒分類(JSON) ===\n");
console.log(out);
} else if (task === "json_summary") {
const out = await newsToJson(args.text || "OpenAI 發布新模型,效能大幅提升。");
console.log("\n=== 新聞 JSON 摘要 ===\n");
console.log(out);
} else {
console.log("未知任務,請使用 --task chat | teacher | review | sentiment | json_summary | image");
}
}
main().catch((e) => {
console.error("發生錯誤:", e.message);
process.exit(1);
});
▶️ 執行方式
npm run day6:image --silent
node index.js --task image --text "復古漫畫風格的 AI 機器人" --size 1024x1024 --n 2
會在 outputs/images/ 生成檔案,例如:
outputs/images/img_1726123456789_1.png
outputs/images/img_1726123456789_2.png