Zuhui
Overview
生成真正可用的科研进展汇报,适用于导师邮件、组会记录、协作者同步和临时进展更新。
核心原则: 汇报的目标不是展示你有多忙,而是让对方迅速看懂四件事:做了什么、证据够不够、卡在哪里、是否需要决定或帮助。
Entry Modes
| 模式 | 何时使用 | 结果 |
|---|---|---|
--quick |
没有配置,或只想立刻得到一版可发送草稿 | 最低心智负担,直接产出 |
--init |
想长期复用,但不想手写 YAML | 用 5-7 个问题生成或更新 .progress-config.yaml |
| Full Mode | 已有配置,或需要 profile、周期追踪、artifact 扫描 | 构建稳定可复用工作流 |
默认路由:
- 用户传入
--quick时,强制走 Quick Mode。 - 用户传入
--init,或明确要求“初始化配置”“生成配置”时,先完成 Interactive Init。 - 没有
.progress-config.yaml且用户没有要求复杂配置时,优先 Quick Mode。 - 只有在用户已经有配置,或明确要求 profile、周期追踪、artifact 扫描时,才进入 Full Mode。
Quick Reference
/zuhui [options]
--quick
--init
--profile <name>
--format email | chat | markdown | typst | latex | quarto
--layout report | slides
--template classic-report | thesis-status | lab-slides
--verbosity brief | standard | detailed
--language zh | en | bilingual
--since "last monday" | "2 weeks ago" | ...
--tone neutral | struggling | triumphant
输出优先级:
- 最稳定:
email、chat、markdown - 文档导出:
typst、latex、quarto
对导出格式,默认采用 markdown-first 路径:先生成稳定的 markdown 内容,再映射到模板源码;返回源码文本即可,不把本地编译 PDF 当作成功条件。
Workflow
1. Route the request
先判断用户是要快速出稿、初始化配置,还是运行完整工作流。不要在首次使用时立刻逼用户手写完整 YAML。
2. Interactive Init
当用户传入 --init,或明确要求初始化配置时,先完成配置向导,不要直接写汇报。
向导规则:
- 总问题数控制在 5-7 个,只问高价值问题。
- 用自然语言提问,不把问题写成配置字段考试。
- 用户回答模糊时做合理默认,并明确说明默认值。
- 如果仓库里已经有
.progress-config.yaml,先读取现有配置,不要静默覆盖。 - 结束时必须给出推荐 profile 名、生成或更新后的配置、以及一段简短理由。
建议问题范围:
- 主要汇报对象是谁。
- 对方更看重结论、细节还是思路。
- 常用中文、英文还是双语。
- 最常见输出是邮件、聊天还是文档。
- 组里固定术语或不想被改写的表达。
- 最近更常见的语气是中性、卡壳求助还是阶段性突破。
- 哪些目录最可能出现结果图、notebook、笔记或表格。
最小可用配置至少应覆盖:
default_profile- 一个可用的
profiles.<name> tonevocabularyreposartifacts.scan_dirsrender(用户需要文档导出时)
初始化时优先参考:
assets/samples/example-config.minimal.yamlreferences/profile-recipes.md
3. Quick Mode
当用户传入 --quick,或没有配置文件但只想先出一版结果时,只问三个问题:
- 发给谁。
- 什么场景。
- 最近做了什么。
然后立即生成一版可编辑、可发送的内容:
- 不做复杂风格学习。
- 使用默认去 AI 化规则。
- 生成后提醒用户:如果后续会反复使用,可以迁移到
--init或最小配置样例。
4. Full Mode
当存在配置,或用户明确要求复用 profile、扫描 artifact、跟踪周期时,按完整工作流执行。
Step 0: Load config and state
读取:
.progress-config.yaml.progress-state.yaml
规则:
- 配置不存在:若用户明确要长期复用则转入
--init;否则降级到 Quick Mode。 - 状态不存在:创建空状态,并默认从最近一周开始。
--profile优先于default_profile。- 命令行参数可以覆盖 profile 中的
format、layout、verbosity、language、tone、render。
Step 1: Build the progress pool
默认时间范围:
- 从
last_report_at到现在 - 用户可用
--since覆盖 - 如果与上次汇报重叠,提醒用户确认,避免重报
素材来源分四类:
A. Git 进展
git log --since=<last_report_at> --pretty=format:"%h|%s|%an|%ad" --date=short
要求:
- 对关键 commit 运行
git diff --stat - 自动分类为
experiment、feature、fix、docs、chore - 多仓库按
repos逐个分析
B. Artifact 扫描
扫描 artifacts.scan_dirs 中在时间范围内变更的内容:
- 结果图:
*.png、*.jpg、*.pdf - Notebook:
*.ipynb - Markdown 笔记:
*.md - 表格:
*.csv、*.tsv
扫描后要把发现结果列给用户确认,不能静默纳入。
C. 用户口述
主动接收并补问:
- 论文阅读
- 讨论结论
- 被否掉的尝试
- 线下实验
- 还没进 git 的工作
D. 组合模式
优先推荐 Git + artifact + 用户补充的组合模式。
素材池应保持这种结构:
progress_pool:
period: "2026-03-25 ~ 2026-04-01"
items:
- category: experiment
what: "在 CIFAR-10 上测试了 mixup 数据增强"
why: "上周组会决定验证 mixup 对小样本的效果"
result: "准确率从 78.3% 提到 81.7%,比 CutMix 更好"
confidence: high
evidence:
- type: git
ref: "abc1234 - add mixup augmentation"
- type: artifact
ref: "results/cifar10_mixup_acc.png"
asks: null
blockers:
- what: "GPU 资源紧张"
impact: "ImageNet 实验需要排队,预计延后一周"
needs_help: true
next_steps:
- "在 ImageNet 子集上验证"
- "写 related work"
decisions_needed:
- "是否需要申请额外 GPU 资源"
展示素材池时,明确提醒用户检查:
confidence是否准确asks是否缺失decisions_needed是否需要前置到更显眼位置
Step 2: 内容生成
根据 advisor_preset 调整详略和表达:
| 预设 | 策略 |
|---|---|
hands-off |
保留结论、阻塞和下一步,压缩细节 |
detail-oriented |
展开实验设置、参数、数据对比,并标注 low 或 preliminary |
high-level |
强调动机、结论和待决定事项 |
intuitive |
用更直观的解释,减少技术堆砌 |
custom |
按 custom_traits 定制 |
生成时的硬约束:
confidence=preliminary的结论必须显式标记evidence为空时,要说明它来自口述、讨论或暂未整理的材料- 不夸大结果,不把单次实验写成“证明”
asks和decisions_needed不能埋到结尾
术语和语气控制:
- 若配置了
vocabulary,优先使用用户提供的实验室术语 - 术语前后一致,不要同一份汇报里来回切换说法
- 对外部合作者只做最小必要解释,不机械照搬黑话
tone=struggling:强调卡点、已尝试路径、希望得到的帮助tone=triumphant:突出突破、证据和影响,但不能抢结论tone=neutral:事实优先,少修辞
Step 3: 去 AI 化和风格适配
按 language 加载:
zh->references/anti-ai-zh.mden->references/anti-ai-en.mdbilingual-> 两套都加载
流程:
- 生成结构正确的初稿。
- 扫描套话和 AI 语言模式。
- 重写表达,而不是只替换同义词。
- 如有风格样本,再参考
references/style-extraction.md做二次对齐。
Step 4: Output and state update
输出后允许用户:
- 微调局部段落。
- 切换 profile 重生成。
- 返回源码文本或按要求保存到文件。
只有在用户明确确认“这版可用”之后,才更新 .progress-state.yaml:
last_report_atlast_report_rangelast_confirmed_poolhistory(最多保留最近 20 条)
Output Formats
| 格式 | 推荐结构 |
|---|---|
email |
称呼 -> 进展 -> 需要确认的事项 -> blockers -> 下一步 -> 签名 |
chat |
一句话开头 -> 要点 -> 卡点或求助 -> 下一步 |
markdown |
标题 -> progress -> questions -> blockers -> next steps |
markdown + slides |
每个主题一页,最后一页放 questions 和 next steps |
typst/latex/quarto report |
先产出 markdown,再映射到模板源码 |
typst/latex/quarto slides |
先产出 markdown slides,再映射到幻灯片模板 |
Common Mistakes
- 首次使用就逼用户手写完整 YAML,而不是先给出可用结果。
- 把 blockers 和 asks 写得太隐蔽,导致导师看不出是否需要帮助。
- 对证据不足的结果写得过满。
- 术语前后不一致,导致同一份汇报像多个人写的。
- 没有 git 历史或 artifact 时直接失败,而不是降级到可用路径。
- 用户还没确认可用,就提前更新
.progress-state.yaml。 - 为了“显得完整”而编造材料来源、时间范围或结论强度。
References
常用参考:
references/advisor-presets.mdreferences/profile-recipes.mdreferences/artifact-scanning.mdreferences/style-extraction.mdreferences/anti-ai-zh.mdreferences/anti-ai-en.md
常用资源:
assets/samples/example-config.minimal.yamlassets/samples/example-config.yamlassets/templates/
按需加载参考文件,不要一次性读完所有 references。
Edge Cases
- 无 git 历史:跳过 git 分析,使用 artifact 扫描和用户口述。
- 无 artifact 目录:继续使用 git 和口述。
- 无配置文件:进入 Quick Mode 或
--init。 - 用户明确要求初始化:优先
--init。 - 无风格样本:跳过风格学习,只做去 AI 化。
- 无状态文件:创建新状态,并默认从最近一周开始。
- 与上次汇报重叠:提示用户并标记重叠部分。
- 用户要求文档源码:返回 markdown + 模板源码,必要时保存为文件。
- 全部素材都只是 preliminary:在输出开头明确提醒。