server: port: 8980 servlet: # 注意:Spring Boot 要求 context-path 以 '/' 开头且**不能**以 '/' 结尾, # 否则 TomcatServletWebServerFactory.setContextPath() 会抛 # IllegalArgumentException: ContextPath must start with '/' and not end with '/'。 # 原值 "!/js/a/" 为 Solon 时代写法('!' 表示精确匹配),在 Spring Boot 下无法启动, # 已按实际生效路径修正为 /js/a(与前端 ctxPath(/js) + adminPath(/a) 一致)。 context-path: /js/a spring: application: name: ai-server profiles: active: dev http: codecs: max-in-memory-size: 10MB servlet: multipart: max-file-size: 200MB max-request-size: 500MB # AI 研判(对象关系分析)配置 —— 见 continuous-insight-plan.md §4.1.7 zsjz: insight: # 单案会话数上限,超出拒绝新建并提示清理历史 max-sessions-per-case: 500 # 留存天数;0 = 不自动清理 retention-days: 0 # 消息分页 limit 默认值(与 Query.limit 默认 20 一致) message-page-size: 20 # 消息分页 limit 上限,超出直接截断(不报错) message-page-size-max: 100 # 会话锁等待超时(毫秒) session-lock-timeout-ms: 3000 # 图谱快照默认取前 N 个节点 / N 条关系(写进提示词,避免误以为全量) default-top-n: 100 # 图谱快照硬上限,防止提示词爆 token max-top-n: 200 # DuckDB 案件库资源预算。 # 注意:DuckdbUnpooledDataSource 下发的是 SET GLOBAL(database instance 级), # 每个案件实例都按「物理内存 30% + CPU 核数线程」配置的话,多人同时开案会 N 倍叠加。 # 这里改为按 max-open-cases 分摊总预算,见 DuckdbBudgetProperties。 duckdb: # 同时打开的案件库数量上限,超出直接拒绝开案 max-open-cases: 8 # 所有案件实例合计可占用的物理内存比例(0~1) memory-ratio: 0.6 # 每个案件实例的 DuckDB 线程数 threads-per-instance: 2 # 兜底回收器:启动后延迟多久开始第一次扫描(毫秒) reaper-initial-delay-ms: 60000 # 兜底回收器:两次扫描的间隔(毫秒) reaper-interval-ms: 300000 mybatis-plus: # 实体别名包(各业务域实体)。已核实 10 个域的实体类简单名无重复,可安全启用; # 若后续新增实体出现重名,MyBatis 会因别名冲突启动失败,此时应删除本配置(XML 全用全限定名)。 type-aliases-package: com.zsjz.ai.common.model.*.entity mapper-locations: classpath*:mappers/**/*.xml configuration: cacheEnabled: false default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl