-
Notifications
You must be signed in to change notification settings - Fork 145
Expand file tree
/
Copy pathcompose.yaml
More file actions
97 lines (94 loc) · 4.06 KB
/
Copy pathcompose.yaml
File metadata and controls
97 lines (94 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
name: sag
# 默认面向个人本地使用:SQLite + LanceDB,无需额外数据库服务。
# 数据统一写入 sagdata 卷,重建容器不会丢失。
services:
api:
build:
context: ./apps/api
dockerfile: Dockerfile
args:
SAG_API_EXTRAS: ""
environment:
SAG_ENVIRONMENT: ${SAG_ENVIRONMENT:-dev}
SAG_DEBUG: "false"
# 仅供本地快速启动;切换 prod 时应用会拒绝这个已知弱密钥。
SAG_SECRET_KEY: ${SAG_SECRET_KEY:-dev-insecure-secret-change-me-in-production-0123456789}
SAG_CORS_ORIGINS: ${SAG_CORS_ORIGINS:-http://localhost:3000}
SAG_ALLOW_REGISTRATION: ${SAG_ALLOW_REGISTRATION:-false}
# 可选 Dify 外部知识库兼容端点;留空时端点拒绝服务。
SAG_DIFY_API_KEY: ${SAG_DIFY_API_KEY:-}
# Dify 专用检索策略;默认 vector 以降低外部知识库请求延迟。
SAG_DIFY_SEARCH_STRATEGY: ${SAG_DIFY_SEARCH_STRATEGY:-vector}
# 四个斜杠表示容器内绝对路径 /data/sag.db。
SAG_DATABASE_URL: sqlite+aiosqlite:////data/sag.db
SAG_DATA_DIR: /data/engine
SAG_UPLOAD_DIR: /data/uploads
SAG_SAG_VECTOR_PROVIDER: lancedb
SAG_SAG_LANGUAGE: ${SAG_SAG_LANGUAGE:-zh}
# LLM / Embedding / MinerU(留空也能启动,之后可在设置页配置)
SAG_LLM_PROVIDER: ${SAG_LLM_PROVIDER:-openai}
# 不带冒号:未定义时用 302 默认值,显式留空时保留空值以使用原生 provider 官方端点。
SAG_LLM_BASE_URL: ${SAG_LLM_BASE_URL-https://api.302ai.cn/v1}
SAG_LLM_API_KEY: ${SAG_LLM_API_KEY:-}
SAG_LLM_MODEL: ${SAG_LLM_MODEL:-qwen3.6-flash}
SAG_LLM_MAX_TOKENS: ${SAG_LLM_MAX_TOKENS:-20000}
SAG_LLM_TIMEOUT_MS: ${SAG_LLM_TIMEOUT_MS:-60000}
SAG_LLM_MAX_RETRIES: ${SAG_LLM_MAX_RETRIES:-2}
# 默认允许 Settings 页面在运行时调整 LLM;设为 true 才作为部署策略锁定。
SAG_LOCK_LLM_CONFIG: ${SAG_LOCK_LLM_CONFIG:-false}
SAG_EMBEDDING_MODEL: ${SAG_EMBEDDING_MODEL:-bge-large-en-v1.5}
SAG_EMBEDDING_BASE_URL: ${SAG_EMBEDDING_BASE_URL:-https://api.302ai.cn/v1}
SAG_EMBEDDING_API_KEY: ${SAG_EMBEDDING_API_KEY:-}
SAG_DOCUMENT_PARSER: ${SAG_DOCUMENT_PARSER:-auto}
SAG_MINERU_BASE_URL: ${SAG_MINERU_BASE_URL:-https://api.302ai.cn}
SAG_MINERU_API_KEY: ${SAG_MINERU_API_KEY:-}
SAG_MINERU_VERSION: ${SAG_MINERU_VERSION:-2.5}
SAG_DOCUMENT_EXTRACT_CONCURRENCY: ${SAG_DOCUMENT_EXTRACT_CONCURRENCY:-30}
SAG_DOCUMENT_CHUNK_MAX_TOKENS: ${SAG_DOCUMENT_CHUNK_MAX_TOKENS:-1000}
SAG_DOCUMENT_CHUNK_MODE: ${SAG_DOCUMENT_CHUNK_MODE:-standard}
SAG_JOB_MAX_ATTEMPTS: ${SAG_JOB_MAX_ATTEMPTS:-3}
SAG_ENGINE_CACHE_SIZE: ${SAG_ENGINE_CACHE_SIZE:-16}
SAG_ENGINE_WARMUP_COUNT: ${SAG_ENGINE_WARMUP_COUNT:-4}
volumes:
- sagdata:/data
ports:
- "${BIND_ADDRESS:-127.0.0.1}:${API_PORT:-8000}:8000"
healthcheck:
test:
- CMD-SHELL
- >-
python -c "import urllib.request,sys;
sys.exit(0 if urllib.request.urlopen('http://localhost:8000/api/v1/system/ready').status==200 else 1)"
interval: 15s
timeout: 5s
retries: 5
start_period: 30s
restart: unless-stopped
web:
build:
context: ./apps/web
dockerfile: Dockerfile
args:
# 浏览器直连的 API 地址(构建期内联);修改后需重建 web。
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:-http://localhost:8000}
# 桌面客户端构建可设为 false,Web 默认保留页内窗口缩放。
NEXT_PUBLIC_ENABLE_WINDOW_SCALING: ${NEXT_PUBLIC_ENABLE_WINDOW_SCALING:-true}
depends_on:
api:
condition: service_healthy
ports:
- "${BIND_ADDRESS:-127.0.0.1}:${WEB_PORT:-3000}:3000"
healthcheck:
test:
- CMD
- node
- -e
- >-
fetch('http://localhost:3000').then(r => process.exit(r.status < 500 ? 0 : 1)).catch(() => process.exit(1))
interval: 30s
timeout: 5s
retries: 3
start_period: 15s
restart: unless-stopped
volumes:
sagdata: