vLLM Semantic Router 推出会话感知智能体路由 SAAR
Session-Aware Agentic Routing: Continuity-Aware Model Selection for Long-Horizon LLM Agents
vLLM Semantic Router 发布会话感知智能体路由(SAAR),在原有语义路由之上加入路由侧会话记忆、工具循环与不可移植 provider 状态的硬锁、空闲与决策漂移的重置边界、前缀缓存感知的切换定价和可回放轨迹。
vLLM Semantic Router 新增会话感知路由,给出了硬锁、重置边界与切换成本的具体机制和实测数字,可据此判断长程智能体的模型切换策略。
长时程 LLM 智能体带来了一个单轮提示路由器从未设计解决的路由问题。路由器仍然需要知道哪个模型最适合当前请求,但它还需要知道何时切换模型会破坏会话。
本文介绍 Session-Aware Agentic Routing (SAAR),这是 vLLM Semantic Router 中一种会话感知的模型选择策略。SAAR 保留了语义路由,但增加了路由器拥有的会话记忆、围绕工具循环和不可移植的提供商状态的硬锁定、安全重置边界、前缀缓存感知的切换定价,以及可重放的追踪。
在 21,600 个确定性轮次中,SAAR 将模型切换减少了 79.29%,消除了 3,836 次不安全切换,并将估计的物理模型成本降低了 78.71%。在 2,896 个实时 AMD ROCm 请求中,它保持了会话连续性,观察到 0 次违规。

图 1:长时程智能体需要理解会话轨迹的路由决策,而不仅仅是最近的提示。
从提示路由到会话路由
vLLM Semantic Router 始于一个简单的系统观察:并非每个请求都应通过推理栈走同一条路径。一个简短的事实性问题、一个安全敏感的提示、一个多模态请求、一个困难的推理任务,以及一个特定领域的查询,都可能值得不同的处理方式。
这一想法的第一代是提示路由。路由器从当前请求中提取信号,匹配路由决策,并选择适当的路径。Iris 使这些信号可组合。Athena 通过扩展模型选择、记忆、重放、长上下文信号、多模态原语和 AMD ROCm 部署路径,使路由器更具策略性。
智能体再次改变了路由的单元。
一个编码或研究智能体不是一个提示。它是一个会话。它进行规划、调用工具、接收工具输出、编辑文件、运行测试、从错误中恢复、暂停、恢复,并且经常发送非常简短的后续消息,例如“继续”、“修复它”、“再运行一次”或“使用之前的结果”。这些轮次之所以有意义,仅仅是因为之前的轨迹。
这就是为什么这个里程碑对 Semantic Router 很重要。路由器不再只回答:
哪个模型应该处理这个请求?
对于智能体流量,路由器还必须回答:
现在在这个会话内切换模型安全吗?
第二个问题正是 SAAR 旨在处理的。
为什么单轮路由对智能体会失效
单轮路由可以在局部正确,但对会话来说仍然是错误的。
考虑一个典型的工具使用智能体循环:
| 轮次 | 客户端发送的内容 | 提示路由器看到的内容 | 会话路由器必须记住的内容 |
|---|---|---|---|
| 1 | “重构这个模块并运行测试。” | 一个编码任务 | 会话已在物理模型上开始 |
| 2 | 模型发出工具调用 | 一个模型响应 | 下一个工具结果属于同一个模型 |
| 3 | 客户端发送工具结果 | 一个简洁的观察 | 请求工具的模型应接收该结果 |
| 4 | 用户说“修复失败的用例” | 一个简短的后续 | 该指令依赖于先前的代码、测试输出和路由状态 |
| 5 | 会话空闲并稍后恢复 | 一条新的短消息 | 路由器可以重新考虑旧模型是否仍然值得保留 |
仅凭最新消息并不包含足够的信息。提示路由器可能会判断工具结果看起来成本低廉,并将其发送给较小的模型。它可能会看到一个通用的“continue”并重新运行常规选择器。它可能会忽略由提供商管理的延续状态属于某一个物理后端。它可能会因为当前消息很短而丢弃前沿模型的热前缀缓存。
这些错误各自有不同的失败模式:
- 工具结果可能被发送给未发起工具调用的模型。
- 不可移植的延续 ID 可能被发送到错误的物理后端。
- 一个长时间的热会话可能失去前缀局部性,从而变得不必要地昂贵。
- 像
auto这样的逻辑模型可能变得难以调试,因为用户不再知道实际服务该轮次的是哪个物理模型。
关键点并不是智能体永远不应切换模型。它们应该切换。当任务变得更困难时,好的路由器仍应从廉价模型转向更强的模型,并在会话到达安全边界时切回。问题在于,路由器需要会话上下文才能知道哪些时刻是安全的。
SAAR 设计
SAAR 保留现有的 Semantic Router 决策流水线。信号仍从请求中提取,决策仍被匹配,模型选择算法仍在匹配到的决策内对候选模型进行排序。
SAAR 在该结果周围添加了一个会话控制层。

