我在 OpenWebUI 项目里做的插件集
先说背景
我做的项目叫 openwebui-extensions,核心思路是把 OpenWebUI 从一个聊天界面,逐步扩展成一套能承载真实任务的工作系统。目前已收获 122 颗星星,官方插件市场下载累计突然 1w。
功能一:把长文本变成可交互思维导图
对应插件:Smart Mind Map
解决什么问题
大模型总结长内容的能力很强,但输出通常还是"一大段文字"。用户看完知道"说了什么",但很难一眼抓住结构。
怎么做的
整个流程分三层:
- LLM 分析层:把用户输入(支持最近 1-5 条消息)送入大模型,用专门设计的提示词让模型提取层级结构——根节点、分支、子分支。
- 格式转换层:模型输出标准 Markdown 列表格式(
# 根节点\n- 分支\n - 子分支),这是 Markmap.js 的原生输入。
- 渲染层:前端用 Markmap.js 把 Markdown 转成可交互的 SVG 思维导图——支持缩放、拖拽、节点展开/折叠。
关键技术决策:
- 多语言自适应:4 级语言检测回退(JS 注入读 localStorage → HTTP Accept-Language → 用户配置 → 默认 en-US),确保中英文内容都能正确生成对应语言的导图。
- 响应式布局:自动检测横竖屏,动态调整节点宽度(140-220px)和间距,手机上也能用。
- 高质量导出:PNG 导出使用 9 倍缩放因子,打印清晰;同时支持 SVG 矢量格式和 Markdown 源码。
带来什么价值
把 AI 的理解能力转化为可视化结构。输入一篇技术文章,能看到章节关系;输入需求文档,能看到模块拆分;输入学习笔记,能更高效地复习和记忆。
一句话:不是让输出更好看,而是让内容更适合人脑理解。
功能二:把文字信息变成直观的信息图
对应插件:Smart Infographic
解决什么问题
大模型很会写文字,但很多场景下文字不是最优形态。做汇报、写报告、把结论发给同事——纯文字的阅读门槛很高。
怎么做的
这是一个 AI 驱动的可视化管线:
- 内容分析:LLM 分析输入文本(最少 100 字),提取关键数据点和逻辑结构。
- 模板匹配:从 70+ 专业模板中选择最合适的类型——时间轴、对比图、层级图、数据图表等。模板库基于 AntV Infographic 语法,这是一种类似 Mermaid 的声明式图表语言。
- 语法生成:模型输出 AntV Infographic 语法代码,插件会自动清洗和修正(比如去掉多余冒号、修复前缀)。
- 渲染输出:前端加载 AntV JS 库,将语法代码渲染为 SVG。支持导出 SVG、PNG 和独立 HTML。
技术亮点:
- 双模式渲染:默认生成可交互的 HTML(缩放、hover 提示);也可选择嵌入静态图片模式。
- 智能回退:模板映射有完整的向后兼容层,即使模型生成了旧版语法也能正确渲染。
- 容器感知:自动检测聊天窗口宽度,动态调整图表尺寸,不会溢出。
带来什么价值
把 AI 结果从"聊天答案"推进成"演示材料"。用户拿到的不是一段等待二次排版的草稿,而是可以直接展示的视觉化内容。
一句话:缩短 AI 输出到"可用成品"之间的距离。
功能三:把聊天结果导出为 Word 和 Excel
对应插件:Export to Word Enhanced、Export to Excel
解决什么问题
这是最现实的问题:AI 生成内容很方便,但很难"带出去"。你需要交付的是 Word 文档、Excel 表格,而不是聊天记录。没有导出能力时,用户只能手动复制粘贴、重新排版,遇到代码块、表格、公式更是麻烦。
怎么做的
Word 导出解决了格式保真问题:
- 代码高亮:用 Pygments 支持 500+ 编程语言的语法高亮,导出到 Word 后代码块带颜色,不是灰扑扑的纯文本。
- 数学公式:LaTeX 公式(
$$...$$)通过 latex2mathml → mathml2omml 转成 Word 原生公式,导出后还能在 Word 里编辑。
- 图片处理:支持 data URL、OpenWebUI 文件 API(兼容 S3/本地存储)、以及 Mermaid 图表——先在浏览器端渲染成 SVG/PNG,再嵌入文档。
- 表格美化:自动设置列宽、表头颜色、斑马纹,不是丑陋的默认样式。
Excel 导出解决了数据结构化问题:
- 智能类型检测:自动识别数字、日期、序列类型,右对齐数字、居中日期,不用手动调。
- 表格提取:从聊天记录中自动识别 Markdown 表格,支持单条消息多表格、跨消息导出。
- AI 命名:可以用模型自动生成文件名,也可以用聊天标题或 Markdown 标题。
两者都遵循同一套工程规范:单文件 i18n(内置多语言)、Valves 配置、事件状态推送、健壮的错误处理。
带来什么价值
把 AI 结果从"对话内容"转成"办公文档"。这是很多 AI 产品的盲区——功能做得炫,但结果无法进入真实工作流。
一句话:让 AI 产物真正能交付。
功能四:把 GitHub Copilot SDK 接入 OpenWebUI,让它变成代理工作台
对应插件:GitHub Copilot SDK Pipe — 活跃开发中
解决什么问题
普通聊天只适合问答,不适合复杂任务。当你想让 AI 做的事情不是"回答一个问题",而是"完成一套动作"时,聊天界面就捉襟见肘了。比如:读代码仓库并给出修改方案、自动跑测试并定位失败原因、生成可下载的报告文件。
怎么做的
这个插件的核心是把 OpenWebUI 从"模型前端"升级为"代理工作台"。技术架构分三层:
第一层:SDK 集成
通过 GitHub Copilot SDK 实现多模型支持(GPT-4o、Claude 3.5、o1 等),支持多轮对话、流式输出、无限会话。关键是——不需要 GitHub Copilot 订阅,支持 BYOK(自带 API Key)模式。
第二层:能力注入
自动复用 OpenWebUI 生态中的已有能力:
- Tools:用户已安装的工具自动注入给 Agent
- MCP:接入 Model Context Protocol 服务器
- OpenAPI Servers:对接已配置的 API 服务
- Skills:支持 SKILL 目录和 OpenWebUI Workspace Skills 双向桥接
这意味着 Agent 不是孤立的,而是站在你已有配置的肩膀上工作。
第三层:任务编排
Agent 具备自主决策能力:
- 意图识别:理解用户要做什么,自动规划步骤
- Web 搜索:需要外部信息时主动搜索
- 上下文压缩:长任务中自动压缩历史,保持专注
- 文件交付:生成文件后调用
publish_file_from_workspace 自动上传到 OpenWebUI 存储,跳过 RAG 处理
技术细节亮点:
- 思维链渲染:用原生
<think> 标签包裹推理过程,前端自动显示折叠框
- 工具调用卡片:输出标准
<details type="tool_calls"> 格式,前端原生渲染折叠面板
- 会话持久化:SQLite 存储会话状态,重启不丢失
- 实时 TODO 追踪:紧凑的任务进度组件,同步到
session.db
带来什么价值
OpenWebUI 从"模型前端"升级为"代理工作台"。系统不仅能回答,还能调用工具、做长任务规划、在工作区生成文件和结果页面。
一句话:让 AI 不仅能想,还能做。
功能五:让长对话能真正持续下去
对应插件:Async Context Compression
解决什么问题
只要真实使用大模型一段时间,就会遇到:
- 对话越来越长,上下文成本飙升;
- 模型开始遗忘之前的约束和关键信息;
- 连续做复杂任务时,后半段质量明显下降。
怎么做的
这是一个 Filter 插件,在对话的输入/输出管道中透明工作。核心是混合压缩算法:
压缩策略:保留两端,摘要中间
- 保留前 N 条消息(系统提示词、核心约束)
- 保留后 N 条消息(最近的对话上下文)
- 中间的消息用 LLM 生成摘要,作为一条
assistant 角色的消息插入
异步架构:不阻塞用户
inlet(入口):同步执行——压缩并注入已有摘要,速度快
outlet(出口):异步执行——在后台生成新的摘要,用 asyncio.create_task 启动,不等用户响应
这意味着用户不会感知到压缩过程的延迟。
智能处理:不只是简单截断
- Token 估算:多语言启发式算法(中文约 1.5 token/字,英文约 0.25 token/词),快速判断是否需要压缩
- 工具输出折叠:超过 600 字的工具调用结果自动折叠,保留调用链但精简内容
- 外部引用:跨对话引用时,小对话直接注入,大对话生成摘要
- 进度追踪:压缩后重新计算历史坐标,确保前端显示正确
性能数据:长对话中可实现 65%+ 的 token 压缩率。
带来什么价值
把"一次性聊天"变成"可持续的长任务会话"。连续改代码、连续整理文档、长时间调试问题——这类场景需要系统能"续航",而不是聊着聊着就"忘了前面"。
一句话:给整个系统提供持续工作的能力。
这 5 个功能形成的链路
单独看每个功能,都是解决一个局部问题。但串在一起,形成了一条完整的使用链路:
- 输入 → 各种文本、文件、代码
- 处理 → 上下文压缩(功能五)保障长对话续航,格式规范化确保内容质量
- 执行 → GitHub Copilot SDK(功能四)调用工具、完成复杂任务
- 呈现 → 思维导图(功能一)、信息图(功能二)等可视化形式
- 交付 → 导出为 Word / Excel(功能三)等办公文档
这不再是"几个插件的集合",而是一套把 AI 从"能回答"推进到"能交付"的工作系统。
总结
如果要用一句话概括这个项目在做什么:
围绕 OpenWebUI 做了一组互相配合的能力,让它既能看、能想、能执行,也能把结果真正交付出去。