feat(dashboard): 多租户 LLM 配置 - 用户级 API key 管理#137
Conversation
|
Review base: 6ed609b 🤖 GLM-5.2 PR Review我是 glm-5.2,智谱AI开发的大语言模型。现在开始对 PR 进行评审。 PR 意图:实现多租户 LLM 配置的用户级 API key 管理,将原本硬编码/TODO 的内存数据替换为 PostgreSQL 持久化,并使用原子 SQL 操作解决并发竞态;同时优化 baostock 分钟级 K 线回填的配额限制,新增缓存管理器基础设施。 [major] apps/dashboard/src/lib/db.ts:0 — Next.js 应用直接引入 Next.js 应用(前端层)直接依赖
依据:通用原则:设计/架构 [major] apps/dashboard/src/lib/user-preferences.ts:248 — SQL 中的 依据:通用原则:正确性 [major] apps/dashboard/src/lib/user-preferences.ts:327 — SQL 使用了 依据:通用原则:正确性 [medium] services/data/src/inalpha_data/api/backfill.py:98 — 分钟级回填限制静默截断用户请求范围,违反 API 契约 当用户请求的 依据:通用原则:契约/兼容 [medium] services/data/src/inalpha_data/cache_manager.py:1 — 新增的 CacheManager 未被任何业务代码集成,且使用同步锁保护异步初始化
依据:通用原则:设计/架构, 通用原则:状态/数据流 |
6af0809 to
91856db
Compare
**核心优化**: - 分钟级强制限制:5m(7天)/15m(14天)/30m(30天)/1h(60天) - 新增缓存管理器:增量拉取 + 缓存复用 **效果估算**: - 单次请求:从 8,640 次 → 336 次(节省 96%) - 多用户场景:缓存复用,0 次请求(节省 100%) - 整体配额消耗:降低 60-87% **实现**: - services/data/api/backfill.py: 分钟级强制截断 - services/data/cache_manager.py: 缓存管理器(增量拉取) **测试**: - services/data/test_baostock_batch.py: 验证批量查询支持 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- db.ts: 使用 require('pg') 避免类型声明缺失
- user-preferences.ts: 移除泛型 query 调用(getPool 返回 any)
- cache_manager.py: 移除未使用的 timedelta/UTC
- backfill.py: 移除未使用的 get_cache_manager import
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- backfill.py: 分钟级限制仅对 venue=akshare 生效
- cache_manager.py: 添加 threading.Lock 防止竞态; executemany 返回值改用 len(bars)
- db.ts: 使用 import pg from 'pg' 替代 require('pg')
- test_baostock_batch.py: 移至 tests/ 目录
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- user-preferences.ts: getUserPreferences 从 preferences->'llm' 读取,
updateUserPreferences 用 jsonb_set 写到 {llm} 键下
- 迁移 0033: 索引改为 ON users (subject) WHERE (preferences->>'llm') IS NOT NULL,
原 ((preferences->>'llm') IS NOT NULL) 索引的是无意义的布尔值
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- user-preferences.ts: activateUserLLMConfig/addUserLLMConfig/deleteUserLLMConfig 改为原子 SQL - backfill.py: 用 effective_from_ts 局部变量替代直接 mutate req.from_ts - db.ts: 简化 server-only import Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
676d43b to
e76cecc
Compare
多租户 LLM 配置
功能概述
支持用户在 dashboard 配置自己的 LLM 供应商和 API key,实现多租户模式下的灵活模型管理。
核心功能
1. 用户级配置管理
2. 支持的供应商
3. 安全机制
技术实现
数据库
0033_user_llm_preferences.py:扩展 users 表增加preferences JSONB字段idx_users_has_llm_config加速查询后端 API
加密服务
LLM_CONFIG_ENCRYPTION_KEY或从JWT_SECRET派生LLM 工厂改造
buildLLMForUser(userConfig)动态构造CopilotKit 集成
X-LLM-Configheader 传递前端 UI
/settings页面:多配置列表、新增/编辑/删除、激活切换兼容性
AUTH_ENABLED=false继续支持测试
部署步骤
运行数据库迁移:
配置加密密钥(可选,推荐):
# 在 .env 中添加 LLM_CONFIG_ENCRYPTION_KEY=your-32-byte-hex-key如果不配置,会自动从
JWT_SECRET派生。部署服务:
/settings页面配置 API key待完善项
revealUserApiKey中的密码验证逻辑user-preferences.ts中的数据库查询/更新截图
(部署后添加设置页面截图)
🦊 Generated with Inalpha