# ============================================================================= # Life Echo API — 模板(example) # # 本地:复制为 .env.development(勿提交密钥),再运行 api/development.sh 会在首次自动生成 .env(从 # .env.development 复制);Settings 只读 .env(见 app/core/config.py)。 # 服务端:仓库维护 .env.staging / .env.production;workflow 按目标环境上传并复制为运行时 .env,compose 的 env_file 统一指向 .env。 # 不要把真实密钥提交到仓库。 # ============================================================================= # ============================================================================= # Docker Compose(宿主机独立 Caddy 反代到本 API) # ============================================================================= # 映射到宿主机的端口,默认 8000;与同机其它项目冲突时改为未占用端口,并在独立 Caddy 的 Caddyfile 中 reverse_proxy 到 127.0.0.1:该端口。 # LIFE_ECHO_API_HOST_PORT=8000 # 若 Caddy 跑在独立容器且非 host 网络,不要用 127.0.0.1,应把 Caddy 加入与本 compose 相同的 Docker 网络,并对 http://life-echo-api-prod:8000 做 reverse_proxy。 # ============================================================================= # Logging(loguru sink 最低级别:TRACE / DEBUG / INFO / WARNING / ERROR / CRITICAL) # ============================================================================= LOG_LEVEL=INFO # Agent 单行 INFO 摘要(耗时、路由、段落规模);与 LOG_LEVEL 独立,便于生产短暂排查 # LOG_AGENT_VERBOSE=0 # DEBUG 下 prompt/响应预览最大字符数 # AGENT_LOG_MAX_CHARS=4096 # 第三方 stdlib logging(空=自动:LOG_LEVEL 为 DEBUG/TRACE 时 Celery→INFO、httpx/httpcore→WARNING,减少刷屏) # CELERY_LOG_LEVEL= # HTTPX_LOG_LEVEL= # ============================================================================= # LLM / DeepSeek # ============================================================================= DEEPSEEK_API_KEY=your_deepseek_api_key DEEPSEEK_BASE_URL=https://api.deepseek.com DEEPSEEK_MODEL=deepseek-chat # Chat 访谈:每轮根据用户内容判定主人生阶段(关则仅用关键词,省一次 LLM) # CHAT_STAGE_DETECTION_ENABLED=true # CHAT_STAGE_DETECTION_MAX_TOKENS=128 # ============================================================================= # 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@localhost:5432/life_echo # 启动时 Alembic(main.py);生产可设 ALEMBIC_STARTUP_FAIL_FAST=true,迁移失败则拒绝启动 # ALEMBIC_RUN_ON_STARTUP=true # ALEMBIC_STARTUP_FAIL_FAST=false # ALEMBIC_STARTUP_MAX_RETRIES=3 # ALEMBIC_STARTUP_RETRY_BASE_SECONDS=1.0 # ============================================================================= # Redis # ============================================================================= # 本地开发: # REDIS_URL=redis://localhost:6379/0 # Docker / 服务端: # REDIS_URL=redis://redis:6379/0 REDIS_URL=redis://localhost:6379/0 REDIS_SESSION_TTL=86400 # ============================================================================= # Auth # ============================================================================= # 建议使用: openssl rand -hex 32 SECRET_KEY=replace_with_a_strong_random_secret ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=120 # ============================================================================= # Tencent Cloud — 短信 # ============================================================================= # 短信、一句话 ASR/TTS、COS 为不同产品;同一主账号可共用同一对 SecretId/SecretKey(分别填三处)。 TENCENT_SMS_SECRET_ID=your_tencent_sms_secret_id TENCENT_SMS_SECRET_KEY=your_tencent_sms_secret_key # 短信应用 SDK AppID TENCENT_SMS_SDK_APP_ID=your_sms_sdk_app_id # 短信签名内容(不包含【】符号) TENCENT_SMS_SIGN_NAME=your_sms_sign_name # 短信模板 ID TENCENT_SMS_TEMPLATE_ID=your_sms_template_id # 短信模板参数数量(1=仅验证码,2=验证码+过期时间) # 若遇 TemplateParamSetNotMatchApprovedTemplate,请对照控制台模板配置 TENCENT_SMS_TEMPLATE_PARAM_COUNT=1 # ============================================================================= # ASR Provider(whisper | tencent) # ============================================================================= ASR_PROVIDER=whisper # ============================================================================= # 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=your_tencent_asr_secret_id TENCENT_SECRET_KEY=your_tencent_asr_secret_key # ============================================================================= # TTS(文字转语音,Agent 回复播音)— 与 ASR 独立 # ============================================================================= # ENABLE_TTS:仅控制是否合成并下发 TTS_AUDIO;不影响用户语音转写(ASR) ENABLE_TTS=true TTS_PROVIDER=tencent # 仅 TTS_PROVIDER=openai 时需要 # OPENAI_API_KEY=your_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=your_wechat_pay_app_id WECHAT_PAY_MCH_ID=your_wechat_mch_id WECHAT_PAY_API_V3_KEY=your_wechat_api_v3_key # 商户私钥:推荐使用文件路径,避免 .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=your_wechat_cert_serial_no WECHAT_PAY_NOTIFY_URL=https://your-domain.com/api/payment/notify/wechat # 平台公钥模式(仅当无法走平台证书自动拉取时使用);勿填商户私钥路径 # WECHAT_PAY_PLATFORM_PUBLIC_KEY_PATH=certs/wechat_platform_public_key.pem # WECHAT_PAY_PLATFORM_PUBLIC_KEY_ID=your_wechat_platform_public_key_id # ============================================================================= # Alipay # ============================================================================= ALIPAY_APP_ID=your_alipay_app_id ALIPAY_PRIVATE_KEY=your_alipay_private_key ALIPAY_PUBLIC_KEY=your_alipay_public_key ALIPAY_NOTIFY_URL=https://your-domain.com/api/payment/notify/alipay # ============================================================================= # Misc # ============================================================================= ENABLE_TEST_SUBSCRIPTION=0 # ============================================================================= # Memoir image generation(Story 主图等;轮询 Liblib 任务) # ============================================================================= MEMOIR_IMAGE_ENABLED=false 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=400 # 叙事模型输出相对口述过短则回退为口述原文 MEMOIR_NARRATIVE_FALLBACK_BODY_RATIO=0.5 MEMOIR_NARRATIVE_FALLBACK_MIN_CHARS=20 # 可选,Liblib 返回图片域名不在默认白名单时(逗号分隔) # MEMOIR_IMAGE_DOWNLOAD_HOSTS=liblib.cloud,liblibai.cloud # ============================================================================= # Liblib image provider # ============================================================================= LIBLIB_ACCESS_KEY=your_liblib_access_key LIBLIB_SECRET_KEY=your_liblib_secret_key LIBLIB_BASE_URL=https://openapi.liblibai.cloud LIBLIB_TEMPLATE_UUID=your_liblib_template_uuid # ============================================================================= # Tencent Cloud — COS(回忆录图片存储) # ============================================================================= TENCENT_COS_SECRET_ID=your_tencent_cos_secret_id TENCENT_COS_SECRET_KEY=your_tencent_cos_secret_key TENCENT_COS_REGION=ap-shanghai TENCENT_COS_BUCKET=your_bucket_name TENCENT_COS_BASE_URL=https://your_bucket_name.cos.ap-shanghai.myqcloud.com # 可选临时凭证 # TENCENT_COS_TOKEN=