第 9 章:ChatClient 管道

ChatClient 管道是 RAF 的核心架构创新之一。通过将 LLM 客户端抽象为 `IChatClient` trait,并用**装饰器模式**构建可组合的处理管道,RAF 实现了工具调用循环、审批流程、会话持久化等横切关注点的解耦。本章深入管道架构的设计理念、`FunctionInvokingChatClient` 的状态机实现、LLM 提供商的接入方式,以及流式处理链路。

| 小节 | 标题 | |------|------| | [9.1](decorator-pattern.md) | 装饰器模式与管道架构 | | [9.2](function-invoking.md) | FunctionInvokingChatClient 工具调用循环 | | [9.3](llm-providers.md) | LLM 提供商(OpenAI / DeepSeek) | | [9.4](stream-processing.md) | 流式处理与中间件 | | [9.5](local-inference.md) | 本地模型推理(llama-gguf / rust-agent-llama) |

快速导航

- **为什么选用装饰器模式**:参见 [9.1 — 装饰器模式](decorator-pattern.md)。 - **工具调用循环的完整实现**:参见 [9.2 — FunctionInvokingChatClient](function-invoking.md)。 - **如何接入新的 LLM 提供商**:参见 [9.3 — LLM 提供商](llm-providers.md)。 - **如何在本地 CPU 运行模型(离线推理)**:参见 [9.5 — 本地模型推理](local-inference.md)。 - **从 SSE 字节到 AgentResponseResult 的完整链路**:参见 [9.4 — 流式处理](stream-processing.md)。

管道架构总览

graph TB
    subgraph "ChatClientAgent"
        A[组装消息<br/>Provider 调用<br/>压缩]
    end

    subgraph "ChatClient 管道"
        B[FunctionInvokingChatClient<br/>工具调用循环 + 审批]
        C[PerServiceCallPersistingChatClient<br/>会话持久化]
        D[DeepSeekChatClient / OpenAiChatClient<br/>供应商特定客户端]
        E[ChatClient<br/>HTTP/SSE 传输引擎]
    end

    A -->|IChatClient::run()| B
    B --> C
    C --> D
    D --> E
    E -->|HTTP POST| LLM[LLM API]
    LLM -->|SSE| E
    E -->|AgentResponseUpdate| D
    D --> C
    C --> B
    B --> A

    style B fill:#4CAF50,color:white
    style E fill:#2196F3,color:white

核心类型速览

| 类型 | 所在 Crate | 用途 | |------|-----------|------| | `IChatClient` | `rust_agent_core::chat_client` | 聊天客户端 trait,管道叶子接口 | | `DelegatingChatClient` | `rust_agent_core::chat_client` | 装饰器基类,透传所有方法 | | `ChatClientBuilder` | `rust_agent_core::chat_client` | 管道构建器,按序组装装饰器 | | `FunctionInvokingChatClient` | `rust_agent_framework::decorators` | 工具调用循环装饰器 | | `ChatClient` | `rust_agent_client::chat_client` | 通用 HTTP/SSE 传输引擎 | | `DeepSeekChatClient` | `rust_agent_client::deepseek_client` | DeepSeek 提供商客户端 | | `OpenAiChatClient` | `rust_agent_client::openai_client` | OpenAI 提供商客户端 | | `LlamaChatClient` | `rust_agent_llama::chat_client` | 本地 GGUF 推理客户端(llama-gguf) | | `ChatClientOptions` | `rust_agent_client::options` | 客户端配置(api_base, api_key, model...) | | `AgentResponseConverter` | `rust_agent_framework::converter` | SSE 事件 → 公共 API 转换器 | | `SseStream` | `rust_agent_client::transport` | SSE 字节流解析器 |

---

上一步

← [第 8 章:工作区管理](../08-workspace-management/INDEX.md)

下一步

阅读完本章后,建议继续阅读 **[宏与声明式配置](../10-macros-declarative/tool-macro.md)** 以学习声明式编程能力,使用 `#[tool]` 宏和 YAML/JSON 配置减少样板代码。