fix: MCP插件TimeoutError修复 + 多项Bug修复和性能优化
- fix: MCP插件管理接口改为后台任务,修复TimeoutError - fix: MCP连接失败后上下文清理的cancel scope错误 - feat: MCP插件后台注册添加重试机制 - fix: 限制每章自动创建伏笔数量上限 - fix: 修复JSON非法转义字符清洗 - fix: SSE流式生成添加心跳保活 - fix: 职业生成改用POST请求避免URL长度限制 - perf: 使用torch CPU版本加速Docker构建 - fix: 自动修复JSON字符串值中的裸换行符 - feat: 集成json5容错解析器
This commit is contained in:
@@ -16,6 +16,7 @@ from app.models.relationship import CharacterRelationship, Organization, Organiz
|
||||
from app.models.writing_style import WritingStyle
|
||||
from app.models.project_default_style import ProjectDefaultStyle
|
||||
from app.services.ai_service import AIService
|
||||
from app.services.json_helper import loads_json
|
||||
from app.services.prompt_service import prompt_service, PromptService
|
||||
from app.services.plot_expansion_service import PlotExpansionService
|
||||
from app.logger import get_logger
|
||||
@@ -169,7 +170,7 @@ async def world_building_generator(
|
||||
logger.info(f"✅ JSON清洗完成,清洗后长度: {len(cleaned_text)}")
|
||||
logger.info(f" 清洗后预览: {cleaned_text[:300]}...")
|
||||
|
||||
world_data = json.loads(cleaned_text)
|
||||
world_data = loads_json(cleaned_text)
|
||||
logger.info(f"✅ 世界观JSON解析成功(尝试{world_retry_count+1}/{MAX_WORLD_RETRIES})")
|
||||
world_generation_success = True # 解析成功,标记完成
|
||||
|
||||
@@ -433,7 +434,7 @@ async def career_system_generator(
|
||||
# 清洗并解析JSON
|
||||
try:
|
||||
cleaned_response = user_ai_service._clean_json_response(career_response)
|
||||
career_data = json.loads(cleaned_response)
|
||||
career_data = loads_json(cleaned_response)
|
||||
logger.info(f"✅ 职业体系JSON解析成功(尝试{career_retry_count+1}/{MAX_CAREER_RETRIES})")
|
||||
|
||||
yield await tracker.saving("保存职业数据...")
|
||||
@@ -771,7 +772,7 @@ async def characters_generator(
|
||||
|
||||
# 解析批次结果 - 使用统一的JSON清洗方法
|
||||
cleaned_text = user_ai_service._clean_json_response(accumulated_text)
|
||||
characters_data = json.loads(cleaned_text)
|
||||
characters_data = loads_json(cleaned_text)
|
||||
if not isinstance(characters_data, list):
|
||||
characters_data = [characters_data]
|
||||
|
||||
@@ -1362,7 +1363,7 @@ async def outline_generator(
|
||||
|
||||
try:
|
||||
cleaned_text = user_ai_service._clean_json_response(accumulated_text)
|
||||
outline_data = json.loads(cleaned_text)
|
||||
outline_data = loads_json(cleaned_text)
|
||||
if not isinstance(outline_data, list):
|
||||
outline_data = [outline_data]
|
||||
except json.JSONDecodeError as e:
|
||||
@@ -1668,7 +1669,7 @@ async def world_building_regenerate_generator(
|
||||
cleaned_text = user_ai_service._clean_json_response(accumulated_text)
|
||||
logger.info(f"✅ JSON清洗完成,清洗后长度: {len(cleaned_text)}")
|
||||
|
||||
world_data = json.loads(cleaned_text)
|
||||
world_data = loads_json(cleaned_text)
|
||||
logger.info(f"✅ 世界观重新生成JSON解析成功(尝试{world_retry_count+1}/{MAX_WORLD_RETRIES})")
|
||||
world_generation_success = True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user