插件系统
三类插件
| 类别 | 定义位置 | 源码形式 |
|---|---|---|
| 内置插件(编译进 App) | src/utils/plugins.ts | TypeScript Plugin 对象字面量 |
| 常驻内置模块(单独文件发货) | src/utils/web-search-plugin.ts、doc-parse-plugin.ts、artifacts-plugin.ts、code-exec-plugin.ts、file-ops-plugin.ts、local-fs-native-plugin.ts | 导出默认 Plugin 的 TypeScript 模块 |
| 用户安装插件 | db.installedPluginsV2 | LobeChat JSON / Gradio manifest / MCP server config |
内置插件(编译进 App)
| 插件 id | 用途 | 默认是否启用 |
|---|---|---|
aiaw-time | 返回当前时间 | 否(被认为没什么用) |
aiaw-calculator | 通过 expr-eval 做数学计算 | 是 |
aiaw-whisper | 音频转写 | 是 |
aiaw-video-transcript | 提取视频字幕 | 是 |
aiaw-flux | 图片生成(Gradio) | 是 |
aiaw-emotions | 音频情绪识别 | 是 |
aiaw-mermaid | Mermaid 图表渲染 | 是 |
常驻内置模块
这些模块各自放在 src/utils/ 的独立文件中:
| 模块 | 能力 | 关键细节 |
|---|---|---|
web-search-plugin.ts | SearXNG 元搜索 + Jina Reader 抓取 | 需要配置 SEARXNG_BASE_URL 环境变量;否则插件第一次调用就会抛异常。支持 google/bing/baidu/duckduckgo/npm/pypi/github/arxiv/google_scholar/z-library/reddit/imdb/brave/wikipedia/pinterest/unsplash/vimeo/youtube/bilibili 等引擎 |
doc-parse-plugin.ts | 把 PDF/Word/Excel 解析成文本 | 需要 DOC_PARSE_BASE_URL;没有这个地址就无法解析 |
code-exec-plugin.ts | 在浏览器里通过 Pyodide 0.26.4 执行 Python | 第一次调用时会从 https://cdn.jsdelivr.net/pyodide/v0.26.4/full/pyodide.js 加载。可用 matplotlib/numpy/pandas 等 Pyodide 包,不需要单独后端 |
file-ops-plugin.ts | 在设备文件系统上执行读/写/列目录/mkdir/copy/move/delete | 原生侧依赖 capacitor-plugin-shell-exec。沙箱索引存放在 localStorage 键 aiaw_file_index_v2 中 |
local-fs-native-plugin.ts | 仅桌面端可用的文件系统访问(通过 Tauri shell) | 只会在 Tauri 环境加载;在移动端或纯 Web 环境会直接抛错 |
artifacts-plugin.ts | 把助手回复转换成可编辑的 Artifact 文档 | 默认关闭;需要在 Settings → Artifacts Settings 中手动打开 |
用户安装插件(第三方)
在 插件系统 页面顶部工具栏点击 + 就能添加:
| 插件类型 | 来源格式 | 添加方式 |
|---|---|---|
| LobeChat | LobeChat 插件 JSON(manifest 含 identifier、api、version) | 直接粘贴 JSON 或导入 .json 文件 |
| Gradio | Gradio 应用 URL 或 manifest | 填写 URL,客户端会自动探测 manifest |
| HuggingFace | HF Space URL | 内部会先转换成 Gradio manifest |
| MCP | 服务器配置(见下文) | 点击 “+” → Add MCP Plugin |
MCP(Model Context Protocol)详解
MCP 客户端(src/utils/mcp-client.ts)支持 3 种传输方式:
| 传输方式 | 所需配置 | 可运行的平台 |
|---|---|---|
stdio | 通过 shell 命令启动一个子进程 | 仅桌面端(Tauri)。在 Web/Capacitor 上会直接抛错 |
http | 可流式传输的 HTTP URL,并可附带请求头 | 所有平台 |
sse | Server-Sent Events URL | 所有平台 |
对于 stdio,平台层会通过 Tauri shell 执行 sh -c "<command>"(Windows 上是 cmd /c)。每个 MCP 客户端连接池会保活 5 分钟(空闲超时),并可通过 Plugins 页面上的 Refresh 按钮刷新。
一个 MCP 插件条目看起来像这样:
{
"id": "mcp-searxng",
"title": "SearXNG MCP",
"transport": {
"type": "http",
"url": "https://mcp.example.com/searxng",
"headers": { "Authorization": "Bearer ..." }
}
}发现流程是:应用先拉取这个 URL,然后调用 MCP 的 tools/list、prompts/list、resources/list 端点,把这些结果转成助手可调用的工具。
如何把插件启用到某个助手
- 打开目标助手(Settings → Assistants 里选一个,或者在 workspace 的 Assistants 区域进入)
- 点击插件 chip 区域,下拉框会显示当前可用插件
- 选择你要启用的插件,并为每个插件填写配置(例如给 web-search 填 SearXNG URL)
- 保存助手。从这之后,模型在对话过程中就能调用这些插件提供的工具