Add Flash Card plugin with HTML generation and key point extraction

- Introduced a new Flash Card plugin that generates visually appealing flashcards from text input.
- Implemented functionality to extract key points and categories for efficient learning.
- Added a new Python file for the plugin logic and a corresponding image asset.
- Removed outdated README files for the previous knowledge card plugin.
This commit is contained in:
Jeff fu
2025-12-30 11:18:36 +08:00
parent fb4af28539
commit 6a4a578394
8 changed files with 91 additions and 61 deletions

View File

@@ -0,0 +1,41 @@
# Flash Card
Generate polished learning flashcards from any text—title, summary, key points, tags, and category—ready for review and sharing.
![Flash Card Example](flash_card.png)
## Highlights
- **One-click generation**: Drop in text, get a structured card.
- **Concise extraction**: 35 key points and 24 tags automatically surfaced.
- **Multi-language**: Choose target language (default English).
- **Progressive merge**: Multiple runs append cards into the same HTML container; enable clearing to reset.
- **Status updates**: Live notifications for generating/done/error.
## Parameters
| Param | Description | Default |
| ------------------- | ------------------------------------------------------------ | ------- |
| MODEL_ID | Model to use; empty falls back to current session model | empty |
| MIN_TEXT_LENGTH | Minimum text length; below this prompts for more text | 50 |
| LANGUAGE | Output language (e.g., en, zh) | en |
| SHOW_STATUS | Whether to show status updates | true |
| CLEAR_PREVIOUS_HTML | Whether to clear previous card HTML (otherwise append/merge) | false |
| MESSAGE_COUNT | Use the latest N messages to build the card | 1 |
## How to Use
1. Install and enable “Flash Card”.
2. Send the text to the chat (multi-turn supported; governed by MESSAGE_COUNT).
3. Watch status updates; the card HTML is embedded into the latest message.
4. To regenerate from scratch, toggle CLEAR_PREVIOUS_HTML or resend text.
## Output Format
- JSON fields: `title`, `summary`, `key_points` (35), `tags` (24), `category`.
- UI: gradient-styled card with tags, key-point list; supports stacking multiple cards.
## Tips
- Very short text triggers a prompt to add more; consider summarizing first.
- Long text is accepted; for deep analysis, pre-condense with other tools before card creation.

View File

@@ -0,0 +1,41 @@
# 闪记卡 (Flash Card)
快速将文本提炼为精美的学习记忆卡片,自动抽取标题、摘要、关键要点、标签和分类,适合复习与分享。
![闪记卡示例](flash_card_cn.png)
## 功能亮点
- **一键生成**:输入任意文本,直接产出结构化卡片。
- **要点聚合**:自动提取 3-5 个记忆要点与 2-4 个标签。
- **多语言支持**:可设定目标语言(默认中文)。
- **渐进合并**:多次调用会将新卡片合并到同一 HTML 容器中;如需重置可启用清空选项。
- **状态提示**:实时推送“生成中/完成/错误”等状态与通知。
## 参数说明
| 参数 | 说明 | 默认值 |
| ------------------- | ------------------------------------- | ------ |
| MODEL_ID | 指定推理模型;为空则使用当前会话模型 | 空 |
| MIN_TEXT_LENGTH | 最小文本长度,不足时提示补充 | 50 |
| LANGUAGE | 输出语言(如 zh、en | zh |
| SHOW_STATUS | 是否显示状态更新 | true |
| CLEAR_PREVIOUS_HTML | 是否清空旧的卡片 HTML否则合并追加 | false |
| MESSAGE_COUNT | 取最近 N 条消息生成卡片 | 1 |
## 使用步骤
1. 在插件市场安装并启用“闪记卡”。
2. 将待整理的文本发送到聊天框(可多轮对话,受 MESSAGE_COUNT 控制)。
3. 等待状态提示,卡片将以 HTML 形式嵌入到最新消息中。
4. 若需重新生成,开启 CLEAR_PREVIOUS_HTML 或直接重发文本。
## 输出格式
- JSON 字段:`title``summary``key_points`3-5 条)、`tags`2-4 条)、`category`
- 前端呈现:单卡片带渐变主题、标签胶囊、要点列表,可连续追加多张卡片。
## 使用建议
- 文本过短会提醒补充,可先汇总再生成卡片。
- 长文本无需截断,直接生成;如需深度分析可先用其他工具精炼后再制作卡片。

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

View File

