菜单

代理运行时和请求处理

相关源文件

本文档涵盖了 LobeChat 的 AgentRuntime 系统和请求处理架构,它为与 40 多个 AI 模型提供商的交互提供了一个统一的抽象层,并处理流式聊天补全。AgentRuntime 作为 LobeChat 的聊天系统与外部 AI 提供商之间的核心接口,负责管理身份验证、请求格式化和响应流。

有关 AI 提供商配置和模型定义的信息,请参阅 提供商配置系统模型定义和功能。有关聊天服务和消息生命周期的详细信息,请参阅 聊天服务和消息处理

AgentRuntime 系统概述

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

客户端 vs 服务器执行模式

AgentRuntime 系统同时支持客户端和服务器端执行模式,每种模式都有特定的用例和安全影响。

客户端执行

客户端执行使用 fetchOnClient() 方法直接从浏览器与 AI 提供商 API 进行通信。此模式在以下情况启用:

  • 提供商支持浏览器请求(!isProviderDisableBrowserRequest()
  • 用户已提供 API 密钥和/或端点
  • 提供商配置允许客户端访问

服务器端执行

服务器端执行通过 LobeChat 的 API 端点路由请求,然后由提供商 SDK 使用。这是默认且最安全的模式

  • 保护 API 密钥和敏感配置
  • 启用服务器端独有功能,如插件身份验证
  • 支持不允许浏览器请求的提供商
  • 处理复杂的身份验证流程(OAuth、IAM 等)
功能客户端执行服务器端执行
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