小书丁智能讲题与错题本:用户上传作业/试卷照片多模态模型自动识别并讲解题目, 生成交互式可视化动态讲解 HTML(数学/物理),同时异步调用 MCP 生成 PDF 错题本, 并根据题目知识点搜索B站相关讲解视频。 三线并行:讲题+可视化(主线)|| 错题本 PDF(副线异步)|| B站视频推荐(副线异步)。 触发关键词:错题、错题本、作业、试卷、讲题、讲解、这道题、拍照讲题、批改。
⚠️ MCP 鉴权策略(按需检测 → 连接器配置 → OAuth → 设备码流兜底)
功能概述
⚠️ MCP 鉴权策略(按需检测 → 连接器配置 → OAuth → 设备码流兜底)是一项面向实际任务的技能,主要用于Step 0:连接器存在性检测(按需检查,不主动写配置);重要原则 : 不要主动写入 ~/.workbuddy/mcp.json !
核心要点
- 这是 WorkBuddy 的配置文件,agent 无权操作;
- 即使写入也需要重启 WorkBuddy 才生效;
- 正确做法是 按需检测 + 用户引导;
使用与执行
隐式检测 (。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
⚠️ MCP 鉴权策略(按需检测 → 连接器配置 → OAuth → 设备码流兜底)
Step 0:连接器存在性检测(按需检查,不主动写配置)
重要原则:不要主动写入
~/.workbuddy/mcp.json! 这是 WorkBuddy 的配置文件,agent 无权操作;即使写入也需要重启 WorkBuddy 才生效。 正确做法是 按需检测 + 用户引导。
检测方式
隐式检测(首选):
- 调用任意 MCP 工具(如
check_auth_status),如果返回结果说明连接器已配置 - 如果返回「找不到工具」「连接失败」「MCP 服务器不可达」等错误 → 连接器可能未配置
显式检测(兜底):
- 让用户去 WorkBuddy「专家」->「技能」->「连接器」查看是否能看到 xsd-mcp
- 如果看不到 → 连接器未配置,需要引导用户添加
如果连接器不存在 → 引导用户添加(不要 agent 写入)
告诉用户按以下步骤添加(不要 agent 自动写文件):
- 打开 WorkBuddy「专家」->「技能」->「连接器」
- 点击「自定义连接器」(或「添加」按钮)
- 填入以下配置:
- 名称:
xsd-mcp - URL:
https://ai.shudingkj.com/mcp - 传输协议:
streamable-http - 超时:
1800(秒)
- 名称:
- 保存(WorkBuddy 通常会自动加载新配置,可能需要重启)
完整 JSON 格式(供参考):
{
"mcpServers": {
"xsd-mcp": {
"url": "https://ai.shudingkj.com/mcp",
"transport": "streamable-http",
"timeout": 1800
}
}
}
添加完成后让用户重新发起请求,agent 再继续后续鉴权流程。
如果连接器已配置但未信任 → 进入 Step 1 OAuth 流程
Step 1:OAuth 优先(WorkBuddy 自动完成)
如果连接器存在但首次连接:
- 打开 「专家」->「技能」->「连接器」;
- 点击 「自定义连接器」;
- 找到
xsd-mcp这一项; - 点击 「信任」(首次连接)或 「重链」(圆形循环符号,已连接但失效时)重新建立连接。
WorkBuddy 会自动完成 OAuth 30 天持久化(refresh_token),首次验证后 30 天内免认证。
认证方式对比(用户体验一致)
| 方式 | 优先级 | 用户体验 | 触发 |
|---|---|---|---|
| 原生 MCP OAuth 2.1 (PKCE) | ✅ 首选 | 首次验证后 30 天内免再验证(refresh_token 持久化) | 客户端自动握手 |
| 设备码流 (Device Flow) | ⚠️ 兜底 | 首次验证后 30 天内免再验证(device_token JWT,进程重启不丢) | agent 主动调用 start_login |
两种方式用户体验完全一致:都是首次验证后 30 天内免认证。区别在于触发方式。 优先尝试 OAuth,仅在 OAuth 真的无法完成时回退到设备码流。
🔑 OAuth 实在无法完成?设备码流 fallback(最后兜底,体验等价 OAuth)
何时用:调用
check_auth_status一直返回authenticated: false,且auth_method是none/bearer_token(token 失效) 而 WorkBuddy 客户端始终无法把有效 token 传给 MCP 调用。
⚠️ Agent 行为约束(必读)
禁止行为(会浪费时间且无效):
- ❌ 反复调用
check_auth_status看结果 - ❌ 直接读取/调用
oauth_client.py、OAuth HTTP API - ❌ 读
mcp.json、反复"读取 MCP 配置" - ❌ 用
curl/http_get直接探测 OAuth 端点 - ❌ 告诉用户"请在 WorkBuddy 信任 xsd-mcp"(用户已经做了,无效)
- ❌ 反复让用户"重新点击信任连接器"
正确行为:
- ✅ 看到
authenticated: false且auth_method: "none"→ 立即调start_login - ✅ 把
verification_url以链接形式直接发给用户,让用户点开 - ✅ 用户验证后调
check_auth_status(device_code="...")拿到 30 天 JWT - ✅ 必须把 device_token 告知 WorkBuddy 缓存(下次调用带
Authorization: Bearer即可免认证)
设备码流完整流程
Step 1:调用 mcp__xsd-mcp__start_login(公开免鉴权)
- 返回
verification_url(如https://ai.shudingkj.com/device/verify?code=XXXX) - 返回
device_code(如E88CjUhoZwwV7T68zhB4Xyb9BjscfkHx) - 返回
expires_in(600 秒,设备码本身 10 分钟过期)
Step 2:把 verification_url 以 Markdown 链接形式发给用户(直接发):
🔑 **一键启用 xsd-mcp**:[点击这里完成验证](verification_url) (点开后输入手机号 + 短信验证码,10 秒搞定。绑定后 30 天内免再验证,进程重启也不丢失。)
Step 3:等待用户在浏览器完成验证(不需要轮询,让用户告诉「验证好了」即可)
Step 4:用户告知后立即调用:
mcp__xsd-mcp__check_auth_status(device_code="<上一步返回的 device_code>")
返回结构:
authenticated: true且auth_method: device_long_lived_tokendevice_token← 关键:30 天有效的 JWT,客户端必须缓存device_token_expires_in: 2592000(30 天 × 86400 秒)device_token_usage_hint: 提示用法
Step 5:告诉 WorkBuddy 缓存 device_token,后续 MCP 调用带上:
Authorization: Bearer
- WorkBuddy 重启不影响(自己缓存即可)
- MCP server 重启不影响(JWT 自带签名校验)
- 30 天内免认证(与 OAuth refresh_token 等价)
Step 6:继续发起错题本/视频搜索等请求
device_token 持久化机制
- JWT RS256 签名:服务端用 RSA 私钥签名,客户端无需联网即可验证
- payload:
{sub: user_id, exp: now+30days, scope: "cuoti", type: "device_long_lived"} - 客户端缓存策略:WorkBuddy 应在本地存储
device_token,每次 MCP 调用时作为Authorization: Bearerheader 带上 - 过期前续签:用户可在 token 即将过期时(28 天后)重新走一次设备码流刷新
为什么设备码流体验等价 OAuth:
| 维度 | OAuth | 设备码流 |
|---|---|---|
| 首次验证 | ✅ 浏览器手机号 | ✅ 浏览器手机号 |
| 长期凭证 | refresh_token (30天) | device_token JWT (30天) |
| 调用方式 | Authorization: Bearer |
Authorization: Bearer |
| 凭证缓存 | WorkBuddy 客户端 | WorkBuddy 客户端 |
| 进程重启 | 不影响(持久化) | 不影响(JWT 自签名) |
| 30 天免认证 | ✅ | ✅ |
设备码流额外优势:
- 不依赖客户端 OAuth 实现(WorkBuddy 不需要支持 OAuth 发现/回调)
- 不需要 OAuth 动态注册/refresh_token 等复杂握手
- 触发方式更可控(agent 主动调
start_login)
核心架构:路径 A 与路径 B 真正并行,路径 C 依赖 A3
优化重点(v3.1):路径 A 和路径 B 是真正并行启动,不是"边讲边启动 B"。 agent 应在阶段 0 题号确认后,同时启动路径 A(A1 多模态识别)和路径 B(B1 鉴权 + B2 配额)。 路径 B1-B4 完全不依赖路径 A 的输出(讲解内容),可与 A1-A4 并行穿插执行。 路径 C 必须等 A3 完成(需要从讲解中提取核心知识点),因此在 A3 后启动。
时间线示意
阶段 0: 题号确认(必须先完成,B 需要题号)
│
├─ 并行启动 ──────────────────────────────────────────────────┐
│ │
├─ 路径 A(主线) │
│ ├─ A1 多模态识别题目 ─┐ │
│ ├─ A2 题号确认 ──────┤ (与 B3 上传图片 并行) │
│ ├─ A3 深度讲解 ──────┐ │
│ └─ A4 生成可视化 ────┤ (与 B4 发起 PDF、B5 轮询 并行) │
│ │
├─ 路径 B(副线·并行) │
│ ├─ B1 鉴权检查 ──── 与 A1 并行 │
│ ├─ B2 配额检查 ──── 与 A1 并行 │
│ ├─ B3 上传图片 ────── 与 A2 并行 │
│ ├─ B4 发起 PDF(async)─ 与 A3 并行,秒返 task_id │
│ └─ B5 轮询 ─────────── 与 A4 并行,穿插等待 │
│ │
└─ 路径 C(依赖 A3)────────────────────────────────────────────┘
├─ C1 提取核心知识点(A3 完成后启动)
└─ C2 调用 search_knowledge_videos(C1 后立即启动)
关键原则:
- 路径 A 是主线,agent 应先开始 A1 多模态识别(不依赖任何前置)
- 路径 B 的 B1-B4 完全不依赖 A 的输出,阶段 0 后立即与 A1 并行启动
- B4 发起 PDF 是异步任务(秒返 task_id),不阻塞后续步骤
- B5 轮询穿插在 A4 生成可视化期间(不需要等 A 完成)
- 路径 C 必须等 A3 完成(需要从讲解中提取知识点),其他步骤在 A3 后启动
- 最终呈现三个产物:可视化 HTML + 错题本 PDF + 视频推荐
agent 实际行为
# 阶段 0: 题号确认(必须串行)
problem_number = confirm_question_number(user_message, identified_problems)
# 阶段 1: 并行启动 A 和 B
# agent 应该**同时**发起这两个调用(不是先 A 后 B)
in_parallel(
# 路径 A 主线
task_A1_A2_A3_A4(), # 多模态识别 → 题号确认 → 深度讲解 → 生成可视化
# 路径 B 副线
task_B1_auth(), # 鉴权
task_B2_quota(), # 配额
task_B3_upload(), # 上传图片(需要题号)
task_B4_submit(), # 发起 PDF 生成(异步,返回 task_id)
)
# 路径 B5:穿插在 A4 期间轮询
poll_pdf_task(task_id) # 不阻塞 A4
# 路径 C:A3 完成后启动
task_C1_extract_keywords(), # 从 A3 讲解中提取知识点
task_C2_search_videos(), # 搜索视频
MCP 工具参考
以下全部工具属于 xsd-mcp 服务器。路径 A(讲题+可视化)由 WorkBuddy 自身能力完成,路径 B(错题本 PDF)和路径 C(B站视频搜索)使用 MCP 工具。
| SKILL 中的工具名 | WorkBuddy 中的实际调用名 | 用途 | 路径 |
|---|---|---|---|
check_auth_status |
mcp__xsd-mcp__check_auth_status |
鉴权检查(支持 device_code 参数触发会话绑定) |
B |
start_login |
mcp__xsd-mcp__start_login |
设备码流登录入口(手机端 fallback,公开免鉴权) | B |
get_usage_summary |
mcp__xsd-mcp__get_usage_summary |
配额检查 | B |
upload_image |
mcp__xsd-mcp__upload_image |
上传公网图片 | B |
get_upload_ticket |
mcp__xsd-mcp__get_upload_ticket |
获取本地直传凭证 | B |
batch_extract_and_pdf |
mcp__xsd-mcp__batch_extract_and_pdf |
批量提取并生成 PDF | B |
get_task_status |
mcp__xsd-mcp__get_task_status |
轮询异步任务状态 | B |
search_knowledge_videos |
mcp__xsd-mcp__search_knowledge_videos |
B站知识点视频搜索 | C |
MCP 客户端认证配置
两种方式用户体验一致(都是 30 天免认证):
| 方式 | 优先级 | 用户体验 | 客户端要求 |
|---|---|---|---|
| 原生 MCP OAuth 2.1 (PKCE) | ✅ 首选 | 首次验证后 30 天内免认证(refresh_token 持久化) | 支持 OAuth 发现+回调+token 持久化 |
| 设备码流 (Device Flow) | ⚠️ 兜底 | 首次绑定后 30 天内免认证(Redis 持久化,进程重启不丢) | 任何能调用 MCP 工具的客户端 |
对 agent 的要求:
- 优先 OAuth:让 WorkBuddy 走标准 OAuth 流程("信任连接器"按钮),30 天免认证
- 设备码流兜底:仅在 OAuth 实在无法完成时使用。详见上方「🔑 OAuth 实在无法完成?设备码流 fallback」章节
完整工作流
阶段 0:接收用户请求
当用户发送题目图片并请求讲解/整理错题时,进入以下流程。
快速判断:
- 用户只说了"整理错题"/"生成错题本" -> 可以只走路径 B
- 用户说了"讲题"/"讲解"/"这道题怎么做" -> 必须走路径 A + B + C(三线)
- 用户没有明确指定 -> 默认三线并行(讲题 + 错题本 + 视频推荐)
- 用户给了图片但没说题号 -> 先走 A1 识别,再走 A2 澄清
阶段 0 的关键作用: 阶段 0 完成后,必须明确知道:
- 题号(如"第3题")——路径 B3(上传)和 B4(发起 PDF)需要
- 科目(数学/物理)——路径 B4 需要
- 题型(是否需要可视化)——路径 A4 需要
⚠️ 题号必须先确定,否则路径 B 无法发起 PDF 生成。题号确认后立即并行启动 A 和 B。 如果用户没指定题号,先弹出选择框(用
ask_followup_question)让用户选择,不要阻塞太久。 一旦题号确认,同时启动 A1 和 B1-B2(不要等 A 完成再启动 B)。
路径 A(主线):智能讲题 + 可视化 HTML
路径 A 不依赖 MCP 工具,完全由 WorkBuddy 自身多模态 + 代码生成能力完成。
A1. 多模态识别题目
使用 WorkBuddy 自身的多模态视觉能力直接观察用户上传的图片:
- 识别图片中共有几道题,每道题的题号、科目(数学/物理)、题型
- 列出题目清单:
[题号] 科目 - 简要描述 - 如果图片中题目有手写批改痕迹(红笔✓/✗),一并识别
⚠️ 不要用 MCP 工具做题目识别。MCP 的
extract_questions用于生成 PDF 时的文字提取, 不适用于实时讲题场景。实时讲题直接用 WorkBuddy 视觉能力。
A2. 确认用户需求
根据用户消息判断:
- 用户已指定题号(如"讲一下第3题")-> 直接进入 A3
- 用户未指定题号 -> 弹出选择框让用户选择要讲解的题目。使用
ask_followup_question工具,格式如下:{ "questions": "[{"id":"q_select","question":"我看到图片中有以下题目,你想让我讲解哪道?","options":["第1题 - 数学 - [简要描述]","第2题 - 物理 - [简要描述]","第3题 - 数学 - [简要描述]","全部讲解"],"multiSelect":false}]" }options中每一项格式为第X题 - 科目 - 简要描述- 最后一个选项固定为
全部讲解 multiSelect设为false(单选)- 用户选择后根据结果进入 A3(选"全部讲解"则逐题讲解)
- 图片中只有一道题 -> 无需询问,直接进入 A3
A3. 深度讲解
对目标题目进行完整讲解,覆盖:
- 知识点定位:该题考察的核心知识点
- 审题分析:已知条件、隐含条件、求解目标
- 解题思路:逻辑推导链条,为什么这样解
- 分步解答:每一步的计算/推理过程
- 答案与验证:最终答案,验证方法
- 易错点提示:常见错误和避坑指南
讲解风格:教师口语化,逻辑清晰,适当使用 Markdown 排版公式(LaTeX 风格,如 $F=ma$、$angle ABC$)。
🔗 A3 完成后立即启动路径 C:从讲解中提取核心知识点(如"二次函数与一次函数交点个数"), 调用
search_knowledge_videos搜索B站相关讲解视频。
A4. 生成可视化动态讲解 HTML
讲解完成后,根据题目类型生成交互式 HTML 可视化页面。
判断科目类型:
- 几何、函数、方程、不等式、坐标几何 -> 数学可视化(->
references/math-visualization.md) - 力学、电学、磁学、光学、波动、热学 -> 物理可视化(->
references/physics-visualization.md) - 其他(如纯代数计算)-> 可跳过可视化,仅文字讲解
可视化生成的核心要求:
- 单文件 HTML,CSS/SVG/JavaScript 全部内联,零外部依赖
- 内联 SVG +
const steps = [...]状态机驱动(标题/讲解/公式/SVG 显隐/高亮) - 数学 3
6 步,物理 37 步,每步一个核心观察点 - 所有 SVG 元素预绘制在
中,JS 只负责切换显隐 - 禁止 Canvas、MathJax/KaTeX、外部库、eval、动态创建 SVG
- SVG 使用固定 viewBox,标签间距 ≥ 40px 防重叠,各区域垂直排列不混叠
- 文字区/公式区用独立 + 背景色 + 内边距,与 SVG 区域分离
📘 详细规范见 reference 文件:
- 数学:
references/math-visualization.md(步骤设计、SVG 模式、色彩规范、模板、自检清单) - 物理:
references/physics-visualization.md(同上 + 临界点识别、复杂场景简化策略)
输出方式:
- 将 HTML 写入
/mnt/user-data/outputs/目录(文件名如math_visual_题号.html) - 不要在聊天中输出原始 HTML 代码(会污染上下文)
- 写入文件后告诉用户"可视化讲题页面已生成,可打开查看"
路径 B(副线 · 与 A 真正并行):错题本 PDF 生成
路径 B 使用 MCP 工具。关键:路径 B 与路径 A 真正并行——
- B1(鉴权)和 B2(配额)只依赖 user_id,阶段 0 后立即与 A1(多模态识别)并行启动
- B3(上传图片)依赖题号,与 A2(题号确认)并行
- B4(发起 PDF)是异步任务,秒返 task_id,与 A3(讲解)并行
- B5(轮询)穿插在 A4(生成可视化)期间,不阻塞 A
绝对不要等 A 完成后才启动 B,那样会浪费 B1-B4 几分钟的执行时间。
B1. 鉴权检查(第一步):分两步(连接器检测 + 鉴权状态)
Step 1:连接器存在性检测(按需检查,不要主动写 mcp.json)
调用
mcp__xsd-mcp__check_auth_status:- 工具调用成功(即使返回
authenticated: false)→ 连接器已配置,进入 Step 2 - 工具调用失败(找不到工具 / 连接失败 / 找不到 xsd-mcp 服务器)→ 连接器未配置:
- 不要 agent 写入 mcp.json(agent 无权操作 WorkBuddy 配置文件)
- 引导用户手动添加:
请在 WorkBuddy 中添加 xsd-mcp 连接器(一次配置,长期使用): - 名称:xsd-mcp - URL:https://ai.shudingkj.com/mcp - 传输协议:streamable-http - 超时:1800 秒
- 用户添加后让用户重新发起请求,再继续后续流程
- 路径 A 继续执行(不受连接器配置影响)
Step 2:检查鉴权状态(连接器已配置时)
连接器存在后,调用
mcp__xsd-mcp__check_auth_status。authenticated: true-> 继续 B2authenticated: false->- 检查
auth_method字段判断走哪个 fallback:auth_method: "none"且 WorkBuddy 信任连接器已确认打开 → 走设备码流 (详见 SKILL 开头「🔑 OAuth 实在无法完成?设备码流 fallback」章节)auth_method: "bearer_token"但用户仍报"未登录" → token 已过期,让 WorkBuddy 重新走 OAuth- 若 WorkBuddy 完全无法完成 OAuth 流程 → 设备码流
- 设备码流 5 步(关键:必须拿到 30 天 JWT 并让 WorkBuddy 缓存):
- 调
mcp__xsd-mcp__start_login获取verification_url - 把链接发给用户,让用户点开完成手机号验证
- 用户告知后调
mcp__xsd-mcp__check_auth_status(device_code="...") - 从响应中提取
device_token(30 天 JWT) - 告诉 WorkBuddy 缓存 device_token,后续调用带
Authorization: Bearer即可在 30 天内免认证(与 OAuth refresh_token 等价)
- 调
绝对不要:
- 反复探测 OAuth HTTP API / 读 mcp.json / 调 oauth_client.py
- 让用户在 WorkBuddy 中"重新信任连接器"(用户可能已做过,无效)
- 忽略 device_token 不缓存(否则每次都要重新走设备码流)
路径 A 继续执行(不受鉴权影响)。
- 检查
常见错误区分:
- 「找不到 xsd-mcp 服务器」→ 连接器未配置 → Step 1 处理
- 「未登录 / 401」→ 鉴权问题 → Step 2 处理
- 「MCP 服务器不可达」→ 网络问题 → 告知用户稍后重试,路径 A 继续
B2. 配额检查
调用
mcp__xsd-mcp__get_usage_summary。- 剩余 0 -> 告知用户"本月配额已用完,错题本 PDF 无法生成",路径 A 继续
- 剩余 < 3 -> 提示用户确认后继续
- 充足 -> 继续 B3
B3. 上传图片
- 用户提供了 OSS/公网图片链接 -> 调用
mcp__xsd-mcp__upload_image(image_url=...) - 用户上传了本地文件(最常见) ->
- 调用
mcp__xsd-mcp__get_upload_ticket(ext="jpg")获取put_url+oss_url - 用
curl -X PUT -T <本地文件路径> "直传到 OSS" - 上传成功后,用返回的
oss_url作为图片链接
- 调用
⚠️ put_url 预签名凭证 1 小时有效。PUT 时不要手动添加
Content-Type请求头。B4. 发起异步 PDF 生成
调用
mcp__xsd-mcp__batch_extract_and_pdf:batch_extract_and_pdf( requests=[{ "image_urls": [<题图 OSS 链接>], "question": "<题号,如 '第3题'>", "subject": "<科目:数学 / 物理>", }], title="<科目>错题本", subject="<科目>", )- 返回
task_id(异步任务,不会同步等结果)
B5. 轮询任务状态(与 A4 穿插执行)
循环调用
mcp__xsd-mcp__get_task_status(task_id=task_id),间隔 3~5 秒, 直到status变为done或failed:done-> 获取download_url/pdf_urlfailed-> 反馈error给用户
⚠️ 轮询穿插在 A4 期间(不要阻塞路径 A):
- 路径 A4 生成可视化期间,每次回答用户问题/讲解步骤之间插入一次轮询
- 不要等 A 全部完成才轮询(浪费并行机会)
- 路径 A 完成后如果 PDF 还未好,继续轮询直至完成
- 最终呈现时把 PDF 链接和视频列表一起给用户
路径 C(副线 · 异步并行):B站视频推荐
路径 C 使用 MCP 工具搜索B站讲解视频。在路径 A 的 A3(深度讲解)完成后立即启动路径 C。
C1. 提取核心知识点
从 A3 的讲解内容中提取该题目的核心知识点关键词。
知识点提取要点:
- 提取 1-3 个核心知识点,组成搜索关键词
- 关键词应具体、有教学价值,如"二次函数与一次函数交点个数"、"相似三角形判定"、"受力分析正交分解"
- 避免过于宽泛(如只写"数学")或过于具体(如照抄整道题)
示例:
- 题目考查二次函数 y=ax²+bx+c 与直线 y=kx+m 的交点个数 -> 知识点:
二次函数与一次函数交点个数 - 题目考查相似三角形证明 -> 知识点:
相似三角形判定与证明 - 题目考查斜面上物体受力分析 -> 知识点:
斜面受力分析正交分解法
C2. 调用视频搜索工具
调用
mcp__xsd-mcp__search_knowledge_videos:search_knowledge_videos( keyword="<核心知识点,如 '二次函数与一次函数交点个数'>", subject="<科目:数学 / 物理>", count=3, )返回结构:
{ "success": true, "keyword": "二次函数与一次函数交点个数", "total_candidates": 15, "filter_note": "已按粉丝≥50万的大UP筛选后综合排序", "videos": [ { "rank": 1, "title": "初中数学【二次函数】从零基础到中考压轴难度合集", "author": "一数", "fans": 24940000, "fans_display": "2494.0万", "play": 1234567, "play_display": "1,234,567", "duration": 3600, "duration_display": "1:00:00", "url": "https://www.bilibili.com/video/BV1t54y1173m", "relevance_score": 3, "chapters": ["第3讲 二次函数、方程与不等式"], "chapter_hint": "重点看:第3讲 二次函数、方程与不等式" } ], "learning_order": [ "1. 先看《一数》... -> 体系打基础", "2. 先看《马哥初中几何》... -> 专攻本题型", "3. 先看《马哥初中几何》... -> 补变式/拔高" ] }- 搜索耗时约 5-15 秒(多策略检索 + 粉丝校验 + 排序)
- 如果返回
success: false,告知用户视频搜索暂不可用,不影响其他路径
⚠️ 路径 C 不消耗配额(cost=0),但不绕过鉴权。 如果鉴权失败(路径 B 的 B1 已检测),路径 C 同样不可用,路径 A 继续执行。
最终呈现(路径 A + B + C 汇合)
并行执行的好处:三线并行启动后,总耗时 = max(A, B) + C 启动延迟,而不是 A + B + C。 用户实际等待时间 = 路径 A 完成时间(A4 生成可视化通常最慢,约 30-60 秒)。 路径 B 的 PDF 生成和路径 C 的视频搜索都是后端异步任务,不阻塞用户。
三条线全部完成后,合并呈现结果:
📚 题目讲解已完成! 📖 **文字讲解**:[已完成] 🎬 **可视化动态讲解**:[已生成,可打开 HTML 文件查看] - 包含 X 步交互式动画,逐步展示推理/物理过程 - 使用上一步/下一步按钮切换 📄 **错题本 PDF**:⬇️ 点击下载(24h 有效) [📄 错题本PDF下载](download_url) 📺 **B站推荐讲解视频**: 1. 一数《初中数学【二次函数】从零基础到中考压轴难度合集》 链接:https://www.bilibili.com/video/BV1t54y1173m 重点看第 3 讲「二次函数、方程与不等式」(交点个数就靠联立+判别式 Δ),第 7 讲顺带讲 x 轴交点。 2. 马哥初中几何《二次函数与直线交点分布大合辑》 链接:https://www.bilibili.com/video/BV1GUAwefEKC 最直接对口:标题就是「二次函数与直线(=一次函数图像)交点」,系统讲 0/1/2 个交点的判定与分类讨论。 3. 马哥初中几何《二函与直线交点问题与任意直线》 链接:https://www.bilibili.com/video/BV1bWDzYtEJs 补充带参数(k、m)的变式,应对中考压轴。 学习顺序建议:先看成体系的一数第 3 讲打基础 -> 再用马哥第 2 个专攻「交点个数」题型 -> 有余力看第 3 个补含参变式。
如果路径 B 或 C 失败(鉴权/配额/网络问题),只呈现可用的产物, 并说明不可用部分的原因。不要让 B/C 的失败阻塞 A。 视频推荐结果应基于
search_knowledge_videos返回的数据格式化呈现, 包含:序号、标题、链接、重点章节提示、学习顺序建议。特殊场景处理
仅整理错题(不讲解)
用户明确说"整理错题"/"生成错题本"而不需要讲解 -> 只走路径 B。
图片中有多道题,用户指定一道讲解
- 路径 A 只讲解指定题目
- 路径 B 生成全部题目的错题本 PDF
- 路径 C 只搜索指定题目的知识点视频
- 告知用户:"已针对第X题进行讲解,同时错题本包含了图片中所有题目"
图片中有多道题,用户要求全部讲解
- 路径 A 逐题讲解并生成可视化(每题独立 HTML)
- 路径 B 生成全部题目的错题本 PDF
- 路径 C 为每道题分别搜索知识点视频(或合并核心知识点一次搜索)
- 每题讲解完成后展示可视化链接
路径 B/C 工具不可用
如果 MCP 工具调用持续失败(连接不上/工具未找到):
先区分是连接器配置问题还是鉴权问题:
- 工具找不到 / 找不到 xsd-mcp 服务器 → 连接器未配置(按 SKILL 开头「Step 0 连接器存在性检测」处理,引导用户手动添加)
- 工具返回 401 / 未登录 → 鉴权问题(按 SKILL 开头「Step 1 OAuth」或「设备码流」处理)
- MCP 服务器不可达(HTTP 错误) → 网络问题,告知用户稍后重试
路径 A 始终继续执行不受影响。
告知用户:
当前无法连接 MCP 服务(原因:xxx),已为你完成题目讲解。 如需错题本 PDF 或视频推荐,请按以下步骤处理:[具体步骤]
配额消耗
方法 消耗 路径 check_auth_status/get_usage_summary/get_task_status/upload_image/get_upload_ticket0 B batch_extract_and_pdf1 B search_knowledge_videos0 C 免费用户每月 10 点。路径 A(讲题+可视化)和路径 C(视频搜索)不消耗 MCP 配额。 完整流程最多消耗 1 点(仅 PDF 生成)。
限制
- 支持数学、物理等科目的题目讲解与错题整理
- 题号格式:第12题、第13,14题
- 每次最多 2 页图片
- 返回
quota_exceeded时提示配额已用完(不影响讲题和视频搜索) - B站视频搜索依赖B站 API 可用性,偶发限流时会返回失败
- 数学:
热门AI工具
相关专题
本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。
0
2026.11.12
本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。
0
2026.11.12
本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。
0
2026.11.12
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.8万人学习
共6课时 | 54.7万人学习
最新文章