CloudWeGo 作为字节跳动开源的高性能微服务框架体系,核心组件 Kitex 与 Hertz 以其原生的流式处理能力,已成为大模型应用开发的核心技术支撑。两者通过 SSE、gRPC 及自研 TTHeader Streaming 等多协议适配,完美契合大模型 "一问多答" 的交互需求,广泛应用于 Chat、语音交互等各类大模型场景。
本文基于 Kitex / Hertz 项目 Maintainer 王宇轩在 CloudWeGo 四周年技术沙龙演讲内容整理,系统阐述过去一年里 CloudWeGo 开源的微服务框架 Kitex 和 Hertz,如何提升流式开发效率与易用性,为大模型应用保驾护航。
图为 Kitex / Hertz 项目 Maintainer 王宇轩
一、大模型应用框架概览:流式能力与经典链路
随着大模型应用的快速发展,微服务架构已成为其核心支撑模式,而 CloudWeGo 开源的 Kitex 与 Hertz 两大微服务框架,通过原生流式能力为大模型应用提供了关键技术支撑。
Kitex 与 Hertz 紧跟技术趋势,针对大模型交互场景提供了流式处理能力,以帮助用户高效构建应用:Hertz 支持 SSE 协议,负责与端上直接交互;Kitex Streaming 则支持广为人知的 gRPC 协议及自研流式协议 TTHeader Streaming,专注处理服务间的流式通信,两者均能完美适配大模型"一问多答"交互模式。

在微服务架构中,基于 Kitex 与 Hertz 的大模型应用链路具备清晰的逻辑架构,以经典 Chat 场景为例,API 服务、Chat 服务与 LLM 通过流式接口实现串联,最终达成一问多答的交互效果:
- API 服务通过 SSE 接口与端上交互,借助 Kitex 流式 Client 访问 Chat 服务;
- LLM 根据部署环境差异,灵活暴露 SSE 接口或 RPC 流式接口,Chat 服务对应使用 SSE Client 或 Kitex 流式 Client 对接。
该架构设计满足了大模型应用的交互需求,逻辑清晰流畅。但在实际开发落地过程中,流式能力所带来的工程实践问题接踵而至。
二、流式工程实践增强:保障应用稳定落地
为应对大模型应用在流式开发中遇到的实际挑战,服务框架团队围绕会话中断、流式异常与流式监控这三个核心场景,对 Kitex 和 Hertz 的流式工程实践进行了强化,全方位保障应用的稳定运行。
1.会话中断控制:强化 Stream 生命周期管理
实际场景中可能会因为用户中途修改 Prompt 终止会话、响应超时导致用户放弃、网络不稳定引发连接断开等因素导致会话中断。及时感知并终止无效会话,能有效节省 LLM 资源。对此,Kitex 与 Hertz 的流式接口通过实现统一的 golang context cancel 语义,达成 Stream 生命周期的精准控制:
- Kitex gRPC 支持跨服务与同服务场景的 Stream 生命周期管理:跨服务场景下,上游服务主动调用 cancel 后,会通过 HTTP/2 Rst Frame 终止下游 Stream;同服务场景下,下游 Stream 的生命周期完全受上游 Stream 控制,上游 cancel 会触发下游级联终止。
- Hertz 原生支持 SSE 协议,对齐 Kitex gRPC 的 context cancel 能力:让流式链路从端上到服务、服务到大模型的生命周期控制形成闭环。

2.流式异常优化:提升问题定位效率
流式交互中,gRPC-Go 经典报错 "rpc error: code = 1, context is canceled" 存在明显局限性 ------ 仅能描述结果,无法明确具体错误原因,易导致问题误判(如误归因为 LLM 服务故障)。该报错可能对应用户主动终止会话,级联 cancel 等多种场景,排查难度较大。为解决这一问题,服务框架团队优化了 Kitex gRPC 的错误描述机制,明确报错诱因,帮助开发者快速定位异常根源,大幅降低问题排查成本。
- 错误细分为流级别错误和连接级别错误
- 丰富错误描述,精确对应具体错误场景
- 新增 "triggered by" 字段,明确触发错误的服务

3.流式监控升级:完善消息观测能力
传统 Ping-Pong 模型的监控指标(QPS、Latency)虽可统一适配为 "Stream 创建至生命周期结束" 的指标,但难以满足流式场景的精细化观测需求。对此,服务框架团队对监控能力进行双重升级:
- 新增 Recv/Send QPS 指标:通过 StreamEventReport 接口扩展,每次调用 Recv 或 Send 方法时自动触发打点,精准捕捉流式消息交互频率。
- 增强流式Trace 能力:新增 StreamSendHeader/StreamRecvHeader、StreamSendRst/StreamRecvRst、StreamSendTrailer/StreamRecvTrailer 等关键状态事件,清晰刻画 Stream 状态流转,为建流失败、非预期报错等疑难问题提供排查依据。

