fix: 全方位审查问题修复(P0~P3)
P0: ORM-迁移同步 - 新增 RawEvent/IngestFailure/DataQualityCheck/DataLineage 4 个模型类 - MatchStats 补充 xg_source/xg_updated_at/xg_source_record_id 字段 - 修复 server_default=_utcnow → func.now()(4 处) - BigInteger 导入 P1: - log_buffer.py 移除 threading.Lock(asyncio 单线程下无需锁) - 确认 context_builder/understat/injuries 等已有修复 P2: - Dockerfile 新增非 root 用户 + .dockerignore - 前端 fetchDashboard 修复 total 字段(改用 items.length) - 前端 fetchSystemConfig 改用真实 /admin/settings 端点 - 修复 validation.py return self"" → return self P3: - predict.py 缓存加 _CACHE_MAX_SIZE=200 淘汰 - eval.py get_eval_summary 加 limit 参数(默认 1000)+ 返回 total_settled - orchestrator.py agent provider 配置缓存 60s
This commit is contained in:
@@ -30,6 +30,11 @@ from src.llm.provider import LLMProvider, get_default_provider
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# P3-2: agent provider 配置缓存(TTL 60s),避免每次 _agent_provider 都多次查 DB
|
||||
_AGENT_PROVIDER_CACHE: dict[str, tuple[float, LLMProvider]] = {}
|
||||
_AGENT_PROVIDER_CACHE_TTL = 60.0
|
||||
|
||||
|
||||
# ── 5 个专家 agent 定义 ──
|
||||
# A=近期状态 B=攻防数据 C=主客因素 D=阵容完整性 E=历史交锋
|
||||
SPECIALIST_SPECS: list[AgentSpec] = [
|
||||
@@ -103,7 +108,16 @@ async def _agent_provider(agent_id: str, *, tier: str) -> LLMProvider:
|
||||
覆盖优先级:
|
||||
模型: AGENT_MODEL_{ID}(运行时) → 层级默认(LLM_SPECIALIST/AGGREGATOR_MODEL) → 全局 LLM_MODEL
|
||||
地址/密钥: AGENT_BASE_URL_{ID} / AGENT_API_KEY_{ID}(运行时) → 全局 LLM_BASE_URL / LLM_API_KEY
|
||||
|
||||
P3-2: 结果缓存 60 秒,避免每次预测都多次查询运行时配置 DB。
|
||||
"""
|
||||
cache_key = f"{agent_id}:{tier}"
|
||||
cached = _AGENT_PROVIDER_CACHE.get(cache_key)
|
||||
if cached is not None:
|
||||
ts, provider = cached
|
||||
if time.time() - ts < _AGENT_PROVIDER_CACHE_TTL:
|
||||
return provider
|
||||
|
||||
pfx = f"AGENT_{agent_id.upper()}_"
|
||||
p = await get_default_provider()
|
||||
tier_model = settings.LLM_SPECIALIST_MODEL if tier == "specialist" else settings.LLM_AGGREGATOR_MODEL
|
||||
@@ -118,6 +132,11 @@ async def _agent_provider(agent_id: str, *, tier: str) -> LLMProvider:
|
||||
key = await get_runtime_value(f"{pfx}API_KEY")
|
||||
if key:
|
||||
p.api_key = key
|
||||
|
||||
_AGENT_PROVIDER_CACHE[cache_key] = (time.time(), p)
|
||||
# 简单淘汰:超过 20 条时清空(60s TTL 下不会累积太多)
|
||||
if len(_AGENT_PROVIDER_CACHE) > 20:
|
||||
_AGENT_PROVIDER_CACHE.clear()
|
||||
return p
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user