refactor(api): TOML 配置 SSOT、统一错误契约、Auth/事务加固与可观测性 (#33)
配置 SSOT(TOML + .env) 统一错误契约 Auth 与事务边界 Redis / Celery 可靠性:业务 Redis(DB/0)与 Celery broker/backend(DB/1)显式拆分;连接池、sync client 可观测性(OpenTelemetry + LGTM)
This commit is contained in:
178
api/.env.staging
178
api/.env.staging
@@ -1,187 +1,31 @@
|
||||
# =============================================================================
|
||||
# Life Echo API — staging(预发)
|
||||
#
|
||||
# 基于 .env.production 生成;staging 发布时 workflow 会上传并复制为运行时 .env。
|
||||
# 不要把生产密钥误填进本文件(当前与 production 共用同一套三方密钥)。
|
||||
# =============================================================================
|
||||
# Life Echo API — staging secrets(运行时 .env)
|
||||
# 非密钥项见 config/staging.toml
|
||||
|
||||
# =============================================================================
|
||||
# Docker Compose(宿主机独立 Caddy 反代到本 API)
|
||||
# =============================================================================
|
||||
LIFE_ECHO_API_HOST_BIND=0.0.0.0
|
||||
LIFE_ECHO_API_HOST_PORT=8000
|
||||
POSTGRES_HOST_PORT=15432
|
||||
|
||||
# =============================================================================
|
||||
# Logging(loguru sink 最低级别:TRACE / DEBUG / INFO / WARNING / ERROR / CRITICAL)
|
||||
# =============================================================================
|
||||
LOG_LEVEL=INFO
|
||||
# Agent 单行 INFO 摘要;与 LOG_LEVEL 独立
|
||||
# LOG_AGENT_VERBOSE=0
|
||||
# DEBUG 下预览上限(默认 4096);0=全文
|
||||
# AGENT_LOG_MAX_CHARS=4096
|
||||
# DEBUG 下 *.prompt:preview | hash_only
|
||||
# AGENT_LOG_PROMPT_MODE=preview
|
||||
# AGENT_LOG_PROMPT_DEDUP=0
|
||||
# DEBUG 下访谈/资料:省略 SystemMessage 正文(仅 total_len+sha12);0/false=打出全文
|
||||
# AGENT_LOG_OMIT_SYSTEM_MESSAGE_BODY=1
|
||||
# DEBUG 下超长单段 *.prompt:先跳过前 N 字符再预览
|
||||
# AGENT_LOG_JSON_PROMPT_PREFIX_CHARS=0
|
||||
# AGENT_LOG_JSON_PROMPT_PREFIX_ONLY_IF_LEN_GT=4000
|
||||
# 第三方 stdlib logging(空=自动)
|
||||
# CELERY_LOG_LEVEL=
|
||||
# HTTPX_LOG_LEVEL=
|
||||
|
||||
# =============================================================================
|
||||
# OpenTelemetry(预发;compose 接入 LGTM 后设 OTEL_ENABLED=true,见 docs/observability.md)
|
||||
# API/Celery 容器内 endpoint 用服务名;Grafana 宿主机端口见 observability compose(默认 48300 等)
|
||||
# =============================================================================
|
||||
OTEL_ENABLED=false
|
||||
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
|
||||
OTEL_EXPORTER_OTLP_INSECURE=true
|
||||
OTEL_SERVICE_NAME=life-echo-api
|
||||
OTEL_TRACES_SAMPLER=parentbased_traceidratio
|
||||
OTEL_TRACES_SAMPLER_ARG=0.1
|
||||
# OTEL_METRIC_EXPORT_INTERVAL_MS=10000
|
||||
|
||||
# =============================================================================
|
||||
# LLM / DeepSeek
|
||||
# =============================================================================
|
||||
DEEPSEEK_API_KEY=sk-09f17fb61c5a4299a3afc2a01de7af75
|
||||
DEEPSEEK_BASE_URL=https://api.deepseek.com
|
||||
DEEPSEEK_MODEL=deepseek-v4-flash
|
||||
|
||||
# =============================================================================
|
||||
# Memory 向量(智谱 BigModel 国内 embedding-3;与 DeepSeek/OpenAI 用途分离)
|
||||
# =============================================================================
|
||||
ZHIPU_API_KEY=524eda18eb3848e881eefe4c7ef17ec2.xBmGUabYDEa44m3M
|
||||
EMBEDDING_MODEL=embedding-3
|
||||
|
||||
# Chat 访谈
|
||||
CHAT_ERA_CONTEXT_ENABLED=true
|
||||
CHAT_INTERVIEW_PERSONA=warm_listener
|
||||
CHAT_INTERVIEW_TEMPERATURE=0.65
|
||||
CHAT_MEMORY_TOP_K=4
|
||||
CHAT_MEMORY_EVIDENCE_MAX_CHARS=1400
|
||||
CHAT_REPLY_PLANNER_LLM_ENABLED=true
|
||||
|
||||
# Memoir:叙事前口述归一
|
||||
MEMOIR_ORAL_NORMALIZE_ENABLED=true
|
||||
MEMOIR_ORAL_NORMALIZE_MODE=llm
|
||||
MEMOIR_ORAL_NORMALIZE_LLM_MAX_TOKENS=512
|
||||
MEMOIR_ORAL_NORMALIZE_LLM_MAX_INPUT_CHARS=8000
|
||||
|
||||
# =============================================================================
|
||||
# Database
|
||||
# =============================================================================
|
||||
APP_ENV=staging
|
||||
DATABASE_URL=postgresql://postgres:postgres@postgres:5432/life_echo
|
||||
|
||||
# =============================================================================
|
||||
# Redis
|
||||
# =============================================================================
|
||||
# Redis:业务 DB/0;Celery 自动 DB/1;compose redis 使用 REDIS_PASSWORD 作为 requirepass
|
||||
REDIS_URL=redis://redis:6379/0
|
||||
REDIS_SESSION_TTL=86400
|
||||
REDIS_PASSWORD=replace_with_strong_redis_password
|
||||
# CELERY_REDIS_URL=redis://:replace_with_strong_redis_password@redis:6379/1
|
||||
FLOWER_USER=admin
|
||||
FLOWER_PASSWORD=replace_with_strong_flower_password
|
||||
|
||||
# =============================================================================
|
||||
# Memory compaction
|
||||
# =============================================================================
|
||||
MEMORY_COMPACTION_ENABLED=true
|
||||
|
||||
# =============================================================================
|
||||
# Auth
|
||||
# =============================================================================
|
||||
SECRET_KEY=cf47555c7ecbe5ddb7fd2113c59e08a8bcb110810c42f7c644e06a5acc898608
|
||||
ALGORITHM=HS256
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES=120
|
||||
APP_ENV=staging
|
||||
MOCK_SMS_LOGIN_ENABLED=1
|
||||
|
||||
# =============================================================================
|
||||
# Tencent Cloud — 短信
|
||||
# =============================================================================
|
||||
TENCENT_SMS_SECRET_ID=AKIDa2ILCwUr56uVt31oU0JOHxPfGhvvkLiq
|
||||
TENCENT_SMS_SECRET_KEY=xiFbjlZ9XheS2NWYLvHRPAh2A5nGYcR2
|
||||
TENCENT_SMS_SDK_APP_ID=1401010099
|
||||
TENCENT_SMS_SIGN_NAME=上海华嘎科技有限公司
|
||||
TENCENT_SMS_TEMPLATE_ID=2592163
|
||||
TENCENT_SMS_TEMPLATE_PARAM_COUNT=1
|
||||
DEEPSEEK_API_KEY=sk-09f17fb61c5a4299a3afc2a01de7af75
|
||||
ZHIPU_API_KEY=524eda18eb3848e881eefe4c7ef17ec2.xBmGUabYDEa44m3M
|
||||
|
||||
# =============================================================================
|
||||
# ASR Provider(whisper | tencent)
|
||||
# =============================================================================
|
||||
ASR_PROVIDER=tencent
|
||||
|
||||
# =============================================================================
|
||||
# Whisper ASR(ASR_PROVIDER=whisper 时使用)
|
||||
# =============================================================================
|
||||
ASR_MODEL_SIZE=small
|
||||
ASR_DEVICE=cpu
|
||||
ASR_COMPUTE_TYPE=int8
|
||||
|
||||
# =============================================================================
|
||||
# Tencent Cloud — 一句话 ASR + TTS
|
||||
# =============================================================================
|
||||
TENCENT_SECRET_ID=AKIDa2ILCwUr56uVt31oU0JOHxPfGhvvkLiq
|
||||
TENCENT_SECRET_KEY=xiFbjlZ9XheS2NWYLvHRPAh2A5nGYcR2
|
||||
|
||||
# =============================================================================
|
||||
# TTS
|
||||
# =============================================================================
|
||||
ENABLE_TTS=true
|
||||
TTS_PROVIDER=tencent
|
||||
TTS_VOICE_TYPE=501004
|
||||
TTS_CODEC=mp3
|
||||
|
||||
# =============================================================================
|
||||
# WeChat Pay
|
||||
# =============================================================================
|
||||
WECHAT_PAY_APP_ID=wx1df508452e06cfb8
|
||||
WECHAT_PAY_MCH_ID=1662979099
|
||||
WECHAT_PAY_API_V3_KEY=xjvGSJLGJAJfjgskfjslafjsajsdjals
|
||||
WECHAT_PAY_PRIVATE_KEY_PATH=certs/apiclient_key.pem
|
||||
WECHAT_PAY_CERT_SERIAL_NO=1AA82328AC1456C6F115B014606F22CD621D2032
|
||||
WECHAT_PAY_NOTIFY_URL=https://lifecho.worldsplats.com/api/payment/notify/wechat
|
||||
|
||||
# =============================================================================
|
||||
# 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
|
||||
# =============================================================================
|
||||
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
|
||||
MEMOIR_MIN_INLINE_IMAGES_FOR_CHAPTER_COVER=1
|
||||
STORY_IMAGE_MIN_BODY_CHARS=800
|
||||
MEMOIR_NARRATIVE_FALLBACK_BODY_RATIO=0.5
|
||||
MEMOIR_NARRATIVE_FALLBACK_MIN_CHARS=20
|
||||
|
||||
# =============================================================================
|
||||
# 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-dev-1319381411
|
||||
TENCENT_COS_BASE_URL=https://life-echo-dev-1319381411.cos.ap-shanghai.myqcloud.com
|
||||
INTERNAL_EVAL_API_KEY=
|
||||
|
||||
Reference in New Issue
Block a user