本文档详细介绍了 LobeChat 系统如何处理消息、将其发送给 AI 提供商以及处理响应,包括工具和插件的集成。有关会话管理的信息,请参阅会话系统,以及消息和话题存储,请参阅消息和话题系统。
聊天服务是 LobeChat 的核心组件,作为用户界面和 AI 模型提供商之间的桥梁。它负责消息格式化、处理对 AI 模型的请求、处理流式响应以及与插件和工具的集成。
来源:src/services/chat.ts159-723
聊天服务被实现为一个单例类ChatService,提供了几个关键方法:
createAssistantMessage:处理用户消息并启动 AI 模型请求getChatCompletion:处理与 AI 模型提供商的通信runPluginApi:在调用工具时执行插件 API 调用processMessages:为不同的 AI 模型提供商格式化消息prepareTools:准备用于函数调用的工具定义当用户发送消息时,聊天服务会通过几个不同的步骤对其进行处理:
来源:src/services/chat.ts160-252 src/services/chat.ts276-370
聊天服务通过processMessages方法处理消息,该方法处理不同类型的内容:
对于具备视觉能力的模型,服务会将内容格式化为结构化部分,其中包含文本和图像 URL。对于包含文件附件的消息,它们将被处理并作为上下文包含在内。
来源:src/services/chat.ts460-608
聊天服务为以下情况注入系统角色:
这是通过在将消息数组发送到 AI 提供商之前对其进行修改来完成的。
来源:src/services/chat.ts572-605
聊天服务通过 Agent Runtime 系统与多个 AI 提供商协同工作。它支持客户端和服务器端获取策略。
来源:src/services/chat.ts276-370 src/services/chat.ts628-646
当启用客户端获取时,聊天服务会:
对于服务器端获取:
该服务与密钥保管库系统集成,以安全地管理不同提供商的 API 密钥。
来源:src/services/chat.ts341 src/services/_auth.ts93-106
聊天服务与插件和工具系统集成,通过函数调用扩展了 AI 模型的功能。
prepareTools方法为支持函数调用的 AI 模型格式化工具定义。
来源:src/services/chat.ts710-722
当 AI 模型返回工具调用时,聊天服务会通过特定的流程来处理它们:
来源:src/services/chat.ts378-405
runPluginApi方法:
聊天服务通过两种方式集成搜索功能:
来源:src/services/chat.ts173-189
当搜索功能启用且模型不具备内置搜索能力(或配置为使用应用搜索)时,网页浏览插件会被添加到工具列表中。对于具有内置搜索功能的模型,enabledSearch参数被设置为 true。
聊天服务实现了客户端和服务器端请求的错误处理:
来源:src/services/chat.ts317-332
聊天服务包含对工具消息的专门处理,以确保它们以正确的顺序显示,并正确链接到其工具调用:
来源:src/services/chat.ts652-708
重新排序过程确保工具消息紧随调用它们的助手消息之后出现,从而保持了逻辑对话流。
聊天服务是一个关键组件,它:
其设计允许与不同的 AI 提供商灵活集成,同时为应用程序的其余部分保持一致的接口。