图 2:SAAR 在选择物理模型之前,结合了路由器记忆、硬锁、重置边界、切换经济学和可重放轨迹。
共有五个部分:
| 部分 | 它存储或决定什么 | 为什么重要 |
|---|---|---|
| 路由器记忆 | 上一个物理模型、匹配到的决策、阶段、切换次数、空闲时间、缓存证据和重放元数据 | 为路由器提供会话上下文,而不成为应用记忆 |
| 硬锁 | 在活动工具循环或不可移植的提供商管理状态期间阻止切换 | 在优化成本或质量之前先保持正确性 |
| 重置边界 | 在空闲超时或决策漂移后允许重新选择 | 防止会话感知路由退化为粘性会话 |
| 切换经济学 | 为交接成本、切换历史、剩余轮次先验和前缀缓存检出定价 | 使切换在不同模型层级和会话长度之间具有不对称性 |
| 重放轨迹 | 记录路由器为何保持、切换或拒绝切换 | 使像 auto 这样的逻辑模型可被检查 |
这是一种模型选择策略,而不是端点负载均衡器。Semantic Router 可以通过网关契约选择模型或集群。集群内的端点成员资格、健康检查和负载均衡仍属于基础设施职责。
最重要的规则:有时路由器绝不能切换
最安全的模型切换并不总是最新提示上得分最高的那个。对于智能体流量,某些轮次受连续性约束。

图 3:工具循环和提供商管理的延续状态是硬连续性约束;空闲和决策漂移边界允许安全重新选择。
SAAR 将两种情况视为硬锁:
- 工具循环连续性。 如果某个物理模型请求了工具调用,工具结果应返回到同一个物理模型。后续观察不是新的提示;它是本地执行循环的一部分。
- 提供商管理的状态。如果请求携带不可移植的延续状态,例如属于某个后端的响应标识符,SAAR 会保留先前的物理模型,而不是悄悄地将状态迁移到别处。
这些规则有意比成本规则更强。如果切换不安全,路由器不应通过更便宜的模型来“买通”出路。
SAAR 还定义了相反的边界:路由器何时可以再次切换。空闲超时和决策漂移会重新开启选择。如果代理暂停足够久,连续性的价值就会衰减。如果匹配的决策发生变化,因为用户从代码编辑转向了合成,或从检索转向了调试,那么旧的模型选择就不应永远保持不变。
这一区分正是会话感知代理路由的核心:
| 情况 | SAAR 行为 | 原因 |
|---|---|---|
| 工具调用正在等待工具结果 | 保留先前的物理模型 | 工具结果属于该模型的本地推理循环 |
| 请求携带不可移植的提供商状态 | 保留先前的物理模型 | 该状态在另一个后端上可能无效 |
| 会话空闲超过配置的边界 | 允许重新选择 | 连续性压力已衰减 |
| 匹配的路由决策发生变化 | 允许重新选择 | 任务形态已改变 |
| 会话很长且已在昂贵模型上预热 | 提高切换阈值 | 前缀局部性有价值 |
| 在小模型上进行廉价的短重试 | 降低切换阈值 | 切换成本很小 |
路由器记忆不是用户记忆
“路由器记忆”这个说法可能引起误解,因此边界很重要。
SAAR 记忆不是对话记忆、检索记忆或用户画像记忆。它不总结对话,也不试图为模型记住事实。它的职责更窄:保留足够的路由状态,使下一次模型选择决策安全且可解释。
对于每个会话,路由器跟踪以下事实:
- 逻辑模型背后最后选择的物理模型;
- 最后匹配的路由决策;
- 会话处于正常、工具循环、提供商状态、空闲重置还是漂移重置阶段;
- 最近发生了多少次切换;
- 最新的上下文长度和缓存证据;
- 一个重放 id,将响应链接回路由器的决策轨迹。
这一范围使系统在运维上有用,而不会把路由器变成第二层代理记忆。应用记忆应留在应用中。检索记忆应留在检索栈中。SAAR 记忆的存在只是为了使跨轮次的路由保持一致。
前缀缓存使模型切换具有不对称性
对于长代理会话,模型切换不仅仅是质量决策。它也是输入侧的系统决策。

