Skip to content

Request Lifecycle

22024735 edited this page Jul 11, 2026 · 1 revision

请求生命周期

flowchart TD
    Request[收到 HTTP 请求] --> Limit{请求体超过上限}
    Limit -->|是| TooLarge[HTTP 413]
    Limit -->|否| AIRoute{是否为 AI 路由}
    AIRoute -->|否| Pass[普通透明转发]
    AIRoute -->|是| Parse[解析结构化 JSON]

    Parse --> HasImage{包含图片}
    HasImage -->|是| Vision[Vision 摘要并按配置移除原图]
    HasImage -->|否| Detect
    Vision --> Detect{包含 Agent 工具协议}

    Detect -->|是| Agent[启用协议保护]
    Detect -->|否| Stateless[普通无状态请求]
    Agent --> Estimate[估算完整请求 Token]
    Stateless --> Estimate

    Estimate --> OldResult{Agent 且超过工具清理阈值}
    OldResult -->|是| Clear[清理旧 tool result 保留最近 N 条]
    OldResult -->|否| Output
    Clear --> Output[计算输出预算]

    Output --> Reduce{输出预算过大}
    Reduce -->|是| Lower[降低 max tokens]
    Reduce -->|否| Budget
    Lower --> Budget{预算决策}

    Budget -->|safe| Send[发送上游]
    Budget -->|compact + Agent| Native[等待 Claude 原生 compact]
    Budget -->|compact + stateless| Compact[代理 compact 或提醒]
    Budget -->|chunk + stateless| Chunk[拆分执行并综合]
    Budget -->|chunk + Agent| Native
    Native --> Send
    Compact --> Send
    Chunk --> Send

    Send --> Result{上游结果}
    Result -->|成功| Rewrite[usage 采集和响应处理]
    Result -->|普通错误| Replay[保留错误体返回]
    Result -->|上下文 400| Rescue[执行一次上下文救援]
    Rescue --> Retry[最多重试一次]
    Retry --> RetryResult{重试结果}
    RetryResult -->|成功| Rewrite
    RetryResult -->|失败| Replay

    Rewrite --> Record[保存保护记录]
    Replay --> Record
    Record --> Response[返回 Claude 客户端]
Loading

路由规则

  • POST 且 JSON,并命中 upstream.aiRoutes:进入 Orchestrator。
  • Hook 路由:仅接受 loopback 请求和正确的随机 Hook token。
  • Dashboard、status、logs、health、shutdown:由本地 Server 处理。
  • 其他路由:保留查询参数并透明转发给上游。

重试原则

上下文错误最多重试一次。代理不会对任意 5xx 或已经开始输出的流盲目重试,因为生成请求不是天然幂等操作。第一次失败和重试结果都会写入诊断日志。

Clone this wiki locally