添加技能模块
This commit is contained in:
@@ -0,0 +1,321 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# KB Workflow 环境一键安装脚本
|
||||
# =============================================================================
|
||||
# 功能: 检查并安装 kb-workflow 技能所需的全部环境依赖
|
||||
# 支持: Ubuntu/Debian 系统
|
||||
#
|
||||
# 使用方法:
|
||||
# ./install-env.sh # 检查环境并提示安装命令(检查模式)
|
||||
# ./install-env.sh --auto # 自动安装所有缺失依赖(自动模式)
|
||||
# =============================================================================
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# 日志函数
|
||||
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
||||
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
log_section() {
|
||||
echo ""
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${BLUE}$1${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
}
|
||||
|
||||
# 获取脚本目录
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
DEFAULT_KB_PATH="${HOME}/work/knowledge-base"
|
||||
|
||||
# 解析参数
|
||||
AUTO_MODE=false
|
||||
if [ "$1" = "--auto" ]; then
|
||||
AUTO_MODE=true
|
||||
log_info "自动安装模式"
|
||||
fi
|
||||
|
||||
# 检测 Linux 发行版
|
||||
detect_distro() {
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
echo "$ID"
|
||||
elif [ -f /etc/debian_version ]; then
|
||||
echo "debian"
|
||||
elif [ -f /etc/redhat-release ]; then
|
||||
echo "rhel"
|
||||
fi
|
||||
}
|
||||
DISTRO=$(detect_distro)
|
||||
|
||||
# 检查命令是否存在
|
||||
command_exists() {
|
||||
command -v "$1" > /dev/null 2>&1
|
||||
}
|
||||
|
||||
# 检查 Python 包
|
||||
check_python_package() {
|
||||
python3 -c "import $1" 2>/dev/null
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# 1. 检查系统依赖
|
||||
# =============================================================================
|
||||
log_section "第一步: 检查系统依赖"
|
||||
|
||||
MISSING_DEPS=()
|
||||
|
||||
# 检查 Python3
|
||||
if command_exists python3; then
|
||||
PYTHON_VERSION=$(python3 --version | cut -d' ' -f2)
|
||||
log_success "Python3 已安装: $PYTHON_VERSION"
|
||||
else
|
||||
log_warn "Python3 未安装"
|
||||
MISSING_DEPS+=("python3")
|
||||
fi
|
||||
|
||||
# 检查 pip3
|
||||
if python3 -m pip --version > /dev/null 2>&1 || command_exists pip3; then
|
||||
log_success "pip3 已安装"
|
||||
else
|
||||
log_warn "pip3 未安装"
|
||||
MISSING_DEPS+=("python3-pip")
|
||||
fi
|
||||
|
||||
# 检查 ffmpeg
|
||||
if command_exists ffmpeg; then
|
||||
log_success "ffmpeg 已安装"
|
||||
else
|
||||
log_warn "ffmpeg 未安装"
|
||||
MISSING_DEPS+=("ffmpeg")
|
||||
fi
|
||||
|
||||
# 检查 tesseract
|
||||
if command_exists tesseract; then
|
||||
log_success "Tesseract OCR 已安装"
|
||||
else
|
||||
log_warn "Tesseract OCR 未安装"
|
||||
MISSING_DEPS+=("tesseract-ocr")
|
||||
fi
|
||||
|
||||
# 检查 git
|
||||
if command_exists git; then
|
||||
log_success "Git 已安装"
|
||||
else
|
||||
log_warn "Git 未安装"
|
||||
MISSING_DEPS+=("git")
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# 2. 自动安装系统依赖(自动模式)
|
||||
# =============================================================================
|
||||
if [ ${#MISSING_DEPS[@]} -gt 0 ]; then
|
||||
if [ "$AUTO_MODE" = true ]; then
|
||||
log_section "自动安装系统依赖"
|
||||
log_info "检测到系统: $DISTRO"
|
||||
|
||||
case "$DISTRO" in
|
||||
ubuntu|debian)
|
||||
log_info "更新包列表..."
|
||||
sudo apt-get update -qq
|
||||
|
||||
log_info "安装依赖: ${MISSING_DEPS[*]}"
|
||||
sudo apt-get install -y -qq "${MISSING_DEPS[@]}" tesseract-ocr-chi-sim tesseract-ocr-eng
|
||||
;;
|
||||
fedora|rhel|centos)
|
||||
log_info "更新包列表..."
|
||||
sudo dnf check-update -y || true
|
||||
|
||||
log_info "安装依赖: ${MISSING_DEPS[*]}"
|
||||
sudo dnf install -y "${MISSING_DEPS[@]}" tesseract-langpack-chi_sim tesseract-langpack-eng
|
||||
;;
|
||||
arch)
|
||||
log_info "安装依赖: ${MISSING_DEPS[*]}"
|
||||
sudo pacman -S --noconfirm "${MISSING_DEPS[@]}" tesseract-data-chi_sim tesseract-data-eng
|
||||
;;
|
||||
*)
|
||||
log_error "不支持的系统: $DISTRO"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
log_success "系统依赖安装完成"
|
||||
MISSING_DEPS=()
|
||||
else
|
||||
log_section "需要安装的系统依赖"
|
||||
echo ""
|
||||
echo "检测到以下依赖未安装:"
|
||||
for dep in "${MISSING_DEPS[@]}"; do
|
||||
echo " - $dep"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "请运行以下命令安装:"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
echo -e "${YELLOW}sudo apt-get update${NC}"
|
||||
echo -e "${YELLOW}sudo apt-get install -y ${MISSING_DEPS[*]} tesseract-ocr-chi-sim tesseract-ocr-eng${NC}"
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# 3. 检查 Python 依赖
|
||||
# =============================================================================
|
||||
log_section "第二步: 检查 Python 依赖"
|
||||
|
||||
PYTHON_PACKAGES=(
|
||||
"httpx:httpx"
|
||||
"aiohttp:aiohttp"
|
||||
"requests:requests"
|
||||
"Pillow:PIL"
|
||||
)
|
||||
|
||||
MISSING_PY_PKGS=()
|
||||
|
||||
for pkg_info in "${PYTHON_PACKAGES[@]}"; do
|
||||
pkg_name=$(echo "$pkg_info" | cut -d':' -f1)
|
||||
import_name=$(echo "$pkg_info" | cut -d':' -f2)
|
||||
if check_python_package "$import_name" 2>/dev/null; then
|
||||
log_success "$pkg_name 已安装"
|
||||
else
|
||||
log_warn "$pkg_name 未安装"
|
||||
MISSING_PY_PKGS+=("$pkg_name")
|
||||
fi
|
||||
done
|
||||
|
||||
# 检查特殊包
|
||||
check_python_package "playwright" 2>/dev/null && log_success "playwright 已安装" || MISSING_PY_PKGS+=("playwright")
|
||||
check_python_package "easyocr" 2>/dev/null && log_success "easyocr 已安装" || MISSING_PY_PKGS+=("easyocr")
|
||||
check_python_package "pytesseract" 2>/dev/null && log_success "pytesseract 已安装" || MISSING_PY_PKGS+=("pytesseract")
|
||||
|
||||
# =============================================================================
|
||||
# 4. 自动安装 Python 依赖(自动模式)
|
||||
# =============================================================================
|
||||
if [ ${#MISSING_PY_PKGS[@]} -gt 0 ]; then
|
||||
if [ "$AUTO_MODE" = true ]; then
|
||||
log_section "自动安装 Python 包"
|
||||
|
||||
log_info "安装: ${MISSING_PY_PKGS[*]}"
|
||||
pip3 install --user "${MISSING_PY_PKGS[@]}" -q
|
||||
|
||||
log_success "Python 包安装完成"
|
||||
|
||||
# 安装 Playwright 浏览器
|
||||
if [[ " ${MISSING_PY_PKGS[*]} " =~ " playwright " ]]; then
|
||||
log_info "安装 Playwright Chromium 浏览器..."
|
||||
python3 -m playwright install chromium
|
||||
log_success "Chromium 浏览器安装完成"
|
||||
fi
|
||||
|
||||
MISSING_PY_PKGS=()
|
||||
else
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "需要安装以下 Python 包:"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
for pkg in "${MISSING_PY_PKGS[@]}"; do
|
||||
echo " - $pkg"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "请运行以下命令安装:"
|
||||
echo ""
|
||||
echo -e "${YELLOW}pip3 install --user ${MISSING_PY_PKGS[*]}${NC}"
|
||||
|
||||
if [[ " ${MISSING_PY_PKGS[*]} " =~ " playwright " ]]; then
|
||||
echo ""
|
||||
echo -e "${YELLOW}安装完 playwright 后,还需要运行:${NC}"
|
||||
echo -e "${YELLOW} python3 -m playwright install chromium${NC}"
|
||||
fi
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# 5. 创建知识库目录结构
|
||||
# =============================================================================
|
||||
log_section "第三步: 创建知识库目录结构"
|
||||
|
||||
KB_BASE_PATH="${KB_BASE_PATH:-$DEFAULT_KB_PATH}"
|
||||
log_info "知识库路径: $KB_BASE_PATH"
|
||||
|
||||
mkdir -p "$KB_BASE_PATH"/{archive/{subscriptions,pending},metadata,content/{downloads,subtitles},analyzed}
|
||||
log_success "目录结构创建完成"
|
||||
|
||||
# =============================================================================
|
||||
# 6. 环境变量配置提示
|
||||
# =============================================================================
|
||||
log_section "第四步: 环境变量配置"
|
||||
|
||||
if [ -z "$KB_BASE_PATH_SET" ]; then
|
||||
log_warn "KB_BASE_PATH 环境变量未设置"
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "建议添加到 ~/.bashrc 或 ~/.zshrc:"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
echo -e "${YELLOW}export KB_BASE_PATH=\"$KB_BASE_PATH\"${NC}"
|
||||
echo ""
|
||||
else
|
||||
log_success "KB_BASE_PATH 已设置: $KB_BASE_PATH"
|
||||
fi
|
||||
|
||||
# 创建环境变量示例文件
|
||||
ENV_FILE="${SCRIPT_DIR}/.env.example"
|
||||
cat > "$ENV_FILE" << 'EOF'
|
||||
# KB Workflow 环境变量配置
|
||||
export KB_BASE_PATH="~/work/knowledge-base"
|
||||
|
||||
# 可选: B站 Cookie(用于下载会员视频)
|
||||
# export BILIBILI_COOKIE="SESSDATA=xxx; bili_jct=xxx"
|
||||
|
||||
# 可选: AI 分析配置
|
||||
# export AI_API_KEY="your-api-key"
|
||||
# export AI_PROVIDER="openai" # 或 zhipu, minimax
|
||||
# export AI_MODEL="gpt-4"
|
||||
|
||||
# 可选: Git 配置
|
||||
# export KB_GIT_USER="Your Name"
|
||||
# export KB_GIT_EMAIL="your@email.com"
|
||||
EOF
|
||||
|
||||
log_info "环境变量示例已保存到: $ENV_FILE"
|
||||
|
||||
# =============================================================================
|
||||
# 7. 完成总结
|
||||
# =============================================================================
|
||||
log_section "安装完成"
|
||||
|
||||
echo ""
|
||||
if [ ${#MISSING_DEPS[@]} -eq 0 ] && [ ${#MISSING_PY_PKGS[@]} -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ 所有依赖已安装完成!${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ 部分依赖需要手动安装${NC}"
|
||||
echo ""
|
||||
|
||||
if [ ${#MISSING_DEPS[@]} -gt 0 ]; then
|
||||
echo "系统依赖:"
|
||||
echo -e "${YELLOW}sudo apt-get install -y ${MISSING_DEPS[*]} tesseract-ocr-chi-sim tesseract-ocr-eng${NC}"
|
||||
fi
|
||||
|
||||
if [ ${#MISSING_PY_PKGS[@]} -gt 0 ]; then
|
||||
echo ""
|
||||
echo "Python 包:"
|
||||
echo -e "${YELLOW}pip3 install --user ${MISSING_PY_PKGS[*]}${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "使用方法:"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo " export KB_BASE_PATH=\"~/work/knowledge-base\"
|
||||
echo " python3 kb_workflow.py --check --url \"[URL]\""
|
||||
echo ""
|
||||
Reference in New Issue
Block a user