""" 直接测试世界书文件读取(不依赖backend模块) """ import json from pathlib import Path # 项目根目录 PROJECT_ROOT = Path(r'D:\progarm\python\llm_workflow_engine') DATA_PATH = PROJECT_ROOT / 'data' WORLDBOOKS_PATH = DATA_PATH / 'worldbooks' print("=" * 60) print("世界书文件直接读取测试") print("=" * 60) print(f"\n1. 路径信息:") print(f" 世界书目录: {WORLDBOOKS_PATH}") print(f" 目录存在: {WORLDBOOKS_PATH.exists()}") # 列出所有JSON文件 json_files = list(WORLDBOOKS_PATH.glob("*.json")) print(f"\n2. JSON文件列表:") print(f" 文件数量: {len(json_files)}") for f in json_files: print(f" - {f.name} ({f.stat().st_size} bytes)") if json_files: # 尝试读取第一个文件 first_file = json_files[0] print(f"\n3. 尝试读取文件: {first_file.name}") try: with open(first_file, 'r', encoding='utf-8') as f: data = json.load(f) print(f" ✓ 文件读取成功") print(f" 文件格式: JSON") print(f" 顶层键: {list(data.keys())}") # 检查是否是内部格式 if 'entries' in data: entries = data['entries'] if isinstance(entries, list): print(f" 格式类型: 内部格式 (Internal)") print(f" 条目数量: {len(entries)}") print(f" 世界书名称: {data.get('name', '未设置')}") print(f" 描述: {data.get('description', '无')}") if entries: print(f"\n 第一条目预览:") first_entry = entries[0] print(f" UID: {first_entry.get('uid', 'N/A')}") print(f" 内容长度: {len(first_entry.get('content', ''))}") print(f" 键: {first_entry.get('key', [])}") elif isinstance(entries, dict): print(f" 格式类型: SillyTavern格式") print(f" 条目数量: {len(entries)}") else: print(f" ⚠️ 未知格式,缺少 'entries' 键") except json.JSONDecodeError as e: print(f" ❌ JSON解析失败: {e}") except Exception as e: print(f" ❌ 读取失败: {e}") import traceback traceback.print_exc() # 如果有多个文件,也检查第二个 if len(json_files) > 1: second_file = json_files[1] print(f"\n4. 尝试读取第二个文件: {second_file.name}") try: with open(second_file, 'r', encoding='utf-8') as f: data = json.load(f) print(f" ✓ 文件读取成功") if 'entries' in data: entries = data['entries'] if isinstance(entries, list): print(f" 格式类型: 内部格式 (Internal)") print(f" 条目数量: {len(entries)}") elif isinstance(entries, dict): print(f" 格式类型: SillyTavern格式") print(f" 条目数量: {len(entries)}") except Exception as e: print(f" ❌ 读取失败: {e}") print("\n" + "=" * 60) print("测试完成") print("=" * 60)