图 4:同样的切换根据模型层级、会话长度和物理前缀复用情况而具有不同的成本。
在廉价模型上进行短重试与在前沿模型上进行 40 轮预热会话,不应被同等对待。后者已积累了有价值的前缀。从它切换出去可能要求下一个物理模型支付大得多的输入成本,即使可见的用户消息很短。
因此,SAAR 对缓存输入切换差额进行定价:即所考虑物理模型的正常提示输入价格与缓存输入价格之间的差距。会话越长、越昂贵,策略对丢弃前缀局部性就越严格。
这也澄清了路由逻辑模型的缓存 token 计费方式。如果用户调用 auto,路由器可能会随时间将该逻辑名称映射到不同的物理模型。某个后端报告的缓存命中是该后端的物理证据,它不会自动转移到另一个后端。SAAR 将后端报告的缓存 token 与路由器估算的复用分开处理,并且不会重写上游的用量字段。
这种分离在运维上很有用。运维人员仍然可以检查物理缓存行为,同时路由器使用自己的记忆来判断切换是否值得付出检出成本。
请求如何流经 SAAR
服务路径保持熟悉。客户端将请求发送到兼容 OpenAI 的网关,通常带有逻辑模型名称,例如 auto。为了启用会话感知路由,它们还会发送一个稳定的会话标识符,例如 x-session-id。
SAAR 随后按以下顺序处理每一轮:
- 读取当前请求、会话 id、工具调用上下文、提供方状态标记以及候选模型集。
- 运行常规的 Semantic Router 信号与决策流水线。
- 根据配置的方法(例如混合评分)生成基础模型选择结果。
- 从路由器记忆中加载先前的会话路由状态。
- 对工具循环和提供方管理的状态应用硬锁定。
- 检查空闲超时和决策漂移边界。
- 使用前缀缓存检出成本和切换历史调整切换分数。
- 选择物理模型并输出诊断信息。
- 更新路由器记忆并写入重放轨迹。
配置位于路由决策的模型选择算法内部:
routing:
decisions:
- name: agentic_routing
modelRefs:
- model: qwen3-8b
- model: qwen3-32b
algorithm:
type: session_aware
session_aware:
base_method: hybrid
idle_timeout_seconds: 300
tool_loop_hard_lock: true
context_portability_hard_lock: true
decision_drift_reset: true
prefix_cache_weight: 0.20
switch_history_weight: 0.04这些值是有意设计的策略旋钮,而非一刀切的常量。会话较短的客服助手可以使用更宽松的空闲边界。具有长工具循环和昂贵上下文的编码代理可以使用更严格的连续性和前缀缓存设置。
可观测性是功能的一部分
只有当运维人员能够解释 auto 背后的模型选择时,它才有用。

图 5:SAAR 将逻辑模型背后隐藏的物理路由选择转化为可检查的轨迹和响应头。
SAAR 输出诊断信息,例如所选模型、所选决策、重放 id、会话阶段、所选置信度以及上下文 token 数。重放 id 将已服务的响应与解释该决策的路由器轨迹关联起来。
有用的轨迹可以回答如下问题:
- 基础选择器本会选择哪个模型?
- 路由器是否因为工具循环锁定而保留了先前的模型?
- 提供方管理的状态是否使切换不安全?
- 会话是否跨越了空闲或漂移边界?
- 前缀缓存证据如何改变了调整后的候选分数?
- 最终决策是保持、切换还是锁定保持?
这使会话感知路由变得可运维。没有重放,逻辑模型背后的路由器将难以调试。有了重放,运维人员可以审计路由器为何保持连续性,或为何判定切换是安全的。
我们如何评估它
评估围绕一个问题设计:该策略是否让路由对代理更友好,同时又不隐藏正确性问题?
我们使用三层证据。
首先,确定性策略矩阵在许多合成会话上测试控制逻辑。这将路由策略与服务噪声隔离开来,并让我们能够对工具循环、提供方状态、空闲边界、漂移边界、模型层级和切换历史施加压力。
第二,实时 OpenAI 兼容服务通过 AMD ROCm 上的路由器和后端服务路径运行,检验相同的不变量。这检查了请求头、会话 ID、诊断信息和故障处理能否在真实请求流中存活。
第三,确定性智能体任务轨迹增加了任务结构。这些轨迹不仅统计切换次数,还包含模拟的工具观察结果和精确的最终答案评分。
目标不是让每张图都说“更少的切换”。粘性会话可以做到这一点。目标是表明 SAAR 消除了不安全的切换,保留了有用的移动,尊重昂贵的前缀局部性,并在实时服务中保持可观测性。
结果 1:SAAR 将控制单元从轮次转移到会话
确定性策略矩阵覆盖了均衡型、工具密集型、前沿密集型、空闲密集型、提供方状态密集型和漂移密集型会话。每个工作负载运行五个种子,每个种子 40 个会话,每个会话 18 个轮次,共计 21,600 个轮次。

