{"record":{"id":"e17417c1490adfb0","repo":"TencentCloud/TencentDB-Agent-Memory","slug":"llm-provider-proxy-memory-key-yaml-m","errorCode":null,"errorMessage":"llm.provider=proxy 需要 memory 系统用户 key —— 请在 yaml metadata.systemUser.memory 或 env TDAI_MEMORY_SYSTEM_USER_KEY 配置","messagePattern":"llm\\.provider=proxy 需要 memory 系统用户 key —— 请在 yaml metadata\\.systemUser\\.memory 或 env TDAI_MEMORY_SYSTEM_USER_KEY 配置","errorType":"error_code","errorClass":"LlmProviderResolveError","httpStatus":null,"severity":"error","filePath":"MemoryCore/src/adapters/standalone/llm-provider-resolver.ts","lineNumber":56,"sourceCode":"  if (provider !== \"proxy\") return llm;\n\n  if (!llm.baseUrl) {\n    throw new LlmProviderResolveError(\n      \"llm.provider=proxy 需要 llm.baseUrl 指向 context_proxy 根 URL\",\n    );\n  }\n  if (!instanceId || !instanceId.trim()) {\n    throw new LlmProviderResolveError(\n      \"llm.provider=proxy 需要非空 instanceId，无法拼出 /proxy/<iid>/v1 路径\",\n    );\n  }\n\n  const useSystemUserKey = llm.proxy?.useMemorySystemUserKey ?? true;\n  let effectiveApiKey = llm.apiKey;\n  if (useSystemUserKey) {\n    const envKey = process.env.TDAI_MEMORY_SYSTEM_USER_KEY?.trim();\n    if (!envKey) {\n      throw new LlmProviderResolveError(\n        \"llm.provider=proxy 需要 memory 系统用户 key —— \" +\n        \"请在 yaml metadata.systemUser.memory 或 env TDAI_MEMORY_SYSTEM_USER_KEY 配置\",\n      );\n    }\n    if (!MEMORY_USER_KEY_RE.test(envKey)) {\n      throw new LlmProviderResolveError(\n        \"memory 系统用户 key 必须匹配 sk-mem-[A-Za-z0-9_-]{32}\",\n      );\n    }\n    effectiveApiKey = envKey;\n  }\n\n  if (!effectiveApiKey) {\n    throw new LlmProviderResolveError(\n      \"llm.provider=proxy 且 useMemorySystemUserKey=false 时必须显式 llm.apiKey\",\n    );\n  }\n","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/TencentCloud/TencentDB-Agent-Memory/blob/3efcd317b84146d6a08518ac0f7ee7c8a8d200ec/MemoryCore/src/adapters/standalone/llm-provider-resolver.ts#L38-L74","documentation":"In proxy mode the default behavior (llm.proxy.useMemorySystemUserKey, default true) is to take the API key from env TDAI_MEMORY_SYSTEM_USER_KEY. This error is thrown when that env var is unset or whitespace-only. The message also points to the yaml alternative: metadata.systemUser.memory.","triggerScenarios":"provider=\"proxy\" with baseUrl and instanceId set, useMemorySystemUserKey not set to false (or explicitly true), and process.env.TDAI_MEMORY_SYSTEM_USER_KEY missing/blank at resolve time.","commonSituations":"Env var not exported in the deployment environment (docker-compose/k8s secret not mounted); var defined in yaml metadata.systemUser.memory but gateway's applyMetadataEnvFromGatewayConfig was never applied in the standalone path; running locally without a .env file; typo in the env var name.","solutions":["Export TDAI_MEMORY_SYSTEM_USER_KEY with a valid sk-mem-... key in the runtime environment","Or set it in yaml under metadata.systemUser.memory so gateway startup backfills the env","Or set llm.proxy.useMemorySystemUserKey=false and provide llm.apiKey explicitly","Verify with printenv/echo in the same process that the var is actually visible"],"exampleFix":"// before\nllm: { provider: \"proxy\", baseUrl: \"http://proxy:8080\" }\n// after\n// env: TDAI_MEMORY_SYSTEM_USER_KEY=sk-mem-0123456789abcdef0123456789abcdef\nllm: { provider: \"proxy\", baseUrl: \"http://proxy:8080\" } // key now read from env","handlingStrategy":"validation","validationCode":"if (llm.provider === \"proxy\" && (llm.proxy?.useMemorySystemUserKey ?? true) && !process.env.TDAI_MEMORY_SYSTEM_USER_KEY?.trim()) {\n  throw new Error(\"TDAI_MEMORY_SYSTEM_USER_KEY must be set for llm.provider=proxy\");\n}","typeGuard":"null","tryCatchPattern":"try {\n  const runtimeLlm = resolveStandaloneLlmForRuntime(llm, instanceId);\n} catch (e) {\n  if (e instanceof LlmProviderResolveError && e.message.includes(\"TDAI_MEMORY_SYSTEM_USER_KEY\")) {\n    logger.error(\"set TDAI_MEMORY_SYSTEM_USER_KEY or yaml metadata.systemUser.memory\");\n  }\n  throw e;\n}","preventionTips":["Export TDAI_MEMORY_SYSTEM_USER_KEY in every environment where proxy mode runs (k8s secret, .env)","Prefer yaml metadata.systemUser.memory so gateway backfills the env consistently","Add a startup health check asserting required env vars before serving traffic"],"tags":["configuration","env-var","llm","proxy"],"backgroundTag":"missing-env-var","analyzedSha":"3efcd317b84146d6a08518ac0f7ee7c8a8d200ec","analyzedAt":"2026-09-01T05:44:22.276Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}