TencentDB Agent Memory 的两份 gateway 配置逐字段对照
翻 TencentDB-Agent-Memory 这个仓库的 MemoryCore/ 目录时,最容易踩空的一步是配置文件:根目录下并排放着两个名字很像的 YAML —— tdai-gateway.yaml 和 tdai-gateway.standalone.yaml。名字里都有 standalone,内容却不是一回事。截至 2026-08-16 我们在快照里实读,前者 165 行,后者 97 行。
先把仓库状态交代清楚,因为这直接决定你看到的是不是同一份文件:这个仓库的默认分支是 feat/server_team,不是 main 也不是 master,本文引用的所有路径都在这个分支上。MemoryCore/package.json 里的 version 是 2.0.0-beta.1,仍处于 beta 阶段,参数和字段随版本变动,下面的每一个默认值都要按你手上那份仓库的实际内容再核一遍。
两份文件各自的自我介绍
两份文件开头的注释就写明了定位,这是最直接的判据。
tdai-gateway.yaml 第 2 行的标题注释写的是「默认配置(Standalone + Skill)」;同一份文件 :7 的注释里给出了 Skill 模块的落盘目录约定 {baseDir}/skills/<name>/SKILL.md + files/——也就是说,它是把 Memory 引擎与 Skill 模块写在同一份配置里的那一份。这条落盘约定我们只抄到了配置注释,没有去核对应的写盘代码。
tdai-gateway.standalone.yaml 第 4-5 行写的是「Standalone 单机版配置」「零外部依赖 (不需要 Redis/Shark)」。
所以这两份的关系不是「精简版 / 完整版」那么简单:带 .standalone 后缀的那份反而是更小的那份,而不带后缀的 tdai-gateway.yaml 才是叠了 Skill 模块的那份。名字容易读反,这一点值得先记住。
完全相同的那一半
把两份逐字段对齐之后会发现,Memory 引擎的主体参数两边是一模一样的,包括数值:
| 字段 | tdai-gateway.yaml | tdai-gateway.standalone.yaml |
|---|---|---|
deployMode / stateBackend | standalone / local(:23-24) | 同(:8-9) |
server.port / host | 8420 / 127.0.0.1(:27-28) | 同(:12-13) |
data.baseDir | ~/.memory-tencentdb/memory-tdai(:32) | 同(:16) |
memory.capture.enabled | true(:49) | true(:30) |
memory.extraction | enabled:true、enableDedup:true、maxMemoriesPerSession:20(:52-54) | 同(:33-35) |
memory.persona | triggerEveryN:50、maxScenes:15(:57-58) | 同(:38-39) |
memory.pipeline | everyNConversations:5、enableWarmup:true、l1IdleTimeoutSeconds:600、l2DelayAfterL1Seconds:90、l2MinIntervalSeconds:900、l2MaxIntervalSeconds:3600(:61-66) | 同一组同值(:42-47) |
memory.recall | enabled:true、maxResults:5、scoreThreshold:0.3、strategy:"hybrid"、timeoutMs:5000(:69-73) | 同(:50-54) |
memory.storeBackend | sqlite(:76) | sqlite(:59) |
memory.embedding.provider | "none"(:79) | 同(:72) |
memory.bm25 | enabled:true、language:"zh"(:87-89) | 同(:80-82) |
这张表的用法是:**如果你要改的是上面这些字段,选哪一份模板起手都不影响结果。**真正需要你先分清版本的是下面那几段。另外提醒一句,memory.embedding.provider 两边默认都是 "none",tdai-gateway.yaml:79 的行内注释原文写「默认关闭向量搜索, 仅用 BM25」——也就是说,开箱模板走的是关键词路径,不是向量路径。
真正不同的四类
一、LLM 接入的四行
这是两份文件里唯一同名字段取不同值的一组:
llm.baseUrl:tdai-gateway.yaml:38是https://api.lkeap.cloud.tencent.com/v1;standalone:20是https://api.openai.com/v1llm.model::40是deepseek-v3.2;standalone:22是gpt-4ollm.maxTokens::41是32000;standalone:23是4096llm.timeoutMs::42是300000;standalone:24是120000
这四行是模板里预填的示例值,不是「推荐值」,也不代表任何一个服务端点的可用性——该填什么取决于你自己的接入方式,项目没有给通用值。我们没有部署过任何一个模块,也没有向任何端点发过请求,这里只陈述文件里写着什么。
二、只在 tdai-gateway.yaml 里出现的四段
这是两份文件体量差 68 行的主要来源:
memory.promptMode: code(:46)——这个键在 standalone 版里完全不存在。skill整段(启用状态):tdai-gateway.yaml:95是enabled: true,下挂routing.mode:"bm25"、searchTopK:20(:104-105),extraction.enabled:true、maxIterations:16(:112-113),extraction.queue的backend:"local"、keyPrefix:"tdai"、resultTtlSeconds:86400、lockTtlMs:600000、maxRetries:2、retryBackoffsMs:[5000,15000](:119-124),以及resources.maxResourceSizeBytes:5000000(:130)。observability段(:138-151):otel.enabled:false、clickhouse.enabled:false、kafka.enabled:false、langfuse.enabled:true加上${LANGFUSE_HOST:-}这类环境变量占位。metadata段(:154-165):maxUsersPerInstance:500、maxTeamsPerInstance:100、store.mongoUri(环境变量占位)、store.mongoTransactions:true、systemUser.memory.*。
后两段在 standalone 版里一行都没有。
三、只在 standalone 版里出现的一段
tdai-gateway.standalone.yaml:57-58 用两行注释解释了 storeBackend 的 sqlite 与 tcvdb 两个取值,紧接着 :61-69 给了一整段被注释掉的 tcvdb 示例:url、username:"root"、apiKey、database、embeddingModel:"bge-large-zh"、timeout:10000。
tdai-gateway.yaml 里没有这段示例。所以如果你要照着模板改 tcvdb,参照物只在 standalone 那份里。
四、server.apiKey 的处理方式不一样
tdai-gateway.yaml:29 有这个键,但被注释掉了,注文写的是「不填则所有 v2 接口默认开放(仅本机)」。而 tdai-gateway.standalone.yaml 的 server 段里这个键完全不出现,连注释形态都没有。
skill 段在 standalone 版里也是整段被注释掉的(:88-98),:87 的注文写「可选,默认关闭」,并提示可以用环境变量 TDAI_SKILL_ENABLED=true 启用。
三处需要单独拎出来看的差异
写到这里,把「配置里出现 ≠ 功能可用」这条规矩落到具体行上。
**第一处:tdai-gateway.yaml 自己标注了哪些字段没接线。**这份文件里有三段自述性质的注释,是原样记录的素材::106 写「以下为预留字段:resolver 有默认值但运行时暂无消费者,保持默认即可」,下挂 hybridAlpha、charBudgetPercent、fastPathMinNameLength;:115 在 toolCallThreshold: 10 后面直接注「预留字段,暂无消费者」;:131-133 写「以下为未接线字段,已从活跃配置移除」,点名 allowExecutable(注文写「本意为可执行资源安全开关,但未传入 SkillResourceStore,不拦截」)与 downloadDir(注文写「资源读取走内存返回,无消费者」)。另有 :116-117 说明 headChars / tailChars 「在 service 模式的 per-instance extractor 路径不透传,因此不在 yaml 暴露」。
**第二处:allowExecutable 在两份文件里的口径不一致。**上面那条注释说它已从活跃配置移除,而 tdai-gateway.standalone.yaml:98(该文件最后一行)的注释示例里仍然写着 # allowExecutable: false。两处位置都已给出,以你实读的仓库状态为准。
**第三处:l2DelayAfterL1Seconds 在 yaml 与 schema/代码之间对不上。**两份 gateway yaml 都写 90(tdai-gateway.yaml:64、tdai-gateway.standalone.yaml:45),而插件配置 schema 里的默认值是 10(openclaw.plugin.json:76),代码侧 src/config.ts:566 也是 l2DelayAfterL1Seconds ?? 10,SKILL.md:100 的推荐模板同样给 10。同组的其它 pipeline 字段两边是一致的。这里只陈述四处位置与各自的取值。
顺带一提:还有第三份模板被提到过
README.md:216 提到过一份 tdai-gateway.proxy.yaml,原文写它是「LLM access through an OpenAI-compatible proxy」;tdai-gateway.yaml:36 的注释也写「见 tdai-gateway.proxy.yaml 或 docs/llm-via-proxy.md」。而我们在 2026-08-16 的快照里按 tdai-gateway* 检索,只返回两个文件,就是本文对照的这两份;按 llm-via-proxy* 检索无结果。同样只陈述这个差异。
容器里读的是哪一份
如果你走的是镜像这条路,那么「选哪份 yaml」这件事还叠了一层环境变量。MemoryCore/Dockerfile 共 164 行,运行期段落(:144-148)里设了 TDAI_GATEWAY_CONFIG=/data/config/tdai-gateway.yaml、TDAI_GATEWAY_HOST=0.0.0.0、TDAI_DATA_DIR=/data/tdai-memory,另外 :150 是 EXPOSE 8420。也就是说容器默认读的是挂载进 /data/config/ 的那份,文件名按不带 .standalone 后缀的写法。
同一份 Dockerfile 的 :154-155 有一段注释专门解释了为什么 TDAI_GATEWAY_PORT 故意不写进 ENV:一旦它成为镜像环境变量,就会盖掉挂载配置里的 server.port。这提示的是环境变量与 yaml 是两层,改端口时要先看清这一层关系。健康检查那行(:156-157)打的是 http://127.0.0.1:${TDAI_GATEWAY_PORT:-8420}/health,兜底端口同样是 8420。
你该拿哪一份起手
不给推荐,只给判定动作,你按自己的处境往下走:
- **你要不要 Skill 模块?**要 →
tdai-gateway.yaml里skill.enabled已经是true;不要 → standalone 版里这段本来就是注释掉的。 - **你要不要 observability 与 metadata 两段?**要 → 只有
tdai-gateway.yaml里有可照抄的字段结构;不要 → standalone 版根本没这两段,少一层需要理解的配置面。 - **你要不要改
tcvdb?**要 → 唯一的字段示例在 standalone 版:61-69。 - **你要改的字段在上面那张「完全相同」的表里吗?**在 → 两份都行,别为选模板纠结。
最后一件必须说清楚的事:server.apiKey 在两份模板里默认都不生效。代码侧 src/gateway/server.ts:1116-1129 的 verifyAuth 在 server.apiKey 未配置时直接 return "ok",注释写的是 auth disabled — default behaviour;同仓 Dockerfile:146 默认把 TDAI_GATEWAY_HOST 设为 0.0.0.0;而 README.md:204 的环境变量表里写 TDAI_GATEWAY_API_KEY 对非回环绑定是 required。server.ts:739-746 在「非回环且未开鉴权」时会打一条 logger.warn,文案是「Bind to 127.0.0.1, or set TDAI_GATEWAY_API_KEY, before continuing.」,我们没有在仓库里找到「未设 API Key 且绑非回环则拒绝启动」的实现。这几处位置都在上面列出来了,改配置前请自己去核一遍。这个项目会采集并存储团队的对话、文档与代码,属于敏感数据,网络暴露面怎么处理请按你自己的合规要求评估。
延伸阅读
- 从头读起:TencentDB Agent Memory 是什么:团队级 Agent 记忆中枢怎么读
- 本专题共 40 篇,完整分组目录见专题页
- TencentDB Agent Memory 的网关路由全景:v1 / v2 / v3 各管什么
- TencentDB Agent Memory 非回环绑定:文档要求配 key,代码只 warn
本文依据 TencentDB Agent Memory 官方仓库(github.com/TencentCloud/TencentDB-Agent-Memory)
feat/server_team 分支上的 README、INSTALL、CHANGELOG、ROADMAP 与四个模块的源码整理,
核对日 2026-08-16,对应仓库快照 97f9465。该仓库的默认分支即为 feat/server_team。
本文内容为仓库源码与文档口径,我们没有部署、也没有运行过该项目的任何一个模块,
因此不涉及运行效果、检索质量与性能的任何描述。
该项目主模块处于 beta 阶段、其余模块版本号仍为 0.1.0,参数与接口随版本变动,请以仓库最新内容为准。
该项目会采集并存储团队的对话、文档与代码,属于敏感数据,是否使用请结合自身合规要求评估。
安全与合规相关做法请结合自身环境评估,本文不构成安全方案建议。