- 对齐「多智能体收敛」与「回忆录 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 若依赖这些用例需按新策略补测或调整流水线。
148 lines
6.1 KiB
Plaintext
148 lines
6.1 KiB
Plaintext
# =============================================================================
|
||
# Life Echo API environment example
|
||
# 复制为 .env 或 .env.production 后按实际环境修改
|
||
# 不要把真实密钥提交到仓库
|
||
# =============================================================================
|
||
|
||
# =============================================================================
|
||
# Logging(loguru sink 最低级别:TRACE / DEBUG / INFO / WARNING / ERROR / CRITICAL)
|
||
# =============================================================================
|
||
LOG_LEVEL=INFO
|
||
|
||
# =============================================================================
|
||
# LLM / DeepSeek
|
||
# =============================================================================
|
||
DEEPSEEK_API_KEY=your_deepseek_api_key
|
||
DEEPSEEK_BASE_URL=https://api.deepseek.com
|
||
DEEPSEEK_MODEL=deepseek-chat
|
||
|
||
# =============================================================================
|
||
# Database
|
||
# =============================================================================
|
||
# 本地开发示例:
|
||
# DATABASE_URL=postgresql://postgres:postgres@localhost:5432/life_echo
|
||
# Docker / production 示例:
|
||
# DATABASE_URL=postgresql://postgres:postgres@postgres:5432/life_echo
|
||
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/life_echo
|
||
|
||
# =============================================================================
|
||
# Redis
|
||
# =============================================================================
|
||
# 本地开发示例:
|
||
# REDIS_URL=redis://localhost:6379/0
|
||
# Docker / production 示例:
|
||
# 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 SMS
|
||
# =============================================================================
|
||
TENCENT_SMS_SECRET_ID=your_tencent_sms_secret_id
|
||
TENCENT_SMS_SECRET_KEY=your_tencent_sms_secret_key
|
||
TENCENT_SMS_SDK_APP_ID=your_sms_sdk_app_id
|
||
TENCENT_SMS_SIGN_NAME=your_sms_sign_name
|
||
TENCENT_SMS_TEMPLATE_ID=your_sms_template_id
|
||
TENCENT_SMS_TEMPLATE_PARAM_COUNT=1
|
||
|
||
# =============================================================================
|
||
# ASR Provider
|
||
# whisper | tencent
|
||
# =============================================================================
|
||
ASR_PROVIDER=whisper
|
||
|
||
# Whisper ASR
|
||
ASR_MODEL_SIZE=small
|
||
ASR_DEVICE=cpu
|
||
ASR_COMPUTE_TYPE=int8
|
||
|
||
# Tencent ASR
|
||
# 仅在 ASR_PROVIDER=tencent 时需要
|
||
TENCENT_SECRET_ID=your_tencent_asr_secret_id
|
||
TENCENT_SECRET_KEY=your_tencent_asr_secret_key
|
||
# TENCENT_ASR_APP_ID=
|
||
|
||
# =============================================================================
|
||
# TTS(文字转语音,Agent 回复播音)— 与上方 ASR 完全独立
|
||
# =============================================================================
|
||
# ENABLE_TTS:仅控制是否合成并下发 TTS_AUDIO;不影响用户语音转写(ASR)
|
||
# false / 0 / no 关闭语音合成,不调 TTS 厂商 API
|
||
ENABLE_TTS=true
|
||
TTS_PROVIDER=tencent
|
||
# 仅 TTS_PROVIDER=openai 时需要
|
||
# OPENAI_API_KEY=your_openai_api_key
|
||
# 仅 TTS_PROVIDER=tencent 时生效;密钥变量名可与 ASR 相同,但开关与流程互不关联
|
||
# 音色 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
|
||
WECHAT_PAY_PRIVATE_KEY_PATH=certs/apiclient_key.pem
|
||
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
|
||
# =============================================================================
|
||
MEMOIR_IMAGE_ENABLED=false
|
||
MEMOIR_IMAGE_MAX_PER_CHAPTER=2
|
||
MEMOIR_IMAGE_POLL_INTERVAL=3
|
||
MEMOIR_IMAGE_MAX_ATTEMPTS=20
|
||
# 正文越长,可允许更多图片
|
||
MEMOIR_IMAGE_CHARS_PER_EXTRA=1500
|
||
MEMOIR_IMAGE_MAX_CAP=8
|
||
MEMOIR_IMAGE_PROVIDER=liblib
|
||
MEMOIR_IMAGE_STYLE_DEFAULT=watercolor
|
||
MEMOIR_IMAGE_SIZE_DEFAULT=1280x720
|
||
# 可选,限制 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 COS for memoir images
|
||
# 生产环境请确认这里使用的是生产 bucket,而不是开发 bucket
|
||
# =============================================================================
|
||
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_production_bucket
|
||
TENCENT_COS_BASE_URL=https://your_production_bucket.cos.ap-shanghai.myqcloud.com
|
||
# 可选临时凭证
|
||
# TENCENT_COS_TOKEN=
|