Files
gaokao-volunteer-system/.env.docker.example
Hermes Agent 11fbb591c3
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
feat(llm): 多模型 fallback 支持
LLMClient 改为供应商链模式:
- 主供应商 + GAOKAO_LLM_FALLBACK_MODELS/PROVIDERS/API_KEYS/BASE_URLS
- 按顺序尝试, 第一个成功即返回
- 全部失败时抛出聚合错误(含供应商数量和最后错误)

配置层:
- Settings 新增 4 个 fallback 字段
- load_settings() 读取对应环境变量

新增测试(4 个):
- test_fallback_config_parsed: 验证 fallback 链解析正确
- test_fallback_no_config: 无 fallback 时只有主供应商
- test_fallback_falls_through_to_second_provider: 主失败自动切换
- test_fallback_all_fail_raises: 全部失败抛聚合错误

部署示例:
.env.docker.example / .env.payment.example 补充注释掉的 fallback 模板

验证: data/llm/tests 16 passed, admin/tests 40 passed
2026-06-28 13:34:17 +08:00

41 lines
1.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
GAOKAO_ADMIN_BIND=0.0.0.0
GAOKAO_ENV=prod
GAOKAO_ADMIN_PORT=8000
GAOKAO_ADMIN_USER=admin
GAOKAO_ADMIN_PASS=change-me-now-admin-pass
GAOKAO_JWT_SECRET=replace-with-64-char-jwt-secret-before-production-1234567890abcdef
GAOKAO_PORTAL_TOKEN_SECRET=replace-with-independent-64-char-portal-secret-before-production-abcdef1234567890
GAOKAO_ORDERS_FERNET_KEY=replace-with-strong-orders-fernet-secret-before-production
GAOKAO_PORTAL_UPLOAD_DIR=/var/lib/gaokao/portal_uploads
GAOKAO_PORTAL_UPLOAD_MAX_BYTES=5242880
GAOKAO_PORTAL_UPLOAD_MAX_FILES=5
# LLM 自动审核 / 方案生成(生产环境必须配置)
GAOKAO_LLM_PROVIDER=dashscope
GAOKAO_LLM_API_KEY=replace-with-real-llm-api-key
GAOKAO_LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
GAOKAO_LLM_MODEL=qwen-plus
GAOKAO_LLM_TIMEOUT=60
GAOKAO_LLM_MAX_TOKENS=4096
# 可选:多模型 fallback逗号分隔主供应商失败时按顺序尝试
# GAOKAO_LLM_FALLBACK_MODELS=gpt-4o-mini,deepseek-chat
# GAOKAO_LLM_FALLBACK_PROVIDERS=openai,deepseek
# GAOKAO_LLM_FALLBACK_API_KEYS=sk-openai-key,sk-deepseek-key
# GAOKAO_LLM_FALLBACK_BASE_URLS=https://api.openai.com/v1,https://api.deepseek.com/v1
GAOKAO_PAYMENT_PROVIDER=mock
GAOKAO_PAYMENT_BASE_URL=https://example.com
GAOKAO_PAYMENT_WEBHOOK_SECRET=replace-with-independent-payment-webhook-secret
GAOKAO_PAYMENT_NOTIFY_URL=
GAOKAO_PAYMENT_RETURN_URL=
GAOKAO_PAYMENT_APP_ID=
GAOKAO_PAYMENT_PRIVATE_KEY_PATH=
GAOKAO_PAYMENT_ALIPAY_PUBLIC_KEY_PATH=
GAOKAO_SMTP_HOST=
GAOKAO_SMTP_PORT=25
GAOKAO_SMTP_SENDER=
GAOKAO_SMTP_USER=
GAOKAO_SMTP_PASS=
GAOKAO_SMTP_USE_TLS=false
GAOKAO_SMTP_USE_SSL=false
GAOKAO_ALERT_RECIPIENTS=
GAOKAO_ALERT_WEBHOOK_URLS=
GAOKAO_OPS_ALERT_LOG=/var/lib/gaokao/ops-alerts.jsonl