Skip to content

Commit

Permalink
📝 docs: update plugin docs
Browse files Browse the repository at this point in the history
  • Loading branch information
arvinxx committed Dec 30, 2023
1 parent 1495501 commit caf696f
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 16 deletions.
8 changes: 5 additions & 3 deletions docs/guides/default-plugin.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@ order: 0

## 如何选择

在开发 LobeChat 插件时,选择正确的插件类型对于实现预期的用户体验至关重要。下面是一个指南,可以帮助你根据不同的场景和需求选择最合适的插件类型。

如果你的需求符合以下场景,可以选择 `default` 插件:
对于默认情况下,我们建议选择 `default` 类型插件,因为默认插件涵盖了常见的主流场景,比如:

- 你希望插件的内容能够被 GPT 进行总结或进一步处理。
- 你的插件需要简单的后端处理,并且希望与 GPT 的回复紧密结合。
- 你需要的插件主要用于内容展示,可能需要自定义前端展示,但不涉及用户与插件的交互操作(例如点击确认按钮等);

例如,一个网站内容摘要插件,用户提供一个链接,插件返回摘要信息,然后由 GPT 进行解读或补充。

## 开发 Default 插件

快速上手中的 [教程](/zh-CN/quick-start/define-plugin-manifest) 已经介绍了 default 插件的开发流程,此处不再赘述。
36 changes: 35 additions & 1 deletion docs/guides/markdown-plugin.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ order: 2

# Markdown 类型插件

`Markdown` 插件类型允许插件返回 Markdown 格式的内容直接显示在聊天中。这种渲染方式适用于结果明确,不需要再次发送给 AI 进行处理的场景。例如,当用户询问某个特定信息时,插件可以直接返回一个包含答案的 Markdown 消息,而不需要额外的 AI 总结过程。此外,与这种类型搭配的配置可以设置为不再触发 AI 消息,这样就可以避免不必要的 AI 调用。
`Markdown` 插件类型允许插件返回 Markdown 格式的内容直接显示在聊天中。这种渲染方式适用于结果明确,不需要再次发送给 AI 进行处理的场景。例如,当用户询问某个特定信息时,插件可以直接返回一个包含答案的 Markdown 消息,而不需要额外的 AI 总结过程。此外,与这种类型搭配的插件默认将不再触发 AI 消息,这样就可以避免不必要的 AI 调用。

