The flag reaches all three compose app services and the sysadmin catalog, and unknown values stay on the existing hard block. Co-authored-by: Cursor <cursoragent@cursor.com>
193 lines
7.6 KiB
YAML
193 lines
7.6 KiB
YAML
# =============================================================================
|
|
# 开发环境编排 (Dev Branch Environment)
|
|
# 特性:
|
|
# 1. 独占系统业务库 (5433:5432) 与专属数据卷
|
|
# 2. 独占对话记录、工作区及日志目录 (./data/dev)
|
|
# 3. 共享连接知识库服务 (shuimu-kb-shared:5432)
|
|
# =============================================================================
|
|
name: agent-dev
|
|
|
|
services:
|
|
system-db:
|
|
image: pgvector/pgvector:pg16
|
|
container_name: shuimu-context-pg-dev
|
|
command: ["postgres", "-c", "shared_buffers=256MB", "-c", "max_connections=100"]
|
|
environment:
|
|
POSTGRES_USER: ${CONTEXT_DB_USER:-${SYSTEM_DB_USER:-app}}
|
|
POSTGRES_PASSWORD: ${CONTEXT_DB_PASSWORD:-${SYSTEM_DB_PASSWORD:-dev_secret_db_pass}}
|
|
POSTGRES_DB: ${CONTEXT_DB_NAME:-${SYSTEM_DB_NAME:-agent_system_dev}}
|
|
ports:
|
|
- "127.0.0.1:${CONTEXT_DB_PUBLISH_PORT:-${SYSTEM_DB_PUBLISH_PORT:-5433}}:5432"
|
|
volumes:
|
|
- dev-context-pgdata:/var/lib/postgresql/data
|
|
- ./deploy/postgres/context_init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${CONTEXT_DB_USER:-${SYSTEM_DB_USER:-app}} -d ${CONTEXT_DB_NAME:-${SYSTEM_DB_NAME:-agent_system_dev}}"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 20
|
|
restart: unless-stopped
|
|
networks:
|
|
- dev-net
|
|
|
|
pi-agent:
|
|
build:
|
|
context: .
|
|
dockerfile: deploy/pi-agent/Dockerfile
|
|
image: shuimu-pi-agent:dev
|
|
container_name: shuimu-pi-agent-dev
|
|
environment:
|
|
PORT: 18865
|
|
DATA_DIR: /app/data/workspaces
|
|
MINIMAX_ENDPOINT_URL: ${MINIMAX_ENDPOINT_URL:-https://api.minimaxi.com/v1}
|
|
MINIMAX_API_KEY: ${MINIMAX_API_KEY:-}
|
|
# dev iterates on highspeed; test/main pin MiniMax-M3. Do not align without a promotion decision.
|
|
MINIMAX_MODEL_ID: ${MINIMAX_MODEL_ID:-MiniMax-M2.7-highspeed}
|
|
MINIMAX_API_TYPE: ${MINIMAX_API_TYPE:-openai-compatible}
|
|
MINIMAX_PROVIDER: minimax
|
|
TAVILY_API_KEYS: ${TAVILY_API_KEYS:-}
|
|
RUNNER_AUTH_TOKEN: ${RUNNER_AUTH_TOKEN:-}
|
|
ports:
|
|
- "127.0.0.1:${PI_AGENT_RUNNER_PORT:-18865}:18865"
|
|
volumes:
|
|
- ./data/dev/workspaces:/app/data/workspaces
|
|
- ./data/dev/agent_sessions:/root/.pi/agent/sessions
|
|
- ./deploy/pi-agent/runner.mjs:/app/runner.mjs:ro
|
|
- ./deploy/pi-agent/pi-args.mjs:/app/pi-args.mjs:ro
|
|
- ./deploy/pi-agent/result-v1.mjs:/app/result-v1.mjs:ro
|
|
- ./deploy/pi-agent/extensions:/app/extensions:ro
|
|
tmpfs:
|
|
- /tmp
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -f http://127.0.0.1:18865/health || exit 1"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
networks:
|
|
- dev-net
|
|
|
|
app:
|
|
build:
|
|
context: .
|
|
dockerfile: deploy/app/Dockerfile
|
|
container_name: shuimu-agent-app-dev
|
|
depends_on:
|
|
system-db:
|
|
condition: service_healthy
|
|
environment:
|
|
ENV: dev
|
|
HTTP_ADDR: ":${HTTP_PORT:-8080}"
|
|
HTTP_PORT: "${HTTP_PORT:-8080}"
|
|
HTTP_HOST: "0.0.0.0"
|
|
AGENT_BACKEND: ${AGENT_BACKEND:-pi-agent}
|
|
AGENT_TIMEOUT: ${AGENT_TIMEOUT:-30m}
|
|
MAX_CONCURRENT_AGENTS: ${MAX_CONCURRENT_AGENTS:-8}
|
|
DATA_DIR: /app/data
|
|
# 独占业务与对话库
|
|
APP_DB_DSN: postgres://${SYSTEM_DB_USER:-app}:${SYSTEM_DB_PASSWORD:-dev_secret_db_pass}@system-db:5432/${SYSTEM_DB_NAME:-agent_system_dev}?sslmode=disable
|
|
# 共享知识库
|
|
POSTGRES_SHARED_KB_DSN: postgres://${KB_DB_USER:-regkb}:${KB_DB_PASSWORD:?KB_DB_PASSWORD is required}@shuimu-kb-shared:5432/${KB_DB_NAME:-regulations}?sslmode=disable
|
|
PI_AGENT_RUNNER_URL: http://pi-agent:18865
|
|
PI_AGENT_RUNNER_AUTH_TOKEN: ${RUNNER_AUTH_TOKEN:-}
|
|
PI_AGENT_PROVIDER: ${PI_AGENT_PROVIDER:-minimax}
|
|
PI_AGENT_MODEL: ${PI_AGENT_MODEL:-MiniMax-M2.7-highspeed}
|
|
RUNNER_AUTH_TOKEN: ${RUNNER_AUTH_TOKEN:-}
|
|
EMBEDDING_ENDPOINT_URL: ${EMBEDDING_ENDPOINT_URL:-}
|
|
EMBEDDING_MODEL: ${EMBEDDING_MODEL:-bge-m3}
|
|
EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-}
|
|
RERANKER_ENDPOINT_URL: ${RERANKER_ENDPOINT_URL:-}
|
|
RERANKER_MODEL: ${RERANKER_MODEL:-bge-reranker-v2-m3-free}
|
|
RERANKER_API_KEY: ${RERANKER_API_KEY:-}
|
|
MINERU_ENDPOINT_URL: ${MINERU_ENDPOINT_URL:-https://mineru.net}
|
|
MINERU_API_KEY: ${MINERU_API_KEY:-}
|
|
MINERU_MODEL_VERSION: ${MINERU_MODEL_VERSION:-vlm}
|
|
MINERU_LANGUAGE: ${MINERU_LANGUAGE:-ch}
|
|
MINERU_TIMEOUT: ${MINERU_TIMEOUT:-90s}
|
|
MATERIAL_FULLTEXT_MAX_BYTES: ${MATERIAL_FULLTEXT_MAX_BYTES:-61440}
|
|
MATERIAL_RAG_TOP_K: ${MATERIAL_RAG_TOP_K:-8}
|
|
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin-secret-password-123}
|
|
AUTH_REGISTRATION_ENABLED: ${AUTH_REGISTRATION_ENABLED:-true}
|
|
AUTH_REQUIRE_APPROVAL: ${AUTH_REQUIRE_APPROVAL:-false}
|
|
CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-}
|
|
ALLOW_IN_MEMORY: ${ALLOW_IN_MEMORY:-false}
|
|
CACHE_ENABLED: ${CACHE_ENABLED:-true}
|
|
INTENT_V2_SHADOW: ${INTENT_V2_SHADOW:-false}
|
|
INTENT_V2_DECISION: ${INTENT_V2_DECISION:-false}
|
|
INTENT_V2_DECISION_TIER: ${INTENT_V2_DECISION_TIER:-none}
|
|
WORKFLOW_INTENTS_ENABLED: ${WORKFLOW_INTENTS_ENABLED:-true}
|
|
MULTI_INTENT_ENABLED: ${MULTI_INTENT_ENABLED:-true}
|
|
MULTI_INTENT_PLAN_TIER: ${MULTI_INTENT_PLAN_TIER:-legacy}
|
|
MULTI_INTENT_U9_SEGMENT: ${MULTI_INTENT_U9_SEGMENT:-false}
|
|
MULTI_INTENT_U10_MUTATE: ${MULTI_INTENT_U10_MUTATE:-false}
|
|
MULTI_INTENT_U11_DOCGOV: ${MULTI_INTENT_U11_DOCGOV:-false}
|
|
MULTI_INTENT_U12_RUN_CONTROL: ${MULTI_INTENT_U12_RUN_CONTROL:-false}
|
|
WORKFLOW_SCOPE_MODE: ${WORKFLOW_SCOPE_MODE:-strict}
|
|
# W2 PU6: shadow semantic summary only. REPLACE stays unwired and is not declared here.
|
|
SEMANTIC_SUMMARY_SHADOW: ${SEMANTIC_SUMMARY_SHADOW:-false}
|
|
PI_CHANGE_REPORT_NARRATIVE: ${PI_CHANGE_REPORT_NARRATIVE:-false}
|
|
# FAV U7: keep degraded read + in-process publisher off until separate approval
|
|
FAV_DEGRADED_READ: ${FAV_DEGRADED_READ:-false}
|
|
FAV_PUBLISHER_ENABLED: ${FAV_PUBLISHER_ENABLED:-false}
|
|
ports:
|
|
- "${APP_PUBLISH_HOST:-127.0.0.1}:${HTTP_PORT:-8080}:${HTTP_PORT:-8080}"
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:${HTTP_PORT:-8080}/api/v1/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 6
|
|
start_period: 20s
|
|
volumes:
|
|
# 独占对话记录与环境数据
|
|
- ./data/dev:/app/data
|
|
- dev-aux-sqlite-data:/var/lib/feishu
|
|
- ./.regulations:/app/.regulations:ro
|
|
restart: unless-stopped
|
|
networks:
|
|
- dev-net
|
|
- shared-net
|
|
|
|
events:
|
|
build:
|
|
context: .
|
|
dockerfile: deploy/app/Dockerfile
|
|
container_name: shuimu-agent-events-dev
|
|
entrypoint: ["/app/events"]
|
|
command: ["-env", "/dev/null"]
|
|
depends_on:
|
|
system-db:
|
|
condition: service_healthy
|
|
environment:
|
|
ENV: dev
|
|
HTTP_HOST: "0.0.0.0"
|
|
HTTP_PORT: "${EVENTS_HTTP_PORT:-8088}"
|
|
EVENTS_HTTP_PORT: "${EVENTS_HTTP_PORT:-8088}"
|
|
DATA_DIR: /app/data
|
|
APP_DB_DSN: postgres://${SYSTEM_DB_USER:-app}:${SYSTEM_DB_PASSWORD:-dev_secret_db_pass}@system-db:5432/${SYSTEM_DB_NAME:-agent_system_dev}?sslmode=disable
|
|
ports:
|
|
- "127.0.0.1:${EVENTS_HTTP_PORT:-8088}:${EVENTS_HTTP_PORT:-8088}"
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:${EVENTS_HTTP_PORT:-8088}/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 6
|
|
start_period: 15s
|
|
restart: unless-stopped
|
|
networks:
|
|
- dev-net
|
|
|
|
networks:
|
|
dev-net:
|
|
name: chat-agent-dev-net
|
|
driver: bridge
|
|
shared-net:
|
|
name: chat-agent-shared-net
|
|
external: true
|
|
|
|
volumes:
|
|
dev-context-pgdata:
|
|
name: agent-dev-context-pgdata
|
|
dev-aux-sqlite-data:
|
|
name: agent-dev-aux-sqlite-data
|