322 lines
8.5 KiB
Bash
322 lines
8.5 KiB
Bash
#!/bin/bash
|
||
|
||
# AI驱动的问题修复脚本 - 自动识别并解决问题
|
||
|
||
set -e
|
||
|
||
# 配置
|
||
DEEPSEEK_API_KEY="你的DeepSeek_API密钥"
|
||
LOG_FILE="/var/log/ai_fixer.log"
|
||
TEMP_DIR="/tmp/ai_fixer"
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m'
|
||
|
||
# 初始化
|
||
init() {
|
||
echo -e "${BLUE}🚀 AI驱动问题修复系统启动...${NC}"
|
||
mkdir -p "$TEMP_DIR"
|
||
sudo touch "$LOG_FILE"
|
||
sudo chmod 644 "$LOG_FILE"
|
||
log "系统初始化完成"
|
||
}
|
||
|
||
# 日志记录
|
||
log() {
|
||
local message="$1"
|
||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" | sudo tee -a "$LOG_FILE"
|
||
echo -e "${BLUE}[AI修复]${NC} $message"
|
||
}
|
||
|
||
# 调用DeepSeek API
|
||
call_ai() {
|
||
local context="$1"
|
||
local problem="$2"
|
||
|
||
log "咨询AI助手解决问题: $problem"
|
||
|
||
# 构建API请求
|
||
local api_response=$(curl -s -X POST "https://api.deepseek.com/v1/chat/completions" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
|
||
-d '{
|
||
"model": "deepseek-coder",
|
||
"messages": [
|
||
{
|
||
"role": "system",
|
||
"content": "你是一个Linux系统和编程专家。请直接给出解决问题的具体命令或代码,用中文简要解释。当前系统:Debian Linux"
|
||
},
|
||
{
|
||
"role": "user",
|
||
"content": "'"问题上下文: $context\n\n具体问题: $problem\n\n请提供具体的修复命令或脚本:"'"
|
||
}
|
||
],
|
||
"temperature": 0.3
|
||
}')
|
||
|
||
# 提取AI回复
|
||
local ai_response=$(echo "$api_response" | grep -o '"content":"[^"]*"' | cut -d'"' -f4)
|
||
|
||
if [ -z "$ai_response" ]; then
|
||
echo "AI请求失败,使用备用方案"
|
||
return 1
|
||
fi
|
||
|
||
echo "$ai_response"
|
||
}
|
||
|
||
# 分析错误信息
|
||
analyze_error() {
|
||
local error_output="$1"
|
||
log "分析错误信息..."
|
||
|
||
echo "$error_output" > "$TEMP_DIR/error.log"
|
||
|
||
# 检测错误类型
|
||
if echo "$error_output" | grep -q "command not found"; then
|
||
echo "Python脚本被当作bash执行"
|
||
return 1
|
||
elif echo "$error_output" | grep -q "import.*command not found"; then
|
||
echo "Python代码在bash中执行错误"
|
||
return 2
|
||
elif echo "$error_output" | grep -q "syntax error"; then
|
||
echo "语法错误"
|
||
return 3
|
||
else
|
||
echo "未知错误类型"
|
||
return 4
|
||
fi
|
||
}
|
||
|
||
# 自动修复Python脚本问题
|
||
fix_python_script() {
|
||
local script_url="$1"
|
||
log "修复Python脚本: $script_url"
|
||
|
||
# 下载脚本
|
||
local original_content=$(curl -sSL "$script_url")
|
||
|
||
if [ -z "$original_content" ]; then
|
||
log "下载脚本失败"
|
||
return 1
|
||
fi
|
||
|
||
echo "$original_content" > "$TEMP_DIR/original_script"
|
||
|
||
# 分析问题并获取AI修复方案
|
||
local context="原始脚本内容:\n$original_content\n\n错误: Python代码被当作bash执行"
|
||
local problem="这是一个Python脚本,但被用bash命令执行了,导致import等Python语句报错"
|
||
|
||
local ai_solution=$(call_ai "$context" "$problem")
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}🤖 AI修复方案:${NC}"
|
||
echo "$ai_solution"
|
||
echo "$ai_solution" > "$TEMP_DIR/ai_solution"
|
||
|
||
# 执行AI的修复命令
|
||
execute_ai_solution "$ai_solution"
|
||
else
|
||
# 备用修复方案
|
||
backup_fix "$original_content"
|
||
fi
|
||
}
|
||
|
||
# 执行AI的解决方案
|
||
execute_ai_solution() {
|
||
local solution="$1"
|
||
log "执行AI解决方案..."
|
||
|
||
# 提取命令部分(假设AI返回中包含具体命令)
|
||
local commands=$(echo "$solution" | grep -E "^(sudo |bash |python |curl |wget |apt)" || echo "$solution")
|
||
|
||
# 执行每个找到的命令
|
||
while IFS= read -r line; do
|
||
if [[ "$line" =~ ^(sudo|bash|python|curl|wget|apt|pip) ]]; then
|
||
log "执行: $line"
|
||
eval "$line" 2>&1 | sudo tee -a "$LOG_FILE"
|
||
fi
|
||
done <<< "$commands"
|
||
}
|
||
|
||
# 备用修复方案
|
||
backup_fix() {
|
||
local original_content="$1"
|
||
log "使用备用方案修复..."
|
||
|
||
# 检测脚本类型
|
||
if echo "$original_content" | grep -q "#!/usr/bin/env python"; then
|
||
echo -e "${YELLOW}检测到Python脚本,重新下载并正确执行...${NC}"
|
||
|
||
# 下载为Python文件
|
||
curl -sSL "$script_url" -o "$TEMP_DIR/script.py"
|
||
chmod +x "$TEMP_DIR/script.py"
|
||
|
||
# 安装必要的Python依赖
|
||
sudo apt update
|
||
sudo apt install -y python3 python3-pip
|
||
|
||
# 尝试执行Python脚本
|
||
python3 "$TEMP_DIR/script.py"
|
||
|
||
elif echo "$original_content" | grep -q "import.*"; then
|
||
echo -e "${YELLOW}这明显是Python代码,创建正确的Python文件...${NC}"
|
||
|
||
# 创建正确的Python脚本
|
||
cat > "$TEMP_DIR/fixed_script.py" << EOF
|
||
#!/usr/bin/env python3
|
||
$original_content
|
||
EOF
|
||
|
||
chmod +x "$TEMP_DIR/fixed_script.py"
|
||
python3 "$TEMP_DIR/fixed_script.py"
|
||
|
||
else
|
||
echo -e "${RED}无法自动识别脚本类型${NC}"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 创建智能启动器
|
||
create_smart_launcher() {
|
||
log "创建智能脚本启动器..."
|
||
|
||
cat > /usr/local/bin/ai-run << 'EOF'
|
||
#!/bin/bash
|
||
|
||
# AI智能脚本启动器 - 自动识别脚本类型并正确执行
|
||
|
||
SCRIPT_URL="$1"
|
||
TEMP_SCRIPT="/tmp/ai_script_$$"
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m'
|
||
|
||
echo -e "${BLUE}🤖 AI智能启动器运行中...${NC}"
|
||
|
||
# 下载脚本
|
||
if ! curl -sSL "$SCRIPT_URL" -o "$TEMP_SCRIPT"; then
|
||
echo -e "${RED}❌ 下载脚本失败${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 检测脚本类型
|
||
detect_script_type() {
|
||
local script_content=$(cat "$TEMP_SCRIPT")
|
||
|
||
# 检查shebang
|
||
if head -1 "$TEMP_SCRIPT" | grep -q "^#!/usr/bin/env python"; then
|
||
echo "python"
|
||
elif head -1 "$TEMP_SCRIPT" | grep -q "^#!/bin/bash"; then
|
||
echo "bash"
|
||
elif head -1 "$TEMP_SCRIPT" | grep -q "^#!/bin/sh"; then
|
||
echo "shell"
|
||
elif echo "$script_content" | grep -q "import.*"; then
|
||
echo "python"
|
||
elif echo "$script_content" | grep -q "def.*("; then
|
||
echo "python"
|
||
else
|
||
echo "unknown"
|
||
fi
|
||
}
|
||
|
||
SCRIPT_TYPE=$(detect_script_type)
|
||
|
||
echo -e "${YELLOW}检测到脚本类型: $SCRIPT_TYPE${NC}"
|
||
|
||
# 根据类型执行
|
||
case "$SCRIPT_TYPE" in
|
||
"python")
|
||
echo -e "${GREEN}执行Python脚本...${NC}"
|
||
# 确保有Python环境
|
||
if ! command -v python3 &> /dev/null; then
|
||
sudo apt update && sudo apt install -y python3
|
||
fi
|
||
python3 "$TEMP_SCRIPT"
|
||
;;
|
||
"bash"|"shell")
|
||
echo -e "${GREEN}执行Bash脚本...${NC}"
|
||
chmod +x "$TEMP_SCRIPT"
|
||
bash "$TEMP_SCRIPT"
|
||
;;
|
||
*)
|
||
echo -e "${YELLOW}未知类型,尝试智能执行...${NC}"
|
||
# 尝试作为bash执行
|
||
if bash -n "$TEMP_SCRIPT" 2>/dev/null; then
|
||
echo -e "${GREEN}作为Bash脚本执行${NC}"
|
||
chmod +x "$TEMP_SCRIPT"
|
||
bash "$TEMP_SCRIPT"
|
||
else
|
||
echo -e "${GREEN}作为Python脚本执行${NC}"
|
||
python3 "$TEMP_SCRIPT"
|
||
fi
|
||
;;
|
||
esac
|
||
|
||
# 清理
|
||
rm -f "$TEMP_SCRIPT"
|
||
EOF
|
||
|
||
chmod +x /usr/local/bin/ai-run
|
||
echo -e "${GREEN}✅ 智能启动器安装完成${NC}"
|
||
echo -e "${YELLOW}使用方法: ai-run <脚本URL>${NC}"
|
||
}
|
||
|
||
# 主修复函数
|
||
main_fix() {
|
||
local script_url="https://github.com/xzx3344521/dock/raw/refs/heads/main/ai"
|
||
|
||
echo -e "${BLUE}🔍 开始分析问题...${NC}"
|
||
log "目标脚本: $script_url"
|
||
|
||
# 分析问题
|
||
analyze_error "Python脚本被当作bash执行,import语句报错"
|
||
|
||
# 修复问题
|
||
fix_python_script "$script_url"
|
||
|
||
# 创建智能启动器防止未来问题
|
||
create_smart_launcher
|
||
|
||
echo -e "${GREEN}✅ 修复完成!${NC}"
|
||
echo -e "${YELLOW}🎯 现在你可以使用: ai-run https://github.com/xzx3344521/dock/raw/refs/heads/main/ai${NC}"
|
||
}
|
||
|
||
# 显示使用说明
|
||
show_help() {
|
||
echo -e "${GREEN}AI驱动问题修复系统${NC}"
|
||
echo "使用方法:"
|
||
echo " $0 fix - 修复当前问题"
|
||
echo " $0 run <url> - 智能运行脚本"
|
||
echo " $0 help - 显示此帮助"
|
||
}
|
||
|
||
# 主程序
|
||
case "${1:-}" in
|
||
"fix")
|
||
init
|
||
main_fix
|
||
;;
|
||
"run")
|
||
if [ -z "$2" ]; then
|
||
echo "请提供脚本URL"
|
||
exit 1
|
||
fi
|
||
/usr/local/bin/ai-run "$2"
|
||
;;
|
||
"help"|"")
|
||
show_help
|
||
;;
|
||
*)
|
||
echo "未知命令: $1"
|
||
show_help
|
||
;;
|
||
esac
|