主题介绍与文章汇编
〇、技能定位
这是一个「学写文章」的技能——学的是高质量文章的写法,不是只收机关公文。
- 收录对象:写得好的文章。可以是机关、党委政府正式发布的文件(意见、通知、报告、讲话稿……),可以是党报党刊的理论文章与评论,也可以是学者、研究机构的高质量论文与研究报告。官方文件与学者文章同等重要:官方文件给「规范」,学者文章给「深度」,党报给「表述」,缺一类都学不全。
- 不设来源白名单:不因为一篇材料「不是法定公文」就排除它,也不因为「只是学者文章」就降等。只有一条标准——质量 + 相关度(五维评分卡见
references/search-playbook.md)。 - 成品取向:读者读完应当能回答「这个主题上,好文章是怎么写的」——用什么文体、按什么结构分层、论证怎么展开、话怎么说、哪些表述可借鉴。所以综述不是百科词条,而是写作范式图谱。
- 检索范围:全网。政府网站与公报、党报党刊、学术期刊与高校智库、权威公众号、主流媒体都要覆盖。
一、交付物
一次调用产出一个 Word 文件(外加一个中间产物),落在同一个工作目录:
| 文件 | 说明 |
|---|---|
XX文章汇编.docx |
公文版式正文,含封面、目录、综述、分部分汇编。这是唯一的成品,不再导出 PDF。 |
勾选面板.html |
中间产物,供用户勾选篇目(不随成品交付,除用户要求) |
XX 即用户给定的主题名。封面标题 = 文件名(XX文章汇编),封面不写日期、编者、说明等任何其他内容。
目录页码是 PAGEREF 域,在 Word/WPS 打开文档时自动回填(settings.xml 已置 updateFields=true)。因此交付时必须告诉用户:首次打开若提示「此文档包含可能引用其他文件的域,是否更新」,选是;若页码仍显示 0,按 Ctrl+A 全选、F9 更新域即可。不得为了「页码好看」把页码写成手填数字。
二、工作流(七步,含一个确认闸门)
步骤 1|主题解析(先想清楚再检索)
动手检索前先内部定清五件事:
- 主题定名:把用户口述提炼为规范主题名(用于文件名与封面),不超过 12 字。
- 文体与来源类型预判:这个主题上,好文章通常以什么形态出现?是部委「意见」「通知」这类正式文件,是党报理论版的长文,还是学者论文与研究报告?预判是为了把检索词铺开,不是设白名单——预判之外的类型只要有优质材料,照样收。
- 发布主体层级(只对官方文件有意义):明确可能覆盖哪几层——
中央 / 部委 / 省市 / 县区;学者与期刊文章不填层级。 - 时间窗与阶段:这个主题的讨论与政策脉络分几个阶段?据此设定检索时间窗,并优先取标志性材料(首个纲领性文件、权威学者的奠基性论文、政策转向后的新论述)。
- 检索词矩阵与部分结构:
- 检索词 = 主题词 × {文体词、主体词、场景词、时间词},另加 2–4 个同义词、上位词、英文词;
- 汇编预设 2–5 个逻辑部分,按读者理解路径分层,例如「总论与政策框架 → 机制与学理分析 → 地方实践与案例 → 写法研究」。
步骤 2|检索(全网并行,质量优先)
按 references/search-playbook.md 执行,核心三条:
- 五类信源平行搜,不分先后、不设配额:官方发布、党报党刊、学者与研究机构、专业期刊、主流媒体与垂直号。不要只搜公文——那样会把学者文章、理论文章全漏掉,池子会明显变窄。
- 五维评分卡是唯一闸门:每篇按
相关度 / 权威性 / 规范性 / 信息密度 / 可学性各 1–5 分,总分 ≥ 18 才入池。其中「规范性」看的是体例是否规范、层次是否分明、用语是否准确——公文、理论文章、学术论文都能拿满分,不是只有法定公文才算规范。 -
反对同质化,但不设来源配比:不要求「官方文件占多少」,只要求来源类型与文体有跨度(一册不能全是同一类材料或同一位作者)。
-
候选池 ≥ 28 篇(不少于入册 20 篇的 1.4 倍),保证用户勾选后有替换空间;≥ 18 分的材料不足 28 篇时继续补检,不得为凑数降门槛。
- 某主题几乎没有正式文件时属正常情况,以党报理论文章 + 学者研究为主体即可,在综述里说明材料构成。
步骤 3|候选清单 → 勾选面板(闸门:必须等用户回传编号)
- 按逻辑部分分组,编号 1..N 连续(与最终成册编号一致)。
- 写
candidates.json(结构见references/spec-schema.md),字段:编号、标题、来源、文体、发布主体、发文字号(有则填)、层级、是否范本、五维评分、日期、字数、链接、是否推荐、推荐理由。 - 生成面板并
present_files打开:
"$PY" scripts/build_panel.py --candidates candidates.json --output 勾选面板.html
- 在对话里同时给出分组概况:每部分几篇、文体分布、来源类型分布(官方 / 学者 / 媒体各几篇)、总字数,并说明推荐篇目的理由。
- 停下来等用户回传编号(形如
1,3,5-8)。用户可能补选、删选、要求换源——按回传结果调整,必要时重出面板。未收到用户编号,不得进入步骤 4。
步骤 4|抓取全文
"$PY" scripts/fetch_article.py --batch urls.json --output articles.json
- 抓取失败(公众号反爬、已删除、需登录)时按顺序兜底:①
pdf-web-export技能的 Playwright 抓取;②WebFetch;③ 换一源同题文章。 - 政府网站正文常在附件(PDF/DOC)里:抓附件并解析;解析不了改用同栏目的官方「政策解读」稿,脚注注明「据 XX 解读」。
- 期刊论文常只有摘要页:用摘要 + 关键词 + 公开的工作论文/预印本版本;确实只有摘要时降级收录,并在导读注明「仅摘要」。
- 仍失败的篇目必须显式告知用户,不得静默降级为标题占位。
- 抓到的正文只保留段落文字,剔除图片、二维码、关注引导、广告、往期推荐等噪声(脚本已内置清洗,仍要抽查)。正式文件要保留原有的分层编号(一、/(一)/1.),论文保留章节序号,不要把结构洗平。
- 每篇记录
title / source / date / author / url / paras;官方文件另记doc_type / sender / doc_no,学者文章把doc_type填成「论文」「研究报告」等,并把作者单位写进author。脚注即由这些字段生成。作者缺失时写「作者:未署名」,不得留空。
步骤 5|撰写综述与部分导读
- 综述(正文第一页起,标题为一级标题「一、主题概述」):目标 1800–3000 字。因为定位是学写法,综述要写成写作范式图谱,必须回答六问:
1. 是什么——概念、边界、与相邻概念的区别;
2. 讨论与政策怎么演进——分几个阶段,每阶段的标志性材料与口径/学理变化;
3. 由哪些文体承载——这个主题上通常写成什么(正式文件、党报理论文章、学术论文、调研报告),各适合解决什么问题;
4. 不同主体怎么写——中央定什么、部委细化什么、地方怎么转化、学者怎么论证(明确区分「政策要求」与「学理观点」);
5. 结构范式——常见框架(总体要求—主要任务—保障措施;问题—机制—对策;概念—测量—检验—结论),用「一是……二是……」概括要点;
6. 可借鉴的表述——把反复出现的规范句式、论证套路、限定语(原则上、逐步、有序、稳妥)点出来。 - 内部层级用三级序号
(1)(2)(3)作小标题;不堆砌无出处的数字,政策口径不改写、不省略限定语,学者观点须署明出处。 - 判据:读者只看这几页,就能说清这个主题上好文章用什么文体、按什么结构写、论证怎么展开、话怎么说。
- 部分导读(每个部分开头,标题与文章之间):150–300 字,说明本部分收录几篇、分别是什么文体与来源、各自切入角度、合起来能回答什么问题。用楷体,与正文区分。
步骤 6|组稿与生成
- 按
references/spec-schema.md写spec.json(综述 blocks、parts、articles 全文段落)。 - 生成 Word:
"$PY" scripts/build_docx.py --spec spec.json --output "XX文章汇编.docx"
- 结构自检(必须
ok: true才能交付):
"$PY" scripts/selfcheck.py --docx "XX文章汇编.docx" --expect-articles 20
自检覆盖:脚注数与引用数、分节与页码起始、奇偶页脚、目录条目与书签一一对应、PAGEREF 域数量、updateFields 是否置位、每篇另起页、字体、页边距。任一项 problems 非空即返工。
- 目录页码回填确认(不再导出 PDF,靠 Word 域):
selfcheck.py输出里checks.toc_update.update_on_open必须为true——它代表文档已置updateFields,Word/WPS 打开时会自动把PAGEREF更新成真实页码;- 交付话术里必须带上更新方法(见「一、交付物」末段);
- 不要自己算页码、不要手填数字、不要用「第 X 页」硬编码。
- 视觉抽查:在本机用 WPS / Word 打开成品,逐项确认封面、目录点线、页码位置、脚注、每篇另起页、导读字体(楷体)均正常;重点看目录页码是否非
0。无办公软件时至少确认selfcheck.py全绿,并在交付时说明「页码需打开时更新」。
步骤 7|交付
present_files 只给出 .docx 一个文件,并用三五行说明:收录篇数、文体与来源类型分布(官方 / 学者 / 媒体)、各部分构成、总字数;最后一句提醒「打开时若提示更新域请选『是』,目录页码会自动填好」。
三、格式硬约束(不得改动)
| 要求 | 实现 |
|---|---|
| 公文版式 | A4;上 37mm、下 35mm、左 28mm、右 26mm;正文仿宋_GB2312 三号;固定行距 28.95 磅(22 行/页) |
| 封面 | 仅题名(XX文章汇编),方正小标宋二号加字距,上下淡灰细线,无页码、无其他文字 |
| 序号体系 | 一级 一、二、三、;二级 1、2、3、;三级 (1)(2)(3);不用「第一章」「1.1」等混排形式 |
| 目录 | 一级=部分标题,二级=文章题目;点线引导 + 页码;点题目、点引导线、点页码三处都能跳到正文对应页(w:hyperlink anchor 包住整行 + PAGEREF 域,页码由打开时更新域回填) |
| 分节编页 | 封面无页码;目录、正文各自重新从 1 起;页码格式 —1—,宋体四号,单页居右空一字、双页居左空一字 |
| 综述位置 | 正文第一页开始,一级标题「一、主题概述」 |
| 每篇另起页 | 文章标题强制 pageBreakBefore,绝不连排 |
| 分部分 | 每个部分另起页,标题下先出本部分导读,再排文章 |
| 脚注 | 每篇文章标题后加脚注。正式文件类:《标题》,发布主体,发文字号,成文日期。(无文号则省略该段);其余(党报、学者、媒体):《标题》,来源,日期,作者:XX。 小五宋体,页底;编号 ①②③ 每页重新编,不附链接 |
| 美化 | 只用黑白灰与细线、留白、字距;禁用彩色色块、渐变、艺术字 |
| 交付格式 | 只产出 .docx,不生成 PDF;文件名 XX文章汇编.docx;目录页码靠 updateFields 打开时回填 |
四、严禁事项
- 未拿到用户勾选编号就生成成品文件。
- 篇目不足 20 篇仍交付(除非用户明确同意少于 20 篇)。
- 把检索范围缩到「只有机关公文」——那会漏掉党报理论文章与学者研究,池子会明显变窄。
- 因为一篇材料不是法定公文就排除它,或因此给它降分。
- 为凑够篇数把总分 < 18 的材料放进来。
- 用「摘要 + 链接」冒充全文收录;用户要求全文照录时不压缩、不改写、不删段(仅剔除噪声)。
- 改写政策口径、省略「原则上」「逐步」「试点」这类限定语。
- 把学者观点当官方口径引用,或反之。
- 综述里出现无出处的具体数字、把传闻当结论。
- 改动版式参数(字号、行距、页码格式、页边距)而不告知用户。
- 目录页码留空或写成手填数字(必须走 PAGEREF 域,由打开时更新域回填)。
- 交付时不说明「打开时更新域」,让用户看到页码
0以为成品坏了。 - 声称产出 PDF,或为「看起来完整」私自转一份 PDF 一起交付。
- 调用 WPS / Word / LibreOffice 做格式转换(本技能不需要任何办公软件,只产出
.docx)。
五、脚本与环境
所有脚本都通过一个入口调用,不要直接指定 Python 解释器路径(不同机器路径不同):
python scripts/run.py <脚本名> [脚本参数...]
run.py 会自动:首次调用时在技能目录下建 .venv 并装 requirements.txt 里的依赖 → 之后复用该环境 → 转交目标脚本执行。示例:
python scripts/run.py build_panel.py --candidates candidates.json --output 勾选面板.html
python scripts/run.py fetch_article.py --batch urls.json --output articles.json
python scripts/run.py build_docx.py --spec spec.json --output "XX文章汇编.docx"
python scripts/run.py selfcheck.py --docx "XX文章汇编.docx" --expect-articles 20
也可先单独建环境(CI 或网络受限时推荐):
python scripts/setup_env.py # 建 .venv 并装依赖,打印解释器路径
| 脚本 | 作用 |
|---|---|
scripts/run.py |
统一入口:解析/创建虚拟环境并转交目标脚本 |
scripts/setup_env.py |
创建 .venv、安装 requirements.txt、校验依赖可导入 |
scripts/build_panel.py |
候选清单 → 勾选面板 HTML |
scripts/fetch_article.py |
单篇/批量抓正文,输出结构化 JSON |
scripts/build_docx.py |
spec.json → 公文版式 docx(封面/目录/脚注/分节页码,置 updateFields) |
scripts/selfcheck.py |
结构自检(脚注数、分节页码、目录书签与 PAGEREF、updateFields、另起页、页边距) |
依赖与运行环境
- 只依赖
python-docx、lxml、requests、beautifulsoup4四个包,全部装进技能目录下的.venv; - 不需要 WPS / Word / LibreOffice,也不需要
pypdf、pypdfium2、pywin32——本技能不做 PDF 转换; - 成品是标准
.docx(OOXML),WPS、Microsoft Word、LibreOffice、腾讯文档、石墨等都能直接打开。
参考文档:references/spec-schema.md(数据结构)、references/format-spec.md(版式参数与验收)、references/search-playbook.md(检索与质量规则)。