Poco 使用手册
运维部署

配置参考

Poco 各服务环境变量和配置维护边界。

本项目包含 5 个核心服务:backend / executor-manager / memory-service / executor / frontend。 启用 AI 听记时,还会增加独立的 ai-note-worker 计算服务。

依赖项包括:

  • postgres
  • S3 兼容对象存储(可选本地 rustfs,也可使用 Cloudflare R2 等云服务)

下面列出各服务常用环境变量(含含义与默认值)。在生产环境请务必替换所有 change-this-*、弱口令与默认密钥。


Backend(FastAPI)

必需(否则无法启动或关键功能不可用):

  • DATABASE_URL:必填的 Backend 主数据库连接串,仅支持 PostgreSQL,示例:postgresql://postgres:postgres@postgres:5432/poco。未配置或传入 SQLite 等其他数据库连接时,Backend 会拒绝启动。
  • SECRET_KEY:后端密钥(用于安全相关逻辑)
  • AUTH_STATE_ENCRYPTION_KEY(可选):浏览器 Auth State 加密密钥。可填写 Fernet key 或强随机字符串;留空时本地开发会从 SECRET_KEY 派生,生产环境建议单独配置。
  • INTERNAL_API_TOKEN:内部调用鉴权 token(Executor Manager 调用 Backend 内部接口会用到)
  • ROOT_PASSWORD / ROOT_PASSWORD_SALT:首次创建固定 root 账号时使用的初始密码和密码盐。数据库中已存在 root 时,启动不会再用环境变量覆盖其密码;通过前端修改的密码会在重启后继续生效。
  • S3_ENDPOINT:S3 兼容服务地址
  • 本地 rustfs:http://rustfs:9000
  • Cloudflare R2:https://<accountid>.r2.cloudflarestorage.com
  • S3_ACCESS_KEY / S3_SECRET_KEY:S3 访问凭证
  • S3_BUCKET:S3 bucket 名称(需存在;本地 rustfs 可用 rustfs-init 创建;R2 请在控制台提前创建)

定时任务联动产物使用 scheduled-task-artifacts/ 对象前缀。生产环境需为该前缀单独设置生命周期过期规则。使用“前置完成后触发”时,保留期应长于下游 Run 允许的最长排队和重试时间;使用“按自身计划取最新产物”时,还应覆盖上游两次有效产物之间可能出现的最长间隔,否则数据库中的历史产物记录可能已经对应不到可下载对象。系统不会硬编码最大产物年龄;具体操作见部署说明

