Files
sundynix-agentix/.env.example
T
Blizzard c1420b5665 fix(rag): 全文索引在容器里根本没持久化 —— 补 /data 卷 + BLEVE_PATH
排查「fulltext 路 0 命中」时发现的真问题,比原以为的分词器问题严重得多。

现状:mcp-go 容器**没有任何 volume**,也没设 BLEVE_PATH,于是索引落到相对
CWD 的 .data/bleve。而运行阶段没有 WORKDIR(CWD=/)、进程又是非 root(uid 10001),
两种结局都糟:
  - 在 / 下建不了目录 → openBleve 静默退回内存索引,重启即清零;
  - 就算建得了,也只是写进容器可写层,每次发版重建容器一样清零。
更糟的是它不报错:混合检索少一路只表现为召回变差,看不出故障。

改动:
  - Dockerfile:建 /data 并 chown 给 app,WORKDIR 设为 /data;
  - 两份 compose:BLEVE_PATH=/data/bleve + 挂持久卷(132 那份此前连
    顶层 volumes 段都没有);
  - .env.example:写清默认相对路径相对的是**启动目录**——本地从仓库根起
    和从 sundynix-mcp-go/ 起会写出两份互不相干的索引,排查时极易被坑。

附带澄清:中文分词本身没问题。直接开落盘索引验证过,mapping 里 text 字段
确实是 cjk,实测「星间链」命中 4 条、「海关监管」命中 104 条,BM25 打分正常。
a4852c3 那次修复是有效的,之前怀疑分词器的判断作废。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:40:31 +08:00

53 lines
2.7 KiB
Bash
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.
# sundynix-agentix 部署配置模板 —— 复制为 .env 后填写(docker compose -f docker-compose.prod.yml 读取)
#
# cp .env.example .env
# # 按下方注释生成/填写各项,然后:
# docker compose -f docker-compose.prod.yml up -d --build
#
# 说明:这里只放「引导密钥/基建凭据」。LLM 模型 API key 不在这里 —— 部署起来后登录控制台配置、
# 由平台 AES 加密存库(加密用的就是下面的 SUNDYNIX_SECRET_KEY)。
# ── 必填:引导密钥(生成命令见各行) ─────────────────────────────
# 主加密密钥:用于加密控制台里配置的模型 API key。三服务共用同一个,丢了=已存的密钥都解不开。
# 生成:openssl rand -base64 32
SUNDYNIX_SECRET_KEY=
# 登录令牌签名密钥(JWT)。
# 生成:openssl rand -base64 32
JWT_SECRET=
# 数据库密码(PostgreSQL,平台主库)。
# 生成:openssl rand -base64 24 (勿用特殊字符 @ : / 以免污染 DSN)
POSTGRES_PASSWORD=
# 图数据库密码(Neo4j,知识图谱)。
NEO4J_PASSWORD=
# 全文(bleve)索引落盘目录。留空则用相对路径 .data/bleve —— 相对的是 mcp-go 的**启动目录**
# 从仓库根起和从 sundynix-mcp-go/ 起会写出两份互不相干的索引(本地排查全文召回时最容易被这个坑到)。
# 本地开发建议显式写成绝对路径;容器部署已在 compose 里固定为 /data/bleve + 持久卷。
BLEVE_PATH=
# ── 必填:管理员 ─────────────────────────────────────────────
# 管理员用户 ID 白名单(逗号分隔)。生产模式下只有这些用户能进 /admin 控制台。
# 首次部署:先留空起服务 → 注册第一个账号 → 从返回的 user id 填进来 → 重启 gateway。
ADMIN_USER_IDS=
# ── 选填:网络/端口 ─────────────────────────────────────────
# 控制台对外端口(默认 80)。
HTTP_PORT=80
# 网关对外端口(供桌面端直连;纯 Web 用可不暴露)。
GATEWAY_PORT=8080
# 允许的前端来源(生产建议设具体域名,如 https://app.example.com;缺省 * 仅供内网/演示)。
CORS_ALLOW_ORIGIN=*
# Jaeger 链路追踪 UI 端口。
JAEGER_UI_PORT=16686
# ── 选填:调优 ───────────────────────────────────────────────
# 单调度副本并发任务数。
DISPATCHER_CONCURRENCY=8
# 单任务 token 预算上限(防失控成本)。
TASK_TOKEN_BUDGET=200000
# 镜像标签。
TAG=latest