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

91 lines
2.6 KiB
TypeScript

import { SentencePerfect } from '../src/module/sentence-perfect.ts';
import { readFileSync, writeFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import { Kevisual } from '@kevisual/ai';
import { config } from '../src/module/config.ts';
const __dirname = dirname(fileURLToPath(import.meta.url));
// 配置
const INPUT_PATH = join(__dirname, '../data/sentence-01.json');
const OUTPUT_PATH = join(__dirname, '../data/sentence-01-optimized.json');
// 读取原始句子
const data = JSON.parse(readFileSync(INPUT_PATH, 'utf-8'));
const sentences = data.sentences || data;
console.log(`📖 加载了 ${sentences.length} 条句子\n`);
// 创建 AI 实例
const ai = new Kevisual({
apiKey: config.KEVISUAL_NEW_API_KEY || '',
model: 'qwen-turbo'
});
// 创建优化器
const perfect = new SentencePerfect({
ai,
concurrency: 3, // 并发数
retryTimes: 2, // 重试次数
// 进度回调
onProgress: (progress) => {
const { current, total, percentage, successCount, errorCount } = progress;
process.stdout.write(`\r🔄 进度: ${current}/${total} (${percentage}%) | 成功: ${successCount} | 失败: ${errorCount}`);
},
// 成功回调
onSuccess: (result) => {
if (result.index % 10 === 0) {
console.log(`\n✅ ${result.index}: "${result.text}"`);
console.log(` → "${result.optimized}"`);
}
},
// 失败回调
onError: (error) => {
console.log(`\n❌ ${error.index}: ${error.error}`);
}
});
// 准备数据 - 只处理前20条作为测试
// const items = sentences.slice(0, 2).map((s: any, i: number) => ({
// ...s,
// index: s.index || i + 1
// }));
const items = sentences;
console.log('🚀 开始优化句子...\n');
// 执行优化
const startTime = Date.now();
const results = await perfect.perfectBatch(items);
const elapsed = Date.now() - startTime;
console.log(`\n\n✅ 完成!耗时: ${(elapsed / 1000).toFixed(2)}`);
// 统计
const successResults = results.filter(r => r.optimized !== r.text);
console.log(` 成功: ${successResults.length}/${results.length}`);
// 保存结果
const output = {
meta: {
total: results.length,
success: successResults.length,
optimizedAt: new Date().toISOString()
},
sentences: results
};
writeFileSync(OUTPUT_PATH, JSON.stringify(output, null, 2), 'utf-8');
console.log(`📁 结果已保存到: ${OUTPUT_PATH}`);
// 显示示例
console.log('\n📝 优化示例:');
successResults.slice(0, 5).forEach((r, i) => {
console.log(`\n${i + 1}. [${r.theme}]`);
console.log(` 原: ${r.text}`);
console.log(` 优: ${r.optimized}`);
});