Files
life-echo/api/.env.production

261 lines
13 KiB
Plaintext
Raw Normal View History

2026-03-23 13:21:07 +08:00
# =============================================================================
# Life Echo API — production生产
#
# 仓库维护本文件production 发布时 workflow 会上传并复制为运行时 .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。
# =============================================================================
refactor(api,expo): 多智能体与会话收敛、回忆录兼容层移除、后端测试集大幅删减 - 对齐「多智能体收敛」与「回忆录 stories-first / markdown-first」方向:收紧运行时契约、 删除过渡兼容路径与双轨逻辑,并同步更新客户端与文档。 - Chat:以 ChatOrchestrator 为实时编排入口;删除独立 conversation_agent,精简 prompts。 - Memoir:删除 memory_agent;MemoirOrchestrator、classification / story_route 与 prompts 收敛到 prepare_batches + run_story_pipeline_for_category_batch 主链路。 - 将 agents 侧 processor 迁入 feature 层为 background_runner,并移除 features 下重复/过时 processor 封装。 - 新增 history_store,强化「conversation_messages 为 DB 真源、Redis 为缓存」模型。 - 调整 models、repo、service、session_history;精简 WS message_types,重构 pipeline 与 router。 - 移除章节占位、整章再生等旧路径;章节列表与封面逻辑要求 story 关联;收紧 cover 资格与 enqueue。 - helpers、repo、service、router、reading_segment_materialize、story_pipeline_sync、pdf_service 等按 canonical markdown / cover_asset_id 收缩;删除 memoir_images/provider 等冗余。 - tasks:memoir_tasks、chapter_cover_tasks 等大幅瘦身;story_image_tasks 等与当前图片任务对齐。 - core:config、logging、redis、task_tracker 小幅调整。 - auth / user / payment / quota:路由或服务侧删减过时接口或逻辑(如 payment router 行数减少)。 - pyproject.toml、development.sh、.env.example / .env.production、README 等同步说明或变量。 - Alembic 0001_initial_schema 微调(与当前 schema 叙事一致的小改动)。 - 回忆录:types / mappers / api、章节页与 memoir 页与后端契约对齐;markdown-renderer 调整。 - 语音:删除 voice/player,voice-segment-store 相应精简。 - api/tests:删除 conftest 及绝大部分既有测试文件(websocket_baseline、conversation、memoir 图片、PDF、SMS 等),属有意收缩/待按 backend-test-system 重建的信号。 - docs:新增多智能体收敛与移除兼容层计划摘要;更新 story-first 设计、backend-test-system、 multi-agent-refactor-plan、实施总结等。 BREAKING CHANGE: 后端对外契约、回忆录章节字段与若干路由/任务行为已变更;大量 API 测试被移除, CI 若依赖这些用例需按新策略补测或调整流水线。
2026-03-22 16:45:57 +08:00
# Loggingloguru 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
2026-04-03 13:49:24 +08:00
# DEBUG 下访谈/资料:省略 SystemMessage 正文(仅 total_len+sha120/false=打出全文
# AGENT_LOG_OMIT_SYSTEM_MESSAGE_BODY=1
# DEBUG 下超长单段 *.prompt总长超过下一项时先跳过前 N 字符再预览0=不跳过)
# AGENT_LOG_JSON_PROMPT_PREFIX_CHARS=0
# AGENT_LOG_JSON_PROMPT_PREFIX_ONLY_IF_LEN_GT=4000
# 第三方 stdlib logging空=自动LOG_LEVEL 为 DEBUG/TRACE 时 Celery→INFO、httpx/httpcore→WARNING减少刷屏
# CELERY_LOG_LEVEL=
# HTTPX_LOG_LEVEL=
refactor(api,expo): 多智能体与会话收敛、回忆录兼容层移除、后端测试集大幅删减 - 对齐「多智能体收敛」与「回忆录 stories-first / markdown-first」方向:收紧运行时契约、 删除过渡兼容路径与双轨逻辑,并同步更新客户端与文档。 - Chat:以 ChatOrchestrator 为实时编排入口;删除独立 conversation_agent,精简 prompts。 - Memoir:删除 memory_agent;MemoirOrchestrator、classification / story_route 与 prompts 收敛到 prepare_batches + run_story_pipeline_for_category_batch 主链路。 - 将 agents 侧 processor 迁入 feature 层为 background_runner,并移除 features 下重复/过时 processor 封装。 - 新增 history_store,强化「conversation_messages 为 DB 真源、Redis 为缓存」模型。 - 调整 models、repo、service、session_history;精简 WS message_types,重构 pipeline 与 router。 - 移除章节占位、整章再生等旧路径;章节列表与封面逻辑要求 story 关联;收紧 cover 资格与 enqueue。 - helpers、repo、service、router、reading_segment_materialize、story_pipeline_sync、pdf_service 等按 canonical markdown / cover_asset_id 收缩;删除 memoir_images/provider 等冗余。 - tasks:memoir_tasks、chapter_cover_tasks 等大幅瘦身;story_image_tasks 等与当前图片任务对齐。 - core:config、logging、redis、task_tracker 小幅调整。 - auth / user / payment / quota:路由或服务侧删减过时接口或逻辑(如 payment router 行数减少)。 - pyproject.toml、development.sh、.env.example / .env.production、README 等同步说明或变量。 - Alembic 0001_initial_schema 微调(与当前 schema 叙事一致的小改动)。 - 回忆录:types / mappers / api、章节页与 memoir 页与后端契约对齐;markdown-renderer 调整。 - 语音:删除 voice/player,voice-segment-store 相应精简。 - api/tests:删除 conftest 及绝大部分既有测试文件(websocket_baseline、conversation、memoir 图片、PDF、SMS 等),属有意收缩/待按 backend-test-system 重建的信号。 - docs:新增多智能体收敛与移除兼容层计划摘要;更新 story-first 设计、backend-test-system、 multi-agent-refactor-plan、实施总结等。 BREAKING CHANGE: 后端对外契约、回忆录章节字段与若干路由/任务行为已变更;大量 API 测试被移除, CI 若依赖这些用例需按新策略补测或调整流水线。
2026-03-22 16:45:57 +08:00
# =============================================================================
2026-03-23 13:21:07 +08:00
# 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
# 访谈性格InterviewAgentdefault | 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批处理/抽取更新 slot 时是否允许改写 MemoirState.current_stage默认 false访谈 switch_stage 仍可推进)
# True 时仅当 proposed 与 existing 在同一 chat_bucket 才对齐 current_stage
# MEMOIR_EXTRACTION_UPDATES_CURRENT_STAGE=false
# Memoir叙事前口述归一segment 原文仍落库;仅 story 流水线派生输入)
MEMOIR_ORAL_NORMALIZE_ENABLED=true
# off | rules | llmllm 为先规则再 LLM 纠错,失败回退规则结果)
MEMOIR_ORAL_NORMALIZE_MODE=llm
MEMOIR_ORAL_NORMALIZE_LLM_MAX_TOKENS=512
MEMOIR_ORAL_NORMALIZE_LLM_MAX_INPUT_CHARS=8000
# Chat模型消费净稿segment 原文仍落库;访谈编排层归一后注入 Agent / 记忆检索)
# CHAT_INPUT_NORMALIZE_ENABLED=true
# off | rules | llmllm 为先规则再 LLM失败回退规则编排层已带 LLM 时不重复在 Agent 调)
# CHAT_INPUT_NORMALIZE_MODE=rules
# CHAT_INPUT_NORMALIZE_LLM_MAX_TOKENS=512
# CHAT_INPUT_NORMALIZE_LLM_MAX_INPUT_CHARS=8000
2026-03-23 13:21:07 +08:00
# =============================================================================
# Database
# =============================================================================
2026-03-23 13:21:07 +08:00
# 本地开发:
# 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
# 启动时 Alembicmain.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
# =============================================================================
2026-03-23 13:21:07 +08:00
# Redis
# =============================================================================
2026-03-23 13:21:07 +08:00
# 本地开发:
# 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 防抖)
# 与 .env.example / .env.development 一致默认开启;需 runningcelery worker + celery-beat见 docker-compose.yml
# =============================================================================
MEMORY_COMPACTION_ENABLED=true
# 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
# MEMORY_COMPACTION_SWEEP_RECENT_HOURS=24
# =============================================================================
# Story 流水线post-commit、章节物化、append 上限、evidence 检索)
# =============================================================================
# STORY_IMAGE_ENQUEUE_DEDUP_TTL=300
# RECOMPOSE_CHAPTER_DELAY_SECONDS=8
# CHAPTER_PIPELINE_LOCK_TTL_SECONDS=120
# STORY_APPEND_MAX_CANONICAL_CHARS=12000
# STORY_APPEND_MAX_VERSIONS=20
# EVIDENCE_TOP_K_DEFAULT=10
# EVIDENCE_TOP_K_LARGE_BATCH=5
# EVIDENCE_LARGE_BATCH_THRESHOLD=3
# =============================================================================
2026-03-23 13:21:07 +08:00
# Auth
# =============================================================================
2026-03-23 13:21:07 +08:00
# 建议使用: openssl rand -hex 32
SECRET_KEY=cf47555c7ecbe5ddb7fd2113c59e08a8bcb110810c42f7c644e06a5acc898608
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=120
# =============================================================================
2026-03-23 13:21:07 +08:00
# Tencent Cloud — 短信
# =============================================================================
2026-03-23 13:21:07 +08:00
# 短信、一句话 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=验证码+过期时间)
2026-03-23 13:21:07 +08:00
# 若遇 TemplateParamSetNotMatchApprovedTemplate请对照控制台模板配置
TENCENT_SMS_TEMPLATE_PARAM_COUNT=1
# =============================================================================
2026-03-23 13:21:07 +08:00
# ASR Providerwhisper | tencent
# =============================================================================
ASR_PROVIDER=tencent
# =============================================================================
2026-03-23 13:21:07 +08:00
# Whisper ASRASR_PROVIDER=whisper 时使用)
# =============================================================================
ASR_MODEL_SIZE=small
ASR_DEVICE=cpu
ASR_COMPUTE_TYPE=int8
2026-03-23 13:21:07 +08:00
# GPU 环境(示例,按需启用)
# ASR_MODEL_SIZE=medium
# ASR_DEVICE=cuda
# ASR_COMPUTE_TYPE=float16
# =============================================================================
2026-03-23 13:21:07 +08:00
# Tencent Cloud — 一句话 ASR + TTSASR_PROVIDER=tencent 或 TTS_PROVIDER=tencent
# =============================================================================
TENCENT_SECRET_ID=AKIDa2ILCwUr56uVt31oU0JOHxPfGhvvkLiq
TENCENT_SECRET_KEY=xiFbjlZ9XheS2NWYLvHRPAh2A5nGYcR2
2026-03-23 13:21:07 +08:00
# =============================================================================
# TTS文字转语音Agent 回复播音)— 与 ASR 独立
# =============================================================================
# ENABLE_TTS仅控制是否合成并下发 TTS_AUDIO不影响用户语音转写ASR
ENABLE_TTS=true
TTS_PROVIDER=tencent
# 仅 TTS_PROVIDER=openai 时需要
# OPENAI_API_KEY=your_openai_api_key
2026-03-23 13:21:07 +08:00
# 音色 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
2026-03-23 13:21:07 +08:00
# 商户私钥:推荐使用文件路径,避免 .env 中长 PEM 转义问题
WECHAT_PAY_PRIVATE_KEY_PATH=certs/apiclient_key.pem
2026-03-23 13:21:07 +08:00
# 若不用文件,可配置 WECHAT_PAY_PRIVATE_KEYPEM换行用 \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
2026-03-23 13:21:07 +08:00
# 平台公钥模式(仅当无法走平台证书自动拉取时使用);勿填商户私钥路径
# WECHAT_PAY_PLATFORM_PUBLIC_KEY_PATH=certs/wechat_platform_public_key.pem
# WECHAT_PAY_PLATFORM_PUBLIC_KEY_ID=PUB_KEY_ID_0116629790992026020700181671002400
2026-03-23 13:21:07 +08:00
# =============================================================================
# Alipay
2026-03-23 13:21:07 +08:00
# =============================================================================
# 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://lifecho.worldsplats.com/api/payment/notify/alipay
2026-03-23 13:21:07 +08:00
# =============================================================================
# Misc
# =============================================================================
ENABLE_TEST_SUBSCRIPTION=1
# =============================================================================
2026-03-23 13:21:07 +08:00
# Memoir image generationStory 主图等;轮询 Liblib 任务)
# =============================================================================
MEMOIR_IMAGE_ENABLED=true
MEMOIR_IMAGE_POLL_INTERVAL=3
MEMOIR_IMAGE_MAX_ATTEMPTS=20
2026-03-23 13:21:07 +08:00
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
# 回忆录 segment 入队:累计 strip 后字数未达此值则暂缓提交 Celery0=关闭字数门闸,仅静默防抖后提交)
# MEMOIR_SEGMENT_BATCH_MIN_CHARS=50
# 本批首条入队起最长等待(秒),超时仍提交;测试可调低,生产可调高
# MEMOIR_SEGMENT_BATCH_MAX_WAIT_SECONDS=60
2026-03-23 13:21:07 +08:00
# 可选Liblib 返回图片域名不在默认白名单时(逗号分隔)
# MEMOIR_IMAGE_DOWNLOAD_HOSTS=liblib.cloud,liblibai.cloud
# =============================================================================
2026-03-23 13:21:07 +08:00
# Liblib image provider
# =============================================================================
LIBLIB_ACCESS_KEY=zrDp6quCOKlLwcewOEfrog
LIBLIB_SECRET_KEY=iTVHo5Nf3KA-xpC1Mja80bC93u6chJem
LIBLIB_BASE_URL=https://openapi.liblibai.cloud
LIBLIB_TEMPLATE_UUID=5d7e67009b344550bc1aa6ccbfa1d7f4
# =============================================================================
2026-03-23 13:21:07 +08:00
# 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
2026-03-23 13:21:07 +08:00
TENCENT_COS_BASE_URL=https://life-echo-prod-1319381411.cos.ap-shanghai.myqcloud.com
# 可选临时凭证
# TENCENT_COS_TOKEN=