Files
FlexibleTestPlatform/backend/planner/planning_agent/main.py

72 lines
3.1 KiB
Python
Raw Normal View History

2026-02-05 16:25:52 +08:00
# planning_agent/main.py
import argparse
import sys
import os
from pathlib import Path
# 注意这里使用了相对导入必须以模块方式运行python -m planner.planning_agent.main
from .planner import build_plan_from_text
from planner.mineru_client import extract_texts_with_mineru
def main():
# 尝试强制设置标准输出编码为 utf-8防止部分环境打印异常
if sys.stdout and hasattr(sys.stdout, 'reconfigure'):
try:
sys.stdout.reconfigure(encoding='utf-8')
except Exception:
pass
parser = argparse.ArgumentParser(description="Testing Task Planning Agent (Natural Language Mode)")
parser.add_argument("--input", required=True, help="输入文件或文件夹路径")
parser.add_argument("--output", required=True, help="输出目录路径")
# 新增手动参数接收
parser.add_argument("--manual_args", required=False, default="{}", help="手动填写的参数JSON字符串")
args = parser.parse_args()
input_path = Path(args.input)
output_dir = Path(args.output)
output_dir.mkdir(parents=True, exist_ok=True)
manual_args_str = args.manual_args
# 获取 planner 目录 (当前脚本的父目录的父目录)
# planning_agent/main.py -> planning_agent -> planner
current_file = Path(__file__).resolve()
planner_dir = current_file.parent.parent
mineru_save_dir = planner_dir / "mineru_result"
# 定义需要 MinerU 解析的文档类型
doc_extensions = ['.pdf', '.docx', '.doc', '.xlsx', '.xls', '.pptx']
# 判断逻辑:如果是目录,或者后缀在支持列表中,则使用 MinerU 解析
if input_path.is_dir() or (input_path.is_file() and input_path.suffix.lower() in doc_extensions):
print(f"[INFO] 检测到文档/文件夹输入,将使用 MinerU API 解析文件...")
try:
# 传入 save_dir 到 planner/mineru_result
merged_text_path = extract_texts_with_mineru(str(input_path), save_dir=str(mineru_save_dir))
with open(merged_text_path, "r", encoding="utf-8") as f:
requirement_text = f.read()
source_doc = merged_text_path
except Exception as e:
print(f"[ERROR] 文档解析失败: {e}")
return
else:
# 否则默认当作普通 UTF-8 文本文件读取 (如 .txt, .md)
print(f"[INFO] 检测到文本文件输入,直接读取...")
try:
with open(input_path, "r", encoding="utf-8") as f:
requirement_text = f.read()
source_doc = str(input_path)
except UnicodeDecodeError:
print(f"[ERROR] 文件读取编码错误: {input_path} 不是有效的 UTF-8 文本文件。如果是文档(如docx),请确保 MinerU 流程被正确触发。")
return
except Exception as e:
print(f"[ERROR] 读取文件失败: {e}")
return
# 将 manual_args_str 传递给 planner
output_path = build_plan_from_text(requirement_text, source_doc, str(output_dir), manual_args_str)
print(f"[SUCCESS] 测试任务规划生成完成: {output_path}")
if __name__ == "__main__":
main()