| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- #!/usr/bin/env bash
- # ============================================================
- # LambdAgent PaaS 一键安装启动脚本
- # 用法:
- # chmod +x setup.sh
- # ./setup.sh # 安装并启动(开发模式)
- # ./setup.sh --docker # 使用 Docker 启动
- # ./setup.sh --help # 查看帮助
- # ============================================================
- set -e
- # ── 颜色输出 ──────────────────────────────────────────────
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- BLUE='\033[0;34m'
- NC='\033[0m' # No Color
- info() { echo -e "${BLUE}[INFO]${NC} $1"; }
- ok() { echo -e "${GREEN}[OK]${NC} $1"; }
- warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
- fail() { echo -e "${RED}[FAIL]${NC} $1"; exit 1; }
- # ── 项目根目录 ────────────────────────────────────────────
- PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
- cd "$PROJECT_DIR"
- # ── 帮助信息 ──────────────────────────────────────────────
- show_help() {
- echo ""
- echo "LambdAgent PaaS 一键安装启动脚本"
- echo ""
- echo "用法:"
- echo " ./setup.sh 安装依赖并启动服务(开发模式)"
- echo " ./setup.sh --docker 使用 Docker Compose 启动"
- echo " ./setup.sh --install 仅安装依赖,不启动服务"
- echo " ./setup.sh --launch 安装并一键启动 Agent 对话"
- echo " ./setup.sh --help 显示此帮助信息"
- echo ""
- echo "环境要求:"
- echo " Python 方式: Python 3.10+"
- echo " Docker 方式: Docker + Docker Compose"
- echo ""
- }
- # ── 检查 Python ───────────────────────────────────────────
- check_python() {
- if command -v python3 &>/dev/null; then
- PYTHON=python3
- elif command -v python &>/dev/null; then
- PYTHON=python
- else
- fail "未找到 Python。请安装 Python 3.10+\n macOS: brew install python@3.12\n Ubuntu: sudo apt install python3 python3-venv python3-pip"
- fi
- # 检查版本
- PY_VERSION=$($PYTHON -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
- PY_MAJOR=$($PYTHON -c 'import sys; print(sys.version_info.major)')
- PY_MINOR=$($PYTHON -c 'import sys; print(sys.version_info.minor)')
- if [ "$PY_MAJOR" -lt 3 ] || { [ "$PY_MAJOR" -eq 3 ] && [ "$PY_MINOR" -lt 10 ]; }; then
- fail "Python 版本过低: $PY_VERSION(需要 3.10+)"
- fi
- ok "Python $PY_VERSION"
- }
- # ── 检查 Docker ───────────────────────────────────────────
- check_docker() {
- if ! command -v docker &>/dev/null; then
- fail "未找到 Docker。请先安装 Docker Desktop\n https://www.docker.com/products/docker-desktop/"
- fi
- if ! docker info &>/dev/null 2>&1; then
- fail "Docker 未运行。请启动 Docker Desktop"
- fi
- if ! command -v docker-compose &>/dev/null && ! docker compose version &>/dev/null 2>&1; then
- fail "未找到 Docker Compose"
- fi
- ok "Docker $(docker --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
- }
- # ── 配置 .env 文件 ────────────────────────────────────────
- setup_env() {
- if [ ! -f .env ]; then
- if [ -f .env.example ]; then
- cp .env.example .env
- warn ".env 文件已从 .env.example 创建"
- echo ""
- echo " ┌─────────────────────────────────────────────┐"
- echo " │ 请编辑 .env 文件,填入你的 LLM API Key: │"
- echo " │ │"
- echo " │ 至少填写以下其中一个: │"
- echo " │ DASHSCOPE_API_KEY=sk-xxx │"
- echo " │ OPENAI_API_KEY=sk-xxx │"
- echo " │ ANTHROPIC_API_KEY=sk-xxx │"
- echo " │ DEEPSEEK_API_KEY=sk-xxx │"
- echo " │ │"
- echo " │ 编辑命令: nano .env 或 vim .env │"
- echo " └─────────────────────────────────────────────┘"
- echo ""
- read -p "是否现在编辑 .env 文件?(y/N) " -r
- if [[ $REPLY =~ ^[Yy]$ ]]; then
- if command -v nano &>/dev/null; then
- nano .env
- elif command -v vim &>/dev/null; then
- vim .env
- else
- info "请手动编辑 .env 文件后重新运行此脚本"
- exit 0
- fi
- fi
- fi
- else
- ok ".env 文件已存在"
- fi
- }
- # ── 创建虚拟环境并安装依赖 ────────────────────────────────
- install_deps() {
- info "创建 Python 虚拟环境..."
- if [ ! -d .venv ]; then
- $PYTHON -m venv .venv
- ok "虚拟环境已创建: .venv/"
- else
- ok "虚拟环境已存在: .venv/"
- fi
- # 激活虚拟环境
- source .venv/bin/activate
- info "安装依赖..."
- # 安装 lambdagent(核心库)
- pip install -e ".[all]" --quiet 2>&1 | tail -1
- ok "lambdagent 已安装"
- # 安装 agentpaas(服务层)
- pip install -e "./agentpaas[dev]" --quiet 2>&1 | tail -1
- ok "agentpaas 已安装"
- echo ""
- ok "所有依赖安装完成!"
- echo ""
- echo " 激活虚拟环境: source .venv/bin/activate"
- echo ""
- }
- # ── Python 方式启动 ───────────────────────────────────────
- start_python() {
- source .venv/bin/activate
- # 加载 .env
- if [ -f .env ]; then
- set -a
- source .env
- set +a
- fi
- info "启动 AgentPaaS 服务(开发模式)..."
- echo ""
- echo " ┌─────────────────────────────────────────────┐"
- echo " │ 服务地址: http://localhost:${AGENTPAAS_PORT:-8000} │"
- echo " │ API 文档: http://localhost:${AGENTPAAS_PORT:-8000}/docs │"
- echo " │ 按 Ctrl+C 停止服务 │"
- echo " └─────────────────────────────────────────────┘"
- echo ""
- python -m agentpaas serve --dev
- }
- # ── Docker 方式启动 ───────────────────────────────────────
- start_docker() {
- check_docker
- setup_env
- info "使用 Docker Compose 启动..."
- # 使用根目录的 docker-compose
- if docker compose version &>/dev/null 2>&1; then
- COMPOSE_CMD="docker compose"
- else
- COMPOSE_CMD="docker-compose"
- fi
- $COMPOSE_CMD -f docker-compose.yml up --build
- }
- # ── 一键启动 Agent 对话 ───────────────────────────────────
- launch_agent() {
- source .venv/bin/activate
- # 加载 .env
- if [ -f .env ]; then
- set -a
- source .env
- set +a
- fi
- CONFIG_FILE="${1:-agent-config.yml}"
- if [ ! -f "$CONFIG_FILE" ]; then
- fail "Agent 配置文件不存在: $CONFIG_FILE\n 请创建配置文件或指定路径: ./setup.sh --launch your-config.yml"
- fi
- info "一键启动 Agent: $CONFIG_FILE"
- python -m agentpaas launch "$CONFIG_FILE"
- }
- # ── 主流程 ────────────────────────────────────────────────
- main() {
- echo ""
- echo "================================================"
- echo " LambdAgent PaaS 一键安装启动"
- echo "================================================"
- echo ""
- case "${1:-}" in
- --help|-h)
- show_help
- exit 0
- ;;
- --docker)
- start_docker
- ;;
- --install)
- check_python
- setup_env
- install_deps
- echo "安装完成! 启动服务请运行:"
- echo " source .venv/bin/activate"
- echo " python -m agentpaas serve --dev"
- ;;
- --launch)
- check_python
- setup_env
- install_deps
- launch_agent "${2:-}"
- ;;
- *)
- check_python
- setup_env
- install_deps
- start_python
- ;;
- esac
- }
- main "$@"
|