158 lines
4.5 KiB
Bash
158 lines
4.5 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
# AIM智能体系统分析工具自动化脚本
|
|||
|
|
# 用法: ./run_analysis.sh results/results0902
|
|||
|
|
#
|
|||
|
|
# Author: ycz copilot
|
|||
|
|
|
|||
|
|
# 移除set -e,改为手动错误处理
|
|||
|
|
# set -e
|
|||
|
|
|
|||
|
|
# 颜色定义
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
BLUE='\033[0;34m'
|
|||
|
|
NC='\033[0m' # No Color
|
|||
|
|
|
|||
|
|
print_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|||
|
|
print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
|||
|
|
print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
|
|||
|
|
print_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|||
|
|
|
|||
|
|
# 检查参数
|
|||
|
|
if [ $# -eq 0 ]; then
|
|||
|
|
print_error "请提供数据目录路径"
|
|||
|
|
echo "用法: $0 <data_dir_path>"
|
|||
|
|
echo "示例: $0 results/results0902"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
RESULTS_DIR=$1
|
|||
|
|
OUTPUT_DIR="analysis/$(basename ${RESULTS_DIR} | sed 's/results//')"
|
|||
|
|
|
|||
|
|
print_info "开始运行AIM智能体系统分析..."
|
|||
|
|
print_info "数据目录: ${RESULTS_DIR}"
|
|||
|
|
print_info "输出目录: ${OUTPUT_DIR}"
|
|||
|
|
|
|||
|
|
# 检查数据目录
|
|||
|
|
if [ ! -d "${RESULTS_DIR}" ]; then
|
|||
|
|
print_error "数据目录不存在: ${RESULTS_DIR}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 检查是否存在.jsonl文件
|
|||
|
|
if [ -z "$(ls -A ${RESULTS_DIR}/*.jsonl 2>/dev/null)" ]; then
|
|||
|
|
print_error "数据目录中没有找到.jsonl文件: ${RESULTS_DIR}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 创建输出目录
|
|||
|
|
mkdir -p "${OUTPUT_DIR}"
|
|||
|
|
|
|||
|
|
# 检查并安装依赖
|
|||
|
|
print_info "检查Python依赖包..."
|
|||
|
|
for package in matplotlib numpy; do
|
|||
|
|
if ! uv run python -c "import $package" 2>/dev/null; then
|
|||
|
|
print_info "安装缺失的依赖包: $package"
|
|||
|
|
uv add "$package"
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# 运行分析脚本的函数
|
|||
|
|
run_script() {
|
|||
|
|
local script=$1
|
|||
|
|
local name=$(basename "$script" .py)
|
|||
|
|
|
|||
|
|
print_info "运行: ${name}"
|
|||
|
|
|
|||
|
|
# 执行Python脚本,捕获错误但继续运行
|
|||
|
|
print_info "执行命令: uv run python analysis/${script} ${RESULTS_DIR} ${OUTPUT_DIR}"
|
|||
|
|
|
|||
|
|
# 使用临时变量存储退出状态
|
|||
|
|
local exit_code=0
|
|||
|
|
uv run python "analysis/${script}" "${RESULTS_DIR}" "${OUTPUT_DIR}" || exit_code=$?
|
|||
|
|
|
|||
|
|
if [ $exit_code -eq 0 ]; then
|
|||
|
|
print_success "${name} 执行成功"
|
|||
|
|
return 0
|
|||
|
|
else
|
|||
|
|
print_error "${name} 执行失败 (退出码: $exit_code)"
|
|||
|
|
return 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 主执行流程
|
|||
|
|
print_info "==============================================="
|
|||
|
|
print_info "AIM智能体系统自动化分析工具"
|
|||
|
|
print_info "==============================================="
|
|||
|
|
|
|||
|
|
success=0
|
|||
|
|
total=0
|
|||
|
|
|
|||
|
|
# 1. 首先运行完成度检查(预处理步骤)
|
|||
|
|
print_info "=========================================="
|
|||
|
|
print_info "步骤1: 检查工作流完成度"
|
|||
|
|
print_info "=========================================="
|
|||
|
|
|
|||
|
|
if uv run python "analysis/workflow_completeness_checker.py" "${RESULTS_DIR}" "${OUTPUT_DIR}"; then
|
|||
|
|
print_success "工作流完成度检查成功"
|
|||
|
|
else
|
|||
|
|
print_error "工作流完成度检查失败"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
print_info ""
|
|||
|
|
print_info "=========================================="
|
|||
|
|
print_info "步骤2: 运行分析脚本(仅处理完成的文件)"
|
|||
|
|
print_info "=========================================="
|
|||
|
|
|
|||
|
|
# 要运行的分析脚本列表
|
|||
|
|
scripts=(
|
|||
|
|
"medical_workflow_analysis.py"
|
|||
|
|
"evaluate_metrics_analysis.py"
|
|||
|
|
"triage_accuracy_analysis.py"
|
|||
|
|
"extract_error_cases.py"
|
|||
|
|
"failed_tasks_analyzer.py"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 运行各个分析脚本
|
|||
|
|
for script in "${scripts[@]}"; do
|
|||
|
|
if [ -f "analysis/${script}" ]; then
|
|||
|
|
print_info "----------------------------------------"
|
|||
|
|
print_info "准备执行脚本: ${script}"
|
|||
|
|
((total++))
|
|||
|
|
if run_script "$script"; then
|
|||
|
|
((success++))
|
|||
|
|
print_info "脚本 ${script} 执行完成"
|
|||
|
|
else
|
|||
|
|
print_error "脚本 ${script} 执行失败"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
print_warning "脚本不存在: analysis/${script}"
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
print_info "----------------------------------------"
|
|||
|
|
print_info "分析完成: 成功 ${success}/${total} 个脚本"
|
|||
|
|
|
|||
|
|
if [ $success -eq $total ] && [ $total -gt 0 ]; then
|
|||
|
|
print_success "所有分析脚本执行成功!"
|
|||
|
|
elif [ $success -gt 0 ]; then
|
|||
|
|
print_warning "部分分析脚本执行成功 (${success}/${total})"
|
|||
|
|
else
|
|||
|
|
print_error "所有分析脚本执行失败"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
if [ $success -gt 0 ]; then
|
|||
|
|
print_info "分析结果已保存到: ${OUTPUT_DIR}"
|
|||
|
|
|
|||
|
|
if [ -d "${OUTPUT_DIR}" ]; then
|
|||
|
|
print_info "生成的文件:"
|
|||
|
|
find "${OUTPUT_DIR}" -type f \( -name "*.png" -o -name "*.json" -o -name "*.csv" -o -name "*.md" -o -name "*.txt" \) | sort | sed 's|.*/| - |'
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
print_error "未生成任何分析结果"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
print_success "AIM智能体系统分析完成!"
|