本文档涵盖了 LobeChat 的 AgentRuntime 系统和请求处理架构,它为与 40 多个 AI 模型提供商的交互提供了一个统一的抽象层,并处理流式聊天补全。AgentRuntime 作为 LobeChat 的聊天系统与外部 AI 提供商之间的核心接口,负责管理身份验证、请求格式化和响应流。
有关 AI 提供商配置和模型定义的信息,请参阅 提供商配置系统 和 模型定义和功能。有关聊天服务和消息生命周期的详细信息,请参阅 聊天服务和消息处理。
AgentRuntime 系统提供了一个与提供商无关的 AI 模型交互接口。核心入口点是 initializeWithClientStore() 函数,该函数为特定的提供商创建正确配置的运行时实例。
AgentRuntime 使用提供商特定的配置进行初始化,包括 API 密钥、端点和模型参数。系统根据提供商的设置和安全限制,决定是客户端执行请求还是服务器端执行请求。
来源: src/services/chat.ts129-158 src/libs/model-runtime src/services/_auth.ts141-157
请求处理流程涉及多个阶段:消息预处理、工具准备、模型参数配置和响应流。 ChatService.createAssistantMessage() 方法协调了整个过程。
处理管道在启动流式响应之前处理各种消息类型、工具集成和模型特定的参数。
来源: src/services/chat.ts161-272 src/services/chat.ts486-634 src/store/chat/slices/aiChat/actions/generateAIChat.ts490-729
LobeChat 支持多种执行模式,具体取决于提供商的功能和安全要求。系统会根据提供商的配置自动确定适当的执行模式。
| 执行模式 | 触发条件 | 实现 |
|---|---|---|
| 客户端 | 提供商支持浏览器请求 + 提供 API 密钥 | fetchOnClient() 方法 |
| 服务器端 | 默认模式或提供商需要服务器执行 | 带有提供商 SDK 的 API 路由 |
| 混合模式 | 模型特定的功能(例如,推理、响应 API) | 动态参数注入 |
提供商抽象层可自动处理不同的 SDK 类型(OpenAI 兼容、Anthropic、Google 等),并管理身份验证、端点配置和请求格式化。
来源: src/services/chat.ts86-93 src/services/chat.ts655-672 src/store/aiInfra/slices/aiProvider/selectors.ts58-82
LobeChat 使用服务器发送事件 (SSE) 来处理来自 AI 提供商的实时流式响应。 fetchSSE() 函数处理不同的事件类型,并使用可选的平滑动画管理响应分块。
流式系统支持多种内容类型,包括文本生成、函数调用、推理跟踪和接地引用,所有这些都通过统一的事件处理接口进行处理。
来源: src/utils/fetch/fetchSSE.ts309-605 src/utils/fetch/fetchSSE.ts102-303 src/utils/fetch/__tests__/fetchSSE.test.ts25-535
AgentRuntime 系统同时支持客户端和服务器端执行模式,每种模式都有特定的用例和安全影响。
客户端执行使用 fetchOnClient() 方法直接从浏览器与 AI 提供商 API 进行通信。此模式在以下情况启用:
!isProviderDisableBrowserRequest())服务器端执行通过 LobeChat 的 API 端点路由请求,然后由提供商 SDK 使用。这是默认且最安全的模式
| 功能 | 客户端执行 | 服务器端执行 |
|---|---|---|
| API 密钥安全 | ⚠️ 对客户端暴露 | ✅ 仅服务器端 |
| 插件支持 | ❌ 有限 | ✅ 完全支持 |
| 提供商兼容性 | 🔄 子集 | ✅ 所有提供商 |
| 身份验证流程 | 🔄 仅简单 | ✅ 复杂流程 |
| 响应处理 | ✅ 直接流式传输 | ✅ 代理流式传输 |
来源: src/services/chat.ts330-396 src/services/chat.ts655-672 src/store/aiInfra/slices/aiProvider/selectors.ts58-82
AgentRuntime 系统与 LobeChat 的消息处理管道紧密集成。聊天生成系统中的 internal_fetchAIChatMessage() 函数协调了从消息准备到响应处理的整个流程。
此集成确保了在保持处理提供商特定要求和功能灵活性的同时,提供一致的行为,而无论执行模式如何。
来源: src/store/chat/slices/aiChat/actions/generateAIChat.ts490-729 src/services/chat.ts274-295 src/services/chat.ts297-397