From e76f0828b9c5904f46ec802ce85cbbf16e60b95f Mon Sep 17 00:00:00 2001 From: "DESKTOP-72TV0V4\\caoxiaozhu" Date: Sat, 21 Mar 2026 10:13:43 +0800 Subject: [PATCH] Add project startup scripts --- setup.bat | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ start.bat | 92 ++++++++++++++++++++++++++++++ start.sh | 79 +++++++++++++++++++++++++ 3 files changed, 339 insertions(+) create mode 100644 setup.bat create mode 100644 start.bat create mode 100644 start.sh diff --git a/setup.bat b/setup.bat new file mode 100644 index 0000000..e6c51c7 --- /dev/null +++ b/setup.bat @@ -0,0 +1,168 @@ +@echo off +chcp 65001 >nul +title Jarvis 配置向导 + +echo ========================================== +echo Jarvis 个人 AI 助理 - 配置向导 +echo ========================================== +echo. + +REM --- 选择 LLM 提供商 --- +echo 请选择 LLM 提供商: +echo [1] OpenAI (GPT-4o) - 默认推荐 +echo [2] DeepSeek (deepseek-chat) - 性价比高 +echo [3] Claude (Anthropic) - 强大稳定 +echo [4] Ollama (本地模型) - 完全免费 +echo. +set /p PROVIDER_CHOICE=请选择 (1-4), 默认1: + +if "%PROVIDER_CHOICE%"=="" set PROVIDER_CHOICE=1 +if "%PROVIDER_CHOICE%"=="1" goto :openai +if "%PROVIDER_CHOICE%"=="2" goto :deepseek +if "%PROVIDER_CHOICE%"=="3" goto :claude +if "%PROVIDER_CHOICE%"=="4" goto :ollama +goto :openai + +:openai +echo. +echo [选择] OpenAI (GPT-4o) +echo. +set /p OPENAI_API_KEY=请输入 OpenAI API Key (sk-...): +if "%OPENAI_API_KEY%"=="" ( + echo [错误] API Key 不能为空 + pause + exit /b 1 +) +goto :write_env + +:deepseek +echo. +echo [选择] DeepSeek +echo. +set /p OPENAI_API_KEY=请输入 DeepSeek API Key: +if "%OPENAI_API_KEY%"=="" ( + echo [错误] API Key 不能为空 + pause + exit /b 1 +) +goto :write_env + +:claude +echo. +echo [选择] Claude (Anthropic) +echo. +set /p ANTHROPIC_API_KEY=请输入 Anthropic API Key (sk-ant-...): +if "%ANTHROPIC_API_KEY%"=="" ( + echo [错误] API Key 不能为空 + pause + exit /b 1 +) +goto :write_env + +:ollama +echo. +echo [选择] Ollama (本地模型) +echo 请确保 Ollama 已启动 (ollama serve) +echo. +set /p OLLAMA_MODEL_IN=请输入模型名 (留空默认 llama3): +if "%OLLAMA_MODEL_IN%"=="" set OLLAMA_MODEL=llama3 +goto :write_env + +:write_env +echo. +echo [配置] 写入 backend\.env... + +( +echo # ============================================= +echo # Jarvis 后端配置 +echo # ============================================= +echo. +echo APP_NAME=Jarvis +echo APP_VERSION=0.1.0 +echo DEBUG=true +echo SECRET_KEY=jarvis-secret-key-change-in-production +echo. +echo CORS_ORIGINS=http://localhost:5173,http://localhost:3000 +echo. +echo # LLM 配置 +) > backend\.env + +if "%PROVIDER_CHOICE%"=="1" ( + ( + echo LLM_PROVIDER=openai + echo OPENAI_API_KEY=%OPENAI_API_KEY% + echo OPENAI_MODEL=gpt-4o + echo OPENAI_BASE_URL=https://api.openai.com/v1 + ) >> backend\.env +) else if "%PROVIDER_CHOICE%"=="2" ( + ( + echo LLM_PROVIDER=deepseek + echo OPENAI_API_KEY=%OPENAI_API_KEY% + echo OPENAI_BASE_URL=https://api.deepseek.com/v1 + ) >> backend\.env +) else if "%PROVIDER_CHOICE%"=="3" ( + ( + echo LLM_PROVIDER=claude + echo ANTHROPIC_API_KEY=%ANTHROPIC_API_KEY% + echo CLAUDE_MODEL=claude-sonnet-4-20250514 + ) >> backend\.env +) else ( + ( + echo LLM_PROVIDER=ollama + echo OLLAMA_BASE_URL=http://localhost:11434 + echo OLLAMA_MODEL=%OLLAMA_MODEL% + ) >> backend\.env +) + +( +echo. +echo # 数据库 +echo DATABASE_URL=sqlite+aiosqlite:///./data/jarvis.db +echo. +echo # ChromaDB +echo CHROMA_PERSIST_DIR=./data/chroma +echo. +echo # JWT +echo ACCESS_TOKEN_EXPIRE_MINUTES=1440 +echo. +echo # 上传 +echo UPLOAD_DIR=./data/uploads +echo MAX_UPLOAD_SIZE=52428800 +echo. +echo # 定时任务 +echo SCHEDULER_ENABLED=true +echo DAILY_PLAN_TIME=00:00 +echo FORUM_SCAN_INTERVAL_MINUTES=30 +echo. +echo DATA_DIR=./data +) >> backend\.env + +echo [OK] 配置完成 + +REM --- 检查 uv --- +echo. +echo [检查] 验证环境... +where uv >nul 2>&1 +if %errorlevel% neq 0 ( + echo [警告] 未找到 uv,请运行: pip install uv + echo 或访问: https://github.com/astral-sh/uv +) else ( + echo [OK] uv 已安装 +) + +where npm >nul 2>&1 +if %errorlevel% neq 0 ( + echo [警告] 未找到 npm,请安装 Node.js: https://nodejs.org +) else ( + echo [OK] npm 已安装 +) + +echo. +echo ========================================== +echo 配置完成! +echo. +echo LLM: %PROVIDER_CHOICE% +echo. +echo 下一步: 双击 start.bat 启动服务 +echo ========================================== +pause diff --git a/start.bat b/start.bat new file mode 100644 index 0000000..7044155 --- /dev/null +++ b/start.bat @@ -0,0 +1,92 @@ +@echo off +chcp 65001 >nul +title Jarvis 一键启动 + +echo ========================================== +echo Jarvis 个人 AI 助理 - 一键启动 +echo ========================================== +echo. + +REM --- 检查 uv --- +where uv >nul 2>&1 +if %errorlevel% neq 0 ( + echo [错误] 未找到 uv,请先安装: https://github.com/astral-sh/uv + echo. + echo 安装命令: + echo pip install uv + echo. + pause + exit /b 1 +) + +REM --- 检查 npm --- +where npm >nul 2>&1 +if %errorlevel% neq 0 ( + echo [错误] 未找到 npm,请先安装 Node.js: https://nodejs.org + pause + exit /b 1 +) + +REM --- 检查 .env --- +if not exist backend\.env ( + echo [提示] 首次运行,需要配置 API Key + echo [提示] 请编辑 backend\.env 文件,填入: + echo ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxx + echo. +) + +REM --- 安装后端依赖 --- +echo [1/4] 安装后端依赖... +cd /d "%~dp0backend" +uv sync --quiet +if %errorlevel% neq 0 ( + echo [错误] 后端依赖安装失败 + pause + exit /b 1 +) +echo [OK] 后端依赖安装完成 + +REM --- 安装前端依赖 --- +echo. +echo [2/4] 安装前端依赖... +cd /d "%~dp0frontend" +call npm install >nul 2>&1 +if %errorlevel% neq 0 ( + echo [错误] 前端依赖安装失败 + pause + exit /b 1 +) +echo [OK] 前端依赖安装完成 + +REM --- 启动后端 --- +echo. +echo [3/4] 启动后端服务 (端口 8000)... +cd /d "%~dp0backend" +start "Jarvis-Backend" cmd /c "uv run uvicorn app.main:app --reload --port 8000" + +REM --- 等待后端启动 --- +echo 等待后端启动... +timeout /t 5 /nobreak >nul + +REM --- 启动前端 --- +echo. +echo [4/4] 启动前端服务 (端口 5173)... +cd /d "%~dp0frontend" +start "Jarvis-Frontend" cmd /c "npm run dev" + +REM --- 完成 --- +echo. +echo ========================================== +echo 启动完成! +echo. +echo 后端: http://localhost:8000 +echo 前端: http://localhost:5173 +echo API文档: http://localhost:8000/docs +echo ========================================== +echo. +echo 提示: +echo - 首次使用请先注册账号 +echo - 对话前请在 backend\.env 填入 API Key +echo - 关闭时请关闭两个终端窗口 +echo. +pause diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..9565663 --- /dev/null +++ b/start.sh @@ -0,0 +1,79 @@ +#!/bin/bash +set -e + +echo "==========================================" +echo " Jarvis 个人 AI 助理 - 一键启动" +echo "==========================================" +echo "" + +# 检查 uv +if ! command -v uv &> /dev/null; then + echo "[错误] 未找到 uv,请先安装: https://github.com/astral-sh/uv" + echo "安装命令: pip install uv" + exit 1 +fi + +# 检查 npm +if ! command -v npm &> /dev/null; then + echo "[错误] 未找到 npm,请先安装 Node.js: https://nodejs.org" + exit 1 +fi + +# 检查 .env +if [ ! -f backend/.env ]; then + echo "[提示] 首次运行,请编辑 backend/.env 文件" + echo " 填入: ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxx" + echo "" +fi + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +# 安装后端依赖 +echo "[1/4] 安装后端依赖..." +cd "$SCRIPT_DIR/backend" +uv sync --quiet +echo "[OK] 后端依赖安装完成" + +# 安装前端依赖 +echo "" +echo "[2/4] 安装前端依赖..." +cd "$SCRIPT_DIR/frontend" +npm install --silent +echo "[OK] 前端依赖安装完成" + +# 启动后端 +echo "" +echo "[3/4] 启动后端服务 (端口 8000)..." +cd "$SCRIPT_DIR/backend" +uv run uvicorn app.main:app --reload --port 8000 & +BACKEND_PID=$! + +# 等待后端 +echo " 等待后端启动..." +sleep 5 + +# 启动前端 +echo "" +echo "[4/4] 启动前端服务 (端口 5173)..." +cd "$SCRIPT_DIR/frontend" +npm run dev & +FRONTEND_PID=$! + +echo "" +echo "==========================================" +echo " 启动完成!" +echo "" +echo " 后端: http://localhost:8000" +echo " 前端: http://localhost:5173" +echo " API文档: http://localhost:8000/docs" +echo "==========================================" +echo "" +echo "提示:" +echo " - 首次使用请先注册账号" +echo " - 对话前请在 backend/.env 填入 API Key" +echo " - 关闭时请按 Ctrl+C" +echo "" + +# 等待信号 +trap "kill $BACKEND_PID $FRONTEND_PID 2>/dev/null; exit" SIGINT SIGTERM +wait