64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import { EventEmitter } from "events";
|
|
import { o_novel } from "@/types/database";
|
|
import { useSkill } from "@/utils/agent/skillsTools";
|
|
import u from "@/utils";
|
|
export interface EventType {
|
|
id: number;
|
|
event: string;
|
|
}
|
|
|
|
/* 文本数据清洗
|
|
* @param textData 需要清洗的文本
|
|
* @param windowSize 每组数量 默认5
|
|
* @param overlap 交叠数量 默认1
|
|
* @returns {totalCharacter:所有人物角色卡,totalEvent:所有事件}
|
|
*/
|
|
|
|
class CleanNovel {
|
|
emitter: EventEmitter;
|
|
constructor() {
|
|
this.emitter = new EventEmitter();
|
|
}
|
|
async start(allChapters: o_novel[], projectId: number): Promise<EventType[]> {
|
|
//所有事件
|
|
let totalEvent: EventType[] = [];
|
|
const intansce = u.Ai.Text("universalAgent");
|
|
|
|
try {
|
|
for (let gi = 0; gi < allChapters.length; gi++) {
|
|
const novel = allChapters[gi];
|
|
let resData;
|
|
try {
|
|
const skill = await useSkill("universal-agent");
|
|
|
|
resData = await intansce.invoke({
|
|
system: skill.prompt,
|
|
messages: [
|
|
{
|
|
role: "user",
|
|
content: "请根据以下小说章节生成事件摘要:\n" + novel.chapterData!,
|
|
},
|
|
],
|
|
tools: skill.tools,
|
|
});
|
|
console.log("%c Line:35 🍆 resData", "background:#fca650", resData);
|
|
|
|
const preData = resData.text;
|
|
|
|
this.emitter.emit("item", { id: novel.id, event: preData });
|
|
totalEvent.push({ id: novel.id!, event: preData });
|
|
} catch (e) {
|
|
console.log("%c Line:51 🍩 e", "background:#93c0a4", e);
|
|
this.emitter.emit("item", { id: novel.id, event: null, errorReason: u.error(e).message });
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.error(e);
|
|
throw e;
|
|
}
|
|
return totalEvent;
|
|
}
|
|
}
|
|
|
|
export default CleanNovel;
|