#!/usr/bin/env bash # ============================================================================= # 清鉴(zsjz-ai)后端环境变量 # # ai-server 的 application*.yaml 里配置项都写成 ${ENV_NAME:默认值}, # 本文件把这些变量显式列出来,方便在 Linux 上统一下发/逐项修改。 # 一个变量都不设置时,后端行为与本文件里的取值一致(即 yaml 中的默认值)。 # # 服务端口(8980)、context-path(/js/a)、应用名(ai-server)固定在 # application.yaml 里,不参与参数化,因此不在本文件中。 # # 用法(任选其一): # 1) 启动前导入当前 shell: # set -a; source deploy/env.sh; set +a # java -jar ai-server.jar # 2) systemd 单元: # EnvironmentFile=/opt/zsjz-ai/deploy/env.sh # # 用法(任选其一): # 1) 启动前导入当前 shell: # set -a; source deploy/env.sh; set +a # java -jar ai-server.jar # 2) systemd 单元: # EnvironmentFile=/opt/zsjz-ai/deploy/env.sh # # 注意: # · 文件内含数据库口令,部署时请 chmod 600,并按实际环境修改地址与口令。 # · 下面各项默认值取自 application-dev.yaml(当前开发环境); # 【按环境修改】标注的项,生产部署务必逐项确认。 # · 生效 profile 由 Spring 原生的 SPRING_PROFILES_ACTIVE 控制,默认 dev; # 生产可取消下面这行的注释。 # · sa-token、mybatis-plus 不参与参数化,不在此文件范围。 # ============================================================================= # SPRING_PROFILES_ACTIVE="pro" # --------------------------------------------------------------------------- # 跨域(桌面客户端用 file:// 加载前端,必须允许跨域) # --------------------------------------------------------------------------- APP_CORS_ENABLED="true" APP_CORS_ALLOWED_ORIGIN_PATTERNS="*" # --------------------------------------------------------------------------- # Spring 基础 # --------------------------------------------------------------------------- SPRING_TASK_SCHEDULING_POOL_SIZE="4" SPRING_HTTP_CODECS_MAX_IN_MEMORY_SIZE="10MB" SPRING_SERVLET_MULTIPART_MAX_FILE_SIZE="200MB" SPRING_SERVLET_MULTIPART_MAX_REQUEST_SIZE="500MB" # --------------------------------------------------------------------------- # PostgreSQL(平台库,必须装 pgvector 扩展) # 【按环境修改】dev 默认 192.168.0.106,pro 默认 localhost # --------------------------------------------------------------------------- SPRING_DATASOURCE_DYNAMIC_PRIMARY="master" SPRING_DATASOURCE_DYNAMIC_STRICT="true" SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL="jdbc:postgresql://192.168.0.106:5432/zsjz-ai" SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME="postgres" SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD="postgres" SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_DRIVER_CLASS_NAME="org.postgresql.Driver" # --------------------------------------------------------------------------- # Redis(sa-token 登录态硬依赖,不可用则登录相关接口全部异常) # 【按环境修改】 # --------------------------------------------------------------------------- SPRING_DATA_REDIS_HOST="192.168.0.106" SPRING_DATA_REDIS_PORT="6379" # --------------------------------------------------------------------------- # Elasticsearch(全文检索,索引 zsjz_search) # 【按环境修改】需要鉴权时再打开下面两行 # --------------------------------------------------------------------------- SPRING_ELASTICSEARCH_URIS="http://192.168.0.106:9200" SPRING_ELASTICSEARCH_CONNECTION_TIMEOUT="5s" SPRING_ELASTICSEARCH_SOCKET_TIMEOUT="60s" # SPRING_ELASTICSEARCH_USERNAME="" # SPRING_ELASTICSEARCH_PASSWORD="" # --------------------------------------------------------------------------- # 本地文件存储 # 【按环境修改】root-path 相对 JVM 工作目录(须为仓库/部署根目录); # base-url 必须与 SERVER_PORT、SERVER_SERVLET_CONTEXT_PATH 一致 # --------------------------------------------------------------------------- STORAGE_LOCAL_ROOT_PATH="./data/files" STORAGE_LOCAL_BASE_URL="http://localhost:8980/js/a" # --------------------------------------------------------------------------- # Neo4j(可选,仅图谱能力需要) # --------------------------------------------------------------------------- NEO4J_URI="bolt://localhost:7687" NEO4J_USERNAME="neo4j" NEO4J_PASSWORD="neo4j123" # --------------------------------------------------------------------------- # Agent 表结构语义检索(RAG) # --------------------------------------------------------------------------- ETL_RAG_ENABLED="true" ETL_RAG_TOP_K="5" ETL_RAG_SCORE_THRESHOLD="0.3" # --------------------------------------------------------------------------- # zsjz.insight(AI 研判 / 会话) # --------------------------------------------------------------------------- ZSJZ_INSIGHT_MAX_SESSIONS_PER_CASE="500" ZSJZ_INSIGHT_RETENTION_DAYS="0" ZSJZ_INSIGHT_MESSAGE_PAGE_SIZE="20" ZSJZ_INSIGHT_MESSAGE_PAGE_SIZE_MAX="100" ZSJZ_INSIGHT_SESSION_LOCK_TIMEOUT_MS="3000" ZSJZ_INSIGHT_DEFAULT_TOP_N="100" ZSJZ_INSIGHT_MAX_TOP_N="200" # --------------------------------------------------------------------------- # zsjz.duckdb(案件库资源预算与兜底回收) # 【按环境修改】max-open-cases 按机器内存/CPU 调整 # --------------------------------------------------------------------------- ZSJZ_DUCKDB_MAX_OPEN_CASES="8" ZSJZ_DUCKDB_MEMORY_RATIO="0.6" ZSJZ_DUCKDB_THREADS_PER_INSTANCE="4" ZSJZ_DUCKDB_REAPER_INITIAL_DELAY_MS="60000" ZSJZ_DUCKDB_REAPER_INTERVAL_MS="300000" # --------------------------------------------------------------------------- # zsjz.file-ai(非表格文件 AI 识别调度) # --------------------------------------------------------------------------- ZSJZ_FILE_AI_MAX_CONCURRENT="3" ZSJZ_FILE_AI_MAX_PENDING="200" ZSJZ_FILE_AI_TIMEOUT_SECONDS="120" # --------------------------------------------------------------------------- # zsjz.embedding(向量模型) # 【按环境修改】model-path 指向部署机上的模型目录(含 tokenizer.json 与 # onnx/model.onnx)。dev 的 yaml 里是 Windows 绝对路径, # Linux 上必须改成实际路径,例如 /opt/zsjz-ai/bge-m3。 # --------------------------------------------------------------------------- ZSJZ_EMBEDDING_ENABLED="true" ZSJZ_EMBEDDING_MODEL_PATH="/opt/zsjz-ai/bge-m3" ZSJZ_EMBEDDING_DIMENSIONS="1024" ZSJZ_EMBEDDING_MAX_SEQ_LEN="8192" ZSJZ_EMBEDDING_BATCH_SIZE="8" ZSJZ_EMBEDDING_INTRA_OP_THREADS="0" ZSJZ_EMBEDDING_OPT_LEVEL="BASIC_OPT" ZSJZ_EMBEDDING_EAGER_LOAD="false" # --------------------------------------------------------------------------- # zsjz.ai-clean(AI 清洗与模板向量索引) # --------------------------------------------------------------------------- ZSJZ_AI_CLEAN_BATCH_TOKEN_BUDGET="0" ZSJZ_AI_CLEAN_STALE_MINUTES="30" ZSJZ_AI_CLEAN_VECTOR_ENABLED="true" ZSJZ_AI_CLEAN_VECTOR_AUTO_INDEX_ON_TEMPLATE_CHANGE="true" ZSJZ_AI_CLEAN_VECTOR_AUTO_REBUILD_ON_STARTUP="true" ZSJZ_AI_CLEAN_VECTOR_TOP_K="12" ZSJZ_AI_CLEAN_VECTOR_SCORE_THRESHOLD="0.30" ZSJZ_AI_CLEAN_VECTOR_MAX_DOCUMENTS_PER_REBUILD="5000" # --------------------------------------------------------------------------- # zsjz.chat-attachment(对话附件解析与 RAG) # --------------------------------------------------------------------------- ZSJZ_CHAT_ATTACHMENT_MAX_DOC_MB="50" ZSJZ_CHAT_ATTACHMENT_MAX_SHEET_MB="200" ZSJZ_CHAT_ATTACHMENT_INLINE_MAX_CHARS="30000" ZSJZ_CHAT_ATTACHMENT_INLINE_MAX_ROWS="200" ZSJZ_CHAT_ATTACHMENT_CHUNK_SIZE="1000" ZSJZ_CHAT_ATTACHMENT_CHUNK_OVERLAP="100" ZSJZ_CHAT_ATTACHMENT_MAX_CHUNKS="500" ZSJZ_CHAT_ATTACHMENT_TOP_K="8" # --------------------------------------------------------------------------- # zsjz.auth(登录安全) # 「账号正在使用」判定窗口(分钟):窗口内有活跃会话时,再次登录需确认后顶号 # --------------------------------------------------------------------------- ZSJZ_AUTH_IN_USE_WINDOW_MINUTES="30"