提升流式开发效率与易用性:Kitex/Hertz 为大模型应用保驾护航

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 支持,进一步完善流式生态,为更多大模型应用提供高效、可靠的技术支撑。

活动回顾资料

相关推荐
NocoBase2 小时前
7 款最佳自托管 AI 工具,快速构建业务应用
低代码·开源·资讯
CloudWeGo2 小时前
用 Eino ADK 构建你的第一个 AI 智能体:从 Excel Agent 实战开始
人工智能·开源·github
m0_650108243 小时前
MiniGPT-4:解锁 LLM 驱动的高级视觉语言能力
论文阅读·开源·视觉语言大模型·minigpt-4·跨模态对齐·强llm+视觉对齐
GitCode官方4 小时前
创意无限·开源共赢|2025「卡赢杯」开源游戏开发大赛正式启动!
游戏·开源
weixin_377634844 小时前
【开源-AgentRL】创新强化学习 多项任务超闭源模型
开源·强化学习
百***46804 小时前
IoT DC3 是一个基于 Spring Cloud 的开源的、分布式的物联网(IoT)平台本地部署步骤
物联网·spring cloud·开源
万岳科技程序员小金4 小时前
音视频课程上传、加密与播放技术详解:知识付费系统源码开发实践
开源·知识付费小程序·知识付费系统源码·知识付费app开发·开源源码
炸裂狸花猫7 小时前
开源CI&CD工具-Drone
ci/cd·云原生·容器·kubernetes·开源·drone
程思扬7 小时前
开源 + 实时 + 无网络限制:Excalidraw 是流程图协作新选择
网络·人工智能·阿里云·ai·开源·流程图