273 lines
7.5 KiB
Bash
273 lines
7.5 KiB
Bash
#!/bin/bash
|
||
|
||
# 真正的AI驱动问题解决脚本
|
||
# 完全交给AI操作,自动识别和修复问题
|
||
|
||
set -e
|
||
|
||
# 配置
|
||
DEEPSEEK_API_KEY="sk-your-api-key-here" # 请替换为你的真实API密钥
|
||
LOG_FILE="/tmp/ai_solver.log"
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m'
|
||
|
||
# 日志函数
|
||
log() {
|
||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
|
||
echo -e "${BLUE}[AI助手]${NC} $1"
|
||
}
|
||
|
||
# 调用AI分析问题
|
||
ask_ai() {
|
||
local problem="$1"
|
||
local context="$2"
|
||
|
||
log "🤖 咨询AI解决方案: $problem"
|
||
|
||
# 准备API请求
|
||
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 "Authorization: Bearer $DEEPSEEK_API_KEY" \
|
||
-d "$request_data" || echo "AI请求失败")
|
||
|
||
# 提取回复
|
||
local answer=$(echo "$response" | grep -o '"content":"[^"]*"' | cut -d'"' -f4)
|
||
|
||
if [ -z "$answer" ] || [ "$answer" = "AI请求失败" ]; then
|
||
echo "备用方案:检测到脚本执行问题,将采用本地修复方案"
|
||
return 1
|
||
fi
|
||
|
||
echo "$answer"
|
||
}
|
||
|
||
# 执行AI命令
|
||
execute_ai_command() {
|
||
local command="$1"
|
||
local description="$2"
|
||
|
||
log "执行: $description"
|
||
log "命令: $command"
|
||
|
||
echo -e "${YELLOW}▶️ 执行: $command${NC}"
|
||
|
||
# 执行命令
|
||
eval "$command" 2>&1 | while IFS= read -r line; do
|
||
echo " $line"
|
||
echo "$line" >> "$LOG_FILE"
|
||
done
|
||
|
||
local exit_code=${PIPESTATUS[0]}
|
||
return $exit_code
|
||
}
|
||
|
||
# 分析当前问题
|
||
analyze_current_problem() {
|
||
log "分析当前系统问题..."
|
||
|
||
# 收集系统信息
|
||
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)
|
||
|
||
# 测试脚本URL
|
||
local test_url="https://github.com/xzx3344521/dock/raw/refs/heads/main/ai"
|
||
local script_content=$(curl -sSL "$test_url" 2>/dev/null || echo "下载失败")
|
||
|
||
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' 错误"
|
||
|
||
echo "$problem_context"
|
||
}
|
||
|
||
# 主要修复函数
|
||
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"
|
||
|
||
# 提取看起来像命令的行
|
||
echo -e "${YELLOW}🔧 开始执行修复命令...${NC}"
|
||
|
||
while IFS= read -r line; do
|
||
# 跳过空行和注释
|
||
if [[ -z "$line" || "$line" =~ ^# ]]; then
|
||
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修复命令"
|
||
fi
|
||
done <<< "$solution"
|
||
}
|
||
|
||
# 备用解决方案
|
||
backup_solution() {
|
||
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'" "下载问题脚本"
|
||
|
||
# 2. 检查脚本类型
|
||
execute_ai_command "file /tmp/analyze_script.py" "检查脚本类型"
|
||
execute_ai_command "head -5 /tmp/analyze_script.py" "查看脚本开头"
|
||
|
||
# 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脚本"
|
||
else
|
||
execute_ai_command "bash /tmp/analyze_script.py" "执行Bash脚本"
|
||
fi
|
||
}
|
||
|
||
# 创建智能脚本运行器
|
||
create_smart_runner() {
|
||
echo -e "${GREEN}🔧 创建智能脚本运行器...${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 <URL>${NC}"
|
||
}
|
||
|
||
# 显示状态
|
||
show_status() {
|
||
echo -e "${GREEN}📊 系统状态${NC}"
|
||
echo "日志文件: $LOG_FILE"
|
||
echo "临时目录: /tmp/"
|
||
echo "智能运行器: $(which ai-run 2>/dev/null || echo '未安装')"
|
||
}
|
||
|
||
# 主程序
|
||
case "${1:-}" in
|
||
"fix")
|
||
main_repair
|
||
;;
|
||
"runner")
|
||
create_smart_runner
|
||
;;
|
||
"status")
|
||
show_status
|
||
;;
|
||
"log")
|
||
cat "$LOG_FILE"
|
||
;;
|
||
*)
|
||
echo -e "${GREEN}AI驱动问题解决系统${NC}"
|
||
echo "使用方法:"
|
||
echo " $0 fix - AI自动修复问题"
|
||
echo " $0 runner - 安装智能脚本运行器"
|
||
echo " $0 status - 查看系统状态"
|
||
echo " $0 log - 查看日志"
|
||
echo ""
|
||
echo "当前问题: 远程脚本执行失败,内容被显示而不是执行"
|
||
echo "解决方案: 运行 '$0 fix' 让AI自动修复"
|
||
;;
|
||
esac
|