配置说明¶
本文面向部署人员,调用方无需阅读。
系统包含三个服务:主站 Web(8862)、问答 API(8863)、CG_RAG(8864)。管理台为独立进程(8865/8866)。
配置文件通常位于仓库 config/ 或 /etc/construction-rag/config/。问答服务使用 question_app.yaml,密钥文件为 question_app.secrets.yaml(chmod 600)。CG_RAG 亦可单独读取仅含 retrieval + cg_rag 字段的 cg-retrieval.yaml。管理台使用 paths.yaml / services.yaml / models.yaml / secrets.yaml。
已通过进程环境变量注入的键,不会被 YAML 覆盖。systemd 若使用 launch_service.py --env-json,将先以该快照替换完整环境表,YAML 仅补充缺失的键。
两份 models.yaml 同名,但并非同一文件
管理台的 models.yaml 仅包含流水线使用的 admin_llm;问答目录包含 providers / models.catalog,两者不得相互覆盖。同目录混放时,须在 question_app.yaml 中指定问答目录,或为问答服务单独设置 QUESTION_APP_CONFIG_DIR。
配置变更后,须重启对应进程:
| 变更内容 | 重启目标 |
|---|---|
| 检索路径、CG 上游、视觉 VLM | CG(生产单元通常为 construction-rag-cg) |
| 问答端口、领域门、主站模型列表 | 问答 API;如有前端变更还需执行 next build |
| 管理台路径、登录、启用检索库指针 | 管理台 |
各字段的写法详见字段手册:CG_RAG · 问答主站 · 管理台。
本机初始化时,从模板复制配置文件:
cp config/question_app.yaml.example config/question_app.yaml
cp config/question_app.secrets.yaml.example config/question_app.secrets.yaml
chmod 600 config/question_app.secrets.yaml
不得将 Question API 的 models.yaml.example 覆盖到管理台的 models.yaml。run_cg_rag_http.sh / run_question_generated_api.sh / run_question_generated_web.sh 会自动绑定仓库 config/ 中的文件。如需修改路径,可使用 QUESTION_APP_CONFIG、QUESTION_APP_SECRETS_CONFIG、QUESTION_APP_CONFIG_DIR。兼容旧路径:backend/src/question_app.remote.yaml。
默认入口¶
可用 scope:usual(常用规范)、usual_plus_law(常用规范及常用法律)、full(全库)。HTTP/MCP 请求省略 scope 时,当前实现按请求模型回退至 usual。生产环境建议显式传入。
生成和 thinking¶
generation_endpoint 和 generation_model 未配置时,retrieve-rerank 功能仍可正常使用;constrained-generate、rag 和 answer 的生成阶段将返回业务失败,不会将配置缺失包装为 HTTP 500。
thinking payload 按 provider 分流:
| provider | thinking 关闭 | thinking 开启 |
|---|---|---|
deepseek |
thinking: {"type": "disabled"} |
thinking: {"type": "enabled"} |
poly |
不额外注入 thinking 参数 | chat_template_kwargs: {"enable_thinking": true} |
openai_compatible |
不额外注入 thinking 参数 | chat_template_kwargs: {"enable_thinking": true} |
CG_RAG 的 poly 与通用 openai_compatible adapter 在 thinking 关闭时不注入 chat_template_kwargs。若某兼容端点要求显式传入 enable_thinking=false,应扩展 provider adapter 并补充协议测试,不得由调用方任意透传模型参数。
DeepSeek 官方 API 建议使用 deepseek-v4-flash 或 deepseek-v4-pro 等 V4 模型名;本项目不再依赖旧的 deepseek-chat / deepseek-reasoner 命名来切换 thinking。
视觉上游在 cg_rag.vision 中配置,不得与文本 generation_endpoint 混用。未配置视觉时,仅 /cg-rag/vision/* 接口失败,其余不受影响。视觉与文本生成共用 generation_concurrency,批量视觉请求会占用文本生成配额。
缓存、容量、warmup¶
retrieve-rerank 的缓存键由 normalized scope、去首尾空白后的 query、topk 和 profile_fingerprint 共同构成。fingerprint 由当前 scope 的语料/索引文件摘要、embedding 配置、rerank 配置及 profile 关键字段计算得出;上述内容发生变化时,旧缓存不会被误用。缓存不覆盖 LLM generation。
健康检查和 retrieve-rerank 响应会暴露脱敏后的 fingerprint 摘要:GET /cg-rag/health 返回 profile_fingerprint.id / summary;缓存命中时 cache.hit: true。
检索与生成使用独立 limiter,完整 RAG 流程在等待 generation 期间不会继续占用 retrieval limiter。非流式请求等待容量超时后返回 HTTP 429;/rag/stream 已开始传输后通过 SSE error + final 事件返回错误,HTTP 状态码仍为 200。
POST /cg-rag/warmup 将按顺序加载 scope,但 retriever manager 同时仅保留一个 active profile。传入多个 scope 时,最后一个将成为最终 resident scope。启动脚本的 warmup_scopes 配置详见 CG 字段手册。
hydration sidecar 负责补全 corpus 文档字段。健康检查中的 hydration 字段报告命中次数和失败次数。
编排边界¶
CG_RAG 不承担 domain gate 职责,仅负责 retrieve、rerank、可选受约束生成及可选视觉隐患识别。领域判断、权限校验、会话管理、附件存储均由调用方处理。图片随请求传入、在内存中处理,随响应结束后释放。
YAML 片段¶
完整字段表见字段手册。以下为 CG 常用配置片段:
cg_rag:
provider: deepseek
host: 0.0.0.0
port: 8864
warmup_scopes: full
remote_api: true
http_prefix: /cg-rag
mcp_path: /cg-rag/mcp
generation_endpoint: https://api.deepseek.com/chat/completions
generation_model: deepseek-v4-flash
vision:
endpoint: https://example.com/v1/chat/completions
model: your-vlm
retrieval:
default_scope: full
密钥仅写入 question_app.secrets.yaml,权限设为 0600。不得在文档、命令行、shell history 或 git 中包含 credential。
inbound_token / path_ids(2026-09-29)¶
cg_rag.inbound_token(secrets)/CG_RAG_INBOUND_TOKEN:入站 Bearer 令牌。cg_rag.expose_docs/CG_RAG_EXPOSE_DOCS:默认 false。CG_RAG_REQUIRE_INBOUND_AUTH、CG_RAG_STRICT_CONFIG_CONFLICTS:严格启动开关,默认关闭。- health/profiles 中的
path_ids:sha256(os.path.realpath(path))[:16];测试向量compute_path_id("/data/x") == "e220a107e93688b1"。
视觉 profile 运行时键¶
完整字段表见 yaml-reference-cg.md · cg_rag.vision。常见覆盖项:
| 键 | 环境变量 | 默认(e10) | 重启 |
|---|---|---|---|
profile |
CG_RAG_VISION_PROFILE |
(由 workflow 推导为 e10) | CG |
total_budget_seconds |
CG_RAG_VISION_TOTAL_BUDGET_SECONDS |
150 | CG |
sse_heartbeat_seconds |
CG_RAG_VISION_SSE_HEARTBEAT_SECONDS |
15 | CG |
strict_retrieval_failure |
CG_RAG_VISION_STRICT_RETRIEVAL_FAILURE |
true | CG |
upstream_retry_count |
CG_RAG_VISION_UPSTREAM_RETRY_COUNT |
4 | CG |