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

273 lines
7.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驱动问题解决脚本
# 完全交给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