#!/usr/bin/env bash # ============================================================================= # OmniShopAgent - 启动脚本 # 启动 Milvus、CLIP(可选)、Streamlit 应用 # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" VENV_DIR="${VENV_DIR:-$PROJECT_ROOT/venv}" STREAMLIT_PORT="${STREAMLIT_PORT:-8501}" STREAMLIT_HOST="${STREAMLIT_HOST:-0.0.0.0}" cd "$PROJECT_ROOT" # 激活虚拟环境 if [ -d "$VENV_DIR" ]; then echo "激活虚拟环境: $VENV_DIR" set +u source "$VENV_DIR/bin/activate" set -u else echo "警告: 未找到虚拟环境 $VENV_DIR,使用当前 Python" fi echo "==========================================" echo "OmniShopAgent 启动" echo "==========================================" # 1. 启动 Milvus(Docker) if command -v docker &>/dev/null; then echo "[1/3] 检查 Milvus..." if ! docker ps --format '{{.Names}}' 2>/dev/null | grep -q milvus-standalone; then echo " 启动 Milvus (docker compose)..." docker compose up -d 2>/dev/null || docker-compose up -d 2>/dev/null || { echo " 警告: 无法启动 Milvus,请手动执行: docker compose up -d" } echo " 等待 Milvus 就绪 (30s)..." sleep 30 else echo " Milvus 已运行" fi else echo "[1/3] 跳过 Milvus: 未安装 Docker" fi # 2. 检查 CLIP(可选,图像搜索需要) echo "[2/3] 检查 CLIP 服务..." echo " 提示: 图像搜索需 CLIP。若未启动,请另开终端执行: python -m clip_server launch" echo " 文本搜索可无需 CLIP。" # 3. 启动 Streamlit echo "[3/3] 启动 Streamlit (端口 $STREAMLIT_PORT)..." echo "" echo " 访问: http://$STREAMLIT_HOST:$STREAMLIT_PORT" echo " 按 Ctrl+C 停止" echo "==========================================" exec streamlit run app.py \ --server.port="$STREAMLIT_PORT" \ --server.address="$STREAMLIT_HOST" \ --server.headless=true \ --browser.gatherUsageStats=false