c1420b5665
排查「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>
53 lines
2.7 KiB
Bash
53 lines
2.7 KiB
Bash
# 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
|