将 RAG 检索结果、文档块或知识图谱概念转换为 OpenMAIC 互动课程。当用户要求将知识库内容、检索到的文档片段、上传的文档、或知识图谱中的概念批量转换为教学课件/互动课堂时使用此技能。支持纯需求生成、基于 PDF 内容的课程生成、和基于概念图遍历的批量课堂生成。
72
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
High
Do not use without reviewing
将 WeKnora 知识库中的 RAG 检索结果或文档内容转换为 OpenMAIC 互动课程。
通过 WeKnora 注册的 mcp_api_requester MCP 工具,你可以直接调用 OpenMAIC API(HTTP POST/GET 请求)。 该工具在 WeKnora agent 中注册为
mcp_{service_name}_{tool_name}格式(如mcp_mcp_api_requester_make_request)。 必须使用该 MCP 工具调用 API。如果 MCP 工具未配置或不可用,引导用户先部署 mcp-api-requester,不提供 curl 命令。
⚠️ MCP 可用性检查(每次读取此文件后必须执行): 在开始工作前,检查可用的 MCP 工具列表中是否存在名称包含
mcp_api_requester的工具。
- 如果未找到:必须提醒用户:"未检测到
mcp_api_requesterMCP 服务。请先从 https://github.com/yryuu/mcp-api-requester 下载代码并部署,然后在 WeKnora 中注册该 MCP 服务。"- 如果已找到:继续后续流程,使用该 MCP 工具调用 API。
OpenMAIC 有两种使用模式,根据用户场景选择:
| 模式 | Base URL | 认证方式 | 适用场景 |
|---|---|---|---|
| 托管模式(推荐快速使用) | https://open.maic.chat | Authorization: Bearer <access-code> | 用户有 open.maic.chat 访问码,无需本地部署 |
| 本地模式 | 用户提供(见本地模式 Base URL 处理) | 无认证(本地自部署) | 用户自行部署了 OpenMAIC 实例 |
判断规则:
本地模式 Base URL 处理:
http://localhost:3000 或 http://192.168.1.100:3000)"127.0.0.1 替换为 host.docker.internallocalhost 替换为 host.docker.internal⚠️ WeKnora 运行在 Docker 容器内,
localhost和127.0.0.1指向容器自身,无法访问宿主机服务。必须使用host.docker.internal作为容器访问宿主机的桥接地址。
| 配置项 | 说明 |
|---|---|
| 模式 | 托管模式 或 本地模式(见上方判断规则) |
accessCode | 托管模式必需——访问码(以 sk- 开头),由用户在 open.maic.chat 获取 |
| 健康检查 | 调用前验证服务可用:GET <BASE_URL>/api/health |
当用户请求涉及以下内容时,使用此技能:
确认课程生成的输入来源(四选一):
requirement,无需调用脚本knowledge_search 检索相关知识,再将结果组织为 requirement
→ 使用 scripts/rag-to-requirement.py 脚本转换检索结果为结构化 requirement(见 Phase 1.1)scripts/concept-to-requirement.py 脚本转换 concept + 关联 entity 为结构化 requirement(见 Phase 1.2)当场景 2 有 RAG 检索结果时,调用 scripts/rag-to-requirement.py 将 chunks 转换为 requirement:
execute_skill_script(
skill_name: "openmaic-classroom",
script_path: "scripts/rag-to-requirement.py",
input: '{"chunks": [...检索结果...], "query": "用户查询", "audience": "目标受众"}'
)input 参数格式(JSON 字符串,必须通过 input 参数传入,不可用 --file):
chunks(必填): RAG 检索结果数组,每项包含 document_name、content、metadataquery(可选): 用户原始查询audience(可选): 目标受众描述,默认"相关领域的学习者"depth(可选): 教学深度 beginner|intermediate|advanced,默认 intermediatelanguage(可选): zh-CN|en-US,默认 zh-CNfocus_areas(可选): 重点领域数组注意:
input 参数传入(等价于 echo '{"chunks":...}' | python script.py)当场景 4 需要基于知识图谱概念批量生成课堂时,执行以下步骤:
步骤 1:列出所有 concept 页面
使用 wiki_search 工具搜索所有 concept 类型的页面:
wiki_search("^concept/", limit=50)如果 concept 数量超过 50 个,多次调用翻页直到获取全部。
步骤 2:对每个 concept 获取详情和关联 entity
对每个 concept 页面:
wiki_read_page([concept_slug]) 获取页面详情(含 OutLinks 和 InLinks)entity/* 开头的 slugbidirectionaloutlinkinlinkwiki_read_page([entity_slugs]) 批量读取关联 entity(只取 title + summary,不取完整 content)步骤 3:转换为 requirement
对每个 concept,调用 scripts/concept-to-requirement.py 将 concept + 关联 entity 转换为 requirement:
execute_skill_script(
skill_name: "openmaic-classroom",
script_path: "scripts/concept-to-requirement.py",
input: '{"concept": {"slug": "...", "title": "...", "summary": "...", "content": "..."}, "entities": [{"slug": "...", "title": "...", "summary": "...", "link_type": "..."}], "language": "zh-CN", "depth": "intermediate"}'
)input 参数格式(JSON 字符串,必须通过 input 参数传入):
concept(必填): concept 页面对象,包含 slug、title、summary、contententities(可选): 关联 entity 数组,每项包含 slug、title、summary、link_typelanguage(可选): zh-CN|en-US,默认 zh-CNdepth(可选): beginner|intermediate|advanced,默认 intermediateaudience(可选): 目标受众描述,默认"相关领域的学习者"步骤 4:顺序调用 OpenMAIC API
对每个 concept 的 requirement,顺序调用 OpenMAIC 生成 API(concurrency=1):
micro-classroom步骤 5:生成 manifest(可恢复性)
生成 manifest JSON,记录每个 concept 的生成状态:
{
"kb_id": "...",
"total_concepts": 10,
"generated": ["concept/rag", "concept/llm"],
"failed": [{"slug": "concept/embedding", "error": "..."}],
"pending": ["concept/vector-db"]
}失败时从断点继续:跳过 generated 中的 concept,从 pending 的第一个开始。
关键约束:
根据输入源构建请求体,字段说明:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
requirement | string | 是 | 教学主题描述,1-2 句话 |
pdfContent | object | 否 | PDF 解析后的文本和图片 |
language | string | 否 | "zh-CN" 或 "en-US",默认 "zh-CN" |
enableWebSearch | bool | 否 | 是否启用网络搜索,默认 false |
enableImageGeneration | bool | 否 | 是否生成配图,默认 false |
enableVideoGeneration | bool | 否 | 是否生成视频,默认 false |
enableTTS | bool | 否 | 是否生成语音朗读,默认 false |
agentMode | string | 否 | "default" 或 "generate",默认 "default" |
场景适配:
requirement 直接使用用户描述requirement 使用 Phase 1.1 脚本输出中的 requirement 字段requirement 根据 PDF 提取的文本构建,pdfContent 填入解析结果requirement 使用 Phase 1.2 脚本输出中的 requirement 字段,每个 concept 单独调用 API优先方式:通过 WeKnora 注册的 MCP 工具直接调用 API。
第一步:识别 HTTP 请求工具
mcp_{service_name}_{tool_name}(如 mcp_mcp_api_requester_make_request)第二步:确定 Base URL 和认证 Header
| 模式 | Base URL | 认证 Header |
|---|---|---|
| 托管模式 | https://open.maic.chat | Authorization: Bearer <access-code> |
| 本地模式 | 用户提供的地址(已将 localhost/127.0.0.1 替换为 host.docker.internal) | 无 |
第三步:Feature Detection(发送可选功能前)
在发送生成请求前,先查询 GET <BASE_URL>/api/health(托管模式需带 auth header),检查返回的 capabilities 对象:
{
"status": "ok",
"version": "...",
"capabilities": {
"webSearch": true,
"imageGeneration": false,
"videoGeneration": false,
"tts": true
}
}capabilities 中某项为 true 时,才能在生成请求中将对应 feature flag 设为 truecapabilities(旧版本),不要发送任何可选 feature flags第四步:发送 POST 请求
使用识别到的 HTTP 请求工具发送请求。根据上面确定的模式和 URL 构造请求:
托管模式:
{
"url": "https://open.maic.chat/api/generate-classroom",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer <access-code>"
},
"body": {
"requirement": "..."
}
}本地模式:
{
"url": "<BASE_URL>/api/generate-classroom",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"body": {
"requirement": "..."
}
}MCP 工具不可用的处理:
告知用户:
未检测到
mcp_api_requesterMCP 服务。请先从 https://github.com/yryuu/mcp-api-requester 下载代码并部署,然后在 WeKnora 中注册该 MCP 服务。
API 返回 jobId 和 pollUrl 后,执行以下流程:
第 1 次查询(提交后立即执行):
GET {pollUrl} 获取当前状态status:
如果 succeeded → 进入 Phase 5
如果 failed → 报告错误并停止
如果 queued 或 running → 停止查询,告知用户:
课程正在生成中,预计需要 2-10 分钟。请稍后询问我查询进度。 Job ID: {jobId}
用户询问进度时(第 2 次查询):
GET {pollUrl}status:
如果 succeeded → 进入 Phase 5
如果 failed → 报告错误并停止
如果仍在 queued 或 running → 停止查询,告知用户继续等待:
课程仍在生成中,请稍后再试。 Job ID: {jobId}
重要规则:
status 为 succeeded 或 failed 时才继续下一步——否则必须停止并告知用户等待pollUrl生成成功后,返回:
Classroom ID: <classroomId>
Classroom URL:
<BASE_URL>/classroom/<classroomId>托管模式的 URL 格式:https://open.maic.chat/classroom/<classroomId>
URL 必须以纯文本独占一行输出,不加粗、不加代码格式、不加 Markdown 链接。
| 错误 | 含义 | 处理方式 |
|---|---|---|
| 连接失败 | 网络不通或服务未启动 | 检查 Base URL 是否正确,服务是否启动 |
| 401 | 访问码无效(托管模式) | 告知用户到 open.maic.chat 检查或重新生成访问码 |
| 403 | 每日配额用尽(托管模式) | 告知每日 10 次限制,次日零点重置 |
| 500 | 服务器错误 | 建议稍后重试或切换到本地模式 |
| Provider 配置错误 | 模型/Provider/认证问题 | 引导用户检查 配置或联系管理员 |
当用户需要将多个文档/知识片段生成课程集时:
当用户需要基于知识图谱概念批量生成课堂时(场景 4),遵循 Phase 1.2 的完整流程。
MVP 课程编排策略:one concept → one micro-classroom
课程类型标注:requirement 中标注 micro-classroom
批处理可恢复性:生成 manifest JSON,记录每个 concept 的生成状态,失败时可从断点继续。
关键约束:
mcp_{service_name}_{tool_name},根据描述识别 HTTP 请求工具c64a486
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.