通过会话中断控制、流式异常优化、流式监控升级三大实践增强,Kitex 与 Hertz 有效解决了大模型应用的核心落地阻碍。但随着用户规模与实践案例的增加,服务框架团队发现现有流式接口仍存在学习使用成本高、复杂级联 cancel 链路排查难等问题。因此,进一步优化流式接口、推出自研流式协议并增强流式生态,推动流式能力的易用性与用户体验迈上新台阶。
三、流式能力与生态升级:从可用到好用
为解决现有流式接口的使用痛点,推动流式能力从 "可用" 向 "好用" 跨越,服务框架团队从接口设计优化、自研协议研发、生态工具补充三个维度,对 Kitex 与 Hertz 的流式能力及生态进行全面升级。
1. 现有流式接口的核心痛点
当前流式接口在设计与使用中存在两类关键问题,导致用户学习和使用成本偏高:
- gRPC-Go 接口设计的局限性:Server 侧流式 Handler 未直接暴露 context 参数,需通过 Stream.Context () 获取;Stream 的 Recv、Send 方法也未暴露 context 参数,无法细粒度控制超时等逻辑。虽然 gRPC-Go 官方认可统一 context 设计,但未计划推出 v2 接口优化,Kitex gRPC 因遵循该设计也存在相同问题。
- Kitex 自身能力透出的适配问题:Kitex 最初基于 Ping-Pong 模型设计,未充分考虑流式接口需求。一方面 Options 配置作用域模糊,部分配置仅对 Unary 接口生效,需用户在实践中探索确认;另一方面,中间件只适配 Unary 接口语义(接收请求→处理→返回响应),流式场景中 resp 始终为 nil,语义差异增加理解成本,导致流式接口未能得到完全支持。

2. StreamX 接口优化:降低使用门槛
针对上述痛点,服务框架团队推出 StreamX 流式接口,通过设计革新与能力升级提升易用性:
- 统一 context 设计:Server 侧 Unary 接口与流式接口一致暴露 context 参数,Stream 对象的 Recv、Send 方法也新增 context 参数,支持细粒度控制(如超时设置),符合用户使用直觉。
- 流式接口 "适应性" 升级:拆分 Options 配置为 WithUnary(仅 Unary 接口生效)与 WithStream(仅流式接口生效)两类,保持原有配置兼容性;同时提供 Stream、Recv、Send 三种专属中间件,参数与作用域直观清晰,适配流式场景语义。

3.自研协议 TT Header Streaming改变 gRPC 痛点
gRPC 难以排查复杂级联 cancel 链路,也无法有效支持 context.WithCancelCause,本质在于 gRPC 基于 HTTP/2 Rst Stream Frame 实现 context cancel 功能,只支持传递 ErrCode,无法携带其它元信息。
服务框架团队为了改善 gRPC 痛点,推出自研协议 TTHeader Streaming,允许 Rst Frame 携带 Header 与 Payload。
- Rst Frame 携带链路追踪信息,高效应对级联 cancel:类似 HTTP via,TTHeader Streaming 在 Rst Frame 头部会携带 ttscp(ttheader streaming cancel path),跟踪完整的 cancel 链路,从而精确定位发起 cancel 的第一跳服务。
- 支持 context.WithCancelCause,传递自定义 cancel 异常:TTHeader Streaming 支持在 Rst Frame 中携带 payload,从而承载由 context.WithCancelCause 注入的自定义 cancel 异常,用户可以实现更为丰富的 cancel 语义。
4. 完备的生态支持:流式泛化能力增强
在原有流式调用能力的基础上,Kitex 进一步完善了泛化生态支持,使流式交互在本地调试、压测及多协议网关等场景下也能无缝使用。
- 支持流式泛化 Client,一个泛化 Client 搞定流式/非流式场景
- 支持流式泛化 Server,高效处理 二进制/JSON/Map 数据
- Kitexcall 支持流式调用,方便本地调试流式接口
四、总结与展望


本次分享围绕三大板块展开:一是大模型应用框架的流式能力与经典链路,明确 Kitex 与 Hertz 的核心支撑作用;二是流式工程实践增强,通过会话中断控制、异常定位优化、监控能力升级,保障大模型应用稳定落地;三是流式能力与生态升级,以 StreamX 新接口、自研 TTHeader Streaming 协议、完善流式生态,实现流式能力从 "可用" 到 "好用" 的跨越。展望未来,服务框架团队将开源流式最佳工程实践并发布配套使用指南,推出 Metrics/Trace 的 open-telemetry 版本,持续迭代 TTHeader Streaming 协议、优化 WebSocket 支持,进一步完善流式生态,为更多大模型应用提供高效、可靠的技术支撑。
活动回顾资料
-
演讲PPT下载 :github.com/cloudwego/c...