菜单

聊天服务和消息处理

相关源文件

本文档详细介绍了 LobeChat 系统如何处理消息、将其发送给 AI 提供商以及处理响应,包括工具和插件的集成。有关会话管理的信息,请参阅会话系统,以及消息和话题存储,请参阅消息和话题系统

1. 聊天服务概述

聊天服务是 LobeChat 的核心组件,作为用户界面和 AI 模型提供商之间的桥梁。它负责消息格式化、处理对 AI 模型的请求、处理流式响应以及与插件和工具的集成。

来源:src/services/chat.ts159-723

聊天服务被实现为一个单例类ChatService,提供了几个关键方法:

  • createAssistantMessage:处理用户消息并启动 AI 模型请求
  • getChatCompletion:处理与 AI 模型提供商的通信
  • runPluginApi:在调用工具时执行插件 API 调用
  • processMessages:为不同的 AI 模型提供商格式化消息
  • prepareTools:准备用于函数调用的工具定义

2. 消息处理流程

当用户发送消息时,聊天服务会通过几个不同的步骤对其进行处理:

来源:src/services/chat.ts160-252 src/services/chat.ts276-370

2.1 处理用户消息

聊天服务通过processMessages方法处理消息,该方法处理不同类型的内容:

  1. 文本内容:简单的文本消息
  2. 视觉内容:图片和文件附件
  3. 工具消息:与工具调用和响应相关的消息

对于具备视觉能力的模型,服务会将内容格式化为结构化部分,其中包含文本和图像 URL。对于包含文件附件的消息,它们将被处理并作为上下文包含在内。

来源:src/services/chat.ts460-608

2.2 系统角色注入

聊天服务为以下情况注入系统角色:

  1. 欢迎消息:为新用户提供的特殊系统提示
  2. 工具指令:当插件启用时
  3. 历史摘要:用于上下文管理

这是通过在将消息数组发送到 AI 提供商之前对其进行修改来完成的。

来源:src/services/chat.ts572-605

3. AI 提供商集成

聊天服务通过 Agent Runtime 系统与多个 AI 提供商协同工作。它支持客户端和服务器端获取策略。

3.1 客户端与服务器端获取

来源:src/services/chat.ts276-370 src/services/chat.ts628-646

当启用客户端获取时,聊天服务会:

  1. 初始化相应的提供商特定运行时
  2. 创建身份验证负载
  3. 直接向提供商进行 API 调用

对于服务器端获取:

  1. 创建身份验证头
  2. 向服务器端点发送请求
  3. 处理流式响应

3.2 身份验证与密钥管理

该服务与密钥保管库系统集成,以安全地管理不同提供商的 API 密钥。

来源:src/services/chat.ts341 src/services/_auth.ts93-106

4. 插件与工具集成

聊天服务与插件和工具系统集成,通过函数调用扩展了 AI 模型的功能。

4.1 工具准备

prepareTools方法为支持函数调用的 AI 模型格式化工具定义。

来源:src/services/chat.ts710-722

4.2 插件执行流程

当 AI 模型返回工具调用时,聊天服务会通过特定的流程来处理它们:

来源:src/services/chat.ts378-405

runPluginApi方法:

  1. 从工具存储中检索插件设置和清单
  2. 创建身份验证头
  3. 向插件网关发送请求
  4. 处理并格式化插件响应

5. 搜索功能集成

聊天服务通过两种方式集成搜索功能:

  1. 模型内置搜索:适用于具有原生搜索功能的模型
  2. 应用搜索工具:使用网页浏览插件作为工具

来源:src/services/chat.ts173-189

当搜索功能启用且模型不具备内置搜索能力(或配置为使用应用搜索)时,网页浏览插件会被添加到工具列表中。对于具有内置搜索功能的模型,enabledSearch参数被设置为 true。

6. 错误处理

聊天服务实现了客户端和服务器端请求的错误处理:

  1. 对于客户端错误,它会对其进行处理并返回格式化的错误响应
  2. 对于服务器端错误,它依赖于 fetch 工具来处理和解析错误

来源:src/services/chat.ts317-332

7. 消息排序与处理

聊天服务包含对工具消息的专门处理,以确保它们以正确的顺序显示,并正确链接到其工具调用:

来源:src/services/chat.ts652-708

重新排序过程确保工具消息紧随调用它们的助手消息之后出现,从而保持了逻辑对话流。

总结

聊天服务是一个关键组件,它:

  1. 处理来自用户的消息并为 AI 模型提供商格式化它们
  2. 与 Agent Runtime 集成以与各种 AI 模型通信
  3. 处理插件和工具集成,包括搜索功能
  4. 管理消息、工具调用和响应的流
  5. 为 AI 模型请求提供错误处理和身份验证

其设计允许与不同的 AI 提供商灵活集成,同时为应用程序的其余部分保持一致的接口。

来源:src/services/chat.ts159-725