# 魂镜 环境变量示例 # 复制为 .env 后按需修改 # # 分层分组法排列:核心运行环境 → 应用配置 → 第三方服务 → 基础设施 # 每组内按"同类"对齐:连接地址 → 端口 → 认证信息 → 开关/参数 # 各组按"如果删除此功能能否一键删除整组"的组织原则排列 # # 标注了"必填"的变量在启动前必须设置, # 标注"按需"的变量保留默认值即可正常工作。 # 每个变量的默认值是本地开发推荐值。生产环境请根据实际部署调整。 # ===================================================================== # 全局基础配置(所有子系统共用) # ===================================================================== # 应用名称,仅用于 OpenAPI、日志和健康检查展示 APP_NAME=魂镜 # 运行环境:dev / prod # prod 环境下博闻的日志输出会切换为 JSON 格式,便于日志采集系统(如 Loki)解析 APP_ENV=dev # 服务端默认时区,用于日志和数据库时间展示。格式:IANA Time Zone # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones TIMEZONE=Asia/Shanghai # ===================================================================== # 后端 · 灵台(FastAPI) # ===================================================================== # --- 部署与跨域 --- # 后端监听地址与端口 BACKEND_HOST=0.0.0.0 BACKEND_PORT=8000 # 允许跨域来源,多个来源用逗号分隔 # 生产环境前端独立域名部署时生效;本地开发浏览器经 next.config.ts 同源代理,不触发 CORS CORS_ALLOW_ORIGINS=http://localhost:3000 # HTTP API 前缀 API_PREFIX=/api/v1 # 是否开启 FastAPI debug。生产环境必须为 false DEBUG=false # --- 数据库(金匮)--- # 数据库类型:sqlite / pgsql # - sqlite:本地开发默认,无需 Docker,数据库文件放在项目根目录 db/ 下 # - pgsql:正式环境或模拟正式环境,使用 PostgreSQL / asyncpg DATABASE_TYPE=sqlite # SQLite 配置。DATABASE_TYPE=sqlite 时使用 # 后端会根据 SQLITE_DATABASE_PATH 拼接为:sqlite+aiosqlite:///<绝对路径> SQLITE_DATABASE_PATH=../db/hunjing.sqlite3 # PostgreSQL 配置。DATABASE_TYPE=pgsql 时使用 # 后端会根据下列字段拼接为:postgresql+asyncpg://:@:/ POSTGRES_HOST=127.0.0.1 POSTGRES_PORT=5432 POSTGRES_DB=hunjing POSTGRES_USER=hunjing POSTGRES_PASSWORD=change-me POSTGRES_SSL=false POSTGRES_POOL_SIZE=10 POSTGRES_MAX_OVERFLOW=20 # 可选覆盖项:如果显式设置 DATABASE_URL,则优先使用它,不再根据 DATABASE_TYPE 拼接 DATABASE_URL= # --- 日志 --- # 日志目录,默认放在项目根目录 logs/ 下 LOG_DIR=../logs # 日志级别:DEBUG / INFO / WARNING / ERROR LOG_LEVEL=INFO # 是否启用访问日志(每个请求的 method、path、status、duration) LOG_ACCESS=true # 日志保留天数。超过此天数的日志文件自动清理 LOG_RETENTION_DAYS=14 # 日志轮转大小。单个日志文件达到此大小后自动切分 LOG_ROTATION_SIZE=10 MB # --- 默认人物与用户 --- # 本地单用户范围标识,当前阶段不实现多用户、组织、租户、OAuth 或 SSO DEFAULT_OWNER_SCOPE=local-user # 默认逻辑模型名。必须指向 config/models.yaml 中真实远程 provider 的逻辑模型 DEFAULT_MODEL_HINT=deepseek-v4-flash # --- 管理端点和认证 --- # 司命台管理 API(/api/v1/admin/*)的访问凭证 # 请求需在 Authorization 头携带 ``Bearer ``; # 为空时管理端点 fail-closed(返回 503),强制部署时配置 # 生成命令:python -c "import secrets; print(secrets.token_urlsafe(32))" # 前端司命台管理控制台需在 frontend/.env.local 同步配置 NEXT_PUBLIC_ADMIN_TOKEN(同值) ADMIN_TOKEN= # JWT 签名密钥。必须是一个至少 32 字符的随机字符串 # 为空时 /auth/* 端点返回 503 fail-closed,强制部署时配置 # 生成命令:python -c "import secrets; print(secrets.token_urlsafe(48))" JWT_SECRET= # Access Token 有效期(秒)。默认 900(15 分钟) ACCESS_TOKEN_TTL=900 # Refresh Token 有效期(秒)。默认 604800(7 天) REFRESH_TOKEN_TTL=604800 # 种子初始管理员账户(仅首次启动时创建;生产环境部署后应立刻修改密码) DEFAULT_ADMIN_USERNAME=admin DEFAULT_ADMIN_EMAIL=admin@hunjing.local DEFAULT_ADMIN_PASSWORD=admin123 # --- SSE 流式输出 --- # 是否启用 SSE 流式输出 ENABLE_SSE=true # SSE 轮询数据库新增事件的间隔秒数 SSE_POLL_INTERVAL_SECONDS=0.01 # SSE 心跳间隔秒数 SSE_HEARTBEAT_SECONDS=15 # --- 功能开关 --- # 是否启用工具运行时(百工枢)。关闭时所有工具调用会被拒绝,但不会影响其他功能 ENABLE_TOOL_RUNTIME=true # 是否启用自动记忆候选。关闭时不会从对话中抽取记忆候选,但手动导入记忆不受影响 ENABLE_MEMORY_CANDIDATES=false # 是否启用内驱力扫描(太一枢的 curiosity / exploration) ENABLE_INTRINSIC_DRIVE=false # 是否启用大周天自动触发(长期演化循环) ENABLE_BIG_CYCLE=true # 是否启用洛书显式多步规划(Deliberative Planning) ENABLE_DELIBERATIVE_PLANNING=false # 是否启用审计日志(司命枢·起居注) ENABLE_AUDIT_LOG=true # 是否启用摄像头(烛照枢·视觉感知) ENABLE_CAMERA=false # 是否启用麦克风(烛照枢·听觉感知) ENABLE_MICROPHONE=false # 是否启用 ASR(语音转文字) ENABLE_ASR=false # 是否启用 TTS(文字转语音) ENABLE_TTS=false # 是否启用语音训练(基于导入的语音样本微调 TTS 音色) ENABLE_VOICE_TRAINING=false # 是否启用实时语音对话(Voice Chat) ENABLE_VOICE_CHAT=false # --- 运行时参数 --- # 单条文本消息最大字节数 MAX_TEXT_MESSAGE_BYTES=32768 # 单个 Run 超时秒数 RUN_TIMEOUT_SECONDS=120 # Agent 循环最大轮数 AGENT_MAX_ITERATIONS=8 # 单个 Run 最大事件数 RUN_MAX_EVENTS=1000 # 事件 payload 最大字节数 EVENT_PAYLOAD_MAX_BYTES=65536 # 单次高风险工具确认挂起超时秒数;须小于 RUN_TIMEOUT_SECONDS,超时按拒绝处理 CONFIRMATION_TIMEOUT_SECONDS=60 # 是否启用数据库持久化的确认存储(用于多 worker 部署) # 关闭时使用进程内 InMemoryConfirmationStore(默认),适合单进程开发模式 USE_DB_CONFIRMATION_STORE=false # 每轮对话最多注入的记忆条数 MEMORY_INJECTION_LIMIT=5 # 自动记忆候选重要性阈值(0.0 ~ 1.0)。低于此阈值的不生成候选 MEMORY_CANDIDATE_MIN_IMPORTANCE=0.7 # 内驱力扫描间隔秒数 DRIVE_SCAN_INTERVAL_SECONDS=3600 # 单次扫描最多好奇问题数 DRIVE_MAX_CURIOSITY_PER_SCAN=5 # 是否允许内驱力中断当前任务(Agent 循环中插入探索) DRIVE_ALLOW_INTERRUPT=false # 触发大周天的记忆数阈值。新增记忆数达到此值时触发一轮大周天 BIG_CYCLE_MEMORY_THRESHOLD=20 # 两次大周天最小间隔(秒),避免频繁触发 BIG_CYCLE_MIN_INTERVAL_SECONDS=300 # 大周天候选生成所用模型(config/models.yaml 的逻辑模型名) BIG_CYCLE_MODEL=deepseek-v4-flash # 单次大周天生成的演化候选上限 BIG_CYCLE_MAX_CANDIDATES=10 # 高风险动作是否总是确认(即使 permission_policy 设为 allow 也弹出确认框) SAFETY_ALWAYS_CONFIRM_HIGH_RISK=true # --- 工具调用参数 --- # 工具调用超时秒数(所有工具共享) TOOL_TIMEOUT_SECONDS=60 # fetch_url 等 HTTP 工具的 HTTP 请求超时秒数 TOOL_WEB_HTTP_TIMEOUT_SECONDS=15 # MCP Server tools/list 请求超时秒数 MCP_LIST_TIMEOUT_SECONDS=10 # MCP Server tools/call 请求超时秒数 MCP_CALL_TIMEOUT_SECONDS=30 # MCP stdio 子进程启动超时秒数 MCP_STDIO_START_TIMEOUT_SECONDS=15 # MCP stdio 单次 tools/call 超时秒数 MCP_STDIO_CALL_TIMEOUT_SECONDS=30 # MCP stdio SIGTERM → SIGKILL 等待秒数 MCP_STDIO_STOP_TIMEOUT_SECONDS=5 # Embedding 模型逻辑名。指向 config/models.yaml 中已注册的 embedding 模型 EMBEDDING_MODEL_HINT=bge-m3 # --- 感知与导入 --- # 是否保存原始感知文件(摄像头 / 麦克风采集的原始文件) PERCEPTION_SAVE_RAW_MEDIA=false # 感知文件最大大小(MB),超限的感知输入会被拒绝 PERCEPTION_MAX_MEDIA_MB=20 # 人物资料导入文件最大大小(MB) IMPORT_MAX_FILE_MB=20 # 人物语音样本最大时长(秒) IMPORT_AUDIO_MAX_DURATION_SECONDS=600 # 允许上传的人物语音样本 MIME 类型,逗号分隔 IMPORT_ALLOWED_AUDIO_MIME_TYPES=audio/wav,audio/mpeg,audio/mp4,audio/flac # ===================================================================== # 模型网关 · 神识(LLM Provider API Keys) # ===================================================================== # 模型名称、provider 映射、能力标签、超时、限流、价格等,统一放在 config/models.yaml 中。 # .env 只保存各 provider 的 URL 与 API key,避免模型策略散落在环境变量中。 # --- DeepSeek --- DEEPSEEK_API_KEY= DEEPSEEK_BASE_URL=https://api.deepseek.com # --- 火山方舟 / 豆包 --- VOLCENGINE_ARK_API_KEY= VOLCENGINE_ARK_BASE_URL=https://ark.cn-beijing.volces.com/api/v3 # --- 小米 MiMo --- XIAOMI_MIMO_API_KEY= XIAOMI_MIMO_BASE_URL=https://token-plan-cn.xiaomimimo.com/v1 # --- OpenAI --- OPENAI_API_KEY= OPENAI_BASE_URL=https://api.openai.com/v1 # --- Anthropic --- ANTHROPIC_API_KEY= ANTHROPIC_BASE_URL=https://api.anthropic.com # --- 元炁(本地推理引擎)--- # 作为 OpenAI 兼容 provider 接入,供 bge-m3 embedding 等模型调用。 YUANQI_BASE_URL=http://localhost:11434 YUANQI_API_KEY= # --- 其他兼容网关预留 --- CUSTOM_LLM_API_KEY= CUSTOM_LLM_BASE_URL= # --- 模型 endpoint 池路由(高级调优项,保持默认即可正常工作)--- # 物理 endpoint 池的 failover 与重试策略 MODEL_ENDPOINT_POOL_ENABLED=true MODEL_ENDPOINT_POOL_DRY_RUN_SELECTION=false MODEL_ENDPOINT_POOL_EXPOSE_DEBUG_HEADERS=false MODEL_ENDPOINT_POOL_AGENT_FAILOVER_ENABLED=false MODEL_ENDPOINT_POOL_PER_ENDPOINT_MAX_RETRIES=1 MODEL_ENDPOINT_POOL_RETRY_BASE_DELAY_SECONDS=0.25 MODEL_ENDPOINT_POOL_RETRY_MAX_DELAY_SECONDS=2.0 # 模型配置文件路径 # 默认读取项目根目录 config/models.yaml;不存在时 fallback 到 config/models.example.yaml MODEL_CONFIG_PATH=../config/models.yaml # ===================================================================== # 元炁 · 本地推理引擎(Local Inference Engine) # ===================================================================== # 元炁监听地址与端口 YUANQI_HOST=0.0.0.0 YUANQI_PORT=11434 # 下载源:auto / huggingface / modelscope YUANQI_MODEL_SOURCE=auto # 模型文件根目录 YUANQI_MODELS_DIR=../models # GGUF LLM 模型路径(为空自动扫描 models/gguf/) YUANQI_LLM_MODEL_PATH= # 多模态 GGUF 模型路径 YUANQI_VISION_MODEL_PATH= # Embedding 模型(HF ID 或本地路径) YUANQI_EMBEDDING_MODEL=BAAI/bge-m3 # Reranker 模型(HF ID 或本地路径) YUANQI_RERANKER_MODEL=BAAI/bge-reranker-v2-m3 # ASR 模型(HF/ModelScope ID 或本地路径),默认 iic/SenseVoiceSmall # 自动下载到 models/funasr/<模型名> YUANQI_ASR_MODEL=iic/SenseVoiceSmall # 推理设备:auto / cuda / mps / cpu YUANQI_DEVICE=auto # LLM 默认参数 YUANQI_LLM_MAX_TOKENS=2048 YUANQI_LLM_TEMPERATURE=0.7 YUANQI_LLM_CTX_SIZE=4096 # 日志级别 YUANQI_LOG_LEVEL=info # ===================================================================== # 天目 · 本地 OCR 引擎(Local OCR Engine) # ===================================================================== # 天目监听地址与端口 TIANMU_HOST=0.0.0.0 TIANMU_PORT=8101 # 模型文件根目录(容器内路径,Docker volume 映射) TIANMU_MODELS_DIR=../models # 推理设备:auto / cuda / mps / cpu。 # auto 表示天目启动时自动检测最优可用加速器(CUDA > MPS > CPU) TIANMU_DEVICE=auto # 日志级别 TIANMU_LOG_LEVEL=info # OCR 结果输出目录(Markdown 文件等),默认 ../output/ TIANMU_OUTPUT_DIR= # HTTP 下载远端图片超时(秒) TIANMU_HTTP_TIMEOUT=30 # PaddleOCR-VL 最大生成 tokens TIANMU_VL_MAX_NEW_TOKENS=1024 # PaddleOCR-VL 图像最大像素数(长边像素 × 28 × 28) TIANMU_VL_MAX_PIXELS=1003520 # PP-OCRv6 模型覆盖路径(为空时自动扫描 $TIANMU_MODELS_DIR/ocr/ppocrv6/{det,rec,cls}/) # TIANMU_PPORCV6_DET_MODEL= # TIANMU_PPORCV6_REC_MODEL= # TIANMU_PPORCV6_CLS_MODEL= # TIANMU_PPORCV6_DICT_PATH= # PaddleOCR-VL 模型覆盖目录(为空时自动扫描 $TIANMU_MODELS_DIR/ocr/paddleocr-vl/) # TIANMU_PADDLEOCR_VL_MODEL_DIR= # ===================================================================== # 博闻 · MCP Web Search(Go) # ===================================================================== # 博闻是一个独立的 MCP Web Search 服务,与灵台(Python)运行时无关。 # --- 搜索 API Key --- # Tavily 搜索 API Key(必填)。多 key 用逗号分隔,博闻会按 EWMA 动态权重自动轮询 TAVILY_API_KEYS= # Brave Search API Key(必填)。X-Subscription-Token # 多 key 逗号分隔 BRAVE_API_KEYS= # --- Redis 缓存配置 --- # 博闻 Redis 缓存总开关。启用后作为内存 LRU 的第二层缓存(两级:L1 LRU → L2 Redis) # 在 SSE 多实例部署时共享缓存状态。单实例部署可以不启用 # 注意:这里的 Redis 配置独立于后端灵台的 REDIS_ENABLED,两套可独立控制 MCP_WEB_SEARCH_REDIS_ENABLED=false # Redis 连接地址(host:port) MCP_WEB_SEARCH_REDIS_ADDR=127.0.0.1:6379 # Redis 密码(无密码则留空) MCP_WEB_SEARCH_REDIS_PASSWORD= # Redis 数据库编号(0 ~ 15) MCP_WEB_SEARCH_REDIS_DB=0 # ===================================================================== # 基础设施(Redis/向量库/图库/对象存储) # ===================================================================== # ===== Redis(灵泉,后端灵台用)===== # 注意:博闻有独立的 MCP_WEB_SEARCH_REDIS_* 配置 REDIS_ENABLED=false REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_DB=0 REDIS_PASSWORD= REDIS_URL=redis://127.0.0.1:6379/0 # 后台任务队列(Dramatiq)的 Redis 连接 DRAMATIQ_ENABLED=false DRAMATIQ_BROKER_URL=redis://127.0.0.1:6379/1 # ===== 向量数据库(灵犀)===== # 向量数据库总开关(false 则纯 SQL 检索,不走向量库)。 VECTOR_DB_ENABLED=false # 向量数据库类型:chroma / milvus VECTOR_DB_TYPE=chroma # ChromaDB 配置(VECTOR_DB_ENABLED=true && VECTOR_DB_TYPE=chroma 时使用) CHROMA_COLLECTION=hunjing_memories CHROMA_PERSIST_DIRECTORY=../db/chroma # Milvus 配置(VECTOR_DB_ENABLED=true && VECTOR_DB_TYPE=milvus 时使用) MILVUS_HOST=127.0.0.1 MILVUS_PORT=19530 MILVUS_USER= MILVUS_PASSWORD= MILVUS_DATABASE=default MILVUS_COLLECTION=hunjing_memories # ===== 图数据库(玄络)===== GRAPH_DB_ENABLED=false # 图数据库类型:neo4j / nebulagraph GRAPH_DB_TYPE=neo4j # Neo4j 配置(GRAPH_DB_ENABLED=true && GRAPH_DB_TYPE=neo4j 时使用) NEO4J_URI=bolt://127.0.0.1:7687 NEO4J_USER=neo4j NEO4J_PASSWORD=change-me NEO4J_DATABASE=neo4j # NebulaGraph 配置(GRAPH_DB_ENABLED=true && GRAPH_DB_TYPE=nebulagraph 时使用) NEBULAGRAPH_HOST=127.0.0.1 NEBULAGRAPH_PORT=9669 NEBULAGRAPH_USER=root NEBULAGRAPH_PASSWORD=nebula NEBULAGRAPH_SPACE=hunjing # ===== 对象存储(玉函)===== # 存储后端:local / minio / aws_s3 / aliyun_oss / tencent_cos / huawei_obs / qiniu_kodo STORAGE_PROVIDER=local # 对象 key 前缀,用于隔离不同环境或部署 STORAGE_KEY_PREFIX=hunjing/local # 预签名 URL 默认过期秒数 STORAGE_PRESIGN_EXPIRES_SECONDS=900 # 本地存储(STORAGE_PROVIDER=local 时使用) LOCAL_STORAGE_ROOT=../storage/objects LOCAL_PUBLIC_BASE_URL= # MinIO(STORAGE_PROVIDER=minio 时使用) MINIO_ENDPOINT=http://127.0.0.1:9000 MINIO_REGION=local MINIO_BUCKET=hunjing MINIO_ACCESS_KEY_ID= MINIO_SECRET_ACCESS_KEY= MINIO_PUBLIC_BASE_URL= MINIO_FORCE_PATH_STYLE=true MINIO_SECURE=false # AWS S3(STORAGE_PROVIDER=aws_s3 时使用) AWS_S3_REGION=us-east-1 AWS_S3_BUCKET=hunjing AWS_S3_ACCESS_KEY_ID= AWS_S3_SECRET_ACCESS_KEY= AWS_S3_ENDPOINT= AWS_S3_PUBLIC_BASE_URL= AWS_S3_FORCE_PATH_STYLE=false # 阿里云 OSS(STORAGE_PROVIDER=aliyun_oss 时使用) ALIYUN_OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com ALIYUN_OSS_REGION=cn-hangzhou ALIYUN_OSS_BUCKET=hunjing ALIYUN_OSS_ACCESS_KEY_ID= ALIYUN_OSS_ACCESS_KEY_SECRET= ALIYUN_OSS_PUBLIC_BASE_URL= # 腾讯云 COS(STORAGE_PROVIDER=tencent_cos 时使用) TENCENT_COS_REGION=ap-guangzhou TENCENT_COS_BUCKET=hunjing TENCENT_COS_APP_ID= TENCENT_COS_SECRET_ID= TENCENT_COS_SECRET_KEY= TENCENT_COS_PUBLIC_BASE_URL= # 华为云 OBS(STORAGE_PROVIDER=huawei_obs 时使用) HUAWEI_OBS_ENDPOINT=https://obs.cn-north-4.myhuaweicloud.com HUAWEI_OBS_REGION=cn-north-4 HUAWEI_OBS_BUCKET=hunjing HUAWEI_OBS_ACCESS_KEY_ID= HUAWEI_OBS_SECRET_ACCESS_KEY= HUAWEI_OBS_PUBLIC_BASE_URL= # 七牛云 Kodo(STORAGE_PROVIDER=qiniu_kodo 时使用) QINIU_KODO_REGION=z0 QINIU_KODO_BUCKET=hunjing QINIU_KODO_ACCESS_KEY= QINIU_KODO_SECRET_KEY= QINIU_KODO_DOMAIN= # ===================================================================== # 乾坤 · Rust 安全沙箱 # ===================================================================== # 沙箱是百工枢的执行后端,使用 Rust 实现隔离执行环境。 # --- 服务地址 --- # Rust 沙箱地址。后端通过该 URL 连接乾坤沙箱服务 # 本地开发:http://127.0.0.1:8090;Docker Compose 内:http://hunjing-sandbox:8090 RUST_SANDBOX_URL= # 沙箱进程监听地址(cargo run 时读取;容器内由 docker-compose 覆盖) SANDBOX_HOST=0.0.0.0 SANDBOX_PORT=8090 # 沙箱工作根目录:所有执行的工作目录都约束在其之下 SANDBOX_BASE_WORKDIR=../sandbox-work # 沙箱日志目录 SANDBOX_LOG_DIR=../logs # 沙箱 tracing 日志级别 RUST_LOG=info # --- 执行限额 --- # 单次执行全局超时上限(毫秒),请求 timeout_ms 不可超过该值 SANDBOX_MAX_TIMEOUT_MS=30000 # 最大并发执行数。超过此值的请求排队等待 SANDBOX_MAX_CONCURRENT=8 # 单流(stdout / stderr 各自)最大捕获字节数 SANDBOX_MAX_OUTPUT_BYTES=1048576 # 单次文件读写(/v1/file/*)最大字节数 SANDBOX_MAX_FILE_BYTES=1048576 # 默认注入子进程的环境变量白名单(逗号分隔) SANDBOX_ALLOWED_ENV=PATH,HOME,TZ,LANG # --- 授权 --- # 是否校验调用方授权凭证(HMAC) # 生产必须为 true 且填写密钥;仅本地快速联调可临时关闭 SANDBOX_AUTH_ENABLED=true # 司命授权 HMAC 共享密钥 # 生产请用高熵随机值,例如:openssl rand -base64 48 SANDBOX_AUTH_SECRET=shared-secret # 旧 secret(逗号分隔)。无中断轮换的并存窗口 # 沙箱先加 previous 认新旧 → 后端切新 secret → TTL 窗口后清 previous SANDBOX_AUTH_SECRET_PREVIOUS= # 后端客户端默认执行超时(毫秒),请求未指定 timeout_ms 时使用 SANDBOX_DEFAULT_TIMEOUT_MS=30000 # 授权凭证有效期(秒),凭证为短期 HMAC token SANDBOX_AUTH_TTL_SECONDS=30 # 凭证未下发 isolation_mode 时的兜底隔离模式(process / container) SANDBOX_ISOLATION_DEFAULT=process # --- 进程级资源限额(setrlimit)--- # 配额分层(每层只能收紧、不能放宽):全局天花板 *_MAX → 凭证 rlimit_overrides → 请求 rlimits → 默认值 SANDBOX_RLIMIT_FSIZE_BYTES=67108864 SANDBOX_RLIMIT_AS_BYTES=536870912 SANDBOX_RLIMIT_CPU_SECS=30 SANDBOX_RLIMIT_NPROC=64 SANDBOX_RLIMIT_NOFILE=256 SANDBOX_RLIMIT_DISABLE= # --- 容器隔离(Docker,L3-L4 高风险工具)--- # Docker 容器模式总开关 SANDBOX_DOCKER_ENABLED=true # Docker 守护进程 socket 地址 SANDBOX_DOCKER_SOCKET=unix:///var/run/docker.sock # 预热池:每种语言保持的最大空闲容器数 SANDBOX_WARM_POOL_MAX_IDLE=3 # 全局最大容器数(各语言空闲 + 运行中总和) SANDBOX_WARM_POOL_GLOBAL_MAX=20 # 空闲容器超时回收(秒) SANDBOX_CONTAINER_IDLE_TTL_SECS=300 # 每容器内存上限(字节) SANDBOX_CONTAINER_MEMORY_BYTES=536870912 # 每容器 CPU 上限(纳秒核) SANDBOX_CONTAINER_CPU_NANOCORES=1000000000 # 每容器进程数上限(防 fork bomb) SANDBOX_CONTAINER_PIDS_LIMIT=64 # 容器网络模式。留空使用 Docker 默认 bridge 网络 SANDBOX_CONTAINER_NETWORK= # 容器创建/启动超时(毫秒) SANDBOX_CONTAINER_CREATE_TIMEOUT_MS=60000 # 各语言容器镜像名 # 未配置的语言对应的请求降级为进程模式 SANDBOX_CONTAINER_IMAGE_PYTHON=python:3.12-slim SANDBOX_CONTAINER_IMAGE_NODE=node:24-slim # SANDBOX_CONTAINER_IMAGE_JAVA=eclipse-temurin:21-jre # SANDBOX_CONTAINER_IMAGE_GENERIC=debian:bookworm-slim # ===================================================================== # 安全管理策略 # ===================================================================== # 工具策略文件路径(由 config/safety.example.yaml 复制为 safety.yaml) # 未配置时 SafetyGovernor 使用内置默认策略;配置后覆盖各工具的 risk_level / permission_policy SAFETY_POLICY_PATH=config/safety.yaml # ===================================================================== # 前端 · 琉璃镜(Next.js) — 参考信息 # ===================================================================== # 前端配置在 frontend/.env.local 中管理(含 NEXT_PUBLIC_*)。 # 目前前端的鉴权已改为通过 /api/auth/me 返回的 is_admin 判断,不再需要独立的管理 token。 # BFF 连接后端的服务端地址(仅 Next 服务端读取,不暴露给浏览器): # BACKEND_URL=http://localhost:8000 (本地开发,跨公网须 https://) # Docker 部署由 docker-compose.app.yml 写死为 http://hunjing-backend:8000 # 浏览器所有请求同源走 BFF(/api/proxy、/api/sse、/api/auth),客户端不需要后端地址。 # ===================================================================== # 神识 · 模型网关(Go,rewrite/1.0 M0) — 灵台唯一模型出口 # ===================================================================== # 神识服务地址;为空时灵台 Kernel 使用进程内回声桩(仅骨架验证,不出真实模型流)。 # 本地开发:SHENSHI_BASE_URL=http://127.0.0.1:8080(先 shenshi/ 目录 `go run .`) # Docker 部署由 docker-compose.app.yml 写死为 http://hunjing-shenshi:8080 SHENSHI_BASE_URL= # 灵台 → 神识服务令牌(两边一致);为空时神识开发档放行不校验 SHENSHI_SERVICE_TOKEN= # 神识流式调用超时(秒) SHENSHI_TIMEOUT_SECONDS=120.0 # 神识服务监听端口(shenshi 服务自身) SHENSHI_PORT=8080 # ===================================================================== # 照壁 · BFF(Fastify,rewrite/1.0 M0) — 鉴权透传 / SSE 直通 # ===================================================================== # 照壁监听端口 BFF_PORT=3000 # 照壁转发的灵台地址;本地开发默认 http://127.0.0.1:8000 # Docker 部署由 docker-compose.app.yml 写死为 http://hunjing-backend:8000 BACKEND_URL=http://127.0.0.1:8000