Files
eaiadminandClaude Code c1af86c934 feat(asr): 本地语音转写接入为一级路由 + 并行工作流合并提交
按用户指示做**一包提交**,不按工作流拆分。本提交刻意混合了多条并行线:

  · 本地 ASR 接管:audio 成为与 chat/embed/image/video 同等的路由类别
    (IsLocalRoute 单一判据、audio 健康探测、default_audio_route、
    auto 占位、GET /api/ai/routes/audio、回退云端时界面明示「音频已出网」)
  · LLM 调用层:ctx 贯穿、ToolCall/ToolSchema、EmptyCompletionError /
    TransientUpstreamError(按错误类型而非文案判重试)
  · 编排 Agent:general_assistant orchestrate/persistence/spec_driver
  · 联网搜索:internal/search(playwright)
  · 网盘:backend + 前端
  · 前端 UI:导航/路由/工作台若干页
  · 交付文档:DELIVERY.md / AR04 / 部署文档的「无 Python」表述据实改写,
    新增 eai_agentplatform-asr.service、asr.env、clonezilla-cleanup 清 ~/asr-poc

不分拆的原因:dev 早期,粒度不该打断工作节奏。且实测过——这些改动
**在编译上是同一个单元**(llm.go 的 ctx 签名变更牵动 12 个调用点,
chat_message.go 的 ctx 改动又与编排重写同处一个 hunk),拆出来的中间态编不过。
详见 TOP_CODING_RULES.md G14.5 与 bugs_and_errors.md E09。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-26 22:21:39 +08:00

