在任何一个复杂的、基于聊天的AI应用中,总有一个核心在默默地承担着最重要的职责:它接收用户的奇思妙想,与强大的语言模型进行沟通,解析模型返回的指令,并协调各种工具(Tools)来完成任务。在 Google 的 Gemini CLI 中,这个核心的“指挥家”就是 useGeminiStream
这个自定义 React Hook。
初看之下,它可能只是一个处理API请求的普通Hook。但深入其源码,你会发现一个设计精巧、职责清晰的微型应用架构。它如同一位交响乐指挥,优雅地调度着用户输入、模型响应、工具执行和UI更新,将一个看似简单的“一问一答”变成了一场流畅的“人机协作”交响乐。
今天,就让我们一起走进这位指挥家的内心世界,剖析 useGeminiStream.ts
的架构之美。
🎵 第一乐章:序曲 —— useGeminiStream
的核心使命
useGeminiStream
的使命,一言以蔽之,就是管理一次完整的“对话回合”(Turn)。一个“回合”从用户提交查询开始,到Gemini模型最终给出回答或等待用户下一步指令结束。这期间可能包含多次与模型的往返(例如,当模型需要使用工具时)。
这个Hook的职责包括:
- 接收并预处理用户输入:它不仅仅是接收文本,还要能识别出特殊的“命令”。
- 管理与Gemini API的流式通信:发起请求,并处理源源不断返回的数