Update ai

This commit is contained in:
2025-11-03 18:03:48 +08:00
committed by GitHub
parent d6bf909c26
commit 615fb9b6ba

435
ai
View File

@@ -1,13 +1,13 @@
#!/bin/bash #!/bin/bash
# AI驱动问题修复脚本 - 自动识别并解决问题 # 真正的AI驱动问题解决脚本
# 完全交给AI操作自动识别和修复问题
set -e set -e
# 配置 # 配置
DEEPSEEK_API_KEY="你的DeepSeek_API密钥" DEEPSEEK_API_KEY="sk-your-api-key-here" # 请替换为你的真实API密钥
LOG_FILE="/var/log/ai_fixer.log" LOG_FILE="/tmp/ai_solver.log"
TEMP_DIR="/tmp/ai_fixer"
# 颜色定义 # 颜色定义
RED='\033[0;31m' RED='\033[0;31m'
@@ -16,306 +16,257 @@ YELLOW='\033[1;33m'
BLUE='\033[0;34m' BLUE='\033[0;34m'
NC='\033[0m' NC='\033[0m'
# 初始化 # 日志函数
init() {
echo -e "${BLUE}🚀 AI驱动问题修复系统启动...${NC}"
mkdir -p "$TEMP_DIR"
sudo touch "$LOG_FILE"
sudo chmod 644 "$LOG_FILE"
log "系统初始化完成"
}
# 日志记录
log() { log() {
local message="$1" echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" | sudo tee -a "$LOG_FILE" echo -e "${BLUE}[AI助手]${NC} $1"
echo -e "${BLUE}[AI修复]${NC} $message"
} }
# 调用DeepSeek API # 调用AI分析问题
call_ai() { ask_ai() {
local context="$1" local problem="$1"
local problem="$2" local context="$2"
log "咨询AI助手解决问题: $problem" log "🤖 咨询AI解决方案: $problem"
# 构建API请求 # 准备API请求
local api_response=$(curl -s -X POST "https://api.deepseek.com/v1/chat/completions" \ local request_data=$(cat << EOF
{
"model": "deepseek-coder",
"messages": [
{
"role": "system",
"content": "你是一个Linux系统和脚本问题专家。用户遇到了脚本执行问题请直接给出具体的修复命令。用中文回答要具体可执行。"
},
{
"role": "user",
"content": "问题:$problem\n\n上下文$context\n\n请直接给出需要执行的Linux命令"
}
],
"temperature": 0.3,
"max_tokens": 1000
}
EOF
)
# 调用API
local response=$(curl -s -X POST "https://api.deepseek.com/v1/chat/completions" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \ -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-d '{ -d "$request_data" || echo "AI请求失败")
"model": "deepseek-coder",
"messages": [ # 提取回复
{ local answer=$(echo "$response" | grep -o '"content":"[^"]*"' | cut -d'"' -f4)
"role": "system",
"content": "你是一个Linux系统和编程专家。请直接给出解决问题的具体命令或代码用中文简要解释。当前系统Debian Linux"
},
{
"role": "user",
"content": "'"问题上下文: $context\n\n具体问题: $problem\n\n请提供具体的修复命令或脚本:"'"
}
],
"temperature": 0.3
}')
# 提取AI回复 if [ -z "$answer" ] || [ "$answer" = "AI请求失败" ]; then
local ai_response=$(echo "$api_response" | grep -o '"content":"[^"]*"' | cut -d'"' -f4) echo "备用方案:检测到脚本执行问题,将采用本地修复方案"
if [ -z "$ai_response" ]; then
echo "AI请求失败使用备用方案"
return 1 return 1
fi fi
echo "$ai_response" echo "$answer"
} }
# 分析错误信息 # 执行AI命令
analyze_error() { execute_ai_command() {
local error_output="$1" local command="$1"
log "分析错误信息..." local description="$2"
echo "$error_output" > "$TEMP_DIR/error.log" log "执行: $description"
log "命令: $command"
# 检测错误类型 echo -e "${YELLOW}▶️ 执行: $command${NC}"
if echo "$error_output" | grep -q "command not found"; then
echo "Python脚本被当作bash执行" # 执行命令
return 1 eval "$command" 2>&1 | while IFS= read -r line; do
elif echo "$error_output" | grep -q "import.*command not found"; then echo " $line"
echo "Python代码在bash中执行错误" echo "$line" >> "$LOG_FILE"
return 2 done
elif echo "$error_output" | grep -q "syntax error"; then
echo "语法错误" local exit_code=${PIPESTATUS[0]}
return 3 return $exit_code
else
echo "未知错误类型"
return 4
fi
} }
# 自动修复Python脚本问题 # 分析当前问题
fix_python_script() { analyze_current_problem() {
local script_url="$1" log "分析当前系统问题..."
log "修复Python脚本: $script_url"
# 下载脚本 # 收集系统信息
local original_content=$(curl -sSL "$script_url") 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)
if [ -z "$original_content" ]; then # 测试脚本URL
log "下载脚本失败" local test_url="https://github.com/xzx3344521/dock/raw/refs/heads/main/ai"
return 1 local script_content=$(curl -sSL "$test_url" 2>/dev/null || echo "下载失败")
fi
echo "$original_content" > "$TEMP_DIR/original_script" local problem_context="系统信息: $system_info
OS信息: $os_info
# 分析问题并获取AI修复方案 Python版本: $python_version
local context="原始脚本内容:\n$original_content\n\n错误: Python代码被当作bash执行" Bash版本: $bash_version
local problem="这是一个Python脚本但被用bash命令执行了导致import等Python语句报错"
脚本URL: $test_url
local ai_solution=$(call_ai "$context" "$problem") 脚本内容前几行:
$(echo "$script_content" | head -10)
if [ $? -eq 0 ]; then
echo -e "${GREEN}🤖 AI修复方案:${NC}" 错误现象: 脚本内容被直接显示而不是执行,出现 'command not found' 错误"
echo "$ai_solution"
echo "$ai_solution" > "$TEMP_DIR/ai_solution" echo "$problem_context"
# 执行AI的修复命令
execute_ai_solution "$ai_solution"
else
# 备用修复方案
backup_fix "$original_content"
fi
} }
# 执行AI的解决方案 # 主要修复函数
execute_ai_solution() { main_repair() {
echo -e "${GREEN}🚀 启动AI问题修复系统...${NC}"
echo -e "${YELLOW}⚠️ 全程交给AI操作请勿中断...${NC}"
# 分析问题
local problem_context=$(analyze_current_problem)
local problem_description="用户尝试执行远程脚本但失败,脚本内容被显示而不是执行,出现命令未找到错误"
log "问题描述: $problem_description"
# 询问AI解决方案
local ai_solution=$(ask_ai "$problem_description" "$problem_context")
if [ $? -ne 0 ] || [ -z "$ai_solution" ]; then
# AI调用失败使用备用方案
backup_solution
return
fi
echo -e "${GREEN}🤖 AI提供的解决方案:${NC}"
echo "$ai_solution"
echo ""
# 提取并执行命令
execute_ai_commands "$ai_solution"
}
# 执行AI返回的命令
execute_ai_commands() {
local solution="$1" local solution="$1"
log "执行AI解决方案..."
# 提取命令部分假设AI返回中包含具体命令 # 提取看起来像命令的行
local commands=$(echo "$solution" | grep -E "^(sudo |bash |python |curl |wget |apt)" || echo "$solution") echo -e "${YELLOW}🔧 开始执行修复命令...${NC}"
# 执行每个找到的命令
while IFS= read -r line; do while IFS= read -r line; do
if [[ "$line" =~ ^(sudo|bash|python|curl|wget|apt|pip) ]]; then # 跳过空行和注释
log "执行: $line" if [[ -z "$line" || "$line" =~ ^# ]]; then
eval "$line" 2>&1 | sudo tee -a "$LOG_FILE" continue
fi fi
done <<< "$commands"
# 识别命令以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修复命令"
fi
done <<< "$solution"
} }
# 备用修复方案 # 备用解决方案
backup_fix() { backup_solution() {
local original_content="$1" echo -e "${YELLOW}🔧 使用备用修复方案...${NC}"
log "使用备用方案修复..."
# 检测脚本类型 # 1. 直接下载脚本分析
if echo "$original_content" | grep -q "#!/usr/bin/env python"; then execute_ai_command "curl -sSL -o /tmp/analyze_script.py 'https://github.com/xzx3344521/dock/raw/refs/heads/main/ai'" "下载问题脚本"
echo -e "${YELLOW}检测到Python脚本重新下载并正确执行...${NC}"
# 2. 检查脚本类型
# 下载为Python文件 execute_ai_command "file /tmp/analyze_script.py" "检查脚本类型"
curl -sSL "$script_url" -o "$TEMP_DIR/script.py" execute_ai_command "head -5 /tmp/analyze_script.py" "查看脚本开头"
chmod +x "$TEMP_DIR/script.py"
# 3. 安装必要的工具
# 安装必要的Python依赖 execute_ai_command "sudo apt update && sudo apt install -y python3 python3-pip curl wget" "安装基础工具"
sudo apt update
sudo apt install -y python3 python3-pip # 4. 根据脚本类型执行
if head -1 /tmp/analyze_script.py 2>/dev/null | grep -q "python"; then
# 尝试执行Python脚本 execute_ai_command "python3 /tmp/analyze_script.py" "执行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 else
echo -e "${RED}无法自动识别脚本类型${NC}" execute_ai_command "bash /tmp/analyze_script.py" "执行Bash脚本"
return 1
fi fi
} }
# 创建智能启动 # 创建智能脚本运行
create_smart_launcher() { create_smart_runner() {
log "创建智能脚本启动器..." echo -e "${GREEN}🔧 创建智能脚本运行器...${NC}"
cat > /usr/local/bin/ai-run << 'EOF' cat > /usr/local/bin/ai-run << 'EOF'
#!/bin/bash #!/bin/bash
# AI智能脚本运行器
# AI智能脚本启动器 - 自动识别脚本类型并正确执行 URL="$1"
TEMP_SCRIPT="/tmp/smart_script_$$"
SCRIPT_URL="$1" if [ -z "$URL" ]; then
TEMP_SCRIPT="/tmp/ai_script_$$" echo "使用方法: ai-run <脚本URL>"
# 颜色定义
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 exit 1
fi fi
# 检测脚本类型 echo "🤖 AI智能运行器正在处理: $URL"
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) # 下载脚本
if ! curl -sSL "$URL" -o "$TEMP_SCRIPT"; then
echo "❌ 下载失败"
exit 1
fi
echo -e "${YELLOW}检测到脚本类型: $SCRIPT_TYPE${NC}" # 检测并执行
if head -1 "$TEMP_SCRIPT" | grep -q "python"; then
# 根据类型执行 echo "🐍 检测到Python脚本使用Python执行..."
case "$SCRIPT_TYPE" in python3 "$TEMP_SCRIPT"
"python") elif head -1 "$TEMP_SCRIPT" | grep -q "bash"; then
echo -e "${GREEN}执行Python脚本...${NC}" echo "💻 检测到Bash脚本使用Bash执行..."
# 确保有Python环境 bash "$TEMP_SCRIPT"
if ! command -v python3 &> /dev/null; then else
sudo apt update && sudo apt install -y python3 echo "🔍 自动检测脚本类型..."
fi # 尝试Python
if python3 -m py_compile "$TEMP_SCRIPT" 2>/dev/null; then
echo "🐍 作为Python脚本执行"
python3 "$TEMP_SCRIPT" python3 "$TEMP_SCRIPT"
;; else
"bash"|"shell") echo "💻 作为Bash脚本执行"
echo -e "${GREEN}执行Bash脚本...${NC}"
chmod +x "$TEMP_SCRIPT"
bash "$TEMP_SCRIPT" bash "$TEMP_SCRIPT"
;; fi
*) fi
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" rm -f "$TEMP_SCRIPT"
EOF EOF
chmod +x /usr/local/bin/ai-run chmod +x /usr/local/bin/ai-run
echo -e "${GREEN}✅ 智能启动器安装完成${NC}" echo -e "${GREEN}✅ 智能运行器安装完成! 使用: ai-run <URL>${NC}"
echo -e "${YELLOW}使用方法: ai-run <脚本URL>${NC}"
} }
# 主修复函数 # 显示状态
main_fix() { show_status() {
local script_url="https://github.com/xzx3344521/dock/raw/refs/heads/main/ai" echo -e "${GREEN}📊 系统状态${NC}"
echo "日志文件: $LOG_FILE"
echo -e "${BLUE}🔍 开始分析问题...${NC}" echo "临时目录: /tmp/"
log "目标脚本: $script_url" echo "智能运行器: $(which ai-run 2>/dev/null || echo '未安装')"
# 分析问题
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 case "${1:-}" in
"fix") "fix")
init main_repair
main_fix
;; ;;
"run") "runner")
if [ -z "$2" ]; then create_smart_runner
echo "请提供脚本URL"
exit 1
fi
/usr/local/bin/ai-run "$2"
;; ;;
"help"|"") "status")
show_help show_status
;;
"log")
cat "$LOG_FILE"
;; ;;
*) *)
echo "未知命令: $1" echo -e "${GREEN}AI驱动问题解决系统${NC}"
show_help echo "使用方法:"
echo " $0 fix - AI自动修复问题"
echo " $0 runner - 安装智能脚本运行器"
echo " $0 status - 查看系统状态"
echo " $0 log - 查看日志"
echo ""
echo "当前问题: 远程脚本执行失败,内容被显示而不是执行"
echo "解决方案: 运行 '$0 fix' 让AI自动修复"
;; ;;
esac esac