diff --git a/ai b/ai index 7f4b6d2..8ddedee 100644 --- a/ai +++ b/ai @@ -1,25 +1,58 @@ #!/bin/bash -# 真正的AI驱动问题解决脚本 -# 完全交给AI操作,自动识别和修复问题 +# 交互式AI驱动问题修复系统 +# 让用户清楚知道运行状态和位置 set -e # 配置 DEEPSEEK_API_KEY="sk-your-api-key-here" # 请替换为你的真实API密钥 -LOG_FILE="/tmp/ai_solver.log" +SCRIPT_NAME="interactive_ai_fixer.sh" +INSTALL_DIR="/usr/local/bin" +LOG_FILE="/var/log/ai_interactive_fixer.log" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' +PURPLE='\033[0;35m' +CYAN='\033[0;36m' NC='\033[0m' +# 显示运行位置和状态 +show_status() { + echo -e "${PURPLE}" + echo "╔══════════════════════════════════════════════════╗" + echo "║ AI驱动交互式修复系统 ║" + echo "╠══════════════════════════════════════════════════╣" + echo "║ 运行位置: $(pwd) ║" + echo "║ 脚本名称: $0 ║" + echo "║ 系统时间: $(date) ║" + echo "║ 当前用户: $(whoami) ║" + echo "║ 系统信息: $(uname -srm) ║" + echo "╚══════════════════════════════════════════════════╝" + echo -e "${NC}" + echo "" +} + # 日志函数 log() { - echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE" - echo -e "${BLUE}[AI助手]${NC} $1" + local message="$1" + echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" | sudo tee -a "$LOG_FILE" + echo -e "${BLUE}[AI系统]${NC} $message" +} + +# 进度显示函数 +show_progress() { + local step="$1" + local total="$2" + local message="$3" + + local percent=$((step * 100 / total)) + echo -e "${CYAN}📊 进度: [$step/$total] $message...${NC}" + echo -e "${YELLOW} ▰▰▰▰▰▰▰▰▰▰ $percent% 完成${NC}" + echo "" } # 调用AI分析问题 @@ -28,6 +61,7 @@ ask_ai() { local context="$2" log "🤖 咨询AI解决方案: $problem" + echo -e "${CYAN}🔄 正在连接AI助手分析问题...${NC}" # 准备API请求 local request_data=$(cat << EOF @@ -50,104 +84,131 @@ EOF ) # 调用API + echo -e "${YELLOW}📡 发送请求到AI服务器...${NC}" local response=$(curl -s -X POST "https://api.deepseek.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DEEPSEEK_API_KEY" \ - -d "$request_data" || echo "AI请求失败") + -d "$request_data" 2>/dev/null || echo "AI请求失败") # 提取回复 local answer=$(echo "$response" | grep -o '"content":"[^"]*"' | cut -d'"' -f4) if [ -z "$answer" ] || [ "$answer" = "AI请求失败" ]; then - echo "备用方案:检测到脚本执行问题,将采用本地修复方案" + echo -e "${RED}❌ AI连接失败,使用备用方案${NC}" return 1 fi + echo -e "${GREEN}✅ AI回复接收成功${NC}" echo "$answer" } -# 执行AI命令 -execute_ai_command() { +# 执行命令并显示结果 +execute_command() { local command="$1" local description="$2" log "执行: $description" - log "命令: $command" - echo -e "${YELLOW}▶️ 执行: $command${NC}" + echo -e "${BLUE}📝 描述: $description${NC}" + + # 显示执行开始时间 + local start_time=$(date +%s) # 执行命令 + echo -e "${CYAN}────────────────────────────────────────────${NC}" eval "$command" 2>&1 | while IFS= read -r line; do - echo " $line" - echo "$line" >> "$LOG_FILE" + echo " 📋 $line" done + echo -e "${CYAN}────────────────────────────────────────────${NC}" local exit_code=${PIPESTATUS[0]} + local end_time=$(date +%s) + local duration=$((end_time - start_time)) + + if [ $exit_code -eq 0 ]; then + echo -e "${GREEN}✅ 执行成功 (耗时: ${duration}s)${NC}" + else + echo -e "${RED}❌ 执行失败 (退出码: $exit_code, 耗时: ${duration}s)${NC}" + fi + + echo "" return $exit_code } # 分析当前问题 -analyze_current_problem() { - log "分析当前系统问题..." +analyze_problem() { + show_progress 1 5 "分析系统环境" + + echo -e "${PURPLE}🔍 开始系统分析...${NC}" # 收集系统信息 - local system_info=$(uname -a) - local os_info=$(cat /etc/os-release 2>/dev/null || echo "Unknown OS") - local python_version=$(python3 --version 2>/dev/null || echo "Python not installed") - local bash_version=$(bash --version | head -1) + execute_command "uname -a" "获取系统内核信息" + execute_command "cat /etc/os-release" "获取操作系统信息" + execute_command "python3 --version 2>/dev/null || echo 'Python3 未安装'" "检查Python环境" + execute_command "bash --version | head -1" "检查Bash版本" - # 测试脚本URL + show_progress 2 5 "测试问题脚本" + + # 测试问题脚本 local test_url="https://github.com/xzx3344521/dock/raw/refs/heads/main/ai" - local script_content=$(curl -sSL "$test_url" 2>/dev/null || echo "下载失败") + echo -e "${CYAN}🌐 测试问题脚本URL: $test_url${NC}" - local problem_context="系统信息: $system_info -OS信息: $os_info -Python版本: $python_version -Bash版本: $bash_version - -脚本URL: $test_url -脚本内容前几行: -$(echo "$script_content" | head -10) - -错误现象: 脚本内容被直接显示而不是执行,出现 'command not found' 错误" - + execute_command "curl -s -I '$test_url' | head -1" "检查URL可访问性" + + local script_content=$(curl -sSL "$test_url" 2>/dev/null || echo "下载失败") + echo -e "${YELLOW}📄 脚本内容预览:${NC}" + echo "$script_content" | head -10 | while IFS= read -r line; do + echo " 📃 $line" + done + + local problem_context="系统分析完成,检测到远程脚本执行问题" echo "$problem_context" } -# 主要修复函数 +# 主要修复流程 main_repair() { - echo -e "${GREEN}🚀 启动AI问题修复系统...${NC}" - echo -e "${YELLOW}⚠️ 全程交给AI操作,请勿中断...${NC}" + show_status + + echo -e "${GREEN}🚀 启动AI自动修复流程...${NC}" + echo -e "${YELLOW}⚠️ 注意: 整个流程将由AI自动控制${NC}" + echo "" # 分析问题 - local problem_context=$(analyze_current_problem) - local problem_description="用户尝试执行远程脚本但失败,脚本内容被显示而不是执行,出现命令未找到错误" + local problem_context=$(analyze_problem) + local problem_description="用户执行远程脚本失败,脚本内容被显示而不是执行,出现命令未找到错误" - log "问题描述: $problem_description" + show_progress 3 5 "咨询AI解决方案" # 询问AI解决方案 + echo -e "${PURPLE}🤖 正在咨询AI助手...${NC}" local ai_solution=$(ask_ai "$problem_description" "$problem_context") if [ $? -ne 0 ] || [ -z "$ai_solution" ]; then - # AI调用失败,使用备用方案 + echo -e "${RED}❌ AI咨询失败,启用备用方案${NC}" backup_solution return fi + show_progress 4 5 "执行AI方案" + echo -e "${GREEN}🤖 AI提供的解决方案:${NC}" - echo "$ai_solution" + echo -e "${CYAN}$ai_solution${NC}" echo "" - # 提取并执行命令 + # 执行AI命令 execute_ai_commands "$ai_solution" + + show_progress 5 5 "完成修复" + + echo -e "${GREEN}🎉 AI修复流程完成!${NC}" } # 执行AI返回的命令 execute_ai_commands() { local solution="$1" + local command_count=0 - # 提取看起来像命令的行 - echo -e "${YELLOW}🔧 开始执行修复命令...${NC}" + echo -e "${PURPLE}🔧 开始执行AI建议的命令...${NC}" while IFS= read -r line; do # 跳过空行和注释 @@ -155,118 +216,127 @@ execute_ai_commands() { continue fi - # 识别命令(以sudo, apt, curl, wget, python, bash等开头) - if [[ "$line" =~ ^(sudo\s+|apt\s+|curl\s+|wget\s+|python|bash\s+|chmod\s+|mkdir\s+|cd\s+|echo\s+) ]]; then - log "执行AI命令: $line" - execute_ai_command "$line" "AI修复命令" + # 识别命令 + if [[ "$line" =~ ^(sudo\s+|apt\s+|curl\s+|wget\s+|python|bash\s+|chmod\s+|mkdir\s+|cd\s+|echo\s+|pip\s+) ]]; then + command_count=$((command_count + 1)) + execute_command "$line" "AI建议命令 #$command_count" fi done <<< "$solution" + + echo -e "${GREEN}✅ 共执行了 $command_count 个AI命令${NC}" } # 备用解决方案 backup_solution() { - echo -e "${YELLOW}🔧 使用备用修复方案...${NC}" + echo -e "${YELLOW}🛠️ 启用备用修复方案...${NC}" - # 1. 直接下载脚本分析 - execute_ai_command "curl -sSL -o /tmp/analyze_script.py 'https://github.com/xzx3344521/dock/raw/refs/heads/main/ai'" "下载问题脚本" + show_progress 1 3 "下载和分析脚本" + execute_command "curl -sSL -o /tmp/problem_script 'https://github.com/xzx3344521/dock/raw/refs/heads/main/ai'" "下载问题脚本" + execute_command "file /tmp/problem_script" "检测脚本类型" + execute_command "head -3 /tmp/problem_script" "查看脚本头部" - # 2. 检查脚本类型 - execute_ai_command "file /tmp/analyze_script.py" "检查脚本类型" - execute_ai_command "head -5 /tmp/analyze_script.py" "查看脚本开头" + show_progress 2 3 "准备执行环境" + execute_command "sudo apt update" "更新软件包列表" + execute_command "sudo apt install -y python3 python3-pip curl wget file" "安装必要工具" - # 3. 安装必要的工具 - execute_ai_command "sudo apt update && sudo apt install -y python3 python3-pip curl wget" "安装基础工具" - - # 4. 根据脚本类型执行 - if head -1 /tmp/analyze_script.py 2>/dev/null | grep -q "python"; then - execute_ai_command "python3 /tmp/analyze_script.py" "执行Python脚本" + show_progress 3 3 "执行修复" + # 根据脚本类型执行 + if head -1 /tmp/problem_script 2>/dev/null | grep -q "python"; then + execute_command "python3 /tmp/problem_script" "执行Python脚本" else - execute_ai_command "bash /tmp/analyze_script.py" "执行Bash脚本" + execute_command "bash /tmp/problem_script" "执行Bash脚本" fi } -# 创建智能脚本运行器 -create_smart_runner() { - echo -e "${GREEN}🔧 创建智能脚本运行器...${NC}" +# 安装为系统命令 +install_systemwide() { + echo -e "${PURPLE}📥 安装到系统命令...${NC}" - cat > /usr/local/bin/ai-run << 'EOF' -#!/bin/bash -# AI智能脚本运行器 - -URL="$1" -TEMP_SCRIPT="/tmp/smart_script_$$" - -if [ -z "$URL" ]; then - echo "使用方法: ai-run <脚本URL>" - exit 1 -fi - -echo "🤖 AI智能运行器正在处理: $URL" - -# 下载脚本 -if ! curl -sSL "$URL" -o "$TEMP_SCRIPT"; then - echo "❌ 下载失败" - exit 1 -fi - -# 检测并执行 -if head -1 "$TEMP_SCRIPT" | grep -q "python"; then - echo "🐍 检测到Python脚本,使用Python执行..." - python3 "$TEMP_SCRIPT" -elif head -1 "$TEMP_SCRIPT" | grep -q "bash"; then - echo "💻 检测到Bash脚本,使用Bash执行..." - bash "$TEMP_SCRIPT" -else - echo "🔍 自动检测脚本类型..." - # 尝试Python - if python3 -m py_compile "$TEMP_SCRIPT" 2>/dev/null; then - echo "🐍 作为Python脚本执行" - python3 "$TEMP_SCRIPT" - else - echo "💻 作为Bash脚本执行" - bash "$TEMP_SCRIPT" - fi -fi - -# 清理 -rm -f "$TEMP_SCRIPT" -EOF - - chmod +x /usr/local/bin/ai-run - echo -e "${GREEN}✅ 智能运行器安装完成! 使用: ai-run ${NC}" + show_status + + execute_command "sudo cp '$0' '$INSTALL_DIR/ai-fix'" "复制脚本到系统目录" + execute_command "sudo chmod +x '$INSTALL_DIR/ai-fix'" "设置执行权限" + execute_command "sudo chown root:root '$INSTALL_DIR/ai-fix'" "设置所有权" + + echo -e "${GREEN}✅ 安装完成!现在你可以使用以下命令:${NC}" + echo -e "${CYAN} ai-fix repair - AI修复问题${NC}" + echo -e "${CYAN} ai-fix status - 显示状态${NC}" + echo -e "${CYAN} ai-fix log - 查看日志${NC}" } -# 显示状态 -show_status() { - echo -e "${GREEN}📊 系统状态${NC}" - echo "日志文件: $LOG_FILE" - echo "临时目录: /tmp/" - echo "智能运行器: $(which ai-run 2>/dev/null || echo '未安装')" +# 交互式菜单 +interactive_menu() { + while true; do + show_status + + echo -e "${GREEN}请选择操作:${NC}" + echo -e "${CYAN}1. 🚀 AI自动修复问题${NC}" + echo -e "${CYAN}2. 📥 安装到系统命令${NC}" + echo -e "${CYAN}3. 📊 显示系统状态${NC}" + echo -e "${CYAN}4. 📋 查看执行日志${NC}" + echo -e "${CYAN}5. 🚪 退出${NC}" + echo "" + + read -p "请输入选择 (1-5): " choice + + case $choice in + 1) + main_repair + ;; + 2) + install_systemwide + ;; + 3) + show_status + ;; + 4) + execute_command "cat '$LOG_FILE' | tail -20" "显示最近日志" + ;; + 5) + echo -e "${GREEN}👋 再见!${NC}" + exit 0 + ;; + *) + echo -e "${RED}❌ 无效选择,请重新输入${NC}" + ;; + esac + + echo "" + read -p "按回车键继续..." + clear + done } -# 主程序 +# 命令行参数处理 case "${1:-}" in - "fix") + "repair"|"fix") main_repair ;; - "runner") - create_smart_runner + "install") + install_systemwide ;; "status") show_status ;; "log") - cat "$LOG_FILE" + execute_command "cat '$LOG_FILE'" "显示完整日志" + ;; + "menu"|"interactive") + interactive_menu ;; *) - echo -e "${GREEN}AI驱动问题解决系统${NC}" - echo "使用方法:" - echo " $0 fix - AI自动修复问题" - echo " $0 runner - 安装智能脚本运行器" - echo " $0 status - 查看系统状态" - echo " $0 log - 查看日志" + echo -e "${GREEN}🤖 AI驱动交互式修复系统${NC}" echo "" - echo "当前问题: 远程脚本执行失败,内容被显示而不是执行" - echo "解决方案: 运行 '$0 fix' 让AI自动修复" + echo -e "${CYAN}运行位置: $(pwd)${NC}" + echo -e "${CYAN}脚本路径: $0${NC}" + echo "" + echo -e "${YELLOW}使用方法:${NC}" + echo " $0 repair - 🚀 AI自动修复问题" + echo " $0 install - 📥 安装到系统命令" + echo " $0 status - 📊 显示系统状态" + echo " $0 log - 📋 查看执行日志" + echo " $0 menu - 🖥️ 交互式菜单" + echo "" + echo -e "${PURPLE}推荐使用: $0 menu 进入交互模式${NC}" ;; esac