常用:

  • HOST(默认 0.0.0.0)、PORT(默认 8000
  • BACKEND_URL:Backend base URL。Backend 用它生成任务浏览器实时预览 WebSocket 地址;Executor Manager / Worker 也用它访问 Backend。Frontend 未配置 INTERNAL_API_BASE_URL 时会将它作为服务端请求的兼容回退。部署时应配置为浏览器和相关服务都能访问的 Backend 入口。
  • STREAM_INGRESS_FLUSH_INTERVAL_MS(默认 250):实时消息快速入口的后台持久化间隔。消息会先通过 SSE 推送,数据库写入不阻塞用户端展示。
  • STREAM_INGRESS_MAX_PENDING_EVENTS(默认 20000):尚未持久化的实时事件全局上限;达到上限后入口返回 429,Executor 保留事件并重试,不会丢弃消息。
  • STREAM_INGRESS_BATCH_SIZE(默认 5000):单次数据库事务最多持久化的实时事件数。
  • MESSAGE_DELIVERY_RECOVERY_TIMEOUT_SECONDS(默认 900):终态消息长时间无法补齐时,等待多久后以“执行完成、消息不完整”状态释放终态副作用和同会话后续任务。后台仍会继续重放,补齐后自动转为 synced
  • Backend 默认允许任意跨域来源访问 API,无需配置跨域来源白名单。
  • APP_TITLE(默认 AI Agent):前端公共配置接口 GET /api/v1/public-config 返回的应用标题(appTitle
  • OPENAPI_LOGIN_TOKEN_TTL_SECONDS(默认 86400,范围 60~86400):POST /openapi/v1/auth/token 签发的登录 Token 有效期(秒)。调用方不能通过请求参数修改有效期。
  • SSO_AUTH_URL(可选):企业 SSO 认证入口 URL。设置后,前端登录页会通过 GET /api/v1/public-config 获取 ssoAuthUrl 并展示 SSO 登录入口。
  • SSO_DO_LOGIN_URL(可选):APP 快捷登录时,后端通过 GET 请求该地址并携带 userName / password 参数,用于换取 Set-Cookie 中的 satoken
  • SSO_GET_USER_INFO_URL(可选):后端通过 POST 请求该地址并携带 {"remoteToken":"<token>"},用于换取 SSO 用户信息(需返回 data.empNo 作为工号)。
  • JIANLONG_SSO_BASE_URL(可选):建龙集团认证中心根地址,例如 https://server-auth.ejianlong.com。需要与 JIANLONG_SSO_APP_IDJIANLONG_SSO_APP_SECRET 同时配置才会显示“建龙集团 SSO 登录”入口。
  • JIANLONG_SSO_APP_ID(可选):建龙集团认证中心应用 ID,用于授权码登录跳转和后端换取访问令牌。
  • JIANLONG_SSO_APP_SECRET(可选):建龙集团认证中心应用密钥,仅后端使用,不会返回给前端。
  • SSO_HTTP_TIMEOUT_SECONDS(默认 10):后端请求 SSO 接口的超时时间(秒)。
  • EXECUTOR_MANAGER_URL:Executor Manager 地址,示例:http://executor-manager:8001
  • LEGACY_UNBOUND_SESSION_WORKER_ID(可选):升级到多 worker 前已有 session 没有 bound_worker_id。如果这些历史 session 的本地工作区仍在原单机节点上,把该值设为原节点的 EXECUTOR_WORKER_ID,避免历史会话被新 worker 抢占后丢失本地工作区上下文。主 docker-compose.yml 默认使用 local-worker
  • MEMORY_SERVICE_URL(默认空):记忆服务地址。留空时,后端记忆管理接口返回 service_enabled=false,不会直接读写记忆数据库。
  • MEMORY_SERVICE_API_KEY(默认空):访问记忆服务的 Bearer Token(可选)。
  • MEMORY_DEFAULT_TENANT_ID(Backend 独立运行默认 default,Compose 默认 poco):调用记忆服务时使用的默认租户标识,各服务必须保持一致。
  • MEMORY_SERVICE_TIMEOUT_SECONDS(Backend 独立运行默认 12,Compose 默认 60):后端调用记忆服务管理接口的 HTTP 超时时间(秒)。
  • GOTENBERG_URL(Backend 独立运行默认空,主 Compose 默认 http://gotenberg:3000):Gotenberg 服务根地址。主 docker-compose.yml 已集成并默认启用 Gotenberg;也可以配置 Backend 能够访问的其他服务地址。地址只在 Backend 使用,不会返回给浏览器。显式留空时 HTML 和 Markdown 保持浏览器打印回退,其他格式不新增 PDF 操作。部署与连通性说明见 部署指南
  • GOTENBERG_API_TIMEOUT(主 Compose 默认 120s):Gotenberg 单次 API 请求的最长执行时间,使用 Go duration 格式,例如 90s2m
  • GOTENBERG_TIMEOUT_SECONDS(Backend 独立运行默认 60,主 Compose 默认 130,范围 1~600):Backend 等待 Gotenberg 转换和响应的超时时间(秒),应略大于 GOTENBERG_API_TIMEOUT。已配置服务但转换失败时会直接提示失败,不会静默切换为浏览器打印。
  • SNOWFLAKE_WORKER_ID(默认 0)、SNOWFLAKE_DATACENTER_ID(默认 0):Snowflake ID 生成器配置(取值 0~31)。单实例可不配置,多实例需分配不同值避免冲突。
  • S3_PUBLIC_ENDPOINT:对外可访问的 S3 地址,用于生成给浏览器的预签名 URL(本地可用 http://localhost:9000)。未设置则使用 S3_ENDPOINT
  • S3_REGION(默认 us-east-1;Cloudflare R2 通常建议设为 auto
  • S3_FORCE_PATH_STYLE(默认 true,对 MinIO/RustFS 一般需要;Cloudflare R2 通常建议设为 false
  • S3_PRESIGN_EXPIRES:预签名 URL 过期秒数(默认 300
  • MAX_UPLOAD_SIZE_MB(默认 100
  • Gotenberg PDF 导出支持 HTML、Markdown,以及其 LibreOffice 路由支持的 Word、Excel、PowerPoint、OpenDocument、图片、电子书等格式;现有 PDF 文件继续下载原文件,不做二次转换。HTML/Markdown 的预渲染内容上限为 10MB,其他源文件沿用 MAX_UPLOAD_SIZE_MB。完整扩展名以 Gotenberg 官方列表 为准。
  • ANTHROPIC_DEFAULT_HAIKU_MODEL:后端与 Poco Agent 运行时共用的轻量模型别名;后端“推荐追问”在未显式配置 FOLLOWUP_MODEL 时会使用它
  • FOLLOWUP_MODEL(默认空):后端生成“推荐追问”时使用的模型名(可选覆盖);为空时回退到 ANTHROPIC_DEFAULT_HAIKU_MODEL
  • SESSION_TITLE_MODEL:后端生成“任务标题建议”时使用的模型名(用于重命名弹窗“自动生成”)
  • SESSION_SUMMARY_MODEL:后端生成整段会话摘要时使用的模型名
  • PUBLISH_CENTER_SELECTOR_MODEL:发布中心自动发布时,用于多 HTML 候选内容审核与选择的模型名
  • WORKBENCH_ANALYSIS_MODEL:智能工作台分析使用的模型名;若显式传空值,会使用默认模型配置
  • WORKBENCH_ANALYSIS_MAX_TOKENS(默认 4196):智能工作台单次分析请求的 max_tokens
  • WORKBENCH_EMBEDDING_URL(默认 http://m3e:6008/v1/embeddings):智能工作台“语义去重”向量接口地址
  • WORKBENCH_EMBEDDING_API_KEY(默认 sk-aaabbbcccdddeeefffggghhhiiijjjkkk):向量接口 Bearer Token(仅填 token 本体,不含 Bearer 前缀)
  • WORKBENCH_EMBEDDING_MODEL(默认 m3e):向量接口请求体中的 model
  • WORKBENCH_EMBEDDING_TIMEOUT_SECONDS(默认 8):向量接口超时时间(秒)
  • CAPABILITY_RERANK_MODEL(默认 bge-reranker-base):能力推荐接口 POST /api/v1/capabilities/recommend 使用的重排模型名(请求地址与鉴权复用 ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN

通用界面后台系统配置(通过管理后台维护,不是 Backend 启动环境变量):

  • office_home_hero_character(默认 illustration_v2):控制办公场景首页人物图。illustration_v2 使用静态机器人插画且不提供悬停动画;animated_mascot 使用原动态人物并保留悬停动画。保存后无需重新构建或重启服务,其他已打开页面刷新后生效。

AI 听记后台系统配置(通过管理后台维护,不是 Backend 启动环境变量):

  • ai_note_enabled(默认 false):是否启用 AI 听记。关闭时,前端首页左侧工作分组不会展示 AI 听记入口。
  • ai_note_realtime_enabled(默认 true):是否启用 AI 听记实时记录。关闭后不影响上传文件的离线听记。
  • realtime_asr_provider(默认 qwen_v2):实时语音 ASR 提供方。实时语音输入和 AI 听记实时记录共用该配置,目前仅支持 qwen_v2 流式协议。
  • realtime_asr_base_url(默认 http://127.0.0.1:8766):实时语音 Qwen v2 ASR 服务根地址,必须是 Backend Web 进程可访问的地址。多节点部署时建议显式配置为独立实时 ASR 服务地址。
  • realtime_asr_api_key(默认空):实时语音 ASR Bearer Token。留空时回退到 ai_note_asr_api_key
  • ai_note_asr_provider(默认 qwen_v2):离线听记 ASR 提供方。qwen_v2 使用原生异步任务接口;openai_compatible 保留旧的同步 multipart 转写接口。
  • ai_note_asr_base_url(默认 http://127.0.0.1:8766):离线听记 Qwen v2 ASR 服务根地址。生产环境必须配置为 ai-note-worker 可访问的地址。
  • ai_note_asr_url(默认 http://127.0.0.1:8766/compat/openai/v1/audio/transcriptions):OpenAI 兼容模式 ASR 请求地址,仅 ai_note_asr_provider=openai_compatible 时必填。
  • ai_note_asr_api_key(默认空):离线听记 ASR Bearer Token。后台展示时应脱敏,普通前端接口不得返回明文。
  • ai_note_asr_model(默认 qwen3-asr-1.7b):离线听记 ASR 模型名。兼容模式请求时作为 multipart form 字段 model 传递。
  • ai_note_asr_options:Qwen v2 ASR 识别选项 JSON,默认开启 diarizeidentify_speakerswith_puncwith_words,并包含 poll_interval_seconds=2timeout_seconds=1800
  • ai_note_summary_model:AI 听记摘要模型名,必填。为空时摘要阶段直接失败,不回退到其他模型。
  • ai_note_summary_max_tokens(默认 6000):AI 听记单次摘要请求允许模型生成的最大 Token 数。使用会输出思考内容的兼容模型时,需要为思考过程和最终 JSON 共同预留足够空间。
  • ai_note_max_file_size_mb(默认 200):AI 听记单文件大小上限。
  • ai_note_max_duration_seconds(默认 7200):AI 听记单媒体文件时长上限。

AI 听记声纹库不增加新的系统配置。管理员可在 管理后台 → 听记记录 → 声纹库 录入组织级声纹;普通用户不维护个人或团队声纹,所有 AI 听记统一使用管理员录入的说话人。

  • 声纹管理只使用 Qwen v2 ASR 已有的 /v2/speakers* 接口;实时或离线提供方为 openai_compatible 时,对应服务会显示为同步失败,不做兼容层或 ASR 后端改造。
  • Backend Web 进程必须同时能够访问 realtime_asr_base_urlai_note_asr_base_url,因为声纹录入、更新、追加样本、重试和删除由 Backend 直接调用两个 ASR 入口。离线地址不再只是 AI Note Worker 可访问即可。
  • 两套配置的 ASR 地址和 Token 完全相同时,Backend 只发起一次远端写入,并让实时、离线绑定复用同一个 speaker_id;地址不同则按两个独立声纹库分别调用,单端失败会保留本地档案和音频,管理员可重试。
  • Backend 会先调用 /v2/capabilities 判断对应入口是否启用声纹能力,并用 /v2/speakers/identify 预检新样本。实时入口在 speaker_identification=truestream.enabled=truestream.speaker_labels=true 时标记同步成功,标准模式和 vLLM 模式使用相同的能力判断。
  • 声纹录入命中或历史绑定仍指向 ASR 自动登记的占位声纹时,Backend 会先持久化待确认的认领键,再调用 /v2/speakers/{speaker_id}/claim 保留原 ID 并替换模板;请求中断后会使用相同认领键恢复,不会重复追加模板。部署的 ASR 服务需支持认领接口及结构化 409 冲突响应。
  • 原始声纹样本保存在 S3_* 指向的私有对象存储中,用于追加和失败重试。每个档案最多 16 个样本,单个样本不超过 20MB、全部样本合计不超过 100MB;部署方应同时落实对象存储加密、访问审计和数据保留策略。
  • 历史样本删除使用 ASR 已有的单模板删除接口,并至少保留一个样本。批量删除对象存储文件时,只要 S3 返回任一逐项错误,本地档案就会保留以便重试。
  • 不同 ASR 入口必须使用独立声纹库。现有 ASR 在进程内缓存声纹质心,共用数据库不能保证跨进程即时刷新;Poco 不对这种部署方式提供同步补偿。
  • 已录入声纹后不要直接修改对应 ASR 地址。地址不一致时 Poco 会停止同步并保留原绑定,需先恢复原地址删除声纹,再使用新地址重新录入。

文生图后台系统配置(通过管理后台维护,不是 Backend 启动环境变量):

  • text_to_image_enabled(默认 false):是否向后续新启动的 Executor 容器注入内置文生图工具。
  • text_to_image_model(默认 gpt-image-2):文生图工具调用 OpenAI 兼容图片生成接口时使用的模型名。

日志(Python 服务通用):

  • DEBUG(默认 false
  • LOG_LEVEL(默认随 DEBUG/非 DEBUG 变化;建议显式设为 INFO
  • UVICORN_ACCESS_LOG(默认 false
  • LOG_TO_FILE(默认 false):是否写本地文件日志
  • LOG_DIR(默认 ./logs)、LOG_BACKUP_COUNT(默认 14
  • LOG_SQL(默认 false):是否打印 SQLAlchemy SQL(注意敏感信息)

AI Note Worker(启用 AI 听记时)

AI Note Worker 是 AI 听记的独立计算服务,负责领取听记任务、校验媒体文件、抽取视频音轨、调用 ASR、调用 LLM 摘要并回写 Backend。它不直连数据库,不是 AI 听记业务数据的 owner。

必需:

  • BACKEND_URL:Backend 地址,示例:http://backend:8000
  • INTERNAL_API_TOKEN:必须与 Backend 的 INTERNAL_API_TOKEN 一致,用于调用内部任务 claim/progress/complete/fail API。
  • ANTHROPIC_AUTH_TOKEN:摘要模型访问 token。Worker 启动时会校验该值非空。
  • ANTHROPIC_BASE_URL(默认 https://api.anthropic.com):摘要模型网关地址。
  • AI_NOTE_WORKER_ID:当前 Worker 的稳定节点 ID,多实例部署时必须唯一。
  • AI_NOTE_MAX_CONCURRENT_JOBS(默认 1,建议 12):单个 Worker 同时处理的听记任务数上限。
  • AI_NOTE_TEMP_DIR:媒体文件下载、ffprobe 检查、ffmpeg 抽音轨和临时文件使用的目录。

常用:

  • HOST / PORT(默认 0.0.0.0 / 8010):Worker /health 服务监听地址和端口。
  • AI_NOTE_POLL_INTERVAL_SECONDS(默认 3):空队列时轮询间隔。
  • AI_NOTE_CLAIM_LEASE_SECONDS(默认 900):Worker claim 任务租约时长。
  • AI_NOTE_REQUEST_TIMEOUT_SECONDS(默认 120):Worker 调用 Backend 和对象存储预签名 URL 的普通请求超时。
  • AI_NOTE_ASR_TIMEOUT_SECONDS(默认 1800):调用 ASR 接口的请求超时。
  • AI_NOTE_LLM_TIMEOUT_SECONDS(默认 120):调用摘要模型的请求超时。
  • AI_NOTE_FFPROBE_TIMEOUT_SECONDS(默认 60):ffprobe 探测媒体时长的超时。超时视为文件处理失败,不重试。
  • AI_NOTE_FFMPEG_TIMEOUT_SECONDS(默认 300):ffmpeg 从视频中抽取音轨的超时。超时视为文件处理失败,不重试。
  • LOG_LEVELUVICORN_ACCESS_LOG:日志级别和访问日志开关。

AI Note Worker 通过 Backend 内部接口领取任务,任务 payload 会包含 ASR provider、地址、模型、密钥、识别选项和摘要模型。Worker 日志不得打印 ai_note_asr_api_key、对象存储签名 URL、完整转写文本或完整模型输出。

Executor Manager

必需(否则无法启动或无法调度执行):

  • BACKEND_URL:Backend 地址,示例:http://backend:8000。动态 Executor 会使用该地址直连 Backend 实时消息入口,因此该地址还必须能从 Executor 容器访问。
  • INTERNAL_API_TOKEN:必须与 Backend 的 INTERNAL_API_TOKEN 一致。Manager 用它签发仅限单个 session/run、短时有效的实时消息令牌,任务请求不会把全局 token 直接作为实时回调凭证。
  • CALLBACK_TOKEN:必须显式配置,且与 Executor 执行请求中的 callback_token 一致;为空或默认占位值时 Executor Manager 会拒绝启动,避免运行时回调 403
  • CALLBACK_BASE_URL必须能被 Executor 容器访问到,Docker Compose 默认 http://host.docker.internal:8001
  • EXECUTOR_WORKER_ID:Executor Manager 的稳定节点 ID。本地单机主 compose 默认 local-worker;多节点部署时每台机器必须显式配置为唯一且重启后不变的值,例如 worker-aworker-b
  • EXECUTOR_WORKER_BOOT_ID:Executor Manager 容器实例 ID。容器启动脚本默认使用 Docker 容器 hostname 自动生成,同一容器重启时保持不变,容器重建后自动变化,无需手动配置
  • EXECUTOR_MANAGER_PUBLIC_URL:Backend 访问该 Executor Manager 的地址,例如 http://10.0.0.11:8001。未配置时回退到 CALLBACK_BASE_URL
  • EXECUTOR_WORKER_HEARTBEAT_INTERVAL_SECONDS(默认 10):节点注册后的心跳间隔。Backend 会用心跳状态判断 worker 是否可接新 session
  • EXECUTOR_IMAGE:Executor 镜像名(Executor Manager 会通过 Docker API 拉起该镜像)
  • EXECUTOR_CPU_LIMIT:每个动态拉起的 Executor 容器可使用的最大 CPU 核数;0 或不配置表示不限制
  • EXECUTOR_MEMORY_LIMIT:每个动态拉起的 Executor 容器可使用的 RAM + swap 总上限;支持 512m2g4096m 等 Docker 单位,空值或 0 表示不限制
  • EXECUTOR_PUBLISHED_HOST:Executor Manager 访问“已映射到宿主机端口”的 Executor 容器时使用的 host(本地裸跑一般是 localhost;Compose 内推荐 host.docker.internal
  • BROWSER_STREAM_PUBLISHED_HOST:Executor Manager 生成任务浏览器实时预览上游地址时使用的 host。前端不再直连 worker,而是连接 Backend 的 WebSocket 代理;因此分布式部署通常保持 host.docker.internal 或 manager 自身可访问动态 Executor 端口的地址即可
  • WORKSPACE_ROOT:工作区根目录(必须是宿主机路径,因为会被 bind mount 到 Executor 容器)
  • S3_ENDPOINT / S3_ACCESS_KEY / S3_SECRET_KEY / S3_BUCKET:用于导出 workspace 到对象存储(否则相关接口会失败)
  • Cloudflare R2 通常建议:S3_REGION=autoS3_FORCE_PATH_STYLE=false
  • Executor Manager 运行时默认设置 BOTO_EXPERIMENTAL__NO_EMPTY_CONTINUE=true,避免空对象上传进入 botocore 的 Expect: 100-continue 流程;通常无需在部署配置中重复声明,显式设置仍可覆盖

多节点执行采用 session 粘性和本地工作区:

  • 新 session 首次被某个 EXECUTOR_WORKER_ID claim 后,会绑定到该 worker
  • 历史未绑定 session 会优先由 LEGACY_UNBOUND_SESSION_WORKER_ID 指定的原节点 claim 并回填绑定
  • 后续同一 session 的 run、停止、浏览器流、会话历史补偿和清理都会按绑定 worker 路由
  • WORKSPACE_ROOT 仍是每台机器本地目录,不需要 NFS;完成后的工作区文件继续通过 S3_* 导出和访问
  • worker 进入 draining 后不再接新 session,但已绑定 session 仍可继续执行
  • 用户级远程浏览器会按 tenant_id + user_id 绑定到创建它的 worker;登录态 flush、停止和删除都会回到该 worker

执行模型(跑任务时必需):

  • ANTHROPIC_AUTH_TOKEN:Poco Agent 运行时模型访问 token
  • ANTHROPIC_BASE_URL:模型网关地址,可按部署环境配置
  • DEFAULT_MODEL:Poco Agent 运行时默认模型
  • POCO_EXECUTION_SCENE:系统自动注入的本轮执行场景,值为 businessoffice,用于核对场景化模型解析结果,无需手动配置
  • POCO_MODEL_CONFIG_ID:系统自动注入的本轮有效后台模型配置 ID;仅在后台没有可用模型配置、回退到 Executor 自身环境变量时为空,用于排查模型切换是否生效,无需手动配置
  • 首页语音输入使用后台系统配置中的实时语音 ASR 配置:
  • voice_input_enabled(默认关闭):是否在首页输入框显示语音输入入口
  • ANTHROPIC_DEFAULT_HAIKU_MODEL:下发到 Executor 容器,作为轻量模型别名
  • Poco Agent 运行时兼容开关:由系统按需注入,用于控制 Subagent 模型、推理强度、后台任务和非必要网络流量;通常不需要手动配置
  • 后台系统配置 experimental_agent_teams_enabled(默认关闭):启用代理团队实验功能;开启后,Executor Manager 会向新 Executor 容器注入 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
  • 后台系统配置 text_to_image_enabled(默认关闭):启用后,Executor Manager 会向新 Executor 容器注入 POCO_TEXT_TO_IMAGE_ENABLED=1POCO_TEXT_TO_IMAGE_MODEL,并将 MCP_TOOL_TIMEOUT 提高到 600000 毫秒,以覆盖生图长耗时。
  • 后台系统配置 artifact_continuation_enabled(默认关闭):控制 HTML/Markdown 分享页和发布页的“继续探索”能力。全局开启后仍需分享者或发布页管理员逐项启用;匿名访问者不显示入口,续聊会话归当前登录用户所有。
  • POCO_TEXT_TO_IMAGE_API_KEY / POCO_TEXT_TO_IMAGE_BASE_URL:平台级文生图 OpenAI 兼容接口配置,会作为默认值转发到动态 Executor 容器;未配置专用 key 时,工具会回退读取 OPENAI_API_KEY / OPENAI_BASE_URL。用户级环境变量优先级高于平台级默认值。
  • DISABLE_AUTOUPDATER(默认 1):下发到 Executor 容器,用于禁用自动更新行为
  • ANTHROPIC_DEFAULT_OPUS_MODEL / ANTHROPIC_DEFAULT_SONNET_MODEL / ANTHROPIC_MODEL / ANTHROPIC_REASONING_MODEL:由系统自动注入到 Executor 容器,且始终等于 DEFAULT_MODEL
  • VISION_MODEL(可选):会注入到 Executor 容器,供 understand_image 使用(通常在 POCO_MODEL_MULTIMODAL_ENABLED=0 时需要)
  • POCO_PLAYWRIGHT_IMAGE_RESPONSES(默认 omit):Playwright MCP 是否在工具返回里内嵌截图/图片(base64)
  • omit:不内嵌(推荐,避免截图过大导致 MCP JSON 消息超限卡死)
  • allow:允许内嵌(截图较大时可能触发 1MB 上限)
  • POCO_PLAYWRIGHT_MCP_MAX_LANES(默认 30):单个 Executor 容器内最多保留的 Playwright MCP Router lane 数量;Router 默认启用,仍只启动一个 Chrome/CDP;小于 2 时按 2 处理,以保留 main lane;超过后会回收较旧 lane,避免无限启动 Node 进程。
  • POCO_PLAYWRIGHT_MCP_ROUTING_LEDGER(默认空):Playwright MCP Router 的带外路由账本路径;通常保持为空,系统会写入 WORKSPACE_PATH/.poco/playwright-routing.jsonl。仅在排查路由问题或特殊部署路径时覆盖。
  • POCO_ASYNC_SUBAGENT_JOIN_TIMEOUT_SECONDS(默认 3600):主 agent 响应结束后等待已启动异步 subagent 完成的最长时间。超时仍有 pending subagent 时,本轮任务会标记为 failed,而不是误报 completed。
  • POCO_ENABLE_IMAGE_GUARD_MCP(默认 0):是否注入可选的图片修复 MCP(repair_image_for_model
  • 0:不注入图片修复 MCP
  • 1:同时注入图片修复 MCP(用于理解失败时兜底)
  • POCO_MODEL_MULTIMODAL_ENABLED(默认 1):当前模型是否支持原生多模态图片输入
  • 1:允许 Executor 发送原生图片块给模型,且不注入 understand_image MCP
  • 0:禁用原生图片块,并注入 understand_image MCP 走工具链
  • MEMORY_SERVICE_URL(默认空):传递给动态拉起的 Executor 容器的记忆服务地址;为空时 Executor 记忆检索/写入自动禁用
  • MEMORY_SERVICE_API_KEY(默认空):传递给 Executor 容器访问记忆服务的 Bearer Token(可选)
  • MEMORY_DEFAULT_TENANT_ID(默认 poco):传递给 Executor 容器的默认租户标识
  • MEMORY_SERVICE_TIMEOUT_SECONDS(默认 60):Executor 调用记忆服务超时时间(秒)
  • MEMORY_SEARCH_TOP_K(保留配置,默认 5):会注入 Executor,并作为 MemoryClient 未收到 top_k 时的默认值;当前自动召回和内置查询工具都会显式传 5,因此单独修改它不会改变这两条内置链路
  • MEMORY_SEARCH_MIN_SCORE(默认 0.45):Executor 侧融合前语义分阈值

调度与拉取:

  • EXECUTOR_MANAGER_HEALTHCHECK_URL(默认 http://127.0.0.1:8001/api/v1/health):Executor Manager 容器内自检地址
  • EXECUTOR_MANAGER_HEALTHCHECK_TIMEOUT_SECONDS(默认 15):单次自检请求超时时间(秒)
  • EXECUTOR_MANAGER_HEALTHCHECK_FAILURE_THRESHOLD(默认 3):连续失败次数达到阈值后停止进程,由 Docker Compose restart: always 重启容器
  • EXECUTOR_MANAGER_HEALTHCHECK_INTERVAL_SECONDS(默认 15):自检间隔(秒)
  • EXECUTOR_MANAGER_HEALTHCHECK_START_PERIOD_SECONDS(默认 60):容器启动后的自检宽限期(秒)
  • EXECUTOR_MANAGER_HEALTHCHECK_STOP_GRACE_SECONDS(默认 5):自检触发重启时等待主进程优雅退出的时间(秒),超时后强制结束
  • TASK_PULL_ENABLED(默认 true):是否从 Backend run queue 拉取任务
  • MAX_CONCURRENT_TASKS(默认 5):单个 Executor Manager worker 同时执行的 run 数上限。worker 注册和心跳时会把该值上报为节点 capacity,后台「执行节点」里的运行负载分母来自这里。
  • MAX_EXECUTOR_CONTAINERS(默认 10):单个 worker 允许保留的 executor 容器总量上限。它限制 Docker 中由 Executor Manager 拉起的运行容器数量,包含正在执行的容器,也可能包含暂时保留用于多轮会话复用的 warm/persistent 容器。它不参与 Backend 的 worker 负载调度,也不会作为节点 capacity 上报。
  • TASK_PULL_INTERVAL_SECONDS(默认 5):兜底轮询间隔。即时对话会在 Backend 入队后主动唤醒 Executor Manager,通常不需要依赖该间隔触发。
  • TASK_CLAIM_LEASE_SECONDS(默认 180):claim 的租约时间。需要覆盖 Manager 侧从 claim 到成功 start_run 的耗时(可能包含技能/附件 staging、拉起 Executor 容器等),否则 run 可能在租约过期后被重新 claim,导致重复调度/重复启动容器。
  • STREAM_CALLBACK_TOKEN_TTL_SECONDS(默认 604800,即 7 天):Executor 直连 Backend 实时回调的令牌有效期。该值应大于系统允许的最长 run 时长,最低为 3600 秒。
  • SCHEDULE_CONFIG_PATH:可选,提供 TOML/JSON schedule 配置时会作为 source of truth
  • SCHEDULED_TASKS_DISPATCH_INTERVAL_SECONDS(默认 30):Executor Manager 调用 Backend 内部接口扫描并入队到期定时任务的间隔(秒)。同一时间段定时任务较多时,可适当调小间隔并配合较小的 batch size,让到期任务分批进入 run queue。
  • SCHEDULED_TASKS_DISPATCH_BATCH_SIZE(默认 5):每次扫描最多将多少个到期定时任务入队。该值越大,到期任务越快进入队列,但 Backend 写入和后续 Executor Manager 拉取压力也越集中;生产环境可按容量调整。
  • SCHEDULED_TASK_ARTIFACT_MAX_FILES(默认 1000):单轮定时任务联动产物允许传递的最大文件数
  • SCHEDULED_TASK_ARTIFACT_MAX_SIZE_MB(默认 500):单轮定时任务联动产物允许传递的最大未压缩总大小(MB)
  • WORKBENCH_ANALYSIS_INTERVAL_SECONDS(默认 60):智能工作台分析拉取任务的触发间隔(秒)
  • WORKBENCH_ANALYSIS_BATCH_LIMIT(默认 3):每次调用 Backend 内部 /workbench/analyze-duelimit
  • WORKBENCH_ANALYSIS_MAX_BATCHES_PER_TICK(默认 5):单次调度 tick 内最多连续排空的批次数
  • WORKBENCH_ANALYSIS_MAX_TICK_SECONDS(默认 45):单次调度 tick 用于智能工作台排空的最长耗时(秒)

回调队列(进程内公平队列,Executor Manager -> Backend):

正常高频流消息由 Executor 直达 Backend,不占用该队列。这里承载普通状态、终态等 Manager 回调,以及实时直达失败后的有序批量降级。

  • CALLBACK_QUEUE_ENABLED(默认 true):是否启用回调队列(关闭时改为同步直转发)
  • CALLBACK_QUEUE_STREAM_SHARDS(默认 32):用于估算单会话内存队列容量(与 CALLBACK_QUEUE_STREAM_MAXLEN 一起计算)
  • CALLBACK_QUEUE_STREAM_MAXLEN(默认 400000):用于估算单会话内存队列容量上限
  • CALLBACK_QUEUE_FORWARD_RETRY_ATTEMPTS(默认 6):转发 Backend 的最大重试次数
  • CALLBACK_QUEUE_FORWARD_RETRY_BASE_SECONDS(默认 0.2):重试退避基准秒数
  • CALLBACK_QUEUE_FORWARD_RETRY_MAX_SECONDS(默认 5.0):重试退避最大秒数
  • STREAM_OUTBOX_REPLAY_ENABLED(默认 true):是否扫描本节点 WORKSPACE_ROOT 中 Executor 留下的消息 outbox 并自动补发
  • STREAM_OUTBOX_REPLAY_INTERVAL_SECONDS(默认 5):outbox 扫描间隔(秒)
  • STREAM_OUTBOX_REPLAY_MAX_RUNS_PER_TICK(默认 20):每轮最多处理的 run 数
  • STREAM_OUTBOX_REPLAY_CONCURRENCY(默认 2):每轮并发补发的 run 数
  • STREAM_OUTBOX_REPLAY_BATCH_SIZE(默认 100):单批最多消息数
  • STREAM_OUTBOX_REPLAY_BATCH_BYTES(默认 524288):单批消息体目标上限(字节);上游返回 413 时会继续二分缩小批次

Warm 容器(用于降低首 token 延迟):

  • WARM_CONTAINER_ENABLED(默认 true):是否启用 warm 容器机制
  • WARM_CONTAINER_IMMEDIATE_ENABLED(默认 true):是否对 schedule_mode=immediate 的交互式对话启用 warm 容器
  • WARM_CONTAINER_IDLE_TTL_SECONDS(默认 600):容器空闲保留时长(秒,默认 10 分钟)
  • WARM_CONTAINER_CLEANUP_INTERVAL_SECONDS(默认 60):清理任务运行间隔(秒)

远程浏览器(用户登录入口,可选):

用途:在前端「设置 -> 远程浏览器」里打开 VNC 画面,手动登录网站。远程浏览器与任务浏览器都只通过 Backend Auth State 持久化登录态;Chrome Profile/cache 仅为容器内临时运行时数据。当前持久化范围为 cookies/localStorage;需要稳定复用登录态的任务建议使用 Playwright MCP 浏览器链路。

  • 用户基础浏览器(VNC/noVNC)容器使用 EXECUTOR_IMAGE
  • 镜像需包含桌面/VNC/noVNC,并监听 8080/vnc/
  • BROWSER_BASE_PUBLISHED_HOST:Backend 访问“已映射到宿主机随机端口”的基础浏览器容器时使用的 host(本地裸跑一般是 localhost;Compose 内推荐 host.docker.internal)。用户浏览器通过 Backend 固定代理 URL 访问远程浏览器。
  • BROWSER_BASE_IDLE_TTL_SECONDS:基础浏览器容器空闲回收 TTL(秒,默认 600,即 10 分钟)
  • BROWSER_BASE_CLEANUP_INTERVAL_SECONDS:回收任务运行间隔(秒,默认 30
  • BROWSER_BASE_AUTH_STATE_FLUSH_TIMEOUT_SECONDS:停止远程浏览器前同步 Backend Auth State 的超时(秒,默认 10
  • BROWSER_BASE_STOP_TIMEOUT_SECONDS:停止远程浏览器容器的 Docker 超时(秒,默认 3)。Chrome Profile 仅作为运行时缓存,不再阻塞停止。

工作区清理(可选):

  • WORKSPACE_CLEANUP_ENABLED(默认 false):启用后定期处理超过保留时间的本地活动工作区
  • WORKSPACE_CLEANUP_INTERVAL_HOURS(默认 24):清理任务调度间隔
  • WORKSPACE_MAX_AGE_HOURS(默认 24):活动工作区进入清理流程前的最短保留时间
  • WORKSPACE_ARCHIVE_ENABLED(默认 true):开启时将过期工作区完整归档到 Manager 本地 archive/;关闭时直接删除
  • WORKSPACE_ARCHIVE_DAYS(默认 7):本地完整归档保留天数;归档仍在时,后续运行或首次分叉会自动恢复
  • WORKSPACE_IGNORE_DOT_FILES(默认 true

本地工作区归档包含 SDK 运行数据和隐藏目录,用于同一 Executor Manager 上的会话恢复。对象存储中的工作区导出 ZIP 会过滤运行时私有目录,只用于文件下载和预览,不能替代本地完整归档。

Executor

必需(跑任务时):

  • ANTHROPIC_AUTH_TOKEN:Poco Agent 运行时模型访问 token
  • ANTHROPIC_BASE_URL:可选(同上)
  • DEFAULT_MODEL:必需(executor/app/core/engine.py 会读取 os.environ["DEFAULT_MODEL"]
  • ANTHROPIC_DEFAULT_HAIKU_MODEL:可选轻量模型别名(由 Executor Manager 注入)
  • ANTHROPIC_DEFAULT_OPUS_MODEL / ANTHROPIC_DEFAULT_SONNET_MODEL / ANTHROPIC_MODEL / ANTHROPIC_REASONING_MODEL:由 Executor Manager 注入,统一与 DEFAULT_MODEL 保持一致
  • ENABLE_TOOL_SEARCH:由当前生效的后台模型配置控制;开启时注入 1,关闭时注入 0,默认开启
  • CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS:由当前生效的后台模型配置反向控制;开启实验性功能时注入 0,关闭时注入 1,默认关闭
  • 后台模型配置的“高级配置”可按名称和值添加自定义 Executor 环境变量,最多 100 项,每项名称和值均不超过 255 个字符,不额外限制总数据大小。非空变量会在容器启动时最后合并:不存在则新增,已存在则覆盖;平台鉴权、会话身份、工作区和隔离相关变量不允许覆盖
  • Poco Agent 运行时兼容开关:由 Executor Manager 注入,通常不需要手动设置;后台模型配置、系统配置和用户设置会覆盖对应行为
  • CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:由后台系统配置 experimental_agent_teams_enabled 控制;启用时注入为 1,关闭时不注入
  • WORKSPACE_PATH:工作目录挂载点(默认 /workspace

可选:

  • WORKSPACE_GIT_IGNORE:额外写入到 .git/info/exclude 的忽略规则(逗号/换行分隔)
  • Poco Agent 输出上限、归因、后台任务、记忆等兼容开关由系统统一注入;确需覆盖时应先在测试环境验证
  • MCP_TIMEOUT:MCP 连接/初始化超时(毫秒,默认 120000;可覆盖)
  • MCP_TOOL_TIMEOUT:MCP 工具调用超时(毫秒,默认 120000;可覆盖)
  • NPM_CONFIG_REGISTRY(默认 https://registry.npmmirror.com):Executor 容器内 npm 使用的 registry
  • PIP_INDEX_URL(默认 https://mirrors.aliyun.com/pypi/simple/):Executor 容器内 pip 使用的 PyPI 镜像源
  • UV_INDEX_URL(默认 https://mirrors.aliyun.com/pypi/simple/):Executor 容器内 uv 使用的 PyPI 镜像源
  • VISION_MODEL:供内置工具 understand_image 调用视觉识别接口时使用的模型名(请求认证与地址复用 ANTHROPIC_AUTH_TOKEN / ANTHROPIC_BASE_URL
  • POCO_TEXT_TO_IMAGE_ENABLED / POCO_TEXT_TO_IMAGE_MODEL:由 Executor Manager 根据后台系统配置注入,通常不手动设置。
  • POCO_TEXT_TO_IMAGE_API_KEY / POCO_TEXT_TO_IMAGE_BASE_URL:文生图工具优先读取的 OpenAI 兼容图片生成接口配置;POCO_TEXT_TO_IMAGE_BASE_URL 可填根地址(如 https://api.openai.com/v1)或完整 /v1/images/generations 地址。
  • OPENAI_API_KEY / OPENAI_BASE_URL:当未配置专用 POCO_TEXT_TO_IMAGE_* 时的兜底来源。
  • POCO_PLAYWRIGHT_MCP_MAX_LANES:任务浏览器使用 Playwright MCP 时的并行 subagent lane 上限,通常保持默认值即可。
  • POCO_PLAYWRIGHT_MCP_ROUTING_LEDGER:Playwright MCP Router 路由账本路径,通常不手动设置。
  • POCO_ASYNC_SUBAGENT_JOIN_TIMEOUT_SECONDS:Executor 等待异步 subagent 完成的超时时间;生产环境建议不低于默认 3600 秒,避免长任务刚启动就被误判。
  • POCO_ENABLE_IMAGE_GUARD_MCP:控制是否注入可选工具 repair_image_for_model
  • POCO_MODEL_MULTIMODAL_ENABLED:控制是否启用原生多模态图片输入(关闭后注入 understand_image 并走工具链)
  • MEMORY_SERVICE_URL:Executor 访问 memory-service 的地址;为空时记忆检索/写入自动禁用
  • MEMORY_SERVICE_API_KEY:Executor 访问记忆服务的 Bearer Token(可选)
  • MEMORY_DEFAULT_TENANT_ID(默认 poco):Executor 请求记忆服务时的默认租户
  • MEMORY_SERVICE_TIMEOUT_SECONDS(默认 60):Executor 调用记忆服务超时(秒)
  • MEMORY_SEARCH_TOP_K(保留配置,默认 5):是 MemoryClient 未收到 top_k 时的默认值;当前自动召回和内置查询工具都会显式传 5,因此单独修改它不会改变这两条内置链路
  • MEMORY_SEARCH_MIN_SCORE(默认 0.45):记忆融合前语义分阈值
  • POCO_WORKSPACE_DIFF_MAX_FILES(默认 20):Workspace 状态中最多为多少个已跟踪变更文件计算 diff,超出时仅保留增删行统计(降低大仓库开销)
  • POCO_WORKSPACE_DIFF_MAX_CHARS(默认 120000):单次 Workspace 状态刷新中 diff 内容总字符预算,超出后自动截断/跳过剩余 diff
  • DEBUG / LOG_LEVEL / LOG_TO_FILE 等日志变量(同上)

Frontend

Frontend 通过 Next.js 的 同源 API 代理/api/v1/* -> Backend)访问后端 HTTP API。浏览器只请求 Frontend 同源地址,Next.js server 优先按运行时 INTERNAL_API_BASE_URL 转发到 Backend;未配置时回退到 BACKEND_URL。需要保留公开 Backend 域名并让内部代理通过容器网络直连时,应同时配置两个变量,避免请求再次经过公开反向代理。

任务浏览器实时预览使用 WebSocket,不走 Next.js HTTP 代理;Backend 会通过 BACKEND_URL 返回浏览器可直接连接的 ws(s) 地址。

运行时(runtime):

  • INTERNAL_API_BASE_URL:Next.js 服务器侧访问 Backend 的内部地址,优先用于 /api/v1/*/api/v2/* 同源代理及其他服务端 API 请求。Compose 未配置时依次回退到 BACKEND_URLhttp://backend:8000
  • BACKEND_URL:Backend 公开地址,可配置为浏览器可访问的域名,并作为未配置 INTERNAL_API_BASE_URL 时的兼容回退。兼容旧变量:POCO_BACKEND_URL
  • 应用标题由 Backend 的 GET /api/v1/public-config 返回(data.appTitle),由后端变量 APP_TITLE 控制,不再使用 NEXT_PUBLIC_APP_TITLE
  • 旧版 SSO 登录入口由 Backend 的 GET /api/v1/public-config 返回(data.ssoAuthUrl),由后端变量 SSO_AUTH_URL 控制
  • 建龙集团 SSO 登录入口由 Backend 的 GET /api/v1/public-config 返回(data.jianlongSsoAuthUrl),由后端变量 JIANLONG_SSO_BASE_URLJIANLONG_SSO_APP_IDJIANLONG_SSO_APP_SECRET 共同控制
  • SITE_ANALYTICS_ENABLED(默认 false):是否启用网站统计脚本。开启值支持 1trueyesyon
  • SITE_ANALYTICS_DOMAIN(默认空):Umami 统计服务根地址,例如 http://10.6.80.164:8856。不要包含 /script.js
  • SITE_ANALYTICS_WEBSITE_ID(默认空):统计站点 ID。仅当统计开关、根地址和站点 ID 都有效时,前端才会加载统计脚本
  • SITE_ANALYTICS_PERFORMANCE_ENABLED(默认 false):是否启用 Umami Web Vitals 采集。开启值支持 1trueyesyon,需要 Umami v3.1.0+
  • SITE_ANALYTICS_SENSITIVE_USER_INFO_ENABLED(默认 false):是否在 Umami identify 中额外上报 usernamefull_namedepartment

业务场景/办公场景切换不使用环境变量。管理员在用户管理中设置账号默认场景和 SSO 新用户默认场景,并通过权限菜单中的“场景切换”权限控制用户能否自行切换。账号的场景设置保存在 Backend,跨浏览器和设备生效。

启用网站统计后,前端会在用户登录态确认后调用 Umami identify,默认只上报内部用户 id。仅当 SITE_ANALYTICS_SENSITIVE_USER_INFO_ENABLED=true 时,才会额外上报 usernamefull_namedepartment

注意:以下变量仍是构建期(build-time)生效,会被 Next.js 内联进产物(见 docker/frontend/Dockerfile 的 build args)。

  • NEXT_PUBLIC_SESSION_POLLING_INTERVAL:session 轮询间隔(毫秒,默认 2500
  • NEXT_PUBLIC_MESSAGE_POLLING_INTERVAL:消息轮询间隔(毫秒,默认 2500

容器镜像(Docker Compose)

以下变量用于覆盖 Docker Compose 中各服务的镜像,适合固定正式版本或切换到 testing 测试通道:

  • BACKEND_IMAGE:Backend 镜像
  • EXECUTOR_MANAGER_IMAGE:Executor Manager 镜像
  • EXECUTOR_IMAGE:动态 Executor 和远程浏览器容器使用的镜像
  • MEMORY_SERVICE_IMAGE:Memory Service 镜像
  • AI_NOTE_WORKER_IMAGE:AI Note Worker 镜像
  • FRONTEND_IMAGE:Frontend 镜像

Postgres(Docker 镜像)

  • POSTGRES_DB(默认 poco
  • POSTGRES_USER(默认 postgres
  • POSTGRES_PASSWORD(默认 postgres
  • POSTGRES_PORT(默认 5432,对宿主机映射端口)

Memory Service(mem0)

当前固定使用 mem0ai[nlp]==2.0.12,主记忆、关键词字段和实体关联由同一个 Mem0 实例管理。升级 SDK 前必须执行 Mem0 SDK 升级门禁,不能只检查 /health

常用:

  • MEMORY_SERVICE_PORT(默认 8005
  • MEM0_ENABLED(默认 true):是否启用 mem0 引擎
  • MEM0_TELEMETRY(默认 false):是否启用 Mem0 匿名遥测;私有化部署默认不连接 PostHog
  • MEM0_VECTOR_PROVIDER(默认 pgvector
  • MEM0_PG_HOST / MEM0_PG_PORT / MEM0_PG_DB:Mem0 使用的 PostgreSQL 地址、端口和数据库
  • MEM0_PG_USER / MEM0_PG_PASSWORD:Mem0 使用的 PostgreSQL 账号和密码
  • MEM0_PG_COLLECTION(默认 poco_memories
  • MEM0_EMBEDDING_DIMS(默认 1536):必须与既有 poco_memories.vector 维度一致
  • MEM0_HISTORY_DB_PATH(Compose 默认 /data/mem0/history.db):Mem0 现存记忆的操作轨迹和隐式消息上下文 SQLite 文件;主记忆仍在 PostgreSQL,物理遗忘会同步清理该 ID 的轨迹
  • MEM0_CUSTOM_INSTRUCTIONS(默认不设置):可覆盖事实提取规则;未设置或为空时使用服务内置的跨任务持久记忆规则和正反例
  • MEM0_LLM_PROVIDER(默认 openai
  • MEM0_LLM_MODEL(默认 gpt-4o-mini
  • MEM0_LLM_API_KEY(默认回退 OPENAI_API_KEY):可显式覆盖为独立 key
  • MEM0_LLM_BASE_URL(默认回退 OPENAI_BASE_URL,再回退 https://api.openai.com/v1):可选自定义网关
  • OPENAI_API_KEY:当 MEM0_LLM_PROVIDER=openai 且未设置 MEM0_LLM_API_KEY 时的兜底来源
  • OPENAI_BASE_URL(默认 https://api.openai.com/v1):当 MEM0_LLM_PROVIDER=openai 且未设置 MEM0_LLM_BASE_URL 时的兜底来源
  • MEM0_EMBEDDER_PROVIDER(默认 openai
  • MEM0_EMBEDDER_MODEL(默认 m3e
  • MEM0_EMBEDDER_API_KEY(默认 sk-aaabbbcccdddeeefffggghhhiiijjjkkk
  • MEM0_EMBEDDER_BASE_URL(默认 http://m3e:6008/v1

检索/写入控制:

  • MEMORY_SEARCH_DEFAULT_TOP_K(保留配置,默认 5):当前运行时代码未读取该设置;/search 请求模型、自动召回和内置查询工具各自使用默认值 5,单独修改该变量不会生效
  • MEMORY_SEARCH_MAX_TOP_K(默认 8
  • MEMORY_SEARCH_DEFAULT_MIN_SCORE(默认 0.45):请求未显式传值时,Memory Service 使用的语义分阈值
  • MEMORY_INGEST_MIN_CHARS(默认 10):只控制写入候选的最小长度,不控制自动召回;自动召回的 10 字符触发门槛当前由 Executor 常量控制
  • MEMORY_INGEST_MAX_CHARS(默认 6000

Executor 的自动召回和内置查询工具当前显式发送 top_k=5,Memory Service 再用 MEMORY_SEARCH_MAX_TOP_K 限制上限;如需调整这两条内置链路的数量,应修改对应 Executor 常量并完成召回回归,不能只改环境变量。Executor 还会显式发送 MEMORY_SEARCH_MIN_SCOREMEMORY_SEARCH_MIN_SCOREMEMORY_SEARCH_DEFAULT_MIN_SCORE 默认都为 0.45,调整召回阈值时应同步修改,避免 SDK 对话链路和直接接口调用表现不一致。

Mem0 2.0.12 的 PGVector 实现固定使用 PostgreSQL 默认 public schema,因此不再提供 MEM0_PG_SCHEMA。主记忆写入 public.poco_memories,内置实体关联写入 public.poco_memories_entities,无需 Neo4j 配置。

前端本地开发

  • INTERNAL_API_BASE_URL:Next.js 服务端 API 代理和服务端请求优先使用的 Backend 地址。本地裸跑可配置为 http://127.0.0.1:8000
  • BACKEND_URL:未配置 INTERNAL_API_BASE_URL 时使用的兼容回退。
  • NEXT_PUBLIC_API_BASE_URL:浏览器端 API 基础地址。开发环境可设置为 Backend 地址(例如 http://localhost:8000 或局域网 Backend),让浏览器直连 Backend,避免长连接和大量 API 请求经过 Next.js dev server。Docker/生产环境建议留空,继续使用同源 API 代理。

本地 RustFS(S3 兼容对象存储,可选)

docker-compose.yml 默认使用 rustfs/rustfs:latest 作为本地 S3 兼容实现(服务名为 rustfs)。如果你使用 Cloudflare R2(或其他外部 S3 兼容服务),可以改用 docker-compose.r2.yml,此节可忽略。

如需替换为其他本地 S3 兼容实现,请按镜像参数调整,并保证 Backend/Executor Manager 使用的 S3_* 可用。

  • RUSTFS_IMAGE:对象存储镜像(默认 rustfs/rustfs:latest
  • S3_PORT(默认 9000
  • S3_CONSOLE_PORT(默认 9001
  • RUSTFS_DATA_DIR:数据目录(默认 ./oss_data,宿主机路径,会 bind mount 到容器的 /data
  • 默认启动会运行 rustfs-data-init,自动创建 /data/${S3_BUCKET}(默认对应 oss_data/poco)并设置可写权限,避免首次启动时对象存储数据目录不存在或不可写。
  • S3_ACCESS_KEY / S3_SECRET_KEY:用于访问 S3 API 的凭证(需与 rustfs 配置一致)
  • S3_BUCKET:bucket 名称(默认 poco;本地 RustFS 数据目录会默认准备好,外部 S3/R2 仍需提前创建 bucket)

On this page