Fallback-SLA-RAG

精排或 LLM 超时等于整站失败,高峰不可用。根因是只有一条成功路径。本方法按超时熔断到 Hybrid/Naive 等降级链。降级必须单独监控质量,避免静默变差。

本文属于 RAG 工程框架中的「5 在线运营与成本治理」环节,聚焦「Fallback/SLA(回退与服务等级)」方法。

定位

维度 内容
角色 超时熔断与降级链
输入 → 输出 query → 主链答案或降级答案
默认组合 网关熔断 + 应用 circuit breaker
何时不用 离线批处理、无 SLA

核心机制

主链 deadline $D$,超时则 $F_1,F_2,\ldots$ 更短路。P95 对主链与降级分桶报。

实现路径与心智:主链设 deadline,超时或错误切到更短路径。底层心智:可用性是路径集合不是单条成功链。降级质量必须单独监控。

优缺点

  • 优点:高峰仍可用。
  • 缺点:静默质量下降。

契约与走通样例

输入

1
{"query": "GAPDH siRNA 处理多久", "deadline_ms": 800}

中间量

精排 920 ms > 800 → 走 Hybrid 无精排,300 ms 返回。降级桶 Faithfulness $0.78$ vs 主链 $0.91$。

输出

1
{"path": "fallback_hybrid", "latency_ms": 300}

社区实现

Envoy / 应用层 circuit breaker。风险:降级到空缓存当成功。

工程落地

最小可运行示例

复制为 .py 后直接运行(仅标准库)。生产用并发超时(concurrent.futures)包住主链;降级禁止落到空答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
"""主链超时则走降级链,并返回路径名。"""
from __future__ import annotations

import time
from concurrent.futures import ThreadPoolExecutor, TimeoutError as FuturesTimeout


class RagChain:
"""一条可调用的 RAG 路径。生产对应 Hybrid 主链 / Naive 降级链。"""

def __init__(self, name: str, answer: str, delay_s: float) -> None:
self.name, self.answer, self.delay_s = name, answer, delay_s

def answer_query(self, query: str) -> str:
del query
time.sleep(self.delay_s)
return self.answer


def sla_rag(query: str, primary: RagChain, fallback: RagChain, deadline_s: float) -> tuple[str, str]:
"""输出 (答案, 路径名)。"""
with ThreadPoolExecutor(max_workers=1) as pool:
fut = pool.submit(primary.answer_query, query)
try:
return fut.result(timeout=deadline_s), "primary"
except FuturesTimeout:
return fallback.answer_query(query), "fallback"


if __name__ == "__main__":
slow = RagChain("advanced", "20 nM for 48 h", delay_s=0.2)
fast = RagChain("naive", "20 nM (degraded)", delay_s=0.0)
print(sla_rag("siRNA 时程?", slow, fast, deadline_s=0.05))

参数

参数 起点 影响
deadline_ms 略小于 SLA 过紧则长期走降级
降级链 Hybrid/Naive/缓存 禁止降级到空

失效—信号—螺丝

  • 降级占比高:螺丝:扩容主链或减精排池。
  • 质量静默掉:螺丝:降级桶单独 Faithfulness。
  • 无 deadline:螺丝:必须设。

规模(100 篇生物学 PDF)

配置增量可忽略。切换 毫秒–百毫秒

-------------本文结束感谢您的阅读-------------