课题研究提问引擎。综合知识审计报告、用户插入问题、既定框架,生成每轮最有价值的问题列表,驱动后续检索。是整个研究循环的核心引擎——问题的质量决定研究的深度。通常由 autodidact skill 调用,也可单独使用。
整个研究循环的核心驱动器。综合多路输入,生成本轮最有价值的问题列表。问题的质量决定检索的方向,检索的方向决定知识库的深度——questioner 的工作做得好,研究才能真正深入而不是在表面打转。
每轮开始时,从以下来源收集输入:
知识审计报告(第2轮起,最重要)
读取 outputs/rounds/round_<N-1>_check.md(上一轮的审计报告)
重点提取:知识漏洞、未解释的新概念、来源缺失的结论
用户插入问题(随时可能有)
读取 outputs/user_questions.md(若存在),提取 ## 待处理 下的问题列表
这是用户在循环过程中主动插入的问题,优先级高,必须纳入本轮
未处理的新 raw 文件(用户贡献素材时) 对比 research_state.json 中已记录的 raw 文件列表,找出新增文件 扫描这些文件的内容,提取其中涉及的新主题和新问题
历史问题列表(去重用)
从 outputs/research_state.json 读取所有历史问题文本
课题描述 + 既定框架(冷启动 / 补充) 第1轮(wiki 为空):完全依赖框架生成问题 后续轮次:框架作为补充,确保没有遗漏的系统性方向
冷启动(第1轮,wiki/ 为空或不存在): 先识别课题类型(见下方规则),再按既定框架生成 L1/L2 基础问题 跳过审计报告读取(不存在)
深化模式(第2轮起):
以审计报告为主要输入,框架为补充
优先读取审计报告最后一节"建议下一轮重点方向",将这些方向转化的问题优先级设为 high
再处理其余知识漏洞和未解释概念
课题类型识别规则(冷启动时用):
| 关键词信号 | 课题类型 |
|---|---|
| "什么是""原理""如何工作""概念""理解" | 概念理解 |
| "方案""技术""方法""实现""架构" | 技术研究 |
| "行业""市场""规模""玩家""竞争""调研" | 行业调研 |
| "创业""机会""商业模式""用户""痛点" | 创业方案 |
不确定时默认用"概念理解"框架的 L1+L2 问题作为起点,第2轮再根据审计报告调整方向。
来源A:审计报告转化(深化模式) 将审计报告中每个发现转化为可检索的具体问题:
来源B:用户插入问题
直接纳入,标注来源为 user,优先级设为 high
来源C:新 raw 文件触发 扫描新文件内容,提取其中引入的新概念和新方向,转化为问题
来源D:框架补充 对照既定框架,检查是否有系统性方向完全未覆盖,补充进来
根据课题类型选择:
概念理解
技术研究
行业调研
创业方案
research_state.json 中 all_questions_ever 数组,直接用每条记录的 text 字段做语义比较,核心意图相同的去掉优先级从高到低:
source: user)同层级内,与课题核心目标最相关的优先。
输出 5-10 个问题,写入 outputs/rounds/round_<N>_questions.json:
{
"questions": [
{
"id": "r<N>q1",
"text": "问题文本",
"layer": "L1-定义",
"priority": "high",
"source": "audit|user|framework|raw",
"depends_on": [],
"rationale": "为什么这轮要问这个问题,来自哪个发现"
}
],
"overlap_ratio": 0.3,
"deduped_questions": [
{"text": "被去重的问题文本", "matched_history_id": "r1q2"}
],
"incorporated_user_questions": ["用户插入的问题文本1", "用户插入的问题文本2"]
}
overlap_ratio:本轮最终输出问题中,与 all_questions_ever 中任意历史问题语义相似的数量 / 本轮最终输出问题总数。分母统一用输出数(过滤后),不用候选数。第1轮固定为 null(无历史问题可比较)。autodidact 用此字段判断终止条件"问题重叠率 > 0.7"。
deduped_questions:本轮被去重过滤掉的候选问题列表,每条记录被去重的问题文本及其匹配的历史问题 id,便于审查去重行为是否合理。
incorporated_user_questions 字段列出本轮已纳入的用户插入问题原文,供 autodidact 更新 user_questions.md 的 ## 已处理 区块。若本轮无用户插入问题,该字段为空数组。
同时在对话中输出摘要:
## 第 N 轮问题列表(共 X 个)
来源分布:审计报告 X 个 / 用户插入 X 个 / 框架补充 X 个
问题重叠率:X%(与历史问题对比)
**[high]** 问题文本(来源:audit/user/framework)
**[high]** 问题文本
**[medium]** 问题文本
已写入:outputs/rounds/round_N_questions.json
→ Step 1 完成,继续执行 Step 2(信息检索)