feat(admin): Angel(Agnes) provider 凭据 DB 化 + 安全 key_set 字段

- llm_settings.agnes_api_key           TEXT   (DB key 优先,.env 兜底)
- llm_settings.agnes_base_url_override VARCHAR (留空 = 用 .env)
- alembic 0005_agnes_key 迁移
- LlmSettingOut.agnes_api_key_set (bool) 替代直接回传 key
- LlmSettingUpdate 加 agnes_api_key / agnes_base_url_override(可空可清空)
- providers.get_angel_client 改用 DB key 优先
- enrichment.py 改为 get_angel_client() 工厂调用(热改 key 不需重启)
- /admin/llm/settings/test 走 get_angel_client(测的是 DB 里的 key)
- 前端 AdminLlmSettings 在'总开关 + 模型'卡里加 Angel api_key 输入框 +
  base_url 覆盖 + 已配置/未配置指示灯 + 清空按钮
- 顶部'测连接'按钮复用(测的就是 Angel)
This commit is contained in:
xiaji
2026-06-12 20:43:54 +08:00
parent 785b63cfed
commit aaf728f3f4
8 changed files with 179 additions and 15 deletions

View File

@@ -49,6 +49,15 @@ class LlmSetting(Base):
# === 总开关 ===
enabled: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False)
# === Angel(Agnes)provider 凭据 — 在 settings 表里存,优先于 .env ===
# 留空 = 用 .env 里的 agnes_api_key(向后兼容,生产部署常用 .env 注入)
# 设值 = 走数据库(更便于在 UI 改 key,不用重启)
# 安全:API 返回 agnes_api_key_set bool,不回传明文
agnes_api_key: Mapped[str] = mapped_column(Text, default="", nullable=False)
agnes_base_url_override: Mapped[str] = mapped_column(
String(255), default="", nullable=False
) # 留空 = 用 .env
# === 美团大模型(LongCat,OpenAI 兼容)===
# 双 provider 评论架构:Angel + 美团并列,各跑各的 prompt,结果存到 articles 各自的列
# api_key 留空 = 不启用该 provider