@@ -80,10 +80,6 @@ class Action:
default=50, default=50,
description="Minimum text length required to generate a flashcard (characters).", description="Minimum text length required to generate a flashcard (characters).",
) )
MAX_TEXT_LENGTH: int = Field(
default=2000,
description="Recommended maximum text length. For longer texts, deep analysis tools are recommended.",
)
LANGUAGE: str = Field( LANGUAGE: str = Field(
default="en", default="en",
description="Target language for card content (e.g., 'en', 'zh').", description="Target language for card content (e.g., 'en', 'zh').",
@@ -153,13 +149,6 @@ class Action:
) )
return body return body
if text_length > self.valves.MAX_TEXT_LENGTH:
await self._emit_notification(
__event_emitter__,
f"Text quite long ({text_length} chars), consider using 'Deep Reading' for deep analysis.",
"info",
)
# Notify user that we are generating the card # Notify user that we are generating the card
await self._emit_notification( await self._emit_notification(
__event_emitter__, "⚡ Generating Flash Card...", "info" __event_emitter__, "⚡ Generating Flash Card...", "info"

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

View File

@@ -12,6 +12,7 @@ from pydantic import BaseModel, Field
from typing import Optional, Dict, Any, List from typing import Optional, Dict, Any, List
import json import json
import logging import logging
import re
from open_webui.utils.chat import generate_chat_completion from open_webui.utils.chat import generate_chat_completion
from open_webui.models.users import Users from open_webui.models.users import Users
@@ -78,10 +79,6 @@ class Action:
MIN_TEXT_LENGTH: int = Field( MIN_TEXT_LENGTH: int = Field(
default=50, description="生成闪记卡所需的最小文本长度(字符数)。" default=50, description="生成闪记卡所需的最小文本长度(字符数)。"
) )
MAX_TEXT_LENGTH: int = Field(
default=2000,
description="建议的最大文本长度。超过此长度建议使用深度分析工具。",
)
LANGUAGE: str = Field( LANGUAGE: str = Field(
default="zh", description="卡片内容的目标语言 (例如 'zh', 'en')。" default="zh", description="卡片内容的目标语言 (例如 'zh', 'en')。"
) )
@@ -149,13 +146,6 @@ class Action:
) )
return body return body
if text_length > self.valves.MAX_TEXT_LENGTH:
await self._emit_notification(
__event_emitter__,
f"文本较长({text_length}字符),建议使用'墨海拾贝'进行深度分析。",
"info",
)
# Notify user that we are generating the card # Notify user that we are generating the card
await self._emit_notification(__event_emitter__, "⚡ 正在生成闪记卡...", "info") await self._emit_notification(__event_emitter__, "⚡ 正在生成闪记卡...", "info")
await self._emit_status(__event_emitter__, "⚡ 闪记卡: 开始生成...", done=False) await self._emit_status(__event_emitter__, "⚡ 闪记卡: 开始生成...", done=False)
@@ -177,13 +167,13 @@ class Action:
你是一个闪记卡生成专家专注于创建适合学习和记忆的知识卡片你的任务是将文本提炼成简洁易记的学习卡片 你是一个闪记卡生成专家专注于创建适合学习和记忆的知识卡片你的任务是将文本提炼成简洁易记的学习卡片
请提取以下字段并以 JSON 格式返回 请提取以下字段并以 JSON 格式返回
1. "title": 创建一个简短精准的标题6-12 突出核心概念 1. "title": 创建一个简短精准的标题3-8 个词突出核心概念
2. "summary": 用一句话总结核心要义20-40 要通俗易懂便于记忆 2. "summary": 用一句话总结核心要义10-25 个词要通俗易懂便于记忆
3. "key_points": 列出 3-5 个关键记忆点每个 10-20 3. "key_points": 列出 3-5 个关键记忆点每个 5-15 个词
- 每个要点应该是独立的知识点 - 每个要点应该是独立的知识点
- 使用简洁口语化的表达 - 使用简洁口语化的表达
- 避免冗长的句子 - 避免冗长的句子
4. "tags": 列出 2-4 个分类标签每个 2-5 4. "tags": 列出 2-4 个分类标签每个 1-3 个词
5. "category": 选择一个主分类概念技能事实方法等 5. "category": 选择一个主分类概念技能事实方法等
目标语言: {self.valves.LANGUAGE} 目标语言: {self.valves.LANGUAGE}
@@ -680,7 +670,7 @@ class Action:
tags_html = "" tags_html = ""
if "tags" in data and data["tags"]: if "tags" in data and data["tags"]:
for tag in data["tags"]: for tag in data["tags"]:
tags_html += f'<span class="card-tag">#{tag}</span>' tags_html += f'<div class="card-tag"><span class="card-tag-label">#</span>{tag}</div>'
# Generate key points HTML # Generate key points HTML
points_html = "" points_html = ""
@@ -708,7 +698,6 @@ class Action:
</ul> </ul>
</div> </div>
<div class="card-footer"> <div class="card-footer">
<span class="card-tag-label">标签</span>
{tags_html} {tags_html}
</div> </div>
</div> </div>

View File

@@ -1,15 +0,0 @@
# Flash Card
Quickly generates beautiful flashcards from text, extracting key points and categories for efficient learning.
## Features
- **Instant Generation**: Turn any text into a structured flashcard.
- **Key Point Extraction**: Automatically identifies core concepts.
- **Visual Design**: Generates a visually appealing HTML card.
## Usage
1. Install the plugin.
2. Send text to the chat.
3. The plugin will analyze the text and generate a flashcard.

View File

@@ -1,15 +0,0 @@
# 闪记卡 (Flash Card)
快速将文本提炼为精美的学习记忆卡片,支持核心要点提取与分类,助力高效学习。
## 功能特点
- **即时生成**:将任何文本转化为结构化的记忆卡片。
- **要点提取**:自动识别核心概念。
- **视觉设计**:生成视觉精美的 HTML 卡片。
## 使用方法
1. 安装插件。
2. 发送文本到聊天框。
3. 插件将分析文本并生成一张闪记卡。