1 line
18 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"code":0,"data":{"message":{"role":"assistant","content":"# HTTP/2 vs HTTP/3 对比\n\n\u003e **核心判断**:HTTP/2 修补的是 **HTTP/1.1 的应用层低效**——把请求-响应抽象成\"流\",复用到一条 TCP 连接上;HTTP/3 修补的是 **TCP 协议本身的缺陷**——用基于 UDP 的 QUIC 替换 TCP,让\"流\"的独立性下沉到传输层。所以二者不是简单的版本迭代,而是**优化层次不同**:HTTP/2 在 TCP 之上做多路复用,HTTP/3 直接换掉了 TCP。\n\n---\n\n## 一、先对齐共同点(避免把差异归错地方)\n\n| 维度 | 说明 |\n|---|---|\n| 语义层 | 方法、状态码、首部字段、缓存语义与 HTTP/1.1 基本一致 |\n| 分帧方式 | 均为二进制帧 + 流,非文本协议 |\n| 多路复用 | 均支持一条连接上并发多个流 |\n| 头部压缩 | 均有专门机制(HPACK / QPACK) |\n| 协商 | 均通过 ALPN 协商(`h2` / `h3`);HTTP/3 额外依赖 `Alt-Svc`(RFC 7838)或 HTTPS DNS 记录(RFC 9460 SVCB/HTTPS)发现 |\n\n**含义**:迁移到 HTTP/3 不改业务逻辑,改动集中在传输层与基础设施。\n\n---\n\n## 二、各自解决了什么问题\n\n### 2.1 HTTP/2 解决的 HTTP/1.1 痛点\n\n- **连接数瓶颈** → 单连接多路复用,一条 TCP 承载任意数量并发流。\n- **应用层队头阻塞** → 帧可交错发送,流之间在应用层互不阻塞。\n- **头部冗余** → **HPACK**(RFC 7541):静态表 + 动态表 + 哈夫曼编码,重复首部只传索引。\n- **Server Push**:曾用于主动推送资源,但**实践中失败、已被主流浏览器移除**,不应作为选型理由。\n\n### 2.2 HTTP/2 的遗留问题(正是 HTTP/3 的出发点)\n\n- **TCP 层队头阻塞**:HTTP/2 的\"流\"只是应用层概念,底层仍是**单一字节流**。任一段丢失,内核必须等重传完成才能交付后续数据,**所有流一起被卡住**。丢包率越高,多路复用收益越被抵消。\n- **握手成本高**:TCP 三次握手与 TLS 握手串行,无法合并。\n- **连接与网络绑定**:TCP 连接由四元组标识,Wi-Fi 切蜂窝即断,需重做完整握手。\n- **协议僵化**:TCP 由内核实现、中间盒广泛干预,传输层难以演进。\n\n### 2.3 HTTP/3 的解决方式\n\nHTTP/3(**RFC 9114**)= HTTP over QUIC;QUIC(**RFC 9000**)是用户态实现、内建 TLS 1.3(**RFC 9001**)的可靠传输协议:\n\n- **消除传输层队头阻塞**:QUIC 的流是传输层原生概念,每条流独立流控与重传,丢包只影响该流。\n- **握手合并**:传输握手与 TLS 1.3 握手合并,新建连接 1 RTT,会话恢复可达 0-RTT。\n- **连接迁移**:由 Connection ID 而非 IP/端口标识连接,网络切换时连接存活,仅需路径验证。\n- **QPACK**(RFC 9204):动态表更新走独立单向流,容忍乱序,避免 HPACK 式按序解码阻塞。\n- **默认加密 + 可演进**:除必要字段外全部加密;丢失检测与拥塞控制(RFC 9002)也在用户态,便于快速迭代。\n\n---\n\n## 三、连接建立:RTT 差异\n\n以\"首次能发出第一个请求\"计:\n\n| 场景 | HTTP/2(TCP + TLS) | HTTP/3(QUIC) |\n|---|---|---|\n| 全新连接 | TLS 1.3:**2 RTT**(TCP 1 + TLS 1);TLS 1.2:**3 RTT** | **1 RTT**(传输与加密握手合并) |\n| 会话恢复 | 约 **1 RTT**(TLS 1.3 PSK + 早期数据;TCP 握手无法免除) | **0-RTT** |\n| 网络切换(Wi-Fi ↔ 蜂窝) | 连接断开,**重走完整握手** | **连接迁移**,无需重新握手,仅路径验证 |\n\n\u003e ⚠️ **0-RTT 数据可被重放**,服务端通常只接受幂等或明确安全的请求,不能当作无条件性能红利。\n\u003e 高延迟链路(如跨洲 200ms+)少 1 个 RTT 收益直观;低延迟内网基本感知不到。\n\n---\n\n## 四、传输效率:关键差异\n\n| 维度 | HTTP/2 | HTTP/3 |\n|---|---|---|\n| 承载协议 | TCP | QUIC over UDP(通常 UDP 443) |\n| 丢包影响 | 单包丢失阻塞**整条连接所有流** | 仅阻塞**该流** |\n| 头部压缩 | HPACK,动态表须按序处理 | QPACK,容忍乱序 |\n| 拥塞控制 | 内核 TCP 实现 | 用户态实现(RFC 9002),可调优 |\n| 加密 | 可选(实践普遍启用 TLS 1.2/1.3) | 强制,仅 TLS 1.3 |\n| CPU 开销 | 较低,内核与网卡卸载成熟 | 通常更高,用户态 + per-packet 加密 |\n| 中间盒友好度 | 高,TCP 443 通畅 | 较低,部分企业防火墙/代理屏蔽限速 UDP |\n\n**经验规律**(随网络条件变化,勿套固定百分比):\n- 网络好、丢包低时,HTTP/3 吞吐提升有限,甚至可能因 CPU 开销略降。\n- 丢包、高 RTT、移动场景下,HTTP/3 优势明显放大——此时 TCP 队头阻塞代价最高。\n- **高丢包链路上,HTTP/2 可能比 HTTP/1.1 的多连接模式更差**,这正是\"所有鸡蛋放一个 TCP 篮子\"的后果。\n\n---\n\n## 五、适用场景与选型建议\n\n### 优先 HTTP/2\n- **内部服务间通信(东西向流量)**:数据中心低延迟低丢包,HTTP/3 握手与抗丢包优势无从体现;gRPC 等基于 HTTP/2 的生态成熟。\n- **UDP 受限环境**:企业内网、部分运营商、老旧代理屏蔽/限速 UDP 443,HTTP/3 会回退,不如以 HTTP/2 为主。\n- **服务端 CPU 敏感**:高并发网关、边缘节点,QUIC 用户态成本可能成瓶颈。\n- **需要最大兼容性 / 运维简单**:调试、抓包、负载均衡对 HTTP/2 支持度更高。\n\n### 优先 HTTP/3\n- **面向移动端与弱网用户**:蜂窝、Wi-Fi 抖动大、丢包高的环境,多流并发收益最显著。\n- **高 RTT 跨国/跨洲访问**:少 1 RTT 在 200ms+ 延迟下价值明显。\n- **频繁网络切换的场景**:移动设备在 Wi-Fi/蜂窝间切换,连接迁移避免重握手。\n- **可承担基础设施升级**:需要 CDN/网关/客户端全链路支持 QUIC,并接受 UDP 可达性风险。\n\n### 现实建议\n多数生产环境采取 **HTTP/2 与 HTTP/3 并存、按 ALPN/Alt-Svc 自动协商**的渐进策略:HTTP/2 保底兼容,HTTP/3 对支持且网络受益的客户端优先。不要为了\"版本更新\"而全量切换,应基于**实测丢包率、RTT 分布、CPU 余量、UDP 可达性**四类指标决策。\n\n---\n\n## 六、来源与说明\n\n**规范类(稳定、可直接引用)**\n- HTTP/2:RFC 7540(2015),后被 **RFC 9113**(2022)取代\n- HPACK:RFC 7541 | QPACK:**RFC 9204**\n- HTTP/3:**RFC 9114**(2022)\n- QUIC:**RFC 9000** | TLS over QUIC:**RFC 9001** | 丢失检测与拥塞控制:**RFC 9002**\n- Alt-Svc:RFC 7838 | HTTPS/SVCB DNS 记录:RFC 9460\n\n**关于实时部署数据的说明**:子任务中虽发起了联网检索,但**未返回可引用的实测结果**。因此本文的 RTT、丢包影响、CPU 开销等均为**基于 RFC 协议的定性结论**,未使用具体部署占比或性能百分比数字。若需精确的 HTTP/3 采用率、CDN 实测吞吐对比,建议以 Cloudflare、Google、Akamai 等 CDN 的官方技术博客或 W3Techs 统计为独立来源单独核实,避免跨来源口径混用。\n\n**评审遗留项**:原综合稿在\"优先选择 HTTP/3 的场景\"处被截断,本文已补全第五节场景清单与选型建议。\n\n\u003cdetails\u003e\u003csummary\u003e📋 本次由通用编排拆分执行\u003c/summary\u003e\n\n##### 梳理 HTTP/2 的核心机制与解决的问题\n\nI'll start by gathering authoritative primary sources (RFCs, standards bodies) and current deployment data.\n\n\u003c||DSML|| calls\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/2 RFC 7540 core mechanisms multiplexing HPACK stream prioritization\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/3 RFC 9114 QUIC RFC 9000 connection establishment 0-RTT TLS 1.3\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c/||DSML|| calls\u003e\n\n##### 梳理 HTTP/3 的核心机制与解决的问题\n\nI'll research this topic with authoritative sources before answering.\n\n\u003c||DSML|| calls\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/3 RFC 9114 QUIC RFC 9000 differences from HTTP/2\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/2 head-of-line blocking TCP vs HTTP/3 QUIC stream independence\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c/||DSML|| calls\u003e\n\n##### 对比 HTTP/2 与 HTTP/3 的连接建立过程与 RTT 差异\n\nI'll research this with authoritative sources (RFCs, measurement studies, and deployment data) before writing the comparison.\n\n\u003c||DSML|| calls\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eRFC 9113 HTTP/2 RFC 9114 HTTP/3 specification differences\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/3 QUIC connection establishment 1-RTT 0-RTT handshake TLS 1.3 vs HTTP/2 TCP TLS\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c/||DSML|| calls\u003e\n\n##### 对比 HTTP/2 与 HTTP/3 的传输效率、队头阻塞与头部压缩\n\n我先联网核实几个关键事实(RFC 编号、规范状态、实测数据),再给出对比。\n\n\u003c||DSML|| calls\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eRFC 9113 HTTP/2 RFC 9114 HTTP/3 specification\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/3 QUIC connection establishment 0-RTT 1-RTT vs TCP TLS handshake latency\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c/||DSML|| calls\u003e\n\n##### 综合整理适用场景与选型建议\n\n## 一句话结论\n\nHTTP/2 是对 **HTTP/1.1 应用层低效**的修补,它把请求-响应抽象成\"流\"并复用一条 TCP 连接;HTTP/3 则是对 **TCP 本身缺陷**的修补,它把传输层换成基于 UDP 的 QUIC,让\"流\"的独立性下沉到传输层。因此两者的差别不只是版本号,而是**优化层次不同**:HTTP/2 在 TCP 之上做多路复用,HTTP/3 直接换掉了 TCP。\n\n---\n\n## 一、先对齐基线:两者的共同点\n\n对比之前先明确它们**没有变**的部分,避免把差异归错地方:\n\n| 维度 | 说明 |\n|---|---|\n| 语义层 | 请求方法、状态码、首部字段、缓存语义与 HTTP/1.1 基本一致 |\n| 二进制分帧 | 都由帧(frame)与流(stream)组成,均非文本协议 |\n| 多路复用 | 都支持在一条连接上并发多个流 |\n| 头部压缩 | 都有专门的头部压缩机制(HPACK / QPACK) |\n| 加密现状 | 公网部署中基本都跑在 TLS 之上(HTTP/3 强制加密) |\n| 协商方式 | 都通过 ALPN 协商(`h2` / `h3`),HTTP/3 额外依赖 `Alt-Svc` 或 HTTPS DNS 记录发现 |\n\n**结论**:选择 HTTP/3 不需要改动应用代码的业务逻辑,改动集中在传输层与基础设施。\n\n---\n\n## 二、各自解决了什么问题\n\n### 2.1 HTTP/2 解决的问题\n\n针对 HTTP/1.1 的四个痛点:\n\n- **连接数瓶颈**:浏览器对同域并发连接限制(通常 6 条),导致大量请求排队。\n → HTTP/2 用**单连接多路复用**:一条 TCP 连接承载任意数量的并发流。\n- **应用层队头阻塞**:HTTP/1.1 的 pipelining 因响应必须按序返回而实际不可用。\n → HTTP/2 的帧可以交错发送,流之间在应用层互不阻塞。\n- **头部冗余**:每个请求重复携带 Cookie、User-Agent 等大字段。\n → **HPACK**(RFC 7541)用静态表 + 动态表 + 哈夫曼编码压缩,重复首部只传索引。\n- **服务器主动推送资源**:曾由 Server Push 承担。\n → **注意**:Server Push 在实践中失败并被主流浏览器移除,不建议作为选型理由。\n\n### 2.2 HTTP/2 遗留的问题(正是 HTTP/3 的出发点)\n\n- **TCP 层队头阻塞**:HTTP/2 的\"流\"只是应用层概念,底层仍是**单一字节流**。任何一个 TCP 段丢失,内核必须等它重传完成后才能把后续数据交给应用层——**所有流一起被卡住**。丢包率越高,多路复用的收益越被抵消。\n- **握手成本高**:TCP 三次握手与 TLS 握手是串行的,无法合并。\n- **连接与网络绑定**:TCP 连接由四元组标识,Wi-Fi 切到蜂窝网络即断开,必须重做完整握手。\n- **协议僵化**:TCP 由内核实现、中间盒广泛干预,传输层难以演进。\n\n### 2.3 HTTP/3 解决的问题\n\nHTTP/3(RFC 9114)是\"HTTP over QUIC\",而 QUIC(RFC 9000)本身是一个在用户态实现的、内建 TLS 1.3 的可靠传输协议:\n\n- **消除传输层队头阻塞**:QUIC 的流是**传输层的原生概念**,每条流有独立的流控与重传。丢包只阻塞受影响的那条流,其他流照常交付。\n- **握手次数下降**:QUIC 把传输握手与 TLS 1.3 握手(RFC 9001)**合并**,新建连接 1 RTT,会话恢复可做到 0-RTT。\n- **连接迁移**:连接由 Connection ID 而非 IP/端口标识,网络切换时连接可存活,代价是路径验证而非完整重握手。\n- **头部压缩适配乱序**:QPACK(RFC 9204)用独立的单向流传输动态表更新,避免像 HPACK 那样要求严格按序解码而阻塞其他流。\n- **默认加密 + 可演进**:除少数必要字段外全部加密,用户态实现使协议可以快速迭代(RFC 9002 定义的丢失检测与拥塞控制也在用户态)。\n\n---\n\n## 三、连接建立:RTT 差异\n\n以\"首次建立连接到能发出第一个请求\"计:\n\n| 场景 | HTTP/2(TCP + TLS) | HTTP/3(QUIC) |\n|---|---|---|\n| 全新连接 | TLS 1.3:**2 RTT**(TCP 1 + TLS 1)\u003cbr\u003eTLS 1.2:**3 RTT**(TCP 1 + TLS 2) | **1 RTT**(传输与加密握手合并) |\n| 会话恢复 | TLS 1.3 PSK + 早期数据:约 **1 RTT**(TCP 握手无法免除) | **0-RTT**(重放风险需服务端策略约束) |\n| 网络切换(Wi-Fi ↔ 蜂窝) | 连接断开,需**重新走完整握手** | **连接迁移**,无需重新握手,仅做路径验证 |\n\n补充说明:\n\n- 0-RTT 数据**可被重放**,因此服务端通常只接受幂等或明确安全的请求,不应把它当作无条件的性能红利。\n- 在高延迟链路上,减少 1 个 RTT 的收益很直观;在低延迟内网中,这一优势基本感知不到。\n\n---\n\n## 四、传输效率:关键差异\n\n| 维度 | HTTP/2 | HTTP/3 |\n|---|---|---|\n| 承载协议 | TCP | QUIC over UDP(通常 UDP 443) |\n| 丢包影响 | 单包丢失阻塞**整条连接上的所有流** | 仅阻塞**该流** |\n| 头部压缩 | HPACK,动态表更新要求按序处理 | QPACK,动态表更新走独立单向流,容忍乱序 |\n| 拥塞控制 | 内核 TCP 实现 | 用户态实现(RFC 9002),可按应用调优 |\n| 加密 | 可选(实践中普遍启用 TLS 1.2/1.3) | 强制,仅 TLS 1.3 |\n| CPU 开销 | 较低,内核与网卡卸载成熟 | 通常更高,用户态处理与 per-packet 加密 |\n| 中间盒友好度 | 高,TCP 443 通畅 | 较低,部分企业防火墙/代理屏蔽或限速 UDP |\n\n**效率判断的经验规律**(随网络条件变化,不宜套用固定百分比):\n\n- 网络质量好、丢包率低时,HTTP/3 相对 HTTP/2 的吞吐提升有限,甚至可能因 CPU 开销略降。\n- 网络丢包、高 RTT、移动场景下,HTTP/3 的优势明显放大——因为此时 TCP 队头阻塞的代价最高。\n- HTTP/2 在**高丢包链路**上会退化得比 HTTP/1.1 的多连接模式更差,这是\"所有鸡蛋放在一个 TCP 篮子\"的直接后果。\n\n---\n\n## 五、适用场景与选型建议\n\n### 5.1 优先选择 HTTP/2 的场景\n\n- **内部服务间通信(东西向流量)**:数据中心网络低延迟、低丢包,HTTP/3 的握手与抗丢包优势无法体现;gRPC 等基于 HTTP/2 的生态已成熟。\n- **UDP 受限环境**:企业内网、部分运营商网络、老旧代理设备屏蔽或限速 UDP 443。此时 HTTP/3 会回退到 HTTP/2,不如直接以 HTTP/2 为主。\n- **服务端 CPU 敏感**:高并发网关、边缘计算节点上,QUIC 的用户态加密与处理成本可能成为瓶颈。\n- **需要最大兼容性**:面向未知客户端群体、中间件链路复杂的场景。\n- **运维复杂度优先**:HTTP/2 的调试、抓包、负载均衡支持度更高。\n\n### 5.2 优先选择 HTTP/3 的场景\n\n- **面向移动端与弱网用户**:蜂窝网络、Wi-Fi 抖动大、丢包率高的环境,多流并发时收益最显著。\n- **高 RTT 跨国/跨洲访问**:少一个 RTT 的握手成本在 200ms+ 延迟下价值明显\n\n##### 审核技术准确性、逻辑一致性与用户要求覆盖度\n\n# 评审意见:HTTP/2 vs HTTP/3 对比材料\n\n## 总体结论\n\n**判断:技术准确性高,可沿用;但作为交付物「未完成」,且有三处表述需要收紧。**\n\n- 材料对核心机制的定性(分层优化、队头阻塞的层次、握手合并、连接迁移)**准确且有洞察**,RFC 引用逐条核对无误,是一份质量在平均线以上的对比稿。\n- **最严重的问题不是内容错,而是产物被截断**:正文停在 5.2「高 RTT 跨国/跨洲访问」一句中间,用户明确要求的\"适合什么场景\"只答了一半。\n- 若干表述过于绝对,会在被追问时露怯,需要加限定词。\n\n---\n\n## 一、技术准确性审核\n\n### 1.1 抽查确认无误的关键事实(可直接采信)\n\n| 断言 | 判定 | 依据 |\n|---|---|---|\n| HPACK = RFC 7541、QPACK = RFC 9204 | 【事实】✓ | RFC 编号正确 |\n| HTTP/3 = RFC 9114、QUIC = RFC 9000、TLS over QUIC = RFC 9001、丢失检测/拥塞控制 = RFC 9002 | 【事实】✓ | 全部正确 |\n| TLS 1.3 全新连接 = TCP\n\n\u003c/details\u003e","timestamp":"2026-09-25 22:02:48","type":"text"},"is_plan":false,"is_expert":false,"stream":false},"error":null,"message":"success"}