![clothes](https://github.com/lobehub/lobe-chat/assets/28616219/7077a4d4-5b0f-4d4e-b332-d79b7df2b411)

Expand All @@ -22,3 +22,37 @@ order: 2
- 你的插件是为了解答简单且明确的查询,例如时间查询、人名查询等。

例如,一个查询当前时间的插件,用户询问 “现在北京时间几点?” 插件返回一个格式化的 Markdown 消息,显示当前时间。

## 配置为 markdown 插件

### 配置 manifest

在插件的 `manifest.json` 文件中,将 `type` 字段设置为 `markdown` 即可。

```json
{
"type": "markdown"
}
```

### 调整输出请求格式

同时,你需要将你的请求以 markdown 格式的纯文本返回:

```ts
export default async (req: Request) => {
// ... 其他实现代码

return new Response(
`由于你的心情是${result.mood},我推荐你穿 ${result.clothes.map((c) => c.name).join('')}。`,
);
};
```

效果如下:

![clothes](https://github.com/lobehub/lobe-chat/assets/28616219/7077a4d4-5b0f-4d4e-b332-d79b7df2b411)

## 插件示例

你可以在 chat-plugin-template 中查看 [Markdown 插件示例](https://github.com/lobehub/chat-plugin-template/blob/main/public/manifest-markdown.json),以了解 markdown 类型插件的实现。
74 changes: 62 additions & 12 deletions docs/guides/standalone-plugin.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,73 @@ order: 2

# Standalone 插件

`standalone` 插件类型是为了支持复杂交互而设计的。这类插件可以完全控制交互逻辑,并且以独立的应用的形态运行。它们适合于需要丰富用户交互的场景,例如表单填写、游戏或其他需要多步骤操作的应用。`standalone` 插件可以通过自行控制来决定是否触发 AI 消息,甚至可以通过程序化的方式来触发 AI 回复。
`standalone` 插件代表着 LobeChat 插件生态中的一种强大且灵活的插件类型,允许开发者构建独立的应用级交互体验。这类插件完全自主地控制用户交互逻辑,独立于 LobeChat 的基本会话流程。适用于那些需要深度用户参与的场景,如表单填写、游戏或者任何需要多步骤交互的应用。Standalone 插件的独特之处在于它们可以自行决定是否和何时触发 AI 消息,甚至可以编程方式触发 AI 回复。

`standalone` 类型的插件正是 LobeChat 与 ChatGPT 插件系统的最大差别,正因为该类插件的存在,我们才能够通过插件实现更加复杂的会话交互体验。

例如:官方实现的时钟插件就是标准的 Standalone 插件,该插件的特点是不包含任何后端 API,由纯前端实现。
`standalone` 类型的插件正是 LobeChat 与 ChatGPT 插件系统的最大差别,正因为该类插件的存在,我们才能够通过插件实现更加复杂的会话交互体验。 例如:官方实现的 [时钟插件](https://github.com/lobehub/chat-plugin-clock-time) 就是标准的 Standalone 插件,该插件的特点是不包含任何后端 API,由纯前端实现。

<video src="https://github.com/lobehub/lobe-chat/assets/28616219/206b4c94-4674-4007-ac4f-450b9778d7f6" width="100%" autoplay mute ></video>

## 如何选择
## 优势与场景

Standalone 插件机制对于纯前端应用非常友好,允许开发者无需改变现有代码即可与 LobeChat 集成。这种机制不仅为前端开发者提供了广阔的发展空间,而且能够实现比 ChatGPT 插件更加丰富的交互模式。

如果你的插件场景满足以下任一条件,Standalone 插件可能是你的理想选择:

- 插件需要提供丰富而复杂的交互体验。
- 插件需要完全控制交互逻辑,包括触发 AI 消息的时机。
- 插件是一个独立应用,可能包含表单、游戏或其他复杂功能。
- 插件需要完全自定义的前端展示,并且希望能够编程控制 AI 行为。

## standalone 插件通信机制

作为 Standalone 插件,你需要特别注意与 LobeChat 的通信机制。为了实现独立的交互逻辑,你需要自行利用 Plugin SDK 来监听消息、发送状态更新和完成交互。

Standalone 插件与 LobeChat 主体之间的通信是通过一套精心设计的 API 和事件监听机制来实现的。这些 API 方法封装了内部的通信细节,提供了一种简洁而强大的方式来交换数据和触发行为。以下是 Standalone 插件通信机制的详细说明:

### 初始化通信

当 Standalone 插件加载并准备好与 LobeChat 交互时,它首先需要获取初始化数据。这可以通过`lobeChat.getPluginPayload()`方法实现。该方法内部监听 `message` 事件,等待 LobeChat 发送的初始化消息,并在接收到消息后返回解析后的数据,包括插件参数、名称、设置和状态。

### 获取、设置插件消息

使用`lobeChat.getPluginMessage()`方法,插件可以请求当前的消息内容。此方法同样基于`message`事件监听,并在接收到 LobeChat 发送的消息后,返回该消息内容。
为了更新插件消息的内容,插件可以调用`lobeChat.setPluginMessage(content)`方法。`content`参数是插件希望设置的新消息内容。

### 获取和设置插件状态

插件状态的获取和设置可以通过`lobeChat.getPluginState(key)``lobeChat.setPluginState(key, value)`方法进行。这使得插件能够维护和管理自己的状态信息。

### 获取和更新插件设置

插件可以通过调用`lobeChat.getPluginSettings()`方法来请求其设置。 若插件需要更新其设置,可以使用`lobeChat.setPluginSettings(settings)`方法,将新的设置数据发送给 LobeChat。`settings`参数包含了要更新的设置信息。

### 触发 AI 消息和创建助理消息

插件可以利用`lobeChat.triggerAIMessage(id)``lobeChat.createAssistantMessage(content)`方法来触发 AI 消息或创建新的助理消息,从而与 AI 进行交互。

## 配置为 standalone 插件

### 配置 manifest

要将你的插件配置为 Standalone 类型,需要在插件的`manifest.json`文件中指定`type`字段为`standalone`

```json5
{
// 其他配置...
type: 'standalone',
}
```

### 修改插件渲染实现

由于 standalone 插件的通信机制与其他类型的插件不同,因此你需要修改插件的前端实现。通过 `lobeChat` 实例对象来完成与 LobeChat 主体的通信。同时整个插件应用的生命周期也需要你自行管理。

在开发 LobeChat 插件时,选择正确的插件类型对于实现预期的用户体验至关重要。下面是一个指南,可以帮助你根据不同的场景和需求选择最合适的插件类型。
## 插件示例和模板

如果你的需求符合以下场景,建议选择 `standalone` 插件:
为了帮助你更好地理解和开发 Standalone 插件,你可以参考以下资源

- 你的插件需要提供复杂的、富交互的用户体验。
- 你希望完全控制交互逻辑,甚至包括是否触发后续的 AI 消息。
- 你的插件是一个独立的应用,可能包含表单、游戏或其他复杂功能。
- 你需要完全自定义的前端展示,并且希望能够通过程序控制 AI 的行为。
- [Standalone 插件模板](https://github.com/lobehub/chat-plugin-template/blob/main/public/manifest-standalone.json) - 了解 Standalone 类型插件的基本结构和配置。
- [时钟时刻](https://github.com/lobehub/chat-plugin-clock-time) - 一个无需后端 API,纯前端实现的 Standalone 插件示例。
- [MidJourney 插件](https://github.com/lobehub/chat-plugin-midjourney) - 另一个实现了独特 Standalone 交互体验的插件。

例如,一个在线预订系统的插件,用户可以通过表单选择日期和时间,提交后插件处理预订并反馈结果
通过这些示例和模板,你将能够更快速地入门并构建自己的 Standalone 插件,为用户带来更加丰富和个性化的交互体验

0 comments on commit caf696f

Please sign in to comment.