spring: application: name: nova servlet: multipart: max-file-size: 50MB max-request-size: 100MB datasource: url: jdbc:postgresql://10.5.25.1:5432/nova_tmp username: aloudata password: aloudata123 # url: jdbc:h2:file:./data/nova;AUTO_SERVER=TRUE # 文件模式, 多进程共享 # username: sa # password: # H2 默认空密码 hikari: maximum-pool-size: 10 # 新增: 连接池大小, 个人助理场景默认值 jpa: properties: hibernate.format_sql: false # 新增: 不格式化 SQL 日志 (可选) hibernate: # ↓ 改成 validate (Flyway 接管 DDL, Hibernate 仅校验对齐) ↓ ddl-auto: validate show-sql: false flyway: # 新增整个 flyway 块 enabled: true locations: classpath:db/migration/{vendor} # Spring Boot 3 自动按 JDBC URL 替换 {vendor} baseline-on-migrate: true # 老库无 flyway_schema_history 时自动建 validate-on-migrate: true out-of-order: true logging: level: com.aloudata.nova.memory: INFO com.aloudata.nova.llm: INFO com.aloudata.nova.agent.loop: DEBUG com.aloudata.nova.tools.ToolExecutor: DEBUG org.apache.pdfbox: ERROR org.apache.fontbox: ERROR server: port: 8080 # db-scheduler: distributed task scheduling db-scheduler: enabled: true heartbeat-interval: 5s polling-interval: 10s threads: 4 nova: auth: enabled: true # 开发环境 false,生产 true # auth-url: http://release.anymetrics.aloudata.work api-url: http://release.anymetrics.aloudata.work login-url: http://release111.anymetrics.aloudata.work timeout-seconds: 10 cookie-name: CIP_SESSION # mock-tenant-id: tn_7132486 # mock-user-id: 567017901458984960 mock-tenant-id: tn_20116608 mock-user-id: 696804848586194944 metric: # gateway-url: http://127.0.0.1:18888 # Gateway 基地址 gateway-url: http://10.5.220.1:18888 # Gateway 基地址 admin-api-key: cgk-d90df741b5c440efad76f81837e4a34e # Admin API Key,用于解析用户 API Key api-key-cache-ttl-minutes: 10 # 用户 API Key 缓存时间(分钟),默认 10 prompt: safety-enabled: true tool-call-style-enabled: true runtime-context-enabled: true reasoning-format-enabled: false answer-quality-enabled: true # ========== 模型提供商 ========== # 配置各厂商的连接信息,在 models 中通过 use 引用 # ========== 模型角色 ========== # 使用 use 引用提供商,可选覆盖参数;或直接内联配置 models: # 基础模型 — 用于日常对话、意图识别、摘要等简单任务 simple: use: qwen3-6-plus max-tokens: 4096 temperature: 0.3 # 思考模型 — 用于复杂推理、任务规划、质量审查 thinking: use: qwen3-6-plus max-tokens: 32768 temperature: 0.5 agent: max-rounds: 40 # 主 Agent tool-loop 上限轮次;默认 40 max-tool-calls: 50 # 单次 Agent loop 累计工具调用硬上限;默认 30,防止 runaway execution tools: file-index: enabled: true index-dir: data/index watch-dirs: - "~/Documents" max-results: 20 interval-ms: 300000 # 扫描间隔(毫秒),默认 5 分钟 initial-delay-ms: 300000 # 启动后首次扫描延迟(毫秒),默认 5 分钟 groups: runtime-tools: - read_file - write_file - edit_file - bash - execute_python web-tools: - web_search - web_fetch - send_email - send_im_message knowledge-tools: # 术语知识库工具:search_knowledge 探索 / read_knowledge 取完整内容 - search_knowledge # (read_knowledge 同时是 citation source,挂 [^cite:k] 走 EvidencePayloadMapper.mapReadKnowledge) - read_knowledge core-tools: # 支持多个分组 - "@web-tools" - "@runtime-tools" # @前缀引用其他分组 - "@knowledge-tools" # 术语知识库工具默认开启 - memory agent-policies: nova-agent: core-tools # 主代理:全部工具("*" 或不配表示不限制) retry: enabled: true max-retries: 3 max-context-overflow-retries: 3 backoff-base-ms: 1000 backoff-max-ms: 30000 backoff-multiplier: 2.0 digest: enabled: true threshold-chars: 20000 # 20K 以下不摘要 chunk-size: 50000 # 50K chars ≈ 18K tokens,利用大窗口模型减少调用次数 # 模型上下文窗口大小(chars ≈ 2× tokens),所有阈值按此比例计算 context-window-chars: 256000 # 128K tokens ≈ 256K chars compress-trigger-ratio: 0.95 # 上下文 > 95% 窗口时触发压缩,最后手段,会强制截断内容。 compress-target-ratio: 0.5 # 压缩后目标 50% 窗口 snapshot-enabled: true snapshot-max-count: 5 snapshot-rollback-threshold: 3 snapshot-max-rollbacks: 2 folding-enabled: true fold-interval-rounds: 3 # 折叠最小轮次间隔(防抖) fold-trigger-ratio: 0.80 # 上下文 > 80% 窗口时触发折叠,摘要并压缩内容,最大程度保留有用信息 fold-step-result-threshold-chars: 3000 max-fold-summary-chars: 3000 scratchpad-enabled: true scratchpad-max-chars: 6000 # 工具结果清理(零 LLM,每轮 postRound 执行) tool-result-cleanup-enabled: true cleanup-protected-rounds: 10 # 保护最近 N 轮工具结果不清理 cleanup-min-content-length: 300 # 内容 ≤ 此值不清理(太小不值得) history-trim-keep-turns: 2 # 接近压缩阈值时保留最近 N 轮历史,其余丢弃 max-history-turns: 5 # 保留最近 N 个 user turn(0 或不填 = 不限制) search: max-queries: 30 artifacts: allowed-extensions: # 允许在 Artifacts 面板显示的文件扩展名;空列表 = 不过滤 - html - pdf - docx - xlsx - pptx - csv - md - png - jpg - jpeg - gif - svg - webp artifact: storage: type: local-dir # Max bytes per artifact (default 100MB). Larger files cause publish to fail. max-size-bytes: 104857600 local-dir: # Filesystem root for local-dir storage. base-dir: data/artifacts migration: # Master switch — set true to enable artifact migration. enabled: true # If true, migration runs at startup; else only via admin API. run-on-startup: false # Records per batch transaction. batch-size: 200 # Continue on per-file failure instead of rolling back batch. skip-on-error: true sandbox: backend: docker # directory | docker | kubernetes directory: base-dir: data/sandboxes docker: image: nova-sandbox:latest # bridge: 推荐,容器可访问外网但与宿主机端口隔离 # host: 最简单,无网络隔离 network-mode: bridge network-name: nova-sandbox-net memory-limit: 512m cpu-limit: 1.0 pids-limit: 100 idle-timeout-minutes: 120 cleanup-interval-ms: 300000 tmpfs-size: 64m user-id: 1000 readable-dirs: - skills - ~/.nova/skills security: enable-command-blocklist: true enable-encoding-detection: true enable-path-validation: true audit-log-enabled: true skills: enabled: true dirs: - skills - ~/.nova/skills mcp: enabled: false servers: filesystem: transport: stdio command: npx args: ["-y", "@modelcontextprotocol/server-filesystem", "~/Documents"] timeout-seconds: 60 memory: short-term: max-messages: 50 long-term: enabled: false default-max-results: 5 mem0: base-url: http://localhost:8000 api-key: "" user-id: nova-default-user # mem0-server 配置(mem0-server 从此文件读取,也可通过环境变量覆盖) mem0-server: port: 8000 llm: api-key: your-llm-api-key model: qwen-plus base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 temperature: 0.01 embedder: api-key: your-embedder-api-key # 留空则复用 llm.api-key model: text-embedding-v4 base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 dims: 1024 knowledge: enabled: true default-max-results: 3 realtime: enabled: true default-max-results: 3 consolidation: enabled: true delay-minutes: 1 max-per-run: 10 interval-ms: 3000000 initial-delay-ms: 30000 # ---- 用户画像 + 工程笔记(USER/MEMORY 双 store + 后台 review subagent)---- profile: enabled: true # 总开关,默认关;启用后 memory 工具暴露给主 agent + MEMORY_GUIDANCE 注入到 FULL system prompt + MemoryReviewTask 启动 review-interval-ms: 300000 # 调度间隔 5min;MemoryReviewTask 多久跑一次扫描 initial-delay-ms: 30000 # 启动延迟 30s;首次 review 在应用启动 30 秒后触发 thread-pool-size: 10 # 并发处理 user 数(线程池 core+max=此值) thread-pool-queue-capacity: 1000 # 队列上限;满则 CallerRunsPolicy 同步退化 max-slice-messages: 80 # 单次 review 切片消息数上限(保护,避免输入过长) max-slice-chars: 50000 # 单次 review 切片字符数上限(保护) min-slice-chars: 200 # 切片字符数下限;短到没价值就跳过 LLM 调用 user-char-limit: 800 # USER profile 字符硬上限;超了 add 拒绝并返回 stale_candidates memory-char-limit: 1500 # MEMORY notes 字符硬上限 stale-days: 30 # 删除候选阈值;review prompt 里把 last_relevant_at 早于此值的条目标为 stale review-max-rounds: 8 # subagent ToolLoop 最大轮数 review-model-role: simple # 模型角色(simple / thinking / code),review 用便宜小模型 review-temperature: 0.1 # review subagent LLM 温度(默认 0.1,确定性较高;某些模型对 0.1 反应异常时可调 0.0 或 0.3) review-prompt-version: v1 # 写入 source_prompt_version 字段,用于 prompt A/B 实验 distributed-lock: false # 占位:未来分布式部署时切 Redis 锁;当前仅 in-process CAS 锁 # personal-profile: # enabled: true # dir: data/personal-profile # behavior-analysis-interval-ms: 3600000 # promotion-threshold: 3 # ---- 分布式调度配置 ---- scheduler: heartbeat-interval-ms: 15000 # 心跳间隔(毫秒) staleness-threshold-ms: 60000 # 超过此时间无心跳则标记为 DEAD shard-refresh-interval-ms: 60000 # 本地任务集刷新间隔 failover-scan-interval-ms: 60000 # 故障扫描间隔 rebalance-interval-ms: 600000 # 负载均衡检查间隔(10 分钟) security: # AES-256 主密钥,32 字节 base64。 # 生产环境用 K8s Secret 注入为 env var NOVA_SECURITY_CREDENTIAL_MASTER_KEY; # 本地开发可在 application.yml(不入 git)填入;测试见 src/test/resources/application.yml。 # 注意:密钥一旦设定不可更换——换密钥会导致所有已存的加密凭证不可解。 credential-master-key: NKYDNMYpIIB5szKXPdiM+tK6ki9DmeL1aIQyslATQiM= # ---- 多租户数据源注册表 ---- data-source-registry: # 兜底刷新间隔:除事件触发外,每 N 秒扫已缓存 entries 跟 DB 比对 refresh-interval-seconds: 60 connection-pool: maximum-pool-size: 10 # 每个租户数据源连接池最大连接数(默认 10) minimum-idle: 2 # 最小空闲连接数(默认 2) connection-timeout-ms: 30000 # 连接超时(毫秒,默认 30000) idle-timeout-ms: 600000 # 空闲连接超时(毫秒,默认 600000) max-lifetime-ms: 1800000 # 连接最大生命周期(毫秒,默认 1800000) # ---- Slice A: fetch-all 改造配置(2026-05 引入)---- data-query: # 任何模式的绝对行数上限(含 Top-N)。用户传超此值的 limit 立即拒绝。 max-total-rows: 1000000 # 单次 gateway 调用 limit 上限。所有 fetch-all / Top-N 都被强制按此值分页。 page-size: 5000 preview: # Markdown 预览字符上限(LLM 看到的体量 + JVM 内存兜底) markdown-max-chars: 8000 # 行数阈值(UI 展示用)。≥ 此值或截断时前端显著下载按钮;否则折叠图标。 csv-export-threshold: 50 csv-publish-threshold: 50 # ---- Slice C: save_to_table 能力配置(2026-05 引入)---- save-to-table: row-limit: 1000000 batch-size: 1000 temp-table-ttl-days: 7 backup-table-ttl-days: 30 sample-rows-for-inference: 200 cleanup-max-attempts: 5