diff --git a/docs/api/channel.zh-CN.md b/docs/api/channel.zh-CN.md index c9deb16..0ef335f 100644 --- a/docs/api/channel.zh-CN.md +++ b/docs/api/channel.zh-CN.md @@ -9,6 +9,8 @@ description: 提供了关于插件通信的消息类型的详细说明 nav: title: API order: 1 +apiHeader: + pkg: '@lobehub/chat-plugin-sdk' --- # PluginChannel 通信消息 diff --git a/docs/api/request.zh-CN.md b/docs/api/get-plugin-settings-from-request.zh-CN.md similarity index 95% rename from docs/api/request.zh-CN.md rename to docs/api/get-plugin-settings-from-request.zh-CN.md index 99afb90..0ec95f9 100644 --- a/docs/api/request.zh-CN.md +++ b/docs/api/get-plugin-settings-from-request.zh-CN.md @@ -4,7 +4,8 @@ description: 从请求中获取插件设置 group: title: 服务端 order: 1 -nav: API +apiHeader: + pkg: '@lobehub/chat-plugin-sdk' --- 用于从请求中获取插件设置字符串。 diff --git a/docs/api/lobe-chat-client.zh-CN.md b/docs/api/lobe-chat-client.zh-CN.md index c500083..0fb0924 100644 --- a/docs/api/lobe-chat-client.zh-CN.md +++ b/docs/api/lobe-chat-client.zh-CN.md @@ -6,7 +6,6 @@ group: order: 10 apiHeader: pkg: '@lobehub/chat-plugin-sdk/client' -nav: API --- 该实例包含插件侧与 LobeChat 交互的所有关键方法。 diff --git a/docs/api/error.zh-CN.md b/docs/api/plugin-error-type.zh-CN.md similarity index 94% rename from docs/api/error.zh-CN.md rename to docs/api/plugin-error-type.zh-CN.md index 348ec2f..06e7ccd 100644 --- a/docs/api/error.zh-CN.md +++ b/docs/api/plugin-error-type.zh-CN.md @@ -1,10 +1,12 @@ --- -title: 服务端错误类型 +title: 服务端错误类型 PluginErrorType atomId: PluginErrorType -description: 插件错误类型 +description: 服务端错误类型 group: 服务端 nav: API order: 100 +apiHeader: + pkg: '@lobehub/chat-plugin-sdk' --- LobeChat 在插件服务请求中所有的错误类型,包括业务语义错误、客户端错误和服务端错误。 diff --git a/docs/api/plugin-manifest.zh-CN.md b/docs/api/plugin-manifest.zh-CN.md index accc6c5..300b7d7 100644 --- a/docs/api/plugin-manifest.zh-CN.md +++ b/docs/api/plugin-manifest.zh-CN.md @@ -3,7 +3,8 @@ title: 插件描述清单 Schema group: Schema atomId: pluginManifestSchema description: 插件描述文件的 Schema -nav: API +apiHeader: + pkg: '@lobehub/chat-plugin-sdk' --- ## pluginManifestSchema diff --git a/docs/api/plugin-meta-index.zh-CN.md b/docs/api/plugin-meta-index.zh-CN.md index 6424667..78af917 100644 --- a/docs/api/plugin-meta-index.zh-CN.md +++ b/docs/api/plugin-meta-index.zh-CN.md @@ -3,7 +3,8 @@ title: 插件市场元数据 Schema group: Schema atomId: pluginMetaSchema description: 上架到插件市场中的插件元数据的数据模式定义。 -nav: API +apiHeader: + pkg: '@lobehub/chat-plugin-sdk' --- 插件元数据的 Schema。 diff --git a/docs/guides/communication-mechanisms.zh-CN.md b/docs/guides/communication-mechanisms.zh-CN.md index 024a4d6..07957ef 100644 --- a/docs/guides/communication-mechanisms.zh-CN.md +++ b/docs/guides/communication-mechanisms.zh-CN.md @@ -1,7 +1,53 @@ --- -title: 插件通信机制 +title: 插件通信 group: 基本概念 order: 3 --- -# 插件通信机制 +# 插件通信机制概述 + +## 服务端通信 + +针对 `default` 和 `markdown`类型的插件,你需要提供一个后端服务(standalone 类型的插件可以为纯前端应用),进而与 LobeChat 主体进行数据交换和处理请求。 + +下面会介绍 LobeChat 主体和插件的服务端通信的实现原理与关键细节。 + +### 插件服务端通信流程 + +LobeChat 主体与插件的服务端通信通过一个中间件层,即 [Plugin Gateway](https://github.com/lobehub/chat-plugins-gateway),来协调 LobeChat 主体与插件后端服务之间的通信。这一机制确保了通信的安全性和灵活性,同时提供了一套标准化的协议来管理请求和响应。 + +1. **请求初始化**:LobeChat 主体通过 HTTP POST 请求向 Gateway 发送请求,携带着包含插件标识符、API 名称、参数等信息的 `PluginRequestPayload`。 +2. **Gateway 处理**:Gateway 接收到请求后,解析请求体中的 `PluginRequestPayload`,并进行参数校验。 +3. **处理与响应请求**:验证通过后,Gateway 根据请求中的 API 名称和参数去调用插件的服务端,获得响应结果后将处理结果封装为响应数据,通过 HTTP 响应发送回 LobeChat 主体。 +4. **错误处理**:如果在处理请求的过程中发生错误,Gateway 会生成错误响应,包括错误类型和错误信息,返回给 LobeChat 主体。 + +### Gateway 通信实现细节 + +以下是 LobeChat 插件服务端的关键实现细节: + +- **请求负载处理**:Gateway 通过解析 `PluginRequestPayload` 中的 `identifier` 来确定插件身份,并根据 `apiName` 执行相应的 API 逻辑。 +- **插件清单获取**:如果请求负载中不包含插件清单 (`manifest`),Gateway 将从 [插件商店索引](https://github.com/lobehub/lobe-chat-plugins) 中获取,保证插件的正确识别和功能实现。 +- **参数校验**:Gateway 会根据插件清单中定义的 API 参数模式对请求中的参数进行校验,确保参数的有效性和安全性。 +- **设置处理**:Gateway 会通过将插件请求的设置信息,添加到请求头中,在插件侧可以通过 [getPluginSettingsFromRequest](/zh-CN/api/request) 方法获取插件设置,例如 API 密钥或其他认证信息进行校验。 +- **OpenAPI 支持**:如果插件清单指定了 [OpenAPI 清单](/zh-CN/guides/openapi),Gateway 将会利用 `SwaggerClient` 与定义在 OpenAPI 规范中的第三方服务进行交互。 + +### 错误处理 + +服务端通信中的错误处理是一个重要的方面。Gateway 中定义了多种错误类型,例如 `PluginErrorType.MethodNotAllowed` 表示不支持的请求方法,`PluginErrorType.PluginGatewayError` 表示网关错误等。每种错误类型都有对应的处理逻辑,确保在出现问题时,可以向 LobeChat 主体提供清晰的错误反馈。关于错误的详细类型,请查阅:[服务端错误类型](/zh-CN/api/error) + +## 前端通信 + +LobeChat 主体和插件的前端通信实现是基于 HTML5 的`window.postMessage` API,该 API 允许不同来源的页面之间安全地进行通信。在这种机制下,LobeChat 的主体可以与嵌入其中的插件(通常是通过`