TencentDB Agent Memory 的两份 gateway 配置逐字段对照

2026-08-16

翻 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.yamltdai-gateway.standalone.yaml
deployMode / stateBackendstandalone / local(:23-24)同(:8-9)
server.port / host8420 / 127.0.0.1(:27-28)同(:12-13)
data.baseDir~/.memory-tencentdb/memory-tdai(:32)同(:16)
memory.capture.enabledtrue(:49)true(:30)
memory.extractionenabled:true、enableDedup:true、maxMemoriesPerSession:20(:52-54)同(:33-35)
memory.personatriggerEveryN:50、maxScenes:15(:57-58)同(:38-39)
memory.pipelineeveryNConversations:5、enableWarmup:true、l1IdleTimeoutSeconds:600、l2DelayAfterL1Seconds:90、l2MinIntervalSeconds:900、l2MaxIntervalSeconds:3600(:61-66)同一组同值(:42-47)
memory.recallenabled:true、maxResults:5、scoreThreshold:0.3、strategy:"hybrid"、timeoutMs:5000(:69-73)同(:50-54)
memory.storeBackendsqlite(:76)sqlite(:59)
memory.embedding.provider"none"(:79)同(:72)
memory.bm25enabled: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/v1
  • llm.model::40 是 deepseek-v3.2;standalone:22 是 gpt-4o
  • llm.maxTokens::41 是 32000;standalone:23 是 4096
  • llm.timeoutMs::42 是 300000;standalone:24 是 120000

这四行是模板里预填的示例值,不是「推荐值」,也不代表任何一个服务端点的可用性——该填什么取决于你自己的接入方式,项目没有给通用值。我们没有部署过任何一个模块,也没有向任何端点发过请求,这里只陈述文件里写着什么。

二、只在 tdai-gateway.yaml 里出现的四段

这是两份文件体量差 68 行的主要来源:

  1. memory.promptMode: code(:46)——这个键在 standalone 版里完全不存在。
  2. 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)。
  3. observability 段(:138-151):otel.enabled:false、clickhouse.enabled:false、kafka.enabled:false、langfuse.enabled:true 加上 ${LANGFUSE_HOST:-} 这类环境变量占位。
  4. 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 官方仓库(github.com/TencentCloud/TencentDB-Agent-Memory) feat/server_team 分支上的 README、INSTALL、CHANGELOG、ROADMAP 与四个模块的源码整理, 核对日 2026-08-16,对应仓库快照 97f9465。该仓库的默认分支即为 feat/server_team。 本文内容为仓库源码与文档口径,我们没有部署、也没有运行过该项目的任何一个模块, 因此不涉及运行效果、检索质量与性能的任何描述。 该项目主模块处于 beta 阶段、其余模块版本号仍为 0.1.0,参数与接口随版本变动,请以仓库最新内容为准。 该项目会采集并存储团队的对话、文档与代码,属于敏感数据,是否使用请结合自身合规要求评估。 安全与合规相关做法请结合自身环境评估,本文不构成安全方案建议。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。

加微信,把这一页存到手机上

扫码加站长企业微信,会自动把这一页的链接发给你,方便在手机上接着看。AI 落地卡住了,也可以直接问。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。