Enhance Docker configuration and update dependencies for Realtime Agent Studio
- Updated Dockerfile for the API to include build tools for C++11 required for native extensions. - Revised requirements.txt to upgrade several dependencies, including FastAPI and SQLAlchemy. - Expanded docker-compose.yml to add MinIO service for S3-compatible storage and improved health checks for backend and engine services. - Enhanced README.md in the Docker directory to provide detailed service descriptions and quick start instructions. - Updated mkdocs.yml to reflect new navigation structure and added deployment overview documentation. - Introduced new Dockerfiles for the engine and web services, including development configurations for hot reloading.
This commit is contained in:
@@ -1,15 +1,17 @@
|
|||||||
FROM python:3.12-slim
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
# Install build tools for C++11 (needed for native extensions, e.g. chromadb)
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
build-essential \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# 安装依赖
|
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
# 复制代码
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# 创建数据目录
|
|
||||||
RUN mkdir -p /app/data
|
RUN mkdir -p /app/data
|
||||||
|
|
||||||
EXPOSE 8100
|
EXPOSE 8100
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
aiosqlite==0.19.0
|
aiosqlite==0.22.1
|
||||||
fastapi==0.109.0
|
fastapi==0.135.1
|
||||||
uvicorn==0.27.0
|
uvicorn==0.41.0
|
||||||
python-multipart==0.0.6
|
python-multipart==0.0.22
|
||||||
python-dotenv==1.0.0
|
python-dotenv==1.2.2
|
||||||
pydantic==2.5.3
|
pydantic==2.11.7
|
||||||
sqlalchemy==2.0.25
|
sqlalchemy==2.0.48
|
||||||
minio==7.2.0
|
minio==7.2.20
|
||||||
httpx==0.26.0
|
httpx==0.28.1
|
||||||
chromadb==0.4.22
|
chromadb==1.5.2
|
||||||
openai==1.12.0
|
openai==2.24.0
|
||||||
dashscope==1.25.11
|
dashscope==1.25.13
|
||||||
|
|||||||
@@ -1 +1,78 @@
|
|||||||
# Docker Deployment
|
# Docker Deployment
|
||||||
|
|
||||||
|
This folder contains Docker Compose configuration to run the entire AI VideoAssistant stack.
|
||||||
|
|
||||||
|
## Services
|
||||||
|
|
||||||
|
| Service | Port | Description |
|
||||||
|
|---------|------|-------------|
|
||||||
|
| minio | 9000, 9001 | S3-compatible object storage |
|
||||||
|
| backend | 8100 | FastAPI backend API |
|
||||||
|
| engine | 8001 | Conversation engine (WebSocket) |
|
||||||
|
| frontend | 6000 | React web application |
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
1. Docker and Docker Compose installed
|
||||||
|
2. The `engine/data/vad/silero_vad.onnx` VAD model file must exist
|
||||||
|
3. Agent configuration in `engine/config/agents/default.yaml`
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd docker
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## Access Points
|
||||||
|
|
||||||
|
- **Frontend**: http://localhost:6000
|
||||||
|
- **Backend API**: http://localhost:8100
|
||||||
|
- **Engine WebSocket**: ws://localhost:8001/ws
|
||||||
|
- **MinIO Console**: http://localhost:9001 (admin / password123)
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### Engine Environment Variables
|
||||||
|
|
||||||
|
The engine service uses environment variables for configuration. Key variables:
|
||||||
|
|
||||||
|
- `BACKEND_URL`: Backend API URL (default: `http://backend:8100`)
|
||||||
|
- `LOG_LEVEL`: Logging level (default: `INFO`)
|
||||||
|
- `CORS_ORIGINS`: Allowed CORS origins
|
||||||
|
|
||||||
|
Agent-specific settings (LLM, TTS, ASR) are configured via YAML files in `engine/config/agents/`.
|
||||||
|
|
||||||
|
### Volumes
|
||||||
|
|
||||||
|
- `minio_data`: MinIO storage data
|
||||||
|
- `backend_data`: Backend SQLite database
|
||||||
|
- `engine_logs`: Engine log files
|
||||||
|
|
||||||
|
## Development Mode
|
||||||
|
|
||||||
|
To mount source code for hot-reload during development:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## Logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# View all logs
|
||||||
|
docker compose logs -f
|
||||||
|
|
||||||
|
# View specific service logs
|
||||||
|
docker compose logs -f engine
|
||||||
|
docker compose logs -f backend
|
||||||
|
```
|
||||||
|
|
||||||
|
## Stopping
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
# Remove volumes as well
|
||||||
|
docker compose down -v
|
||||||
|
```
|
||||||
|
|||||||
@@ -1,11 +1,35 @@
|
|||||||
version: '3.8'
|
# Project name used as prefix for containers, volumes, and networks
|
||||||
|
name: ras
|
||||||
|
|
||||||
|
# Docker registry mirror for China users (change to empty or "docker.io" if you have direct access)
|
||||||
|
x-registry-mirror: ®istry-mirror docker.1ms.run
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# 后端 API
|
# MinIO (S3 compatible storage)
|
||||||
|
minio:
|
||||||
|
image: ${REGISTRY_MIRROR:-docker.1ms.run}/minio/minio
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
- "9001:9001"
|
||||||
|
volumes:
|
||||||
|
- minio_data:/data
|
||||||
|
environment:
|
||||||
|
MINIO_ROOT_USER: admin
|
||||||
|
MINIO_ROOT_PASSWORD: password123
|
||||||
|
command: server /data --console-address ":9001"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "mc", "ready", "local"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
# Backend API
|
||||||
backend:
|
backend:
|
||||||
build:
|
build:
|
||||||
context: ../api
|
context: ../api
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
|
args:
|
||||||
|
REGISTRY_MIRROR: ${REGISTRY_MIRROR:-docker.1ms.run}
|
||||||
ports:
|
ports:
|
||||||
- "8100:8100"
|
- "8100:8100"
|
||||||
environment:
|
environment:
|
||||||
@@ -15,12 +39,18 @@ services:
|
|||||||
- MINIO_SECRET_KEY=password123
|
- MINIO_SECRET_KEY=password123
|
||||||
- MINIO_BUCKET=ai-audio
|
- MINIO_BUCKET=ai-audio
|
||||||
volumes:
|
volumes:
|
||||||
- ../api:/app
|
- backend_data:/app/data
|
||||||
- ../api/data:/app/data
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- minio
|
minio:
|
||||||
|
condition: service_started
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:8100/health"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
# 对话引擎 (py-active-call)
|
# Conversation Engine
|
||||||
engine:
|
engine:
|
||||||
build:
|
build:
|
||||||
context: ../engine
|
context: ../engine
|
||||||
@@ -28,31 +58,64 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "8001:8001"
|
- "8001:8001"
|
||||||
environment:
|
environment:
|
||||||
|
- HOST=0.0.0.0
|
||||||
|
- PORT=8001
|
||||||
|
- BACKEND_MODE=http
|
||||||
- BACKEND_URL=http://backend:8100
|
- BACKEND_URL=http://backend:8100
|
||||||
|
- LOG_LEVEL=INFO
|
||||||
|
- CORS_ORIGINS=["http://localhost:6000","http://localhost:3000"]
|
||||||
|
volumes:
|
||||||
|
- ../engine/config:/app/config:ro
|
||||||
|
- ../engine/data:/app/data:ro
|
||||||
|
- engine_logs:/app/logs
|
||||||
depends_on:
|
depends_on:
|
||||||
- backend
|
backend:
|
||||||
|
condition: service_started
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:8001/health"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_period: 15s
|
||||||
|
|
||||||
# 前端 (Vite + React)
|
# Frontend (Vite + React) – production: built static files served on 6000
|
||||||
frontend:
|
frontend:
|
||||||
build:
|
build:
|
||||||
context: ../web
|
context: ../web
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
- VITE_API_BASE_URL=http://localhost:8100/api
|
REGISTRY_MIRROR: ${REGISTRY_MIRROR:-docker.1ms.run}
|
||||||
|
VITE_API_BASE_URL: ${VITE_API_BASE_URL:-http://localhost:8100/api}
|
||||||
|
VITE_ENGINE_WS_URL: ${VITE_ENGINE_WS_URL:-ws://localhost:8001/ws}
|
||||||
ports:
|
ports:
|
||||||
- "6000:6000"
|
- "6000:6000"
|
||||||
depends_on:
|
depends_on:
|
||||||
- backend
|
- backend
|
||||||
|
- engine
|
||||||
|
|
||||||
# MinIO (S3 兼容存储)
|
# Frontend dev – hot reload on port 3000 (run with: docker compose --profile dev up)
|
||||||
minio:
|
frontend-dev:
|
||||||
image: minio/minio
|
profiles:
|
||||||
|
- dev
|
||||||
|
build:
|
||||||
|
context: ../web
|
||||||
|
dockerfile: Dockerfile.dev
|
||||||
|
args:
|
||||||
|
REGISTRY_MIRROR: ${REGISTRY_MIRROR:-docker.1ms.run}
|
||||||
ports:
|
ports:
|
||||||
- "9000:9000"
|
- "3000:3000"
|
||||||
- "9001:9001"
|
|
||||||
volumes:
|
|
||||||
- ./storage/minio/data:/data
|
|
||||||
environment:
|
environment:
|
||||||
MINIO_ROOT_USER: admin
|
- VITE_API_BASE_URL=${VITE_API_BASE_URL:-http://localhost:8100/api}
|
||||||
MINIO_ROOT_PASSWORD: password123
|
- VITE_ENGINE_WS_URL=${VITE_ENGINE_WS_URL:-ws://localhost:8001/ws}
|
||||||
command: server /data --console-address ":9001"
|
volumes:
|
||||||
|
- ../web:/app
|
||||||
|
- frontend_dev_node_modules:/app/node_modules
|
||||||
|
depends_on:
|
||||||
|
- backend
|
||||||
|
- engine
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
minio_data:
|
||||||
|
backend_data:
|
||||||
|
engine_logs:
|
||||||
|
frontend_dev_node_modules:
|
||||||
|
|||||||
@@ -1,7 +1,18 @@
|
|||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
部署 MkDocs:
|
**安装依赖(推荐使用 1.x,避免与 Material 主题不兼容):**
|
||||||
pip install mkdocs
|
|
||||||
mkdocs serve
|
|
||||||
|
|
||||||
访问 http://localhost:8000 查看文档网站。
|
```bash
|
||||||
|
cd docs
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
或手动安装:`pip install "mkdocs>=1.6,<2" mkdocs-material`
|
||||||
|
|
||||||
|
**本地预览:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdocs serve
|
||||||
|
```
|
||||||
|
|
||||||
|
访问终端中显示的地址(如 http://127.0.0.1:8000)查看文档。
|
||||||
@@ -1,13 +1,12 @@
|
|||||||
# 部署指南
|
# 部署概览
|
||||||
|
|
||||||
本章节介绍如何将 Realtime Agent Studio (RAS) 部署到生产环境。
|
本章节介绍如何使用 Docker 部署 Realtime Agent Studio (RAS)。
|
||||||
|
|
||||||
## 部署方式
|
## 部署方式
|
||||||
|
|
||||||
| 方式 | 适用场景 | 复杂度 |
|
| 方式 | 适用场景 | 复杂度 |
|
||||||
|------|---------|--------|
|
|------|---------|--------|
|
||||||
| [Docker 部署](docker.md) | 快速部署、容器化环境 | 简单 |
|
| [Docker 部署](docker.md) | 快速启动、容器化运行 | 简单 |
|
||||||
| [生产环境](production.md) | Nginx 反向代理、高可用 | 中等 |
|
|
||||||
|
|
||||||
## 快速开始
|
## 快速开始
|
||||||
|
|
||||||
@@ -20,7 +19,7 @@ docker run -d -p 3000:80 --name ai-assistant-web ai-video-assistant-web
|
|||||||
|
|
||||||
### 验证部署
|
### 验证部署
|
||||||
|
|
||||||
1. 访问 http://your-domain.com
|
1. 访问 http://localhost:3000
|
||||||
2. 检查页面是否正常加载
|
2. 检查页面是否正常加载
|
||||||
3. 验证各功能模块是否可用
|
3. 验证各功能模块是否可用
|
||||||
|
|
||||||
|
|||||||
@@ -1,191 +0,0 @@
|
|||||||
# 生产环境部署
|
|
||||||
|
|
||||||
本文档介绍如何将 Realtime Agent Studio (RAS) 部署到生产环境,包括 Nginx 配置、SSL 证书、性能优化等。
|
|
||||||
|
|
||||||
## Nginx 部署
|
|
||||||
|
|
||||||
### 1. 构建前端
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd web
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 部署静态文件
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo mkdir -p /var/www/ai-assistant
|
|
||||||
sudo cp -r dist/* /var/www/ai-assistant/
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. 配置 Nginx
|
|
||||||
|
|
||||||
创建 `/etc/nginx/sites-available/ai-assistant`:
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name your-domain.com;
|
|
||||||
root /var/www/ai-assistant;
|
|
||||||
index index.html;
|
|
||||||
|
|
||||||
# Gzip 压缩
|
|
||||||
gzip on;
|
|
||||||
gzip_types text/plain text/css application/json application/javascript;
|
|
||||||
|
|
||||||
# 静态文件缓存
|
|
||||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
|
||||||
expires 30d;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
|
|
||||||
# SPA 路由支持
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/ /index.html;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API 反向代理
|
|
||||||
location /api {
|
|
||||||
proxy_pass http://localhost:8080;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
|
||||||
}
|
|
||||||
|
|
||||||
# WebSocket 代理
|
|
||||||
location /ws {
|
|
||||||
proxy_pass http://localhost:8000;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_read_timeout 86400;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. 启用站点
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo ln -s /etc/nginx/sites-available/ai-assistant /etc/nginx/sites-enabled/
|
|
||||||
sudo nginx -t
|
|
||||||
sudo systemctl reload nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
## SSL 证书配置
|
|
||||||
|
|
||||||
### 使用 Let's Encrypt
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 安装 certbot
|
|
||||||
sudo apt install certbot python3-certbot-nginx
|
|
||||||
|
|
||||||
# 申请证书
|
|
||||||
sudo certbot --nginx -d your-domain.com
|
|
||||||
|
|
||||||
# 自动续期
|
|
||||||
sudo certbot renew --dry-run
|
|
||||||
```
|
|
||||||
|
|
||||||
### HTTPS 配置
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 443 ssl http2;
|
|
||||||
server_name your-domain.com;
|
|
||||||
|
|
||||||
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
|
|
||||||
|
|
||||||
# SSL 安全配置
|
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
|
||||||
ssl_prefer_server_ciphers on;
|
|
||||||
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
|
|
||||||
|
|
||||||
# HSTS
|
|
||||||
add_header Strict-Transport-Security "max-age=31536000" always;
|
|
||||||
|
|
||||||
# ... 其他配置同上
|
|
||||||
}
|
|
||||||
|
|
||||||
# HTTP 重定向到 HTTPS
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name your-domain.com;
|
|
||||||
return 301 https://$server_name$request_uri;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 性能优化
|
|
||||||
|
|
||||||
### Nginx 优化
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
# 在 http 块中添加
|
|
||||||
worker_processes auto;
|
|
||||||
worker_connections 1024;
|
|
||||||
|
|
||||||
# 开启 sendfile
|
|
||||||
sendfile on;
|
|
||||||
tcp_nopush on;
|
|
||||||
tcp_nodelay on;
|
|
||||||
|
|
||||||
# 缓冲区设置
|
|
||||||
client_body_buffer_size 10K;
|
|
||||||
client_header_buffer_size 1k;
|
|
||||||
client_max_body_size 8m;
|
|
||||||
```
|
|
||||||
|
|
||||||
### 静态资源 CDN
|
|
||||||
|
|
||||||
如果使用 CDN,修改构建配置:
|
|
||||||
|
|
||||||
```env
|
|
||||||
# .env.production
|
|
||||||
VITE_CDN_URL=https://cdn.your-domain.com
|
|
||||||
```
|
|
||||||
|
|
||||||
## 监控与日志
|
|
||||||
|
|
||||||
### 访问日志
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
access_log /var/log/nginx/ai-assistant.access.log;
|
|
||||||
error_log /var/log/nginx/ai-assistant.error.log;
|
|
||||||
```
|
|
||||||
|
|
||||||
### 日志轮转
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# /etc/logrotate.d/nginx
|
|
||||||
/var/log/nginx/*.log {
|
|
||||||
daily
|
|
||||||
rotate 14
|
|
||||||
compress
|
|
||||||
delaycompress
|
|
||||||
missingok
|
|
||||||
notifempty
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 备份策略
|
|
||||||
|
|
||||||
### 数据库备份
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# PostgreSQL 备份
|
|
||||||
pg_dump -U postgres ai_assistant > backup_$(date +%Y%m%d).sql
|
|
||||||
|
|
||||||
# 定时备份(crontab)
|
|
||||||
0 2 * * * pg_dump -U postgres ai_assistant > /backups/backup_$(date +\%Y\%m\%d).sql
|
|
||||||
```
|
|
||||||
|
|
||||||
## 高可用部署
|
|
||||||
|
|
||||||
对于高可用需求,建议:
|
|
||||||
|
|
||||||
1. **负载均衡** - 使用 Nginx upstream 或云负载均衡
|
|
||||||
2. **数据库主从** - PostgreSQL 主从复制
|
|
||||||
3. **Redis 集群** - 会话和缓存高可用
|
|
||||||
4. **健康检查** - 定期检测服务状态
|
|
||||||
@@ -57,23 +57,13 @@ VITE_GEMINI_API_KEY=your_api_key
|
|||||||
| `VITE_WS_URL` | ❌ | WebSocket 服务地址 | 从 API URL 推断 |
|
| `VITE_WS_URL` | ❌ | WebSocket 服务地址 | 从 API URL 推断 |
|
||||||
| `VITE_GEMINI_API_KEY` | ❌ | Gemini API 密钥 | - |
|
| `VITE_GEMINI_API_KEY` | ❌ | Gemini API 密钥 | - |
|
||||||
|
|
||||||
### 多环境配置
|
### 开发环境配置
|
||||||
|
|
||||||
=== "开发环境"
|
```env
|
||||||
|
# .env.development
|
||||||
```env
|
VITE_API_URL=http://localhost:8080
|
||||||
# .env.development
|
VITE_WS_URL=ws://localhost:8000
|
||||||
VITE_API_URL=http://localhost:8080
|
```
|
||||||
VITE_WS_URL=ws://localhost:8000
|
|
||||||
```
|
|
||||||
|
|
||||||
=== "生产环境"
|
|
||||||
|
|
||||||
```env
|
|
||||||
# .env.production
|
|
||||||
VITE_API_URL=https://api.example.com
|
|
||||||
VITE_WS_URL=wss://ws.example.com
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -219,7 +209,7 @@ services:
|
|||||||
|
|
||||||
```env
|
```env
|
||||||
# Docker Compose 会自动加载
|
# Docker Compose 会自动加载
|
||||||
SECRET_KEY=your-production-secret-key
|
SECRET_KEY=your-secret-key-at-least-32-chars
|
||||||
POSTGRES_PASSWORD=secure-db-password
|
POSTGRES_PASSWORD=secure-db-password
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -286,4 +276,3 @@ python -c "from config import settings; print(settings)"
|
|||||||
|
|
||||||
- [安装部署](index.md) - 开始安装服务
|
- [安装部署](index.md) - 开始安装服务
|
||||||
- [Docker 部署](../deployment/docker.md) - 容器化部署
|
- [Docker 部署](../deployment/docker.md) - 容器化部署
|
||||||
- [生产环境](../deployment/production.md) - 生产配置指南
|
|
||||||
|
|||||||
@@ -187,4 +187,4 @@ python --version # 需要 3.10+
|
|||||||
- [环境要求](requirements.md) - 详细的软件版本要求
|
- [环境要求](requirements.md) - 详细的软件版本要求
|
||||||
- [配置说明](configuration.md) - 环境变量配置指南
|
- [配置说明](configuration.md) - 环境变量配置指南
|
||||||
- [快速开始](../quickstart/index.md) - 创建第一个助手
|
- [快速开始](../quickstart/index.md) - 创建第一个助手
|
||||||
- [Docker 部署](../deployment/docker.md) - 生产环境部署
|
- [Docker 部署](../deployment/docker.md) - 镜像构建与编排
|
||||||
|
|||||||
@@ -88,15 +88,6 @@
|
|||||||
| **磁盘** | 10GB | 20GB+ SSD |
|
| **磁盘** | 10GB | 20GB+ SSD |
|
||||||
| **网络** | 10Mbps | 100Mbps |
|
| **网络** | 10Mbps | 100Mbps |
|
||||||
|
|
||||||
### 生产环境
|
|
||||||
|
|
||||||
| 资源 | 小规模 (< 100 并发) | 中规模 (< 1000 并发) | 大规模 (> 1000 并发) |
|
|
||||||
|------|---------------------|---------------------|---------------------|
|
|
||||||
| **CPU** | 4 核心 | 8 核心 | 16 核心+ |
|
|
||||||
| **内存** | 8GB | 16GB | 32GB+ |
|
|
||||||
| **磁盘** | 50GB SSD | 200GB SSD | 500GB+ SSD |
|
|
||||||
| **网络** | 100Mbps | 1Gbps | 10Gbps |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 网络要求
|
## 网络要求
|
||||||
|
|||||||
BIN
docs/content/images/logo.png
Normal file
BIN
docs/content/images/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.1 MiB |
@@ -1,4 +1,6 @@
|
|||||||
<h1 align="center">Realtime Agent Studio</h1>
|
<p align="center">
|
||||||
|
<img src="images/logo.png" alt="Realtime Agent Studio" width="400">
|
||||||
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<strong>构建实时交互音视频智能体的开源工作平台</strong>
|
<strong>构建实时交互音视频智能体的开源工作平台</strong>
|
||||||
@@ -14,7 +16,7 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="quickstart/index.md">快速开始</a> ·
|
<a href="quickstart/index.md">快速开始</a> ·
|
||||||
<a href="api-reference/index.md">API 文档</a> ·
|
<a href="api-reference/index.md">API 文档</a> ·
|
||||||
<a href="deployment/index.md">部署指南</a> ·
|
<a href="getting-started/index.md">安装部署</a> ·
|
||||||
<a href="roadmap.md">路线图</a>
|
<a href="roadmap.md">路线图</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -26,8 +28,6 @@ Realtime Agent Studio (RAS) 是一款以大语言模型为核心,构建实时
|
|||||||
|
|
||||||
可以将 RAS 看作 [Vapi](https://vapi.ai)、[Retell](https://retellai.com)、[ElevenLabs Agents](https://elevenlabs.io) 的**开源替代方案**。
|
可以将 RAS 看作 [Vapi](https://vapi.ai)、[Retell](https://retellai.com)、[ElevenLabs Agents](https://elevenlabs.io) 的**开源替代方案**。
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 核心特性
|
## 核心特性
|
||||||
@@ -120,6 +120,7 @@ flowchart LR
|
|||||||
| **后端** | FastAPI (Python 3.10+) |
|
| **后端** | FastAPI (Python 3.10+) |
|
||||||
| **引擎** | Python, WebSocket, asyncio |
|
| **引擎** | Python, WebSocket, asyncio |
|
||||||
| **数据库** | SQLite / PostgreSQL |
|
| **数据库** | SQLite / PostgreSQL |
|
||||||
|
| **知识库** | |
|
||||||
| **部署** | Docker, Nginx |
|
| **部署** | Docker, Nginx |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -144,7 +145,7 @@ flowchart LR
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
环境准备与本地开发配置
|
环境准备、本地开发与 Docker/生产部署
|
||||||
|
|
||||||
- :robot: **[助手管理](assistants/index.md)**
|
- :robot: **[助手管理](assistants/index.md)**
|
||||||
|
|
||||||
@@ -170,12 +171,6 @@ flowchart LR
|
|||||||
|
|
||||||
WebSocket 协议与 REST 接口文档
|
WebSocket 协议与 REST 接口文档
|
||||||
|
|
||||||
- :cloud: **[部署指南](deployment/index.md)**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Docker 与生产环境部署
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -186,8 +181,10 @@ flowchart LR
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/your-org/AI-VideoAssistant.git
|
git clone https://github.com/your-org/AI-VideoAssistant.git
|
||||||
cd AI-VideoAssistant
|
cd docker
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
|
# for development
|
||||||
|
# docker compose --profile dev up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
访问 `http://localhost:3000` 即可使用控制台。
|
访问 `http://localhost:3000` 即可使用控制台。
|
||||||
|
|||||||
@@ -257,48 +257,6 @@ flowchart LR
|
|||||||
Engine --> API
|
Engine --> API
|
||||||
```
|
```
|
||||||
|
|
||||||
### 生产环境
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart TB
|
|
||||||
subgraph Internet["互联网"]
|
|
||||||
User[用户]
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph LoadBalancer["负载均衡"]
|
|
||||||
Nginx[Nginx / Traefik]
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph Docker["Docker 集群"]
|
|
||||||
Web1[Web 容器]
|
|
||||||
Web2[Web 容器]
|
|
||||||
API1[API 容器]
|
|
||||||
API2[API 容器]
|
|
||||||
Engine1[Engine 容器]
|
|
||||||
Engine2[Engine 容器]
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph Storage["持久化存储"]
|
|
||||||
PG[(PostgreSQL)]
|
|
||||||
Redis[(Redis)]
|
|
||||||
S3[对象存储]
|
|
||||||
end
|
|
||||||
|
|
||||||
User --> Nginx
|
|
||||||
Nginx --> Web1
|
|
||||||
Nginx --> Web2
|
|
||||||
Nginx --> API1
|
|
||||||
Nginx --> API2
|
|
||||||
Nginx --> Engine1
|
|
||||||
Nginx --> Engine2
|
|
||||||
API1 --> PG
|
|
||||||
API2 --> PG
|
|
||||||
API1 --> Redis
|
|
||||||
Engine1 --> Redis
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 技术选型
|
## 技术选型
|
||||||
|
|
||||||
| 组件 | 技术 | 选型理由 |
|
| 组件 | 技术 | 选型理由 |
|
||||||
@@ -352,5 +310,5 @@ classDiagram
|
|||||||
## 相关文档
|
## 相关文档
|
||||||
|
|
||||||
- [WebSocket 协议](../api-reference/websocket.md) - 详细的协议规范
|
- [WebSocket 协议](../api-reference/websocket.md) - 详细的协议规范
|
||||||
- [部署指南](../deployment/index.md) - 生产环境部署
|
- [部署概览](../deployment/index.md) - Docker 部署
|
||||||
- [核心概念](../concepts/index.md) - 助手、管线等概念说明
|
- [核心概念](../concepts/index.md) - 助手、管线等概念说明
|
||||||
|
|||||||
@@ -273,4 +273,4 @@ ws.onmessage = (event) => {
|
|||||||
- [配置知识库](../customization/knowledge-base.md) - 让助手回答专业问题
|
- [配置知识库](../customization/knowledge-base.md) - 让助手回答专业问题
|
||||||
- [添加工具](../customization/tools.md) - 扩展助手能力
|
- [添加工具](../customization/tools.md) - 扩展助手能力
|
||||||
- [查看 API 文档](../api-reference/websocket.md) - 深入了解协议细节
|
- [查看 API 文档](../api-reference/websocket.md) - 深入了解协议细节
|
||||||
- [部署到生产环境](../deployment/index.md) - 正式上线
|
- [Docker 部署](../deployment/index.md) - 使用容器运行
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
site_name: "Realtime Agent Studio"
|
site_name: "Realtime Agent Studio"
|
||||||
site_description: "构建实时交互音视频智能体的开源工作平台"
|
site_description: "构建实时交互音视频智能体的开源工作平台"
|
||||||
site_url: "https://your-org.github.io/AI-VideoAssistant"
|
site_url: "https://your-org.github.io/AI-VideoAssistant"
|
||||||
repo_name: "AI-VideoAssistant"
|
|
||||||
repo_url: "https://github.com/your-org/AI-VideoAssistant"
|
|
||||||
copyright: "Copyright © 2025 RAS Team"
|
copyright: "Copyright © 2025 RAS Team"
|
||||||
site_author: "RAS Team"
|
site_author: "RAS Team"
|
||||||
|
|
||||||
@@ -25,6 +23,8 @@ nav:
|
|||||||
- 概述: getting-started/index.md
|
- 概述: getting-started/index.md
|
||||||
- 环境要求: getting-started/requirements.md
|
- 环境要求: getting-started/requirements.md
|
||||||
- 配置说明: getting-started/configuration.md
|
- 配置说明: getting-started/configuration.md
|
||||||
|
- 部署概览: deployment/index.md
|
||||||
|
- Docker 部署: deployment/docker.md
|
||||||
- 助手管理:
|
- 助手管理:
|
||||||
- 概述: assistants/index.md
|
- 概述: assistants/index.md
|
||||||
- 配置选项: assistants/configuration.md
|
- 配置选项: assistants/configuration.md
|
||||||
@@ -45,10 +45,6 @@ nav:
|
|||||||
- 概述: api-reference/index.md
|
- 概述: api-reference/index.md
|
||||||
- WebSocket 协议: api-reference/websocket.md
|
- WebSocket 协议: api-reference/websocket.md
|
||||||
- 错误码: api-reference/errors.md
|
- 错误码: api-reference/errors.md
|
||||||
- 部署指南:
|
|
||||||
- 概述: deployment/index.md
|
|
||||||
- Docker 部署: deployment/docker.md
|
|
||||||
- 生产环境: deployment/production.md
|
|
||||||
- 资源:
|
- 资源:
|
||||||
- 常见问题: resources/faq.md
|
- 常见问题: resources/faq.md
|
||||||
- 故障排查: resources/troubleshooting.md
|
- 故障排查: resources/troubleshooting.md
|
||||||
@@ -97,9 +93,6 @@ theme:
|
|||||||
- content.code.copy
|
- content.code.copy
|
||||||
- content.code.annotate
|
- content.code.annotate
|
||||||
- content.tabs.link
|
- content.tabs.link
|
||||||
icon:
|
|
||||||
repo: fontawesome/brands/github
|
|
||||||
|
|
||||||
markdown_extensions:
|
markdown_extensions:
|
||||||
- abbr
|
- abbr
|
||||||
- admonition
|
- admonition
|
||||||
@@ -152,8 +145,7 @@ plugins:
|
|||||||
minify_html: true
|
minify_html: true
|
||||||
|
|
||||||
extra:
|
extra:
|
||||||
version:
|
# version.provider: mike — only enable when deploying with mike (versions.json is generated on deploy)
|
||||||
provider: mike
|
|
||||||
social:
|
social:
|
||||||
- icon: fontawesome/brands/github
|
- icon: fontawesome/brands/github
|
||||||
link: https://github.com/your-org/AI-VideoAssistant
|
link: https://github.com/your-org/AI-VideoAssistant
|
||||||
|
|||||||
4
docs/requirements.txt
Normal file
4
docs/requirements.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Pin MkDocs to 1.x; Material for MkDocs is not yet compatible with MkDocs 2.0
|
||||||
|
# https://squidfunk.github.io/mkdocs-material/blog/2026/02/18/mkdocs-2.0/
|
||||||
|
mkdocs>=1.6,<2
|
||||||
|
mkdocs-material
|
||||||
51
engine/.dockerignore
Normal file
51
engine/.dockerignore
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
.eggs/
|
||||||
|
*.egg-info/
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs/
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
.pytest_cache/
|
||||||
|
.coverage
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
|
||||||
|
# Environment
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
*.env
|
||||||
|
|
||||||
|
# Git
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
Dockerfile
|
||||||
|
.dockerignore
|
||||||
|
|
||||||
|
# Development files
|
||||||
|
*.md
|
||||||
|
tests/
|
||||||
|
examples/
|
||||||
|
scripts/
|
||||||
|
docs/
|
||||||
|
|
||||||
|
# Running artifacts
|
||||||
|
running/
|
||||||
26
engine/Dockerfile
Normal file
26
engine/Dockerfile
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install system dependencies for audio processing
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
build-essential \
|
||||||
|
libportaudio2 \
|
||||||
|
libportaudiocpp0 \
|
||||||
|
portaudio19-dev \
|
||||||
|
ffmpeg \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Install Python dependencies
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Copy application code
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Create necessary directories
|
||||||
|
RUN mkdir -p /app/logs /app/data/vad
|
||||||
|
|
||||||
|
EXPOSE 8001
|
||||||
|
|
||||||
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8001"]
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
# Build stage
|
# Build stage
|
||||||
FROM node:20-alpine AS builder
|
ARG REGISTRY_MIRROR=docker.1ms.run
|
||||||
|
FROM ${REGISTRY_MIRROR}/node:20-alpine AS builder
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@@ -8,11 +9,14 @@ RUN npm ci
|
|||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
ARG VITE_API_BASE_URL=http://localhost:8100/api
|
ARG VITE_API_BASE_URL=http://localhost:8100/api
|
||||||
|
ARG VITE_ENGINE_WS_URL=ws://localhost:8001/ws
|
||||||
ENV VITE_API_BASE_URL=$VITE_API_BASE_URL
|
ENV VITE_API_BASE_URL=$VITE_API_BASE_URL
|
||||||
|
ENV VITE_ENGINE_WS_URL=$VITE_ENGINE_WS_URL
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
# Serve stage (no nginx – Node + serve on port 6000)
|
# Serve stage (no nginx – Node + serve on port 6000)
|
||||||
FROM node:20-alpine
|
ARG REGISTRY_MIRROR=docker.1ms.run
|
||||||
|
FROM ${REGISTRY_MIRROR}/node:20-alpine
|
||||||
|
|
||||||
RUN npm install -g serve
|
RUN npm install -g serve
|
||||||
|
|
||||||
|
|||||||
13
web/Dockerfile.dev
Normal file
13
web/Dockerfile.dev
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Development: run Vite dev server with hot reload (source mounted as volume)
|
||||||
|
ARG REGISTRY_MIRROR=docker.1ms.run
|
||||||
|
FROM ${REGISTRY_MIRROR}/node:20-alpine
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY package.json package-lock.json ./
|
||||||
|
RUN npm ci
|
||||||
|
|
||||||
|
# App code is mounted at runtime; no COPY of source
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
CMD ["npm", "run", "dev"]
|
||||||
Reference in New Issue
Block a user