fix_strategy_requirement.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import os
  2. import json
  3. import glob
  4. def main():
  5. base_dir = r"c:\Users\11304\gitlab\cybertogether\Agent\examples\process_research\output"
  6. # 遍历 output 目录下的所有子文件夹
  7. if not os.path.exists(base_dir):
  8. print(f"Directory not found: {base_dir}")
  9. return
  10. fixed_count = 0
  11. skip_count = 0
  12. for item in os.listdir(base_dir):
  13. sub_dir = os.path.join(base_dir, item)
  14. if not os.path.isdir(sub_dir):
  15. continue
  16. strategy_path = os.path.join(sub_dir, "strategy.json")
  17. if not os.path.exists(strategy_path):
  18. continue
  19. # 读取 strategy.json
  20. try:
  21. with open(strategy_path, "r", encoding="utf-8") as f:
  22. strategy_data = json.load(f)
  23. except Exception as e:
  24. print(f"Error reading {strategy_path}: {e}")
  25. continue
  26. # 如果已经有了,跳过
  27. if "requirement" in strategy_data:
  28. print(f"[{item}] skip: already has requirement")
  29. skip_count += 1
  30. continue
  31. # 寻找对应的 case.json 提取 requirement
  32. requirement_text = None
  33. # 1. 尝试直接找 case.json
  34. case_path = os.path.join(sub_dir, "case.json")
  35. if os.path.exists(case_path):
  36. try:
  37. with open(case_path, "r", encoding="utf-8") as f:
  38. case_data = json.load(f)
  39. requirement_text = case_data.get("requirement")
  40. except Exception:
  41. pass
  42. # 2. 如果没找到或 case.json 不存在,并且存在分散的 case_*.json
  43. if not requirement_text:
  44. case_files = glob.glob(os.path.join(sub_dir, "case_*.json"))
  45. for cf in case_files:
  46. try:
  47. with open(cf, "r", encoding="utf-8") as f:
  48. cf_data = json.load(f)
  49. if "requirement" in cf_data:
  50. requirement_text = cf_data["requirement"]
  51. break
  52. except Exception:
  53. continue
  54. if not requirement_text:
  55. print(f"[{item}] ERROR: could not find 'requirement' in any case files")
  56. continue
  57. # 更新 strategy.json
  58. # 为了保证 requirement 在最开头,创建一个新的 dict
  59. new_strategy_data = {"requirement": requirement_text}
  60. new_strategy_data.update(strategy_data)
  61. try:
  62. with open(strategy_path, "w", encoding="utf-8") as f:
  63. json.dump(new_strategy_data, f, ensure_ascii=False, indent=4)
  64. print(f"[{item}] fixed: added requirement successfully")
  65. fixed_count += 1
  66. except Exception as e:
  67. print(f"[{item}] ERROR writing back strategy data: {e}")
  68. print(f"\nSummary: Fixed {fixed_count} files, Skipped {skip_count} files.")
  69. if __name__ == "__main__":
  70. main()