""" 测试世界书 SillyTavern 格式兼容性 """ 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("世界书 SillyTavern 格式兼容性测试") print("=" * 60) # 列出所有JSON文件 json_files = list(WORLDBOOKS_PATH.glob("*.json")) print(f"\n找到 {len(json_files)} 个世界书文件") for file_path in json_files: print(f"\n{'='*60}") print(f"测试文件: {file_path.name}") print(f"{'='*60}") try: with open(file_path, 'r', encoding='utf-8') as f: data = json.load(f) entries_raw = data.get("entries", []) print(f"\n1. 格式检测:") if isinstance(entries_raw, dict): print(f" 类型: SillyTavern 格式 (字典)") print(f" 条目数量: {len(entries_raw)}") print(f" 键示例: {list(entries_raw.keys())[:5]}") # 模拟转换为列表 all_entries = [] for key in sorted(entries_raw.keys(), key=lambda x: int(x) if x.isdigit() else 0): entry = entries_raw[key] if 'uid' not in entry: entry['uid'] = key all_entries.append(entry) print(f"\n2. 转换后:") print(f" 列表长度: {len(all_entries)}") if all_entries: print(f" 第一条目 UID: {all_entries[0].get('uid')}") print(f" 第一条目键: {all_entries[0].get('key', 'N/A')}") # 测试分页 print(f"\n3. 分页测试 (page=1, page_size=3):") page = 1 page_size = 3 start_idx = (page - 1) * page_size end_idx = start_idx + page_size paginated = all_entries[start_idx:end_idx] total_pages = (len(all_entries) + page_size - 1) // page_size print(f" 总条目数: {len(all_entries)}") print(f" 总页数: {total_pages}") print(f" 当前页返回: {len(paginated)} 条") for i, entry in enumerate(paginated, start=1): print(f" {i}. UID={entry.get('uid')}, 内容长度={len(entry.get('content', ''))}") elif isinstance(entries_raw, list): print(f" 类型: 内部格式 (列表)") print(f" 条目数量: {len(entries_raw)}") # 测试分页 print(f"\n2. 分页测试 (page=1, page_size=3):") page = 1 page_size = 3 start_idx = (page - 1) * page_size end_idx = start_idx + page_size paginated = entries_raw[start_idx:end_idx] total_pages = (len(entries_raw) + page_size - 1) // page_size print(f" 总条目数: {len(entries_raw)}") print(f" 总页数: {total_pages}") print(f" 当前页返回: {len(paginated)} 条") for i, entry in enumerate(paginated, start=1): print(f" {i}. UID={entry.get('uid')}, 内容长度={len(entry.get('content', ''))}") else: print(f" ⚠️ 未知格式: {type(entries_raw)}") except Exception as e: print(f" ❌ 错误: {e}") import traceback traceback.print_exc() print("\n" + "=" * 60) print("测试完成") print("=" * 60)