91 lines
2.6 KiB
TypeScript
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}`);
|
|
});
|