refactor:重构智能角色/组织引入机制,从先预测后确认模式改为大纲后自动校验补全模式

This commit is contained in:
xiamuceer-j
2026-02-12 12:39:25 +08:00
parent e31225c45f
commit b9aaf5d6a7
5 changed files with 481 additions and 1619 deletions
File diff suppressed because it is too large Load Diff
-29
View File
@@ -383,35 +383,6 @@ export const outlineApi = {
generateOutline: (data: GenerateOutlineRequest) =>
api.post<unknown, { total: number; items: Outline[] }>('/outlines/generate', data).then(res => res.items),
// 预测续写所需角色
predictCharacters: (data: {
project_id: string;
start_chapter: number;
chapter_count: number;
plot_stage: string;
story_direction?: string;
enable_mcp: boolean;
}) =>
api.post<unknown, {
needs_new_characters: boolean;
reason: string;
character_count: number;
predicted_characters: Array<{
name: string | null;
role_description: string;
suggested_role_type: string;
importance: string;
appearance_chapter: number;
key_abilities: string[];
plot_function: string;
relationship_suggestions: Array<{
target_character_name: string;
relationship_type: string;
description?: string;
}>;
}>;
}>('/outlines/predict-characters', data),
// 获取大纲关联的章节
getOutlineChapters: (outlineId: string) =>
api.get<unknown, {
+3 -31
View File
@@ -18,8 +18,6 @@ export interface SSEClientOptions {
onError?: (error: string, code?: number) => void;
onComplete?: () => void;
onConnectionError?: (error: Event) => void;
onCharacterConfirmation?: (data: any) => void; // 新增:角色确认回调
onOrganizationConfirmation?: (data: any) => void; // 新增:组织确认回调
}
export class SSEClient {
@@ -169,8 +167,6 @@ export class SSEPostClient {
}
let buffer = '';
let currentEvent = ''; // 跟踪当前事件类型
while (true) {
const { done, value } = await reader.read();
@@ -189,38 +185,14 @@ export class SSEPostClient {
}
try {
// 检查是否有事件类型
const eventMatch = line.match(/^event: (.+)$/m);
if (eventMatch) {
currentEvent = eventMatch[1];
}
// 解析数据
const dataMatch = line.match(/^data: (.+)$/m);
if (dataMatch) {
const data = JSON.parse(dataMatch[1]);
// 根据事件类型处理
if (currentEvent === 'character_confirmation_required') {
// 处理角色确认事件
if (this.options.onCharacterConfirmation) {
this.options.onCharacterConfirmation(data);
}
currentEvent = ''; // 重置事件类型
return; // 暂停流程,等待用户确认
} else if (currentEvent === 'organization_confirmation_required') {
// 处理组织确认事件
if (this.options.onOrganizationConfirmation) {
this.options.onOrganizationConfirmation(data);
}
currentEvent = ''; // 重置事件类型
return; // 暂停流程,等待用户确认
} else {
// 标准消息处理
const message: SSEMessage = data;
await this.handleMessage(message, resolve, reject);
currentEvent = ''; // 重置事件类型
}
// 标准消息处理
const message: SSEMessage = data;
await this.handleMessage(message, resolve, reject);
}
} catch (error) {
console.error('解析SSE消息失败:', error, line);