# ============================================================================= # Life Echo API — production(生产) # # 仓库维护本文件;production 发布时 workflow 会上传并复制为运行时 .env。 # 若仓库可被非授权人员访问,请不要在此文件中保留真实密钥。 # ============================================================================= # ============================================================================= # Logging(loguru sink 最低级别:TRACE / DEBUG / INFO / WARNING / ERROR / CRITICAL) # ============================================================================= LOG_LEVEL=INFO # ============================================================================= # LLM / DeepSeek # ============================================================================= DEEPSEEK_API_KEY=sk-09f17fb61c5a4299a3afc2a01de7af75 DEEPSEEK_BASE_URL=https://api.deepseek.com DEEPSEEK_MODEL=deepseek-chat # ============================================================================= # Memory 向量(智谱 BigModel 国内 embedding-3;与 DeepSeek/OpenAI 用途分离) # 文档:https://docs.bigmodel.cn/cn/guide/models/embedding/embedding-3 # 本期固定 1024 维;库表经迁移与 MEMORY_EMBEDDING_DIMENSION 一致。 # ============================================================================= ZHIPU_API_KEY=524eda18eb3848e881eefe4c7ef17ec2.xBmGUabYDEa44m3M # 默认国内通用端点(与 ZhipuAiClient 一致) # EMBEDDING_BASE_URL=https://open.bigmodel.cn/api/paas/v4 EMBEDDING_MODEL=embedding-3 # Chat 访谈:每轮根据用户内容判定主人生阶段(关则仅用关键词,省一次 LLM) # CHAT_STAGE_DETECTION_ENABLED=true # CHAT_STAGE_DETECTION_MAX_TOKENS=128 # 访谈性格(InterviewAgent):default | warm_listener | curious_guide # CHAT_INTERVIEW_PERSONA=default # 访谈回复长度档位(brief/standard/expanded)联动:极短输入 / 默认 / 长段+新细节 # CHAT_INTERVIEW_BRIEF_MAX_TOKENS=240 # CHAT_INTERVIEW_BRIEF_MAX_CHARS_PER_SEGMENT=180 # CHAT_INTERVIEW_EXPANDED_MAX_TOKENS=400 # CHAT_INTERVIEW_EXPANDED_MAX_CHARS_PER_SEGMENT=300 # 访谈:是否按本轮用户话检索记忆并注入提示词(关则不调 retrieve) # CHAT_MEMORY_RETRIEVAL_ENABLED=true # CHAT_MEMORY_TOP_K=8 # CHAT_MEMORY_EVIDENCE_MAX_CHARS=4096 # Memoir:叙事前口述归一(segment 原文仍落库;仅 story 流水线派生输入) MEMOIR_ORAL_NORMALIZE_ENABLED=true # off | rules | llm(llm 为先规则再 LLM 纠错,失败回退规则结果) MEMOIR_ORAL_NORMALIZE_MODE=llm MEMOIR_ORAL_NORMALIZE_LLM_MAX_TOKENS=512 MEMOIR_ORAL_NORMALIZE_LLM_MAX_INPUT_CHARS=8000 # ============================================================================= # Database # ============================================================================= # 本地开发: # DATABASE_URL=postgresql://postgres:postgres@localhost:5432/life_echo # Docker / 服务端(主机名一般为 compose 服务名 postgres): # DATABASE_URL=postgresql://postgres:postgres@postgres:5432/life_echo DATABASE_URL=postgresql://postgres:postgres@postgres:5432/life_echo # ============================================================================= # Redis # ============================================================================= # 本地开发: # REDIS_URL=redis://localhost:6379/0 # Docker / 服务端: # REDIS_URL=redis://redis:6379/0 REDIS_URL=redis://redis:6379/0 REDIS_SESSION_TTL=86400 # ============================================================================= # Memory compaction(近重复 memory chunk 软排除;Celery + Redis 防抖) # ============================================================================= # MEMORY_COMPACTION_ENABLED=false # MEMORY_COMPACTION_DEBOUNCE_SECONDS=105 # MEMORY_COMPACTION_LOCK_TTL_SECONDS=600 # MEMORY_COMPACTION_CHUNK_SIMILARITY_THRESHOLD=0.92 # MEMORY_COMPACTION_MIN_LAYERS_FOR_EXCLUDE=2 # MEMORY_COMPACTION_MAX_CHUNKS_PER_RUN=200 # MEMORY_COMPACTION_MAX_EXCLUDES_PER_RUN=50 # MEMORY_COMPACTION_MAX_NEIGHBORS_PER_CHUNK=25 # MEMORY_COMPACTION_TEXT_JACCARD_MIN=0.55 # MEMORY_COMPACTION_METADATA_EVENT_YEAR_WINDOW=1 # ============================================================================= # Auth # ============================================================================= # 建议使用: openssl rand -hex 32 SECRET_KEY=cf47555c7ecbe5ddb7fd2113c59e08a8bcb110810c42f7c644e06a5acc898608 ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=120 # ============================================================================= # Tencent Cloud — 短信 # ============================================================================= # 短信、一句话 ASR/TTS、COS 为不同产品;同一主账号可共用同一对 SecretId/SecretKey(分别填三处)。 TENCENT_SMS_SECRET_ID=AKIDa2ILCwUr56uVt31oU0JOHxPfGhvvkLiq TENCENT_SMS_SECRET_KEY=xiFbjlZ9XheS2NWYLvHRPAh2A5nGYcR2 # 短信应用 SDK AppID TENCENT_SMS_SDK_APP_ID=1401010099 # 短信签名内容(不包含【】符号) TENCENT_SMS_SIGN_NAME=上海华嘎科技有限公司 # 短信模板 ID TENCENT_SMS_TEMPLATE_ID=2592163 # 短信模板参数数量(1=仅验证码,2=验证码+过期时间) # 若遇 TemplateParamSetNotMatchApprovedTemplate,请对照控制台模板配置 TENCENT_SMS_TEMPLATE_PARAM_COUNT=1 # ============================================================================= # ASR Provider(whisper | tencent) # ============================================================================= ASR_PROVIDER=tencent # ============================================================================= # Whisper ASR(ASR_PROVIDER=whisper 时使用) # ============================================================================= ASR_MODEL_SIZE=small ASR_DEVICE=cpu ASR_COMPUTE_TYPE=int8 # GPU 环境(示例,按需启用) # ASR_MODEL_SIZE=medium # ASR_DEVICE=cuda # ASR_COMPUTE_TYPE=float16 # ============================================================================= # Tencent Cloud — 一句话 ASR + TTS(ASR_PROVIDER=tencent 或 TTS_PROVIDER=tencent) # ============================================================================= TENCENT_SECRET_ID=AKIDa2ILCwUr56uVt31oU0JOHxPfGhvvkLiq TENCENT_SECRET_KEY=xiFbjlZ9XheS2NWYLvHRPAh2A5nGYcR2 # ============================================================================= # TTS(文字转语音,Agent 回复播音)— 与 ASR 独立 # ============================================================================= # ENABLE_TTS:仅控制是否合成并下发 TTS_AUDIO;不影响用户语音转写(ASR) ENABLE_TTS=true TTS_PROVIDER=tencent # 仅 TTS_PROVIDER=openai 时在控制台创建密钥后配置 OPENAI_API_KEY # 音色 ID 见 https://cloud.tencent.com/document/product/1073/92668 TTS_VOICE_TYPE=502001 TTS_CODEC=mp3 # ============================================================================= # WeChat Pay # ============================================================================= WECHAT_PAY_APP_ID=wx1df508452e06cfb8 WECHAT_PAY_MCH_ID=1662979099 WECHAT_PAY_API_V3_KEY=xjvGSJLGJAJfjgskfjslafjsajsdjals # 商户私钥:推荐使用文件路径,避免 .env 中长 PEM 转义问题 WECHAT_PAY_PRIVATE_KEY_PATH=certs/apiclient_key.pem # 若不用文件,可配置 WECHAT_PAY_PRIVATE_KEY(PEM,换行用 \n) # WECHAT_PAY_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----" WECHAT_PAY_CERT_SERIAL_NO=1AA82328AC1456C6F115B014606F22CD621D2032 WECHAT_PAY_NOTIFY_URL=https://lifecho.worldsplats.com/api/payment/notify/wechat # 平台公钥模式(仅当无法走平台证书自动拉取时使用);勿填商户私钥路径 # WECHAT_PAY_PLATFORM_PUBLIC_KEY_PATH=certs/wechat_platform_public_key.pem # WECHAT_PAY_PLATFORM_PUBLIC_KEY_ID=PUB_KEY_ID_0116629790992026020700181671002400 # ============================================================================= # Alipay(启用时在此填写 ALIPAY_APP_ID / ALIPAY_PRIVATE_KEY / ALIPAY_PUBLIC_KEY) # ============================================================================= ALIPAY_NOTIFY_URL=https://lifecho.worldsplats.com/api/payment/notify/alipay # ============================================================================= # Misc # ============================================================================= ENABLE_TEST_SUBSCRIPTION=1 # ============================================================================= # Memoir image generation(Story 主图等;轮询 Liblib 任务) # ============================================================================= MEMOIR_IMAGE_ENABLED=true MEMOIR_IMAGE_POLL_INTERVAL=3 MEMOIR_IMAGE_MAX_ATTEMPTS=20 MEMOIR_IMAGE_PROVIDER=liblib MEMOIR_IMAGE_STYLE_DEFAULT=watercolor MEMOIR_IMAGE_SIZE_DEFAULT=1280x720 # Story 正文至少多少字才生成主图 intent / 调图(0=不限制) STORY_IMAGE_MIN_BODY_CHARS=800 # 叙事模型输出相对口述过短则回退为口述原文 MEMOIR_NARRATIVE_FALLBACK_BODY_RATIO=0.5 MEMOIR_NARRATIVE_FALLBACK_MIN_CHARS=20 # 可选,Liblib 返回图片域名不在默认白名单时(逗号分隔) # MEMOIR_IMAGE_DOWNLOAD_HOSTS= # ============================================================================= # Liblib image provider # ============================================================================= LIBLIB_ACCESS_KEY=zrDp6quCOKlLwcewOEfrog LIBLIB_SECRET_KEY=iTVHo5Nf3KA-xpC1Mja80bC93u6chJem LIBLIB_BASE_URL=https://openapi.liblibai.cloud LIBLIB_TEMPLATE_UUID=5d7e67009b344550bc1aa6ccbfa1d7f4 # ============================================================================= # Tencent Cloud — COS(回忆录图片存储) # ============================================================================= TENCENT_COS_SECRET_ID=AKIDa2ILCwUr56uVt31oU0JOHxPfGhvvkLiq TENCENT_COS_SECRET_KEY=xiFbjlZ9XheS2NWYLvHRPAh2A5nGYcR2 TENCENT_COS_REGION=ap-shanghai TENCENT_COS_BUCKET=life-echo-prod-1319381411 TENCENT_COS_BASE_URL=https://life-echo-prod-1319381411.cos.ap-shanghai.myqcloud.com # 可选临时凭证 # TENCENT_COS_TOKEN=