Files
batch-prompts/prompts/test/generate-perfect.ts
2026-01-10 16:58:15 +08:00

93 lines
3.5 KiB
TypeScript

import { Kevisual } from "@kevisual/ai";
import { useConfig } from '@kevisual/use-config'
import path from "node:path";
import fs from "node:fs";
import { createStorage } from "unstorage";
import { Prompt } from "../src/index.ts";
import fsDriver from "unstorage/drivers/fs";
const promptPath = path.join(process.cwd(), "./docs/prompts-01.json");
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
const storage = createStorage({
driver: fsDriver({ base: 'storage' }),
});
const config = useConfig();
const kevisual = new Kevisual({
token: config.KEVISUAL_NEW_API_KEY || "",
model: "qwen-turbo"
});
if (!fs.existsSync(promptPath)) {
console.error("Prompt file not found:", promptPath);
process.exit(1);
}
const prompts = JSON.parse(fs.readFileSync(promptPath, "utf-8")) as { key: string, value: string, id: string }[];
const currentUsage = (await storage.getItem("usage.json") as any) || { prompt_tokens: 0, total_tokens: 0, completion_tokens: 0 };
console.log("Current usage:", currentUsage);
async function generatePerfectPrompts() {
for (const promptData of prompts) {
const id = promptData.id + '.json';
const has = await storage.get(id);
if (has) {
continue;
}
try {
const perfectPrompt = `请你将以下提示词进行完善,使其更加详细和具体,适合用于生成高质量的像素艺术图像。要求如下:
1. 只返回完善后的提示词,不要包含任何多余的内容或解释。
2. 确保提示词专注于像素艺术风格,包括但不限于像素化角色、场景和物体的描述。
3. 使用具体的细节来增强提示词的表现力,例如颜色、构图、光影效果等。
4. 避免使用与像素艺术无关的术语或描述。
5. 保持提示词的简洁性,避免过于冗长,但要确保信息量充足。
6. 如果需要颜色,需要整个图像的颜色更少的描述,而不是复杂的颜色细节, 背景默认纯蓝色。
7. 使用中文进行描述。
`;
const prompt = new Prompt({ perfectPrompt });
const result = await kevisual.chat([
{
role: "user",
content: prompt.perfect(promptData.value),
}
])
const text = prompt.clearPerfectTags(kevisual.responseText);
await storage.setItem(id, {
value: promptData.value,
id: promptData.id,
perfect: text,
});
await sleep(2000); // Avoid rate limits
const _usage = kevisual.getChatUsage()
console.log("Generated perfect prompt for:", promptData.id, _usage?.total_tokens);
currentUsage.total_tokens += _usage?.total_tokens || 0;
currentUsage.prompt_tokens += _usage?.prompt_tokens || 0;
currentUsage.completion_tokens += _usage?.completion_tokens || 0;
// Update usage
await storage.setItem("usage.json", {
prompt_tokens: currentUsage.prompt_tokens,
total_tokens: currentUsage.total_tokens,
completion_tokens: currentUsage.completion_tokens,
});
console.log('优化的提示词', text);
} catch (error) {
console.error("Error generating perfect prompt for:", promptData, error);
// 如果是超时错误,等待一段时间后继续
if ((error as any)?.message?.includes("timeout")) {
console.log("Timeout occurred, waiting for 30 seconds before retrying...");
await sleep(10000);
continue;
} else {
process.exit(1);
}
}
}
}
generatePerfectPrompts();
// bun test/generate-perfect.ts
// pm2 start --name "generate-perfect" --interpreter=bun -- test/generate-perfect.ts