# 智绘心图 - 思维导图生成插件

**作者:** [Fu-Jie](https://github.com/Fu-Jie) | **版本:** 0.7.2 | **许可证:** MIT

> **重要提示**：为了确保所有插件的可维护性和易用性，每个插件都应附带清晰、完整的文档，以确保其功能、配置和使用方法得到充分说明。

智绘心图是一个强大的 OpenWebUI 动作插件，能够智能分析长篇文本内容，自动生成交互式思维导图，帮助用户结构化和可视化知识。

---

## 核心特性

-   ✅ **智能文本分析**: 自动识别文本的核心主题、关键概念和层次结构
-   ✅ **交互式可视化**: 基于 Markmap.js 生成美观的交互式思维导图
-   ✅ **多语言支持**: 根据用户语言自动调整输出
-   ✅ **实时渲染**: 在聊天界面中直接渲染思维导图，无需跳转
-   ✅ **导出功能**: 支持复制 SVG 代码和 Markdown 源码
-   ✅ **自定义配置**: 可配置 LLM 模型、最小文本长度等参数

---

## 工作原理

1. **文本提取**: 从用户消息中提取文本内容（自动过滤 HTML 代码块）
2. **智能分析**: 使用配置的 LLM 模型分析文本结构
3. **Markdown 生成**: 将分析结果转换为 Markmap 兼容的 Markdown 格式
4. **可视化渲染**: 在 HTML 模板中使用 Markmap.js 渲染思维导图
5. **交互展示**: 在聊天界面中以可交互的形式展示给用户

---

## 安装与配置

### 1. 插件安装

1. 下载 `思维导图.py` 文件到本地
2. 在 OpenWebUI 管理员设置中找到"插件"（Plugins）部分
3. 选择"动作"（Actions）类型
4. 上传下载的文件
5. 刷新页面，插件即可使用

### 2. 模型配置

插件需要访问 LLM 模型来分析文本。请确保：

-   您的 OpenWebUI 实例中配置了至少一个可用的 LLM 模型
-   推荐使用快速、经济的模型（如 `gemini-2.5-flash`）来获得最佳体验
-   在插件设置中配置 `LLM_MODEL_ID` 参数

### 3. 插件启用

在聊天设置中选择"智绘心图"动作插件即可启用。

---

## 配置参数

您可以在插件的设置（Valves）中调整以下参数：

| 参数 | 默认值 | 描述 |
| :--- | :--- | :--- |
| `show_status` | `true` | 是否在聊天界面显示操作状态更新（如"正在分析..."）。 |
| `LLM_MODEL_ID` | `gemini-2.5-flash` | 用于文本分析的 LLM 模型 ID。推荐使用快速且经济的模型。 |
| `MIN_TEXT_LENGTH` | `100` | 进行思维导图分析所需的最小文本长度（字符数）。文本过短将无法生成有效的导图。 |

---

## 使用方法

### 基本使用

1. 在聊天设置中启用"智绘心图"动作
2. 在对话中输入或粘贴长篇文本内容（至少 100 字符）
3. 发送消息后，插件会自动分析并生成思维导图
4. 思维导图将在聊天界面中直接渲染显示

### 使用示例

**输入文本：**
```
人工智能（AI）是计算机科学的一个分支，致力于创建能够执行通常需要人类智能的任务的系统。
主要应用领域包括：
1. 机器学习 - 使计算机能够从数据中学习
2. 自然语言处理 - 理解和生成人类语言
3. 计算机视觉 - 识别和处理图像
4. 机器人技术 - 创建能够与物理世界交互的智能系统
```

**生成结果：**
插件会生成一个以"人工智能"为中心主题的交互式思维导图，包含主要应用领域及其子概念。

### 导出功能

生成的思维导图支持两种导出方式：

1. **复制 SVG 代码**: 点击"复制 SVG 代码"按钮，可将思维导图的 SVG 格式复制到剪贴板
2. **复制 Markdown**: 点击"复制 Markdown"按钮，可将原始 Markdown 格式复制到剪贴板

---

## 技术架构

### 前端渲染

-   **Markmap.js**: 开源的思维导图渲染引擎
-   **D3.js**: 数据可视化基础库
-   **响应式设计**: 适配不同屏幕尺寸

### 后端处理

-   **LLM 集成**: 通过 `generate_chat_completion` 调用配置的模型
-   **文本预处理**: 自动过滤 HTML 代码块，提取纯文本内容
-   **格式转换**: 将 LLM 输出转换为 Markmap 兼容的 Markdown 格式

### 安全性

-   **XSS 防护**: 自动转义 `</script>` 标签，防止脚本注入
-   **输入验证**: 检查文本长度，避免无效请求

---

## 故障排除

### 问题：插件无法启动

**解决方案：**
-   检查 OpenWebUI 日志，查看是否有错误信息
-   确认插件已正确上传并启用
-   验证 OpenWebUI 版本是否支持动作插件

### 问题：文本内容过短

**现象：** 提示"文本内容过短，无法进行有效分析"

**解决方案：**
-   确保输入的文本至少包含 100 个字符（默认配置）
-   可以在插件设置中降低 `MIN_TEXT_LENGTH` 参数值
-   提供更详细、结构化的文本内容

### 问题：思维导图未生成

**解决方案：**
-   检查 `LLM_MODEL_ID` 是否配置正确
-   确认配置的模型在 OpenWebUI 中可用
-   查看后端日志，检查是否有 LLM 调用失败的错误
-   验证用户是否有足够的权限访问配置的模型

### 问题：思维导图显示错误

**现象：** 显示"⚠️ 思维导图渲染失败"

**解决方案：**
-   检查浏览器控制台的错误信息
-   确认 Markmap.js 和 D3.js 库是否正确加载
-   验证生成的 Markdown 格式是否符合 Markmap 规范
-   尝试刷新页面重新渲染

### 问题：导出功能不工作

**解决方案：**
-   确认浏览器支持剪贴板 API
-   检查浏览器是否阻止了剪贴板访问权限
-   使用现代浏览器（Chrome、Firefox、Edge 等）

---

## 最佳实践

1. **文本准备**
   -   提供结构清晰、层次分明的文本内容
   -   使用段落、列表等格式帮助 LLM 理解文本结构
   -   避免过于冗长或无结构的文本

2. **模型选择**
   -   对于日常使用，推荐 `gemini-2.5-flash` 等快速模型
   -   对于复杂文本分析，可以使用更强大的模型（如 GPT-4）
   -   根据需求平衡速度和分析质量

3. **性能优化**
   -   合理设置 `MIN_TEXT_LENGTH`，避免处理过短的文本
   -   对于特别长的文本，考虑先进行摘要再生成思维导图
   -   在生产环境中关闭 `show_status` 以减少界面更新

---

## 更新日志

### v0.7.2 (当前版本)
-   优化文本提取逻辑，自动过滤 HTML 代码块
-   改进错误处理和用户反馈
-   增强导出功能的兼容性
-   优化 UI 样式和交互体验

---

## 许可证

本插件采用 MIT 许可证发布。

## 贡献

欢迎提交问题报告和改进建议！请访问项目仓库：[awesome-openwebui](https://github.com/Fu-Jie/awesome-openwebui)

---

## 相关资源

-   [Markmap 官方网站](https://markmap.js.org/)
-   [OpenWebUI 文档](https://docs.openwebui.com/)
-   [D3.js 官方网站](https://d3js.org/)
