Skip to content
Back to skills

Cnki Edu Topic Recommend

ASecurity

基于知网基础教育文献的四阶递进式教研选题推荐,从方向探索到课题落地提供全流程评估。

  • 417 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 8, 2026
ai-agentspythongobash

Works with

  • mcp

Security analysis

A100/100

Pro scans all 8 files and shows the line behind each finding

Scanned November 8, 2026

npx -y skills add infometa/workbuddyskills --skill cnki-edu-topic-recommend --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cnki Edu Topic Recommend?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cnki Edu Topic Recommend
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/infometa-cnki-edu-topic-recommend/badge)](https://www.skillsdirectory.com/skills/infometa-cnki-edu-topic-recommend)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cnki-edu-topic-recommend
display_name: 选题推荐
display_name_en: Topic Recommendation
description: 基于知网基础教育文献的四阶递进式教研选题推荐,从方向探索到课题落地提供全流程评估。
description_zh: 基于知网基础教育文献的四阶递进式教研选题推荐,从方向探索到课题落地全流程评估。
description_en: Four-stage teaching-research topic recommendation grounded in CNKI K-12 literature, from exploration to project-ready assessment.
category: education
version: 1.0.1
author: 知网 edu
---

# cnki-edu-topic-recommend(WorkBuddy 版 · 可公开发布 · 中小学定向)

知网 edu 中小学教研选题推荐技能。面向 **K-12(小学/初中/高中)教师、教研组长、学科带头人、名师工作室** 等基础教育教研工作者,基于 CNKI 基础教育文献数据,以「方向探索 → 深度聚焦 → 价值评估 → 确定方向」四阶递进式方法论,为教研选题提供从启蒙到落地的全流程智能推荐与评估。支持首轮广谱推荐、多轮细化聚焦、单选深入评估与双选对比分析。

## 发布说明与前置依赖

- **适用人群(明确聚焦)**:K-12 中小学教师、教研组长、备课组长、学科带头人、名师工作室成员、区县教研员等基础教育教研工作者。本技能**不面向**高校硕博学术科研选题(此类需求请用通用学术选题技能)。
- **典型产出场景**:区级/市级/省级教育科学规划课题与小课题申报、教学论文撰写、校本教研案例、教学设计/公开课/优质课、作业设计、新课标/核心素养落地实践、大单元教学、项目式学习(PBL)、跨学科主题学习、学业评价改革等。
- **前置依赖(必读)**:本 skill 的文献检索统一通过 **「知网 edu」MCP 连接器**(CNKI 基础教育 / 研学文献检索)完成,且须账号具备「知网基教」权益(`mcp__<SERVER>__userState` 返回 `true`)方可生成选题 / 评估内容。未连接连接器或未通过权益校验时,**按「前置权限校验」强制中止、不生成任何内容并输出转化卡,不降级、不给出通用建议**(降级策略仅适用于"已通过校验后"检索临时失败,见下方说明)。
- **工具名前缀说明**:WorkBuddy 中 MCP 工具名格式为 `mcp__<SERVER>__<工具名>`。本环境中该连接器显示名为 `edu`,故文献检索工具为 `mcp__<SERVER>__searchVectorBJ`;若你的环境中连接器显示为其他名称(如「知网基教」),前缀会相应变化,请按实际可用工具名调用。下文统一以 `mcp__<SERVER>__searchVectorBJ` 指代。
- **降级策略(仅限已通过权限校验之后)**:MCP 未连接或检索返回为空时,按「2.3 子程序」容错规则将文献变量置空并标注"未基于知网实时数据",仍可给出通用选题建议(失去文献佐证)。**注意:本降级策略与「前置权限校验」是两件不同的事——`mcp__<SERVER>__userState` 返回 `false`(无基教权益)不属于降级范围,而是强制中止,严禁用任何替代方法生成结果(见上第 3 条)。**
- **提示词加载**:选题 / 评估所需的提示词模板存放于 `references/` 目录,运行时通过 WorkBuddy 的 **Read 工具**按需加载(硬性前置,见步骤 0)。**注意:模板加载(步骤 0)必须在「前置权限校验(mcp__<SERVER>__userState)」通过后执行;未通过权益校验时禁止加载任何模板、禁止生成内容。**

---

## 🔐 前置权限校验(最高优先级,必须最先执行)

> 权限校验的「三态诊断 / 通用版兜底 / 强制转化卡 / 连接器加载指引」统一见本技能 `references/_shared.md`「一、权限固定提示」,本章节仅保留本技能专属说明,不重复展开。

> - **通用版兜底**:不调用任何 edu 数据工具,不产出任何"知网来源/CNKI 溯源"表述、链接或依据;交付物开头以一行轻提示注明「注:当前未接入知网基教,以下为通用版;知网数据增强层(原文检索 / 权威文献 / 题库等)暂未启用,核心产出本身可直接使用」;**本技能核心产出需知网数据支撑,无权益即停止、不编造,仅输出下方强制转化卡**,**严禁编造**知网数据或以模型知识冒充。
> - **强制转化卡(仅态 B,不可省略/弱化)**:报告文末(安全标注之后)醒目输出 `_shared.md`「一、权限固定提示」升级版「解锁知网数据增强层」。不得用"换其他方式帮您"等替代话术替掉;用户追问时也不得移除。

本技能的全部真实数据(文献 / 课标原文 / 知识点)均来自「知网 edu(基教 / 研学)」MCP,需账号拥有「知网基教」权益才能调用。在调用**任何** edu MCP 数据工具(`mcp__<SERVER>__searchVectorBJ` / `mcp__<SERVER>__standardSearch` 等)**之前**,必须先做权限校验:

0. **先 `ToolSearch(tool_names:["userState"])` 确认 edu 工具在本会话「可解析」**:若查不到 → 属**态 A(连接器未加载/掉线)**,按`references/_shared.md`「一、权限固定提示」给「连接器加载指引」,**不要**直接给购买权益卡,也不要调用任何 edu 工具。
1. 调用 `mcp__<SERVER>__userState` 工具(edu MCP 提供的权益校验接口,**无参数**)。
   - 工具名写法:`mcp__<SERVER>__userState`(`<SERVER>` 取自连接器「显示名」,会随重命名变化;若查不到,用 `ToolSearch(tool_names:["userState"])` 反查真实名称后再调用)。
2. **返回 `true`** → 账号有基教权益,正常进入流程。
3. **返回 `false`(态 B)** → 账号**没有**基教权益:
   - **通用版兜底 + 强制转化卡**(详见`references/_shared.md`「一、权限固定提示」):不再调用任何 edu MCP 数据工具,改走通用版完成不依赖知网数据的部分;
   - 也不要用"检索无结果 / 接口报错"去猜测原因——根因就是没权限;
   - 向用户**原样输出** [_shared.md](references/_shared.md)「权限固定提示」的「解锁知网数据增强层」,**不要**继续生成结果;
   - **⛔ 严禁编造知网数据(通用版兜底红线)**:不得改用大模型自身知识、公开网络资料、通用教研经验、课标原文等非知网接口数据来"凑"出一份选题 / 评估 / 检索结果;非 `true` 时按`references/_shared.md`「一、权限固定提示」「通用版兜底 + 强制转化卡」处理。

> 「解锁知网数据增强层」**统一引用** [_shared.md](references/_shared.md)「权限固定提示」,本文件不复写——改提示只改 `_shared.md` 一处。

## ⚠️ 核心强制规则(必须逐条执行)

| # | 强制规则 | 违规后果 |
|:---|:---|:---|
| R1 | **必须先通过「前置权限校验(mcp__<SERVER>__userState)」且返回 true,才能执行「步骤0:加载Prompt」,再进入任何推荐/评估;未通过校验禁止加载模板或生成内容** | 无法生成内容 |
| R2 | **所有文献检索必须通过 `FETCH_LITERATURE` 子程序** | 检索失效 |
| R3 | **每次生成选题前必须先执行 `topic_counter += 1`** | 编号重复 |
| R4 | **评估内容输出后必须追加话术**:对比→TALK-006,深入→TALK-007 | 用户无法继续操作 |
| R5 | **每步执行后必须自检**(检查清单逐项确认) | 遗漏步骤 |
| R6 | **禁止跳步骤**:顺序为 权限校验(mcp__<SERVER>__userState)→0→1→2→3→4→5(权限校验为唯一总闸门,未通过不得加载模板或生成内容) | 流程混乱 |
| R7 | **每次调用Prompt前必须使用 Read 工具重新加载** | 内容为空或过时 |
| R8 | **步骤1中,用户含关键词时必须输出 TALK-002 并等待用户回复**,禁止自行判断"画像完整"而跳过询问 | 用户未被给予画像选填机会 |
| R9 | **步骤4中,使用 Read 工具加载提示词是阻塞性硬门**,未执行则禁止进入生成步骤 | 评估内容为空或格式错误 |
| R10 | **步骤4中,评估内容与下一步引导话术是同一个输出整体**,禁止拆分为两次输出、禁止只输出评估不输出引导 | 用户无法继续操作 |
| R11 | **文献引用严禁暴露接口内部字段**:`mcp__<SERVER>__searchVectorBJ` 返回的 `文件名` 是 CNKI 内部编号(形如 `<刊码+年份+期号+序号>`),**禁止**以任何形式直接写入面向用户的产出;引用文献一律使用返回的 `篇名`(可附来源库类型如"期刊""会议"或年份,如「知网收录的《篇名》」)。保持产出干净且可通过篇名溯源 | 泄露接口内部结构、产出不专业、不可溯源 |
| R12 | **文献引用必须可点击溯源(强制)**:产出中**每一处**文献引用都必须写成可点击链接 `[《篇名》](url)`,`url` 取 `mcp__<SERVER>__searchVectorBJ` 返回的 `url` 字段(CNKI 在线阅读页)。检索结果普遍带 `url`,**不得以"接口可能不含 url"为由省略**;产出写盘后必须执行 `INJECT_LINKS` 子程序做批量注入与覆盖率校验,剩余裸露《》须逐条确认。**url 严禁编造、拼接或凭规律推导**,`文件名`/`DOI` 等内部字段仍不得暴露(R11) | 产出不可溯源、用户需手动搜原文;链接失效或指向错误文献 |
| R13 | **本技能所有产出必须聚焦基础教育(K-12)场景**:选题名称、研究背景、评估维度、示例一律使用中小学教学/教研语境(学科、学段、课标、课堂、学生),**禁止**出现"博士学位论文/硕士培养/学术型/专业型/国际期刊命名/英文标题"等高校科研口径 | 产出与用户身份不匹配 |
| R14 | **课标引用硬规则**:凡涉及"新课标/课标要求/课标强调"等表述,必须满足二选一——(A) 引用可核实的官方原文关键词(见 `references/curriculum-anchors.md` 锚点清单,化学已核验;其他学科须先检索官方课标文本或标注为"课标导向");(B) 概括性表述须明确标注"课标导向/精神",**禁止**表述为"课标规定/要求/将XX置于核心地位",**禁止**发明未经验证的课标术语(如"科学探究与安全""学科实践"作为独立素养)、条目号或页码 | 产出出现编造的课标表述,误导教师用于课题/论文 |
| R15 | **课标原文优先取自足校本接口(FETCH_STANDARD)**:凡生成"新课标/课标"类表述,必须**先**调用 `mcp__<SERVER>__standardSearch`(通过 `FETCH_STANDARD` 子程序)检索课标逐字原文,将命中的逐字正文作为唯一权威依据;仅当该接口**无相关结果**(返回空或全部 `score` 低于 `minScore`)时,才允许回退互联网检索(WebSearch)核实,且须在产出中明确标注"课标导向(待官网核实)"。**禁止**跳过 `FETCH_STANDARD` 直接凭记忆书写课标表述 | 再次出现编造的课标术语/条目,违反 R14 且失去可溯源保障 |

---

## 1. 触发条件

| 场景 | 典型用户表述 |
|:---|:---|
| **方向探索** | "不知道写什么课题""求推荐教研方向""有没有好写的教学论文选题""帮我找课题选题""公开课/优质课选什么主题好""写什么教研论文好""推荐新课标落地选题""推荐前沿教研方向""小课题研究做什么" |
| **方向聚焦** | "题目太大了怎么缩小""帮我聚焦一下研究点""细化这个选题方向""这个方向下有什么子课题""怎么把题目变小""选题太宽泛了""选题需要具体一点""怎么收窄到一节/一个单元" |

---

## 2. 核心配置

### 2.1 文献检索接口(知网 edu MCP)

> 所有文献检索统一调用「知网 edu」MCP 连接器的 `mcp__<SERVER>__searchVectorBJ` 工具(按文本向量检索 CNKI 基础教育文献库,返回文献列表)。

**工具名**:`mcp__<SERVER>__searchVectorBJ`

| 参数 | 类型 | 必填 | 说明 |
|:---|:---|:---|:---|
| `text` | string | ✅ | 检索文本。通常为 `FETCH_LITERATURE` 提取并拼接的 3 个核心关键词,或用户给定的研究方向短语 |
| `maxRecallNumber` | integer | 否 | 最大返回文献数,默认 20;本 skill 统一取 50 |
| `query_type` | integer | 否 | 查询类型:0 篇名 / 1 摘要 / 2 小标题 / 3 主题。选题发散推荐用 **3(主题)** 最合适;也可按场景选 0/1/2 |
| `type` | string | 否 | 文献类型:0 期刊 / 1 硕士 / 2 博士 / 3 会议 / 4 报纸,多值用逗号隔开。本技能统一取 `"0,1,3"`(覆盖基础教育期刊 + 学科教学硕士 + 教研会议),**不选博士(2)** 以免偏理论,可按需追加 `4`(报纸) |

**返回**:文献条目列表,每条含篇名、正文(摘要)、小标题、文件名、url、DOI、来源(期刊名/会议/授予单位)、年份、作者等字段(**不返回卷、页码**)。其中 `文件名` 为 CNKI 内部编号(形如 `<刊码+年份+期号+序号>`),**禁止直接写入用户可见产出,引用一律使用 `篇名`**(见 R11);`url` 为 CNKI 在线阅读链接,可写成可点击形式 `[篇名](url)` 便于溯源(见 R12)。

**容错**:返回为空或报错时,将文献变量置空,标注"未基于知网实时数据"。

### 2.1.1 课标原文接口(知网 edu MCP · mcp__<SERVER>__standardSearch)

> 凡生成"新课标/课标"类表述,优先从此接口取**逐字原文**(见 R15、子程序 `FETCH_STANDARD`)。该接口按向量检索标准文档(课标/教材等),返回命中的文档块正文 + 元数据。

**工具名**:`mcp__<SERVER>__standardSearch`

| 参数 | 类型 | 必填 | 说明 |
|:---|:---|:---|:---|
| `query` | string | ✅ | 检索文本。通常传入与选题相关的课标查询短语,如"化学 核心素养 科学探究与实践""家庭实验 教学建议""做中学 用中学 创中学" |
| `topK` | integer | 否 | 返回数量,默认 10;本 skill 统一取 5 |
| `minScore` | number | 否 | 最低相关性阈值,默认 0.3;低于此值的结果被过滤。本 skill 保留默认 0.3 |

**返回**:命中块列表,每条含 `content`(课标逐字正文片段)、`score`(相关性,0~1)、`metadata`(`title` 标准名、`curriculumStandardId`、`chunkIndex`、`chunk_total` 等)。

**解析与引用规范**:
- 取 `score ≥ 0.3` 的块作为权威原文;引用时在产出中**直接引用其逐字短语并注明出处**,格式:`《标准名(版本)》"章节名"`(如 `《义务教育化学课程标准(2022年版2025年修订)》"课程理念4"`)。
- 接口正文版本显示为 **"2022年版2025年修订"**(日常修订版),引用统一用此版本表述。
- **接口无 `url`/页码字段,禁止虚构页码或条目号**;只能用标准名 + 章节名定位。
- 多套标准并存(不同学科对应不同的内部标准 ID,例如化学 / 生物 / 课程方案等,实际值以接口返回为准),查询时应带学科名以提升命中精度。

**容错**:返回空或全低于阈值时,按 R15 回退互联网(WebSearch)检索官方课标并标注"课标导向(待官网核实)"。

### 2.2 状态与变量

#### 2.2.1 全局状态(会话内维护)

```json
{
  "session_id": "<自动生成>",
  "current_step": "intro",
  "all_topics": [],
  "topic_counter": 0,
  "topic_id_mapping": {},
  "current_round": 1,
  "max_rounds": 4,
  "history": [],
  "final_topic": null,
  "evaluation_result": null
}
```

| 字段 | 说明 |
|:---|:---|
| `current_step` | 当前步骤:`intro` / `collecting` / `recommending` / `refining` / `evaluating` / `done` |
| `all_topics` | 所有已生成选题,每项含 `{id, name, description, parent_id, round, keywords}` |
| `topic_counter` | **全局唯一编号源**,从1递增。每生成新选题必须先 +1 再分配 |
| `topic_id_mapping` | 编号分配记录,如 `{"1":"首轮-选题名","11":"第2轮-来自#1-选题名"}` |
| `current_round` | 当前推荐轮次(1=首轮10个,2~4=细化轮5个,共4轮含首轮) |
| `history` | 交互历史 `{step, user_input, system_response_summary}` |
| `final_topic` | 最终确定选题,初始 null |
| `evaluation_result` | 评估结果,初始 null |

#### 2.2.2 用户输入变量(中小学口径)

| 变量 | 必填 | 描述 |
|:---|:---|:---|
| `KEYWORDS` | ✅ | 教研关键词,如"核心素养,中学语文,整本书阅读" |
| `SUBJECT` | 否 | 学科,如"语文/数学/英语/物理..." |
| `GRADE` | 否 | 学段,如"小学/初中/高中"或具体年级 |
| `ROLE` | 否 | 身份:一线教师/教研组长/备课组长/学科带头人/名师工作室/区县教研员 |
| `OUTPUT_TYPE` | 否 | 产出类型:课题申报/教学论文/校本案例/教学设计/公开课/作业设计 |
| `SCENE` | 否 | 教研场景:新课标落地/大单元教学/项目式学习/跨学科/学业评价/作业设计... |
| `REQUIRE` | 否 | 特殊需求,如"偏小切口、一学期可完成""结合本校学情" |
| `NUM_INITIAL` | 否 | 首轮数量,默认10 |

#### 2.2.3 文献检索变量

| 变量 | 产出步骤 | 描述 |
|:---|:---|:---|
| `USER_LITERATURE` | 步骤2 | 用户关键词对应的文献数据 |
| `REFINE_LITERATURE` | 步骤3 | 细化方向对应的文献数据 |
| `EVAL_LITERATURE` | 步骤4 | 评估选题的文献数据,键为选题ID;对比评估时取 `EVAL_LITERATURE_A` / `EVAL_LITERATURE_B` |
| `STANDARD_LITERATURE` | 步骤2/3/4 | 选题/评估涉及的课标逐字原文块(来自 `FETCH_STANDARD` 子程序,基于 `mcp__<SERVER>__standardSearch`),用于第3、7(及评估"课标契合度")部分的"新课标/课标"表述,作为唯一权威依据 |

非必需变量缺失时传空字符串 `""`。禁止创建未列出的临时变量。

#### 2.2.4 编号规则

> 用于保证推荐/细化选题在输出时编号连续、全局唯一。

| 规则 | 内容 |
|:---|:---|
| **NR1** | `topic_counter` 是会话内全局唯一编号源,初始值为 0,永不回退 |
| **NR2** | 每生成一个新选题,必须先执行 `topic_counter += 1`,再使用该值作为选题编号 |
| **NR3** | 首轮推荐的 NUM 个选题,编号从 **#1** 开始,依次为 **#1, #2, #3, ..., #NUM**,必须连续 |
| **NR4** | 细化推荐的 5 个选题,编号从当前 `topic_counter + 1` 开始,依次为 **#(N+1), #(N+2), #(N+3), #(N+4), #(N+5)**,必须连续 |
| **NR5** | 多次细化过程中,编号继续递增,不重置、不复用、不跳号 |
| **NR6** | 用户触发"重新推荐"时,重置 `topic_counter = 0`、`all_topics = []`,新推荐从 #1 开始 |
| **NR7** | 输出列表时,必须按编号升序排列,不可打乱顺序 |

### 2.3 子程序:FETCH_LITERATURE

> 所有文献检索统一通过本子程序完成,禁止在步骤中内联 MCP 调用细节。

**入参**:

| 参数 | 类型 | 说明 |
|:---|:---|:---|
| `keyWords` | string | 检索关键词的原始输入(将被传入 prompt-5 做关键词提取) |
| `referSize` | Integer | 期望返回的文献数量(映射到 `mcp__<SERVER>__searchVectorBJ` 的 `maxRecallNumber`,本 skill 统一 50) |
| `needFields` | Array | `mcp__<SERVER>__searchVectorBJ` 不支持字段筛选、返回固定字段集(篇名/摘要/文件名等),此参数忽略 |
| `resultVar` | string | 调用方指定的变量名,用于存储检索结果 |

**执行步骤**:

| 步骤 | 操作 | 说明 |
|:---|:---|:---|
| 1 | 使用 Read 工具读取文件 `references/prompt-5-keyword-extraction.md` | 将 `keyWords` 作为 `${DIRECTION}` 传入,提取 3 个核心关键词 |
| 2 | 关键词拼接 | 将提取的 3 个关键词用英文逗号连接 |
| 3 | 执行 MCP 调用 | 按 2.1 节规范调用 `mcp__<SERVER>__searchVectorBJ`:`text`=拼接后的关键词,`maxRecallNumber`=50,`query_type`=3,`type`="0,1,3" |
| 3.5 | 失败重试(健壮性必做) | 知网 edu 后端存在**偶发 500**(`code:500, msg:"检索失败!"`),非参数错误。若步骤3返回非 200,**禁止直接降级**,须自动重试:① 用相同 `text`、省略 `type`(回退接口默认全集 `0,1,2,3,4`)重调一次;② 仍失败则改用 `query_type=1` 再试一次。三次(含首次)均失败才置空 `resultVar` 并标注"未基于知网实时数据",走 2.3 容错降级 |
| 4 | 解析返回 | 提取返回结果中的文献条目列表(每条含篇名、摘要、关键词、相关度等),存入 `resultVar` |
| 5 | 赋值 | 将文献列表赋值给 `resultVar` 指定的变量 |

#### ✅ 检查清单
- [ ] prompt-5 已使用 Read 工具确认
- [ ] 已提取3个关键词
- [ ] MCP已调用(工具 `mcp__<SERVER>__searchVectorBJ`)
- [ ] 已赋值给 resultVar
---

### 2.3.1 子程序:FETCH_STANDARD

> 获取课标逐字原文,供 prompt-1/2/3 生成"新课标/课标"表述时使用(R15 强制前置)。

**入参**:

| 参数 | 类型 | 说明 |
|:---|:---|:---|
| `query` | string | 课标查询短语(含学科名 + 主题,如"初中化学 家庭实验 教学建议""化学 核心素养 科学探究与实践") |
| `resultVar` | string | 调用方指定的变量名,用于存储命中原文块列表 |

**执行步骤**:

| 步骤 | 操作 | 说明 |
|:---|:---|:---|
| 1 | 执行 MCP 调用 | 按 2.1.1 节规范调用 `mcp__<SERVER>__standardSearch`:`query`=查询短语,`topK`=5,`minScore`=0.3 |
| 2 | 解析返回 | 提取 `score ≥ 0.3` 的块,保留 `content` + `metadata.title` + 章节标题(从 content 的 `##`/`###` 标题提取) |
| 3 | 赋值 | 将命中原文块列表赋值给 `resultVar`(即 `STANDARD_LITERATURE`) |
| 4 | 回退判定 | 若返回空或所有 `score < 0.3`,置 `resultVar = []` 并标记"课标原文接口无命中",按 R15 走互联网(WebSearch)核实,产出标注"课标导向(待官网核实)" |

**用法**:在步骤2/3/4 生成选题或评估前,针对本题涉及的课标维度(核心素养/课程理念/教学建议/学习主题等)调用 1~2 次,将命中原文作为"新课标/课标"表述的唯一权威依据;`references/curriculum-anchors.md` 作为静态快速参考备份,二者冲突以 `FETCH_STANDARD` 实时原文为准。

#### ✅ 检查清单
- [ ] mcp__<SERVER>__standardSearch 已调用(工具 `mcp__<SERVER>__standardSearch`)
- [ ] 已提取 score≥0.3 的原文块
- [ ] 已赋值给 resultVar
- [ ] 无命中时已按 R15 回退互联网并标注

---

### 2.4 子程序:INJECT_LINKS

> 产出写盘后,把所有文献引用统一注入可点击的知网在线阅读链接,并做覆盖率校验(**R12 强制**)。这是产出交付前的最后一道关卡,不可跳过。
> 配套脚本:`scripts/inject_cnki_links.py`(本技能自带,无需额外依赖,兼容 Python 3.8+)

**为什么需要它**:写作时容易只在表格里带链接、正文里留裸名,或遗漏后续补充的文献;人工逐条补 URL 既慢又容易拼接出错。该脚本从检索结果反向建立「篇名 → url」映射,只注入**确实检索到**的文献,杜绝编造链接。

**入参**

| 参数 | 说明 |
|:---|:---|
| `report` | 产出 Markdown 文件路径 |
| `--results` | `mcp__<SERVER>__searchVectorBJ` 检索结果来源,**可多个、可为目录**(工具输出过大时会被持久化到 `tool-results/*.txt`,该文件即此处输入) |
| `--exclude` | 不参与注入的《》名称:课标标准名(如《义务教育语文课程标准》)、阅读作品书名(如《西游记》《宝葫芦的秘密》) |
| `--check-only` | 只校验不改写,用于交付前复核 |
| `--dump-map` | 只导出「篇名 → url」映射,供生成报告前查看本次可链文献清单 |

**执行步骤**

| 步骤 | 操作 | 说明 |
|:---|:---|:---|
| 1 | 保留检索原始返回 | `mcp__<SERVER>__searchVectorBJ` 每条含 `url` 字段即在线阅读页;工具输出被截断/持久化时,记下 `tool-results` 目录路径 |
| 2 | (可选)生成前先 `--dump-map` | 提前掌握可链文献清单,写作时直接带上链接 |
| 3 | 产出写盘后执行注入 | `python scripts/inject_cnki_links.py <报告.md> --results <检索结果> --exclude <课标名/作品名>` |
| 4 | 读校验输出 | 脚本会打印:解析出多少条映射、新注入几处、**仍未覆盖的裸露《》清单**、报告内链接总数 |
| 5 | 逐条确认残留 | 残留是文献名 → 说明漏链,补检索后重跑;残留是课标标准名或作品书名 → 加入 `--exclude` 重跑 |
| 6 | 通过标准 | 残留清单为空,或仅含已确认的非文献名称 |

**硬约束**

- **只注入映射中确实存在的篇名**,禁止凭记忆或按刊码规律拼接 URL(违反即 R12 违规)
- 引用文字始终是 `篇名`,**禁止**把 `文件名`、`DOI` 等内部字段写进产出(R11)
- 已带链接的引用不会被重复包裹,可安全重复执行

**命令行示例**

```bash
# 生成前:查看本次可链文献
python scripts/inject_cnki_links.py --dump-map --results <tool-results目录>

# 写盘后:注入 + 校验
python scripts/inject_cnki_links.py 选题建议.md \
  --results <tool-results目录> \
  --exclude "《义务教育语文课程标准》" "《西游记》" "《宝葫芦的秘密》"

# 交付前复核(不改写)
python scripts/inject_cnki_links.py 选题建议.md --check-only --results <tool-results目录> --exclude "..."
```

#### ✅ 检查清单
- [ ] 已保留 `mcp__<SERVER>__searchVectorBJ` 原始返回(含 `url` 字段)
- [ ] 注入脚本已执行
- [ ] 剩余裸露《》清单已逐条确认(非文献名已加入 `--exclude`)
- [ ] 报告中文献链接数与引用数基本吻合

---

## 3. 执行流程(强制执行)

> ### 🚦 总执行闸门(顺序不可颠倒)
> 所有执行**严格遵循**唯一正确顺序:
> **前置权限校验(mcp__<SERVER>__userState)→ 步骤0 加载Prompt → 步骤1 信息收集 → 步骤2 方向推荐 → 步骤3 细化推荐 → 步骤4 价值评估 → INJECT_LINKS(每次产出后必跑)→ 步骤5 结束**
> - 权限校验非 `true` 时:按`references/_shared.md`「一、权限固定提示」「通用版兜底 + 强制转化卡」处理(通用版完成不依赖知网数据的部分,并原样输出「解锁知网数据增强层」;禁止加载任何 Prompt 模板、禁止生成依赖知网数据的选题/评估内容)(见上文「🔐 前置权限校验」)。
> - 只有权限校验返回 `true`,才允许进入步骤0 加载模板。把"加载模板"放在权限校验之前或与之并行,均属流程违规。

### 📋 步骤0:加载Prompt(权限校验通过后的第一步 · 强制前置)

> **本步骤为硬前置,必须在「前置权限校验(mcp__<SERVER>__userState)」返回 true 之后、任何推荐/评估前执行完毕。未通过权限校验时禁止执行本步骤(也不要加载模板)。**

| 序号 | 操作 |
|:---|:---|
| 0.1 | 使用 Read 工具读取 `references/prompt-1-topic-recommend.md` |
| 0.2 | 使用 Read 工具读取 `references/prompt-2-compare-evaluation.md` |
| 0.3 | 使用 Read 工具读取 `references/prompt-3-deep-evaluation.md` |
| 0.4 | 使用 Read 工具读取 `references/prompt-5-keyword-extraction.md` |
| 0.5 | 设置 `prompts_loaded.p1=p2=p3=p5=true` |
| 0.6 | 设置 `current_step = "step1"` |

#### ✅ 检查清单
- [ ] **前置权限校验已通过(mcp__<SERVER>__userState 返回 true)**
- [ ] 4个Prompt全部加载完成
- [ ] `prompts_loaded` 全部为 true
- [ ] `current_step = "step1"`

---

### 📋 步骤1:信息收集

> 状态:`step1` → 出口:`step2`
> **⚠️ R8 强制规则**:本步骤禁止跳过。

#### 决策树

```
用户消息
 ├─ 含关键词 → 画像完整 → 直接进入 step2
 │            → 画像不完整 → 输出 TALK-002 → 补充后进 step2
 └─ 不含关键词 → 输出 TALK-001 → 补充后进 step2
```

#### 话术

> {{TALK-001}} — 关键词缺失时使用

📚 我可以帮您推荐中小学教研选题!请提供:

**① 教研关键词(必填)**:2~3个核心词,如"核心素养,整本书阅读" 或 "大单元教学,初中数学"

**② 精准画像(选填)**:学科、学段、身份、产出类型、教研场景

👉 示例:"语文,高中,一线教师,教学论文,语文核心素养,偏小切口课题研究"

> {{TALK-002}} — 有关键词但画像不完整时使用

📚 已收到关键词:**{KEYWORDS}**。可补充以下信息(选填):
- 学科、学段、身份、产出类型(课题申报/教学论文/校本案例/教学设计/公开课)、教研场景(新课标落地/大单元/项目式学习/作业设计/学业评价)

👉 回复「直接推荐」跳过,立即开始推荐。

#### ✅ 检查清单
- [ ] KEYWORDS 非空
- [ ] **已输出 TALK-002(或 TALK-001),用户已被给予画像选填机会**
- [ ] **已等待用户回复(未自行跳到 step2)**
- [ ] `current_step = "step2"`

---

### 📋 步骤2:方向推荐(首轮)

> 状态:`step2` → 出口:等待用户选择

#### ⚠️ 执行前检查
- [ ] `prompts_loaded.p1 === true`(否则回步骤0)
- [ ] `prompts_loaded.p5 === true`(否则回步骤0)

#### 执行流程

| 序号 | 操作 |
|:---|:---|
| 2.1 | 调用 `FETCH_LITERATURE(KEYWORDS, 50, USER_LITERATURE)` |
| 2.2 | 调用 `FETCH_STANDARD(KEYWORDS 相关课标查询词, STANDARD_LITERATURE)`(**R15 强制前置**:获取新课标逐字原文,供第3、7部分"新课标/课标"表述使用) |
| 2.3 | 使用 Read 工具读取 `references/prompt-1-topic-recommend.md`(再次确认加载) |
| 2.4 | 变量替换后生成 NUM 个选题(按用户要求输出,如无要求默认10) |
| 2.5 | **逐个编号分配**:每个选题按顺序执行 `topic_counter += 1`,分配编号 #1 ~ #NUM,按 NR3 连续递增 |
| 2.6 | 输出推荐结果 + `{{TALK-003}}` |

> {{TALK-003}}

请选择感兴趣的方向:
- 回复 "#编号(如 #3)" → 进入细化
- 回复 "重新推荐" → 换一批

#### ✅ 检查清单
- [ ] FETCH_LITERATURE 已执行
- [ ] **FETCH_STANDARD 已执行(R15 强制前置,课标原文已获取)**
- [ ] prompt-1 已使用 Read 工具确认
- [ ] 输出 NUM 个选题,编号连续
- [ ] all_topics 已更新
- [ ] 已按顺序为每个选题分配 #1 ~ #NUM 的连续编号
- [ ] all_topics 已更新,且 `all_topics[0].id === 1`,`all_topics[NUM-1].id === NUM`
- [ ] **INJECT_LINKS 已执行,文献引用均带可点击链接(R12)**
- [ ] TALK-003 已输出

---

### 📋 步骤3:细化推荐

> 状态:`step3` → 出口:评估/确定/重新推荐

#### ⚠️ 执行前检查
- [ ] `prompts_loaded.p1 === true`(否则回步骤0)
- [ ] `current_round < max_rounds`(否则输出 TALK-005,不执行细化)
- [ ] 用户选择的编号存在于 `all_topics`

#### 执行流程

| 序号 | 操作 |
|:---|:---|
| 3.1 | 构造 `REFINE_KEYWORDS = KEYWORDS + "," + 选定选题关键词(最多3个)` |
| 3.2 | 调用 `FETCH_LITERATURE(REFINE_KEYWORDS, 50, REFINE_LITERATURE)` |
| 3.3 | 调用 `FETCH_STANDARD(REFINE_KEYWORDS 相关课标查询词, STANDARD_LITERATURE)`(**R15 强制前置**:获取新课标逐字原文,供第3、7部分"新课标/课标"表述使用) |
| 3.4 | 使用 Read 工具读取 `references/prompt-1-topic-recommend.md`(再次确认加载) |
| 3.5 | 变量替换后生成5个细化选题 |
| 3.6 | **逐个编号分配**:对每个选题按顺序执行 `topic_counter += 1`,分配编号 **#(N+1) ~ #(N+5)**(N = 分配前 topic_counter 的值),按 NR4 连续递增 |
| 3.7 | `current_round += 1` |
| 3.8 | 输出细化结果 + `{{TALK-004}}`(未达上限)或 `{{TALK-005}}`(已达上限) |

> {{TALK-004}} — 未达上限时使用

已生成 **5个细化选题**(第 {current_round}/{max_rounds} 轮)。接下来:

| 操作 | 回复示例 |
|:---|:---|
| 继续细化 | `细化 #12` |
| 评估1个 | `评估 #12` |
| 对比2个 | `对比 #12 和 #14` |
| 直接确定 | `确定 #12` |
| 调整 | `调整 #12:缩小到一节课` |
| 重新推荐 | `重新推荐` |

> {{TALK-005}} — 已达上限时使用

已达到最大细化深度({max_rounds} 轮)。您可以:

| 操作 | 回复示例 |
|:---|:---|
| 评估1个 | `评估 #12` |
| 对比2个 | `对比 #12 和 #14` |
| 直接确定 | `确定 #12` |
| 调整 | `调整 #12:缩小到一节课` |
| 重新推荐 | `重新推荐` |

#### 分支处理

| 用户输入 | 响应 |
|:---|:---|
| `细化 #编号` | 未达上限→回3.1;已达上限→输出TALK-005 |
| `评估 #编号` | → 步骤4情况B |
| `对比 #A #B` | → 步骤4情况A |
| `确定 #编号` | → 步骤5 |
| `调整 #编号:描述` |  → 步骤 3 |
| `重新推荐` | `current_round=1`,回步骤2 |

#### ✅ 检查清单
- [ ] 执行前已确认 p1=true
- [ ] FETCH_LITERATURE 已执行
- [ ] **FETCH_STANDARD 已执行(R15 强制前置,课标原文已获取)**
- [ ] prompt-1 已使用 Read 工具确认
- [ ] 输出5个选题,编号连续
- [ ] 已按顺序为每个选题分配 #(N+1) ~ #(N+5) 的连续编号
- [ ] current_round 已递增
- [ ] all_topics 已更新,新增5个选题编号连续
- [ ] **INJECT_LINKS 已执行,文献引用均带可点击链接(R12)**
- [ ] TALK-004 或 TALK-005 已输出

---

### 📋 步骤4:价值评估

> 状态:`step4` → 出口:确定/重新推荐
> **⚠️ R9 强制规则**:使用 Read 工具加载提示词是**阻塞性硬门**。在执行任何评估内容生成之前,必须完成 Read 并确认文件内容非空。**若未执行 Read,禁止进入生成步骤,禁止输出任何评估内容。**
>
> **⚠️ R10 强制规则**:评估内容与下一步引导话术是**同一个输出整体**,必须在一次回复中完整输出。禁止先输出评估内容、再在后续轮次输出引导话术。禁止只输出评估内容而不输出引导话术。

#### ⚠️ 执行前检查
- [ ] `prompts_loaded.p2 === true`(对比)或 `prompts_loaded.p3 === true`(深入)(否则回步骤0)
- [ ] 用户选择的编号存在于 `all_topics`

---

#### 情况A:对比评估(2个选题)

##### 执行流程

| 序号 | 操作 |
|:---|:---|
| 4A.1 | 对TOPIC_A调用 `FETCH_LITERATURE(选题名, 25, EVAL_LITERATURE_A)`;对TOPIC_B调用 `FETCH_LITERATURE(选题名, 25, EVAL_LITERATURE_B)`;并调用 `FETCH_STANDARD(选题名相关课标查询词, STANDARD_LITERATURE)`(**R15**:评估"课标契合度"维度须以课标逐字原文为依据) |
| 4A.2 | 🔒 **使用 Read 工具读取 `references/prompt-2-compare-evaluation.md`**(硬门,禁止跳过) |
| 4A.3 | 确认 prompt-2 内容已加载且非空,方可继续 |
| 4A.4 | 变量替换后生成对比评估(星级总览→8维度详细→总结建议) |
| 4A.5 | **在同一轮输出中**追加 `{{TALK-006}}`(评估内容 + 引导话术为整体输出,禁止拆分) |

##### 📤 输出模板(评估内容 + 引导话术为不可分割的整体)

```
  【对比评估结果】
  (此处输出星级总览 → 8维度详细 → 总结建议)

═══════════════════════════════════════

以上是对比分析结果。接下来:

| 操作 | 回复示例 |
|:---|:---|
| 评估1个 | `评估 #12` |
| 对比2个 | `对比 #12 和 #14` |
| 直接确定 | `确定 #12` |
| 调整 | `调整 #12:缩小到一节课` |
| 重新推荐 | `重新推荐` |
| 查看历史推荐选题 | `查看历史` |
```

---

#### 情况B:深入评估(1个选题)

| 序号 | 操作 |
|:---|:---|
| 4B.1 | 对SELECTED_TOPIC调用 `FETCH_LITERATURE(选题名, 50, EVAL_LITERATURE[SELECTED])`;并调用 `FETCH_STANDARD(选题名相关课标查询词, STANDARD_LITERATURE)`(**R15**:评估"课标契合度"维度须以课标逐字原文为依据) |
| 4B.2 | 🔒 **使用 Read 工具读取 `references/prompt-3-deep-evaluation.md`**(硬门,禁止跳过) |
| 4B.3 | 确认 prompt-3 内容已加载且非空,方可继续 |
| 4B.4 | 变量替换后生成深入评估(8维度×3子角度+总评) |
| 4B.5 | **在同一轮输出中**追加 `{{TALK-007}}`(评估内容 + 引导话术为整体输出,禁止拆分) |

##### 📤 输出模板(评估内容 + 引导话术为不可分割的整体)

```

  【深入评估结果】
  (此处输出8维度×3子角度 + 总评)

═══════════════════════════════════════

以上是深入评估结果。接下来:

| 操作 | 回复示例 |
|:---|:---|
| 评估1个 | `评估 #12` |
| 对比2个 | `对比 #12 和 #14` |
| 直接确定 | `确定 #12` |
| 调整 | `调整 #12:结合本校学情` |
| 重新推荐 | `重新推荐` |
| 查看历史推荐选题 | `查看历史` |
```

#### 评估后分支

| 用户输入 | 响应 |
|:---|:---|
| `确定` | → 步骤5 |
| `调整:描述` |  → 步骤3 |
| `评估 #编号` | 换选题重新执行情况B |
| `对比 #编号` | 转为情况A |
| `重新推荐` | `current_round=1`,`topic_counter=0`,`all_topics=[]`,回步骤2 |

#### ✅ 检查清单
- [ ] FETCH_LITERATURE 已执行
- [ ] **硬门检查已通过**
- [ ] **对应Prompt已使用 Read 工具确认,文件内容非空**
- [ ] 8维度全部输出
- [ ] **INJECT_LINKS 已执行,文献引用均带可点击链接(R12)**
- [ ] **TALK-006 或 TALK-007 已在同一轮输出中输出(与评估内容为整体,未拆分)**

---

### 📋 步骤5:流程结束

> 状态:`step5`

> {{TALK-008}}

🎉 **选题已确定!**

**最终选题**:{FINAL_TOPIC.name}

**选题描述**:{FINAL_TOPIC.description}

📌 后续建议:可据此撰写课题申报书 / 教学论文 / 校本案例。如需调整或查找相关文献,随时告诉我。回复「重新推荐」重新开始。

#### ✅ 检查清单
- [ ] final_topic 已记录
- [ ] TALK-008 已输出
- [ ] current_step = "step5"

---

### 📚 特殊功能:查看历史

用户回复「查看历史」时输出:

📚 **选题历史回顾**(共 {total} 个)

| 轮次 | 编号 | 选题名称 | 状态 |
|:---|:---|:---|:---|
| 第1轮 | #1 | xxx | 已细化→#11~#15 |
| 第2轮 | #11 | xxx | ←来自#1 |

💡 可继续操作:`评估 #12` / `细化 #11`(未达上限)/ `确定 #2`

---

### 📋 容错策略

| 场景 | 处理 |
|:---|:---|
| FETCH_LITERATURE 失败 | 变量置空,标注降级 |
| 用户输入模糊×2 | 输出:1.重新推荐 2.查看历史 3.结束 |
| 用户输入×3无效 | 自动回步骤2 |
| Prompt读取失败 | 回退使用内置摘要 |
| 编号不存在 | 提示有效编号列表 |
| 编号不连续(自检发现) | 立即重新执行编号分配,按 NR1~NR7 重新排序后输出 |

---

### 📋 Prompt索引

| 编号 | 文件 | 用途 | 调用步骤 | 加载时机 |
|:---|:---|:---|:---|:---|
| p1 | prompt-1-topic-recommend.md | 选题推荐 | 步骤2、3 | 步骤0 + 每次调用前确认 |
| p2 | prompt-2-compare-evaluation.md | 对比评估 | 步骤4A | 步骤0 + 每次调用前确认 |
| p3 | prompt-3-deep-evaluation.md | 深入评估 | 步骤4B | 步骤0 + 每次调用前确认 |
| p5 | prompt-5-keyword-extraction.md | 关键词提取 | FETCH_LITERATURE | 步骤0 + 每次调用前确认 |

> **课标原文引用(R14 + R15)**:生成"新课标/课标"类表述时,**一级来源是 `FETCH_STANDARD` 子程序实时检索的课标逐字原文**(`mcp__<SERVER>__standardSearch`,见 2.1.1 / 2.3.1);`references/curriculum-anchors.md` 作为**静态快速参考备份**(化学已核验,其他学科须先检索官方课标文本或标注"课标导向")。二者冲突以 FETCH_STANDARD 实时原文为准。若接口无命中,按 R15 回退互联网核实并标注"课标导向(待官网核实)"。

Files in this skill

  • SKILL.md39.2 KB
  • references/_shared.md15.1 KB
  • references/curriculum-anchors.md4.1 KB
  • references/prompt-1-topic-recommend.md9.6 KB
  • references/prompt-2-compare-evaluation.md7.1 KB
  • references/prompt-3-deep-evaluation.md6.3 KB
  • references/prompt-5-keyword-extraction.md2.1 KB
  • scripts/inject_cnki_links.py6.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.