图 6:21,600 个确定性轮次的主要策略结果。
主要结果是 SAAR 在保留移动能力的同时减少了模型频繁更换:
| 策略 | 切换次数 | 不安全切换 | 预估成本降低 | 质量变化 |
|---|---|---|---|---|
| 单轮 | 9,709 | 3,836 | 0.00% | +0.0000 |
| 粘性会话 | 340 | 0 | 98.65% | -0.1433 |
| 初始 SAAR | 1,810 | 200 | 70.92% | -0.0122 |
| 完整 SAAR | 2,011 | 0 | 78.71% | -0.0453 |
单轮路由频繁切换并产生不安全的移动。粘性会话几乎消除了移动,但它们也放弃了太多质量,因为它们在任务变化后拒绝重新选择。完整 SAAR 出于正确的原因处于中间位置:它消除了不安全的移动,同时仍然让空闲和漂移边界重新开启决策。
这就是从轮次级控制到会话级控制的转变。路由器不再将每条消息视为全新的独立事件。
结果 2:硬锁消除了正确性故障
第二个结果隔离了最重要的不变量:当切换不安全时,SAAR 不应切换。

图 7:硬锁在工具循环和不可移植的提供方状态期间消除了不安全切换。
工具循环切换违规从 3,404 降至 0。提供方状态切换违规从 432 降至 0。
这些不是微小的调优胜利。它们是正确性边界。工具结果不是普通提示。不可移植的延续 ID 不是普通文本字段。如果路由器忽略这些事实,它可能会破坏交互,同时在最新消息上仍然看似做出了合理的语义选择。
SAAR 通过在策略中明确连续性约束来修复这一点。
结果 3:SAAR 不是换了名字的粘性会话
显而易见的基线是粘性路由:为会话选择第一个模型并保持不变。
粘性路由很有吸引力,因为它易于推理。它还通过完全避免切换来解决许多不安全切换的情况。但这种简单性对智能体来说会变成产品问题。长会话会漂移。用户会改变任务。廉价的初始模型可能不再合适。强大的模型可能不再必要。

图 8:SAAR 不仅仅是粘性会话;它在连续性与移动之间取得平衡。
消融实验显示了为什么 SAAR 需要多种机制:
| 变体 | 切换减少 | 不安全切换 | 成本降低 | 解释 |
|---|---|---|---|---|
| 无工具锁 | 74.96% | 760 | 60.05% | 重新引入工具循环违规 |
| 无提供方状态锁 | 77.98% | 200 | 69.82% | 重新引入不可移植状态违规 |
| 无漂移重置 | 83.14% | 0 | 81.31% | 任务漂移后过度粘滞 |
| 无空闲边界 | 83.98% | 0 | 80.14% | 自然暂停后过度粘滞 |
| 无前沿成本 | 73.96% | 0 | 54.75% | 过于轻易地切换离开昂贵的热会话 |
| 完整 SAAR | 79.29% | 0 | 78.71% | 在保留安全重选的同时保持锁 |
锁提供正确性。重置边界提供活性。前缀缓存检出定价提供经济纪律。移除其中任何一个都会以在指标中可见的方式改变行为。
结果 4:不变量在实时 AMD ROCm 服务中成立
策略模拟很有用,但路由器必须通过真实请求流来工作。实时服务运行使用通过路由器的 OpenAI 兼容流量和 AMD ROCm 后端路径,并为路由运行和直接后端运行匹配调度。

