- 入库历史遗漏源码/测试:router_system 9 模块(agent/executors/inference/knowledge/ memory/planner/skills/trace)、tests 11 个测试文件、config/knowledge 领域知识 - 入库根目录方案文档(v2/v3/可行性×2)、references 文献(arxiv 14-18/cnki_open/ 参考文献清单)、research 论文素材(routerarena/paper/中文文献 PDF) - 前端构建产物刷新(新 hash);webapp 误写文档删除 - gitignore 增补:deepseek-harness、research/_refs、.mimosa/.zcode、网关日志/pid、 临时调试脚本、tests/e2e/node_modules、AI代理功能开发/prefix - 基线确认:318 passed
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
"""推理链轨迹存储(T3:整体项目部分拆解·先行实现)。
|
|
|
|
内存环形缓冲(零依赖):记录每次请求的完整推理链(两级路由决策、
|
|
三级子领域、规则触发、任务拆解、节点执行、质量评分),支持按请求 ID 追溯。
|
|
可解释性 = 专家系统 vs 黑盒 LLM 的差异化护城河。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import threading
|
|
from collections import deque
|
|
from typing import Any, Deque, Dict, Optional
|
|
|
|
|
|
class TraceStore:
|
|
"""请求推理链轨迹存储(线程安全,环形淘汰)。"""
|
|
|
|
def __init__(self, max_entries: int = 1000):
|
|
self._max = max_entries
|
|
self._entries: Dict[str, Dict[str, Any]] = {}
|
|
self._order: Deque[str] = deque(maxlen=max_entries)
|
|
self._lock = threading.Lock()
|
|
|
|
def put(self, request_id: str, trace: Dict[str, Any]) -> None:
|
|
with self._lock:
|
|
if request_id in self._entries:
|
|
self._entries[request_id] = trace
|
|
return
|
|
if len(self._entries) >= self._max:
|
|
# 环形淘汰最旧
|
|
while self._order:
|
|
oldest = self._order.popleft()
|
|
if oldest in self._entries:
|
|
del self._entries[oldest]
|
|
break
|
|
self._entries[request_id] = trace
|
|
self._order.append(request_id)
|
|
|
|
def get(self, request_id: str) -> Optional[Dict[str, Any]]:
|
|
with self._lock:
|
|
return self._entries.get(request_id)
|
|
|
|
def size(self) -> int:
|
|
with self._lock:
|
|
return len(self._entries)
|
|
|
|
def clear(self) -> None:
|
|
with self._lock:
|
|
self._entries.clear()
|
|
self._order.clear()
|