Files
Agent-System/docker-compose.dev.yml
T

219 lines
8.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 开发环境编排 (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
# T20-I4: 三环境统一仅初始化扩展;表结构一律走 app goose 迁移(空卷顺序: 扩展→迁移)
- ./deploy/postgres/extensions_init.sql:/docker-entrypoint-initdb.d/01-extensions.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:
# T20-I1: 资源上限(防 OOM 连坐;app 限额独立于 runner)
mem_limit: 1536m
mem_reservation: 768m
cpus: 1.5
build:
context: .
dockerfile: deploy/app/Dockerfile
args:
GOPROXY: ${GO_PROXY:-https://proxy.golang.org,direct}
container_name: shuimu-agent-app-dev
depends_on:
system-db:
condition: service_healthy
# T20-B7:drain 窗口对齐 SHUTDOWN_DRAIN_TIMEOUT(默认 min(AGENT_TIMEOUT,35m)+30s)
stop_grace_period: ${SHUTDOWN_DRAIN_GRACE:-35m30s}
environment:
ENV: dev
HTTP_ADDR: ":${HTTP_PORT:-8080}"
HTTP_PORT: "${HTTP_PORT:-8080}"
HTTP_HOST: "0.0.0.0"
AGENT_BACKEND: ${AGENT_BACKEND:-pi-native}
AGENTX_API_BASE: ${MINIMAX_ENDPOINT_URL:-https://api.minimaxi.com/v1}
AGENTX_API_KEY: ${MINIMAX_API_KEY:-}
AGENTX_MODEL: ${MINIMAX_MODEL_ID:-MiniMax-M2.7-highspeed}
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}
VAULT_STATE_ROOT: /app/vault
VAULT_STORAGE_IDENTITY: ${VAULT_STORAGE_IDENTITY:-dev-vault}
VAULT_MASTER_KEY: ${VAULT_MASTER_KEY:-}
FAV_DEGRADED_READ: ${FAV_DEGRADED_READ:-false}
CACHE_ENABLED: ${CACHE_ENABLED:-true}
INTENT_V2_SHADOW: ${INTENT_V2_SHADOW:-false}
JEV_DECIDE_MODE: ${JEV_DECIDE_MODE:-off}
JEV_BASE_URL: ${JEV_BASE_URL:-}
JEV_API_KEY: ${JEV_API_KEY:-}
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}
INTENT_PLAN_PROJECT_ALLOWLIST: ${INTENT_PLAN_PROJECT_ALLOWLIST:-}
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 publisher off until separate approval (FAV_DEGRADED_READ declared above)
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/ready"]
interval: 10s
timeout: 5s
retries: 6
start_period: 20s
volumes:
# 独占对话记录与环境数据
- ./data/dev:/app/data
- ./data/vault/dev:/app/vault
- dev-aux-sqlite-data:/var/lib/feishu
- ./.regulations:/app/.regulations:ro
restart: unless-stopped
networks:
- dev-net
- shared-net
events:
# T20-I1: 资源上限(防 OOM 连坐;events 限额独立于 runner)
mem_limit: 768m
mem_reservation: 384m
cpus: 1.0
build:
context: .
dockerfile: deploy/app/Dockerfile
args:
GOPROXY: ${GO_PROXY:-https://proxy.golang.org,direct}
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