图 9:实时 ROCm 运行在长会话和注入的后端故障下保持连续性。
在长会话运行中,路由器完成了 2,896 个实时请求,观察到 0 次连续性违规。
| 工作负载 | 请求数 | 成功率 | p95 开销 | 连续性违规 |
|---|---|---|---|---|
| balanced-32x64 | 2,048 | 100.00% | 6.181 ms | 0 |
| stateful-16x48 | 768 | 100.00% | 26.805 ms | 0 |
| idle-16x5-75s | 80 | 100.00% | 283.463 ms | 0 |
空闲工作负载包含真实的挂钟睡眠,因此其 p95 开销应与热路径路由开销分开解读。重要的结果是连续性:实时路径保留了在确定性矩阵中测试的硬锁和重置边界行为。
结果 5:会话在后端故障后恢复
长时程智能体需要会话级恢复,而不仅仅是每个请求的成功。后端可能对某个请求返回 HTTP 503,但会话应稍后继续,而不丢失保持交互连贯的路由不变量。
| 故障阶段 | 请求数 | 注入的 503 | 受影响的会话 | 恢复 | 连续性违规 |
|---|---|---|---|---|---|
| 提供方状态 | 360 | 48 | 8 | 100.00% | 0 |
| 工具循环 | 360 | 72 | 8 | 100.00% | 0 |
| 主题漂移 | 432 | 48 | 8 | 100.00% | 0 |
在一次性中断矩阵中,32/32 个受影响的会话稍后恢复。在重复故障矩阵中,24/24 个受影响的会话在 168 个注入的 HTTP 503 响应后恢复。
这很重要,因为智能体会话比普通聊天轮次更长。瞬态后端故障不应让路由器忘记工具循环处于活动状态、提供方状态不可移植,或会话具有可重放的历史。
结果 6:任务轨迹演练智能体循环
连续性计数器是必要的,但还不够。我们还运行确定性的多轮任务轨迹,带有模拟工具观察和精确最终答案评分。循环中没有评判模型:最终答案要么包含所需标签,要么不包含。
在 AMD 服务任务运行中,18/18 个精确评分的任务实例完成,重放头出现在 96/96 个路由轮次上,且未观察到连续性违规。
这仍然比广泛的真实编码智能体基准要小,但它比仅策略计数器是更强的信号,因为它演练了带有工具观察和最终答案检查的任务循环。
这对 vLLM 用户意味着什么
会话感知路由使 Semantic Router 对智能体服务栈更有用,在这些栈中,逻辑模型名称隐藏了模型组合。
对用户而言,体验可以保持简单:调用诸如 auto 的模型,发送稳定的会话 ID,让路由器选择物理模型。对运维人员而言,行为变得更可控:配置何时需要连续性、空闲会话何时可以重置、前缀局部性有多重要,以及路由决策如何被追踪。
这在以下情况下尤其有用:
- 候选模型具有不同的成本、延迟和能力特征;
- 智能体跨多轮使用工具;
- 客户端依赖提供方管理的延续状态;
- 长会话会构建有价值的前缀缓存局部性;
- 运维人员需要检查在逻辑路由背后,每一轮实际由哪个物理模型提供服务。
它还创建了清晰的基础设施边界。Semantic Router 负责策略层面的模型选择。Envoy、Kubernetes 和服务后端仍然负责端点成员、健康检查和负载均衡。这种分离让 SAAR 专注于它能安全决定的事情:会话级别的模型连续性、模型切换和可追溯性。
更大的方向
这一里程碑延续了从 Signal-Decision 路由开始的同一脉络。
Iris 让路由决策可组合。Athena 将 Semantic Router 推向面向混合模型和智能体部署的战略系统大脑。多模态加固将证据面从文本提示扩展到请求级信号。会话感知的智能体路由拓宽了时间视野:路由器现在不仅推理单个请求,还推理该请求在长时间交互中所处的位置。
这一方向对现代服务栈很重要。智能体系统越来越希望在众多物理选项之上提供一个逻辑模型接口。它们希望简单步骤使用更便宜的模型,困难步骤使用更强的模型,在工具循环中保持连续性,对长上下文进行缓存感知处理,并具备足够的可观测性以在生产中信任系统。
SAAR 是迈向该运营模型的一步。它不会让路由器变成智能体。它让路由器意识到为智能体提供良好服务所需的最少会话事实。
核心思想很简单:auto 背后的路由器应该知道何时允许模型切换、何时禁止切换,以及对于温暖的长运行会话,切换的代价是什么。
加入我们
寻求合作! SAAR 是让 Semantic Router 对长时程智能体有用的下一步,前方还有大量开放工作。
我们正在寻找愿意在以下方面提供帮助的贡献者:
- 面向真实智能体流量的会话感知路由策略;
- 多轮和工具循环评估套件;
- AMD ROCm 服务验证和性能实验;
- 路由器可观测性、重放追踪和生产调试工作流;
- 将路由策略与端点负载均衡分离的 Envoy、Kubernetes 和网关集成。
如果你正在构建智能体系统、在 AMD GPU 上运行模型组合,或研究连续性感知的模型选择,我们希望与你合作。
资源:
- GitHub:vllm-project/semantic-router
- 文档:vllm-semantic-router.com
- 社区:加入 vLLM Slack 上的 #semantic-router 频道
来源:vLLM Blog · vllm.ai