# Actions(动作插件) [English](./README.md) | 中文 动作插件(Actions)允许您定义可以从聊天中触发的自定义功能。此目录包含可用于扩展 OpenWebUI 功能的各种动作插件。 ## 📋 动作插件列表 | 插件名称 | 描述 | 版本 | 文档 | | :----------- | :----------------------------------- | :---- | :---------------------------------------------------------------------------- | | **思维导图** | 智能分析文本内容,生成交互式思维导图 | 0.7.2 | [中文](./smart-mind-map/README_CN.md) / [English](./smart-mind-map/README.md) | ## 🎯 什么是动作插件? 动作插件通常用于: - 生成特定格式的输出(如思维导图、图表、表格等) - 与外部 API 或服务交互 - 执行数据转换和处理 - 保存或导出内容到文件 - 创建交互式可视化 - 自动化复杂工作流程 ## 🚀 快速开始 ### 安装动作插件 1. 将插件文件(`.py`)下载到本地 2. 在 OpenWebUI 管理员设置中,找到"Plugins"部分 3. 选择"Actions"类型 4. 上传下载的文件 5. 刷新页面并在聊天设置中启用插件 6. 在聊天中从可用动作中选择使用该插件 ## 📖 开发指南 ### 添加新动作插件 添加新动作插件时,请遵循以下步骤: 1. **创建插件目录**:在 `plugins/actions/` 下创建新文件夹(例如 `my_action/`) 2. **编写插件代码**:创建 `.py` 文件,清晰记录功能说明 3. **编写文档**: - 创建 `README.md`(英文版) - 创建 `README_CN.md`(中文版) - 包含:功能说明、配置方法、使用示例和故障排除 4. **更新此列表**:在上述表格中添加您的插件 ### Open WebUI 插件开发通用功能 开发 Action 插件时,可以使用以下 Open WebUI 提供的标准功能: #### 1. **插件元数据定义** ```python """ title: 插件名称 icon_url: data:image/svg+xml;base64,... # 插件图标(Base64编码的SVG) version: 1.0.0 description: 插件功能描述 """ ``` #### 2. **Valves 配置系统** 使用 Pydantic 定义可配置参数,用户可在 UI 界面动态调整: ```python from pydantic import BaseModel, Field class Valves(BaseModel): show_status: bool = Field( default=True, description="是否显示状态更新" ) api_key: str = Field( default="", description="API密钥" ) ``` #### 3. **标准 Action 类结构** ```python class Action: def __init__(self): self.valves = self.Valves() async def action( self, body: dict, __user__: Optional[Dict[str, Any]] = None, __event_emitter__: Optional[Any] = None, __request__: Optional[Request] = None, ) -> Optional[dict]: # 插件逻辑 return body ``` #### 4. **获取用户信息** ```python # 支持字典和列表两种格式 user_language = __user__.get("language", "en-US") user_name = __user__.get("name", "User") user_id = __user__.get("id", "unknown_user") ``` #### 5. **事件发射器 (event_emitter)** **发送通知消息:** ```python await __event_emitter__({ "type": "notification", "data": { "type": "info", # info/warning/error/success "content": "消息内容" } }) ``` **发送状态更新:** ```python await __event_emitter__({ "type": "status", "data": { "description": "状态描述", "done": False, # True表示完成 "hidden": False # True表示隐藏 } }) ``` #### 6. **调用内置 LLM** ```python from open_webui.utils.chat import generate_chat_completion from open_webui.models.users import Users # 获取用户对象 user_obj = Users.get_user_by_id(user_id) # 构建 LLM 请求 llm_payload = { "model": "model-id", "messages": [ {"role": "system", "content": "系统提示词"}, {"role": "user", "content": "用户输入"} ], "temperature": 0.7, "stream": False } # 调用 LLM llm_response = await generate_chat_completion( __request__, llm_payload, user_obj ) ``` #### 7. **处理消息体 (body)** ```python # 读取消息 messages = body.get("messages") user_message = messages[-1]["content"] # 修改消息 body["messages"][-1]["content"] = f"{user_message}\n\n新增内容" # 返回修改后的body return body ``` #### 8. **嵌入 HTML 内容** ```python html_content = "