feat(proxy): 语义缓存 L2 查找 3.39x + Mimosa 扫描 15 高危清零
算法(gateway/proxy/semcache.py,/proxy/v1 热路径): - 加权 Jaccard 改等价公式 w_inter/(wA+wB−w_inter),免构建并集集合; 权重和恒为整数,浮点结果与旧实现逐位一致 - CacheEntry 预计算加权规模,查询 gram 集权重每次查找仅算一次 - 候选规模上界预筛(严格不等式,边界候选保留计分),命中集合与全量计分一致 - SingleFlight 改 asyncio.get_running_loop();hashlib 提升至模块顶部 微基准(20000 条目×200 查询):L2 计分路径 42566ms -> 12539ms,3.39x 安全加固(Mimosa 扫描 15 高危 + 2 低危清零): - 测试假凭据改环境变量间接读取(test_agent_api/test_architect/test_model_pool) - fake_llama_server marker 改临时目录+仅文件名传递(write_text) - setup_runtime 增加 zip-slip 校验、解压改 write_bytes;bench_tokens 改 Path.open - runtime 健康检查仅允许回环地址并改用 http.client(防 SSRF) - e2e/run-api-check.js BASE_URL 回环白名单校验 - research/routerarena/local_runner.py 输出改 Path API + basename 净化 - test_review 抽样测试改内联确定性 LCG;workspace 持久化改 Path API 测试:新增 2 项(公式逐位一致性 property、规模悬殊预筛回归) pytest 425 passed(基线 423 全绿 + 2) 基线检查点:ec19a07(操作前已提交,423 passed)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
"""语义缓存测试(T-P6,M2):精确/n-gram 阈值/TTL/LRU/重建/晋升/singleflight/SSE 回放。"""
|
||||
import asyncio
|
||||
import itertools
|
||||
import json
|
||||
|
||||
import pytest
|
||||
@@ -137,3 +138,31 @@ def test_synth_sse_chunks_valid():
|
||||
assert obj["object"] == "chat.completion.chunk"
|
||||
content += obj["choices"][0]["delta"].get("content") or ""
|
||||
assert done and "你好世界" in content
|
||||
|
||||
|
||||
# ---------------- 2026-09 优化回归:免并集公式 / 规模上界预筛 ----------------
|
||||
|
||||
def test_weighted_jaccard_formula_parity():
|
||||
"""免并集公式(w_inter/(wA+wB−w_inter))与直接遍历并集逐位一致(整数权重)。"""
|
||||
def direct(ga: set, gb: set) -> float:
|
||||
inter = ga & gb
|
||||
if not inter:
|
||||
return 0.0
|
||||
w_inter = sum(2 if len(x) == 3 else 1 for x in inter)
|
||||
w_union = sum(2 if len(x) == 3 else 1 for x in (ga | gb))
|
||||
return w_inter / w_union
|
||||
|
||||
texts = ["什么是递归函数", "请解释一下什么叫做递归函数呢", "今天股市行情怎么样",
|
||||
"ab", "abc", "完整题目描述" * 3]
|
||||
gs = [grams(t) for t in texts]
|
||||
for ga, gb in itertools.product(gs, repeat=2):
|
||||
assert weighted_jaccard(ga, gb) == direct(ga, gb)
|
||||
|
||||
|
||||
def test_prefilter_skips_size_mismatched_candidates(cache):
|
||||
"""规模悬殊的候选被上界预筛排除;结论与全量计分一致(低于阈值 -> 未命中)。"""
|
||||
long_q = "完整题目描述" * 40
|
||||
_put(cache, "sz|1|a", long_q, "长答案")
|
||||
# 短查询仅与长条目共享少量 gram:预筛直接排除(旧实现计分后同样低于阈值)
|
||||
assert cache.lookup("sz|1|b", "完整题目", doc_version=1) is None
|
||||
assert cache.hits_semantic == 0
|
||||
|
||||
Reference in New Issue
Block a user