Item 26: Override Results to Inject Custom Responses¶
Result Override 允许 Middleware 拦截并替换 Agent 的最终响应。这用于实现缓存、 fallback 逻辑、响应改写。
覆盖心智模型¶
缓存覆盖¶
class CacheMiddleware(AgentMiddleware):
def __init__(self, cache_store):
self.cache = cache_store
async def process(self, context: AgentContext, call_next):
cache_key = self._compute_key(context)
# 命中缓存则直接返回
if cached := self.cache.get(cache_key):
return cached
# 未命中则调用 Agent
response = await call_next()
# 存入缓存
self.cache.set(cache_key, response)
return response
Fallback 覆盖¶
class FallbackMiddleware(AgentMiddleware):
async def process(self, context: AgentContext, call_next):
try:
return await call_next()
except Exception as e:
# 调用失败时返回 fallback 响应
return AgentResponse(
text="抱歉,服务暂时不可用,请稍后再试。",
error=str(e)
)
条件覆盖¶
class ConditionalOverride(AgentMiddleware):
async def process(self, context: AgentContext, call_next):
response = await call_next()
if self._should_override(response):
return self._custom_response(response)
return response
Things to Remember¶
- Override 在响应生成后拦截
- 可以完全替换返回值
- 常用于缓存、fallback、监控
- Override 后的响应仍可被后续中间件处理