Files
dock/ai
2025-11-03 18:00:41 +08:00

322 lines
8.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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