
Qiaomu Book Script
- 17 installs
- 22 repo stars
- Updated June 9, 2026
- joeseesun/qiaomu-book-script
Generate book summaries and transcripts from video URLs or manual input for narrative extraction and research.
About
Converts video content and manual input into structured book scripts and summaries. Supports video URL input or text pasting for content processing.
- Supports both video URL processing and manual text input modes
- Generates structured summaries and transcripts for content analysis
Qiaomu Book Script by the numbers
- 17 all-time installs (skills.sh)
- +1 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #1,012 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/joeseesun/qiaomu-book-script --skill qiaomu-book-scriptAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 17 |
|---|---|
| repo stars | ★ 22 |
| Last updated | June 9, 2026 |
| Repository | joeseesun/qiaomu-book-script ↗ |
What it does
Generate book summaries and transcripts from video URLs or manual input for narrative extraction and research.
Files
Qiaomu Book Script
把一本非虚构书,变成一篇能直接念出口的完整中文短视频口播脚本。
Copyright (c) 向阳乔木 X: https://x.com/vista8 GitHub: https://github.com/joeseesun/
Operating Mode
Run as a production-lite writing skill. The goal is not to summarize the table of contents, but to write scripts that make a viewer stop scrolling because the sentence sounds true.
Default assumptions:
- The user may input only a book title. Do not ask for confirmation; generate directly.
- Default target is Chinese short video spoken delivery.
- Default book type is nonfiction. If the title is ambiguous, infer the most likely well-known nonfiction book and state the uncertainty in one short sentence before the scripts.
- Default target length is 2-4 minutes. Prefer a tight, memorable script over exhaustive coverage.
- If a factual claim is current, recent, niche, or uncertain and browsing is available, verify it before using it. If verification is unavailable, say the uncertainty in one sentence and continue with a narrower, safer interpretation.
- Output one complete ready-to-read video script, not a four-video series.
- The script should contain 3-5 core ideas from the book. Use the number that makes the logic strongest; do not pad.
- The reasoning should unfold step by step from the book's ideas, not jump between unrelated points.
- Default opening should start with
大家好,我是向阳乔木and may continue naturally. For recurring recommendation videos, prefer a column-like greeting such as大家好,我是向阳乔木,又到好书推荐时间。 - Default ending should follow the user's requested CTA. If the user does not specify one, use a clean branded closing such as
感谢你的收看,我是向阳乔木。
Workflow
1. Identify the book, author, field, and the most defensible reason this author is worth hearing. 2. Extract 3-5 real cognitive shifts from the book, not chapter headings. 3. Arrange the ideas into one reasoning chain:
- name the viewer's real困境
- introduce why the author/book is worth listening to
- break a familiar assumption
- build the book's better frame
- test the frame in concrete daily scenes
- return the insight to the viewer's own life
4. Give each core idea one concrete daily scene or detail when it improves clarity. 5. Draft one complete script that can be read aloud from start to finish. 6. Check the draft against references/output-spec.md. 7. For tone, structure, and compression, use references/qiaomu-voice-benchmark.md as the default benchmark. 8. If the user provides an edited version, compare it with the prior draft at the micro level: deletions, softened wording, concrete substitutions, concept precision, example count, final landing. Update references/qiaomu-voice-benchmark.md with reusable lessons rather than only preserving the edited text. 9. If writing in a file or preparing a reusable deliverable, run python3 scripts/lint_output.py <output-file> before calling it done.
Output Contract
Return only the scripts, plus at most one uncertainty sentence before them when book information is insufficient.
The script must be wrapped in one fenced code block.
大家好,我是向阳乔木,又到好书推荐时间。
[完整口播文案,只包含观众能听见的内容。]
感谢你的收看,我是向阳乔木。Do not print internal labels or metadata such as:
第零条:作者介绍与系列引入第一条:核心观点一第二条:核心观点二第三条:核心观点三与系列收尾主题一核心观点一预估时长:约 55 秒
Use structure internally, but hide the structure from the visible script. The code block should contain only complete spoken words.
Style And Constraints
Follow references/output-spec.md as the writing contract.
Non-negotiables:
- Conversational Chinese. It should sound like a person talking, not a host reading a report.
- Short paragraphs. One sentence should carry one thought.
- Prefer short, hard-hitting reasoning over exhaustive coverage.
- Start with a strong cognitive anchor when possible: author comparison, counterintuitive claim, forgotten figure, surprising framing, or a conflict between two schools of thought.
- Precise verbs over stacked adjectives.
- 3-5 core ideas, each with concrete scenes over abstract advice.
- Prefer plain, accurate, slightly softened speech over clever metaphors or accusatory phrasing.
- Remove self-commentary such as
这句话很重,所以你看, and extra final maxims when the main conclusion already lands. - Sincerity over completion-rate tricks.
- Chinese punctuation throughout the spoken text.
- Important claims may use Markdown bold markers, for example
**真正困住人的,不是选择太少,是不敢承认自己已经选了。**
Do not use:
- forced hook phrases such as
你知道吗,今天我要告诉你,重点来了,接下来告诉你,划重点 - the forbidden sentence patterns, words, and structural habits listed in
references/output-spec.md - em dashes, horizontal rules, stage directions, or delivery annotations such as
【停顿】
Boundaries
- Do not invent book content, author experiences, data, quotes, awards, or publication history.
- Do not pretend to cover the whole book when only one idea is known well. It is better to go deep on fewer safe ideas than to dilute the script with vague coverage.
- Do not use direct quotations from copyrighted books unless the user supplied the excerpt or the quote is short and clearly necessary.
- Keep any requested CTA brief. Do not turn the ending into a long sales pitch for buying the book, courses, accounts, or products.
- Do not generate scripts for a book you cannot identify without first stating the uncertainty.
Reference Files
references/output-spec.md: full writing rules, forbidden expressions, output shape, and self-check.references/qiaomu-voice-benchmark.md: user-approved benchmark principles distilled from the tuned 《被讨厌的勇气》 script.scripts/lint_output.py: lightweight checker for four-code-block structure and common forbidden expressions.
__pycache__/
*.py[cod]
.DS_Store
.agents/
interface:
display_name: "Qiaomu Book Script"
short_description: "Generate one complete Chinese spoken book-interpretation script with a sharp hook, 3-5 core ideas, 向阳乔木 opening, and natural closing."
default_prompt: "Use $qiaomu-book-script to generate one complete Chinese spoken script for a nonfiction book: author/book hook, why it is worth reading, 3-5 connected core ideas reasoned step by step, 向阳乔木 greeting, and natural closing."
compatibility:
canonical_format: "agent-skills"
adapter_targets:
- "openai"
- "claude"
- "generic"
activation:
mode: "manual"
paths: []
execution:
context: "inline"
shell: "bash"
trust:
source_tier: "local"
remote_inline_execution: "forbid"
remote_metadata_policy: "allow-metadata-only"
degradation:
openai: "uses-model-knowledge-and-browsing-when-available-for-uncertain-book-facts"
claude: "uses-model-knowledge-and-states-uncertainty-when-needed"
generic: "uses-model-knowledge-and-states-uncertainty-when-needed"
MIT License
Copyright (c) 向阳乔木
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
"name": "qiaomu-book-script",
"version": "0.2.4",
"owner": "Qiaomu",
"updated_at": "2026-06-09",
"status": "published",
"maturity_tier": "production-lite",
"lifecycle_stage": "skill",
"context_budget_tier": "light",
"review_cadence": "monthly",
"target_platforms": [
"openai",
"claude",
"generic",
"agent-skills-compatible"
],
"outputs": [
"complete-book-spoken-script",
"author-credibility-intro",
"branded-qiaomu-opening",
"natural-branded-closing",
"three-core-book-ideas",
"single-fenced-code-block",
"three-to-five-core-ideas",
"benchmark-style-author-contrast",
"user-tuned-qiaomu-voice-benchmark",
"micro-revision-learning-loop",
"business-tool-book-style-benchmark",
"step-by-step-book-reasoning",
"short-video-oral-copy",
"forbidden-expression-lint"
],
"copyright": "Copyright (c) 向阳乔木",
"contacts": {
"x": "https://x.com/vista8",
"github": "https://github.com/joeseesun/"
}
}
qiaomu-book-script
你想把一本好书讲成短视频,AI 却常常写成书摘、讲义,或者一串看起来正确但没人想听的观点。
qiaomu-book-script 把非虚构书变成一篇能直接念的中文口播稿:有作者锚点,有核心概念,有生活例子,也会从你的手改稿里继续学习乔木的表达偏好。
中文 | English
npx skills add joeseesun/qiaomu-book-script为什么值得用
很多读书脚本的问题,不是信息不够。
是它没有口播节奏。
它会讲目录,讲背景,讲一堆正确的话,但观众听完第一分钟,还是不知道这本书和自己有什么关系。
这个 skill 的默认目标是写出这样的稿子:
- 开头有向阳乔木的品牌问候
- 用作者、流派或反常识观点建立认知锚点
- 只抓 3 到 5 个真正能改变理解的核心观点
- 每个概念都用普通生活或工作场景解释
- 不显示“主题一”“预估时长”这类内部结构
- 用户改稿后,会对比差异,把隐藏偏好写回 benchmark
样例输出
大家好,我是向阳乔木,又到好书推荐时间。
你可能遇到过这种场景。
你做了三十页 PPT,讲了十分钟,大家问:你到底想说啥?
你写了一大段方案,资料很全,数据也不少,领导看完说:有点乱。
你不是不会表达。
很多时候,是你把整理思路的工作,交给了听众。
《金字塔原理》这本书,就是专门解决这个问题的。
感谢你的收看,我是向阳乔木。安装
npx skills add joeseesun/qiaomu-book-script安装后确认:
ls ~/.agents/skills/qiaomu-book-script你可以这样说
- “解读《被讨厌的勇气》。”
- “用 qiaomu-book-script 写《置身事内》的完整口播脚本。”
- “给《思考,快与慢》写一篇 3 分钟读书口播稿。”
- “《金字塔原理》,偏真实职场口语,不要讲义感。”
- “下面是我改后的版本,你仔细看 diff,把偏好写回 skill。”
默认输出
Skill 默认输出一个代码块,只放观众能听见的正文:
大家好,我是向阳乔木,又到好书推荐时间。
完整口播文案。
感谢你的收看,我是向阳乔木。不会输出:
- 条目编号
- 预估时长
- “核心观点一”这类内部标题
- 镜头提示、停顿提示、配乐提示
写作原则
- 不复述目录,只提炼真正改变认知的东西。
- 3 到 5 个核心观点就够了,不为了覆盖全书硬凑。
- 优先短、狠、可复述,不写成讲义。
- 作者介绍不写百科,要解释这个人为什么值得听。
- 工具书、商业书、方法论书优先用真实工作场景和业务口语。
- 心理类、自我成长类书要直接,但不惩罚观众,不把痛苦写成观众的错。
- 结尾停在最干净的表达上,不再追加一条大金句。
持续学习乔木口吻
这个 skill 的核心不是一次生成完美稿。
更重要的是这个循环:
AI 生成初稿
你手动微调
AI 对比 diff
提炼删除、替换、弱化、压缩和结尾位置背后的偏好
写回 references/qiaomu-voice-benchmark.md
下一次生成更接近你的口吻已经沉淀的偏好包括:
- 《被讨厌的勇气》:少一点审判,多一点解释;用“怎么看过去”替代更有指责感的“怎么使用过去”。
- 《金字塔原理》:工具书要像真实工作场景里的话,少诗化,多业务口语,比如“理由码齐”“站哪边”“还没想明白”。
本地质量检查
生成到文件后可以运行:
python3 ~/.agents/skills/qiaomu-book-script/scripts/lint_output.py output.md它会检查:
- 是否只有一个代码块
- 是否以“大家好,我是向阳乔木”开头
- 是否以用户指定结尾或自然品牌结尾收束
- 是否错误显示条目编号或预估时长
- 是否出现常见禁用词和禁用结构
- 结尾是否扩展成额外营销动作
前置条件
- [ ] 已安装支持 Agent Skills 的运行环境,例如 Codex、Claude Code 或兼容工具。
- [ ] 运行环境能读取本地 skill 目录。
- [ ] 解读冷门书、同名书或版本差异明显的书时,最好允许 agent 查询公开资料核验。
Troubleshooting
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 输出像书摘 | 抓了目录,没有抓认知变化 | 要求它按 references/qiaomu-voice-benchmark.md 重写,只保留 3 到 5 个核心观点 |
| 输出太长 | 试图覆盖全书 | 让它删掉第三个例子、删掉元评论、停在最干净的结论 |
| 输出太像讲义 | 概念解释太抽象 | 要求每个概念补一个真实生活或工作场景 |
| 不像乔木口吻 | 没有吸收手改稿 | 把你的修改版贴回去,让它逐句 diff 并写回 benchmark |
| lint 失败 | 输出了多个代码块、预估时长或内部标题 | 删除结构标签,只保留完整口播正文 |
边界
- 不编造作者经历、数据、奖项、出版史或书中观点。
- 不大段引用书中文字。
- 不把不确定的书硬写成权威解读。
- 不为了节奏牺牲真诚。
- 不在用户指定 CTA 之外继续要求关注、收藏、转发或购买。
License
MIT
Copyright (c) 向阳乔木 X: https://x.com/vista8 GitHub: https://github.com/joeseesun/
<a name="english"></a>
English
qiaomu-book-script turns a nonfiction book into one complete Chinese spoken short-video script in the Qiaomu voice.
It is built for book recommendation videos, not generic summaries.
It focuses on:
- one ready-to-read script
- a branded 向阳乔木 opening
- 3 to 5 memorable core ideas
- concrete everyday or workplace examples
- no visible internal labels or duration metadata
- iterative learning from the user's edited drafts
Install:
npx skills add joeseesun/qiaomu-book-scriptExample prompts:
- “解读《被讨厌的勇气》。”
- “Write a Qiaomu-style Chinese spoken script for The Pyramid Principle.”
- “Here is my edited version. Compare the diff and update the skill benchmark.”
This skill is Chinese-first because the target output is Chinese spoken copy.
Book Spoken Script Output Spec
Core Goal
When someone reads the script aloud, the viewer should feel that a real truth just found them.
The writing should not sound like a viral formula. It should sound like someone who read the book carefully and knows where the idea touches ordinary life.
Required Script Structure
Output one complete script only.
The script should include 3-5 core ideas from the book. These are internal reasoning units, not visible headings. Use the number that makes the script strongest; do not pad to satisfy a checklist.
Recommended reasoning chain:
1. Start from the viewer's real困境 or painful everyday pattern. 2. Explain why this author or book is worth listening to. 3. Break a familiar assumption. 4. Build the book's better frame. 5. Test the frame in concrete daily scenes. 6. Return the insight to the viewer's own life. 7. Close with the user's requested CTA or a clean branded ending.
For 《被讨厌的勇气》, a strong chain may include:
- 目的论:人不只被过去推着走,也会为了某种目的选择现在的行为。
- 课题分离:分清自己的责任和别人的评价。
- 被讨厌的勇气:自由意味着不再把所有人的认可当作通行证。
- 共同体感觉:真正的自由不是孤立,而是在关系里找到贡献感。
Output Format
The final script must be wrapped in one fenced code block.
The code block must contain only spoken text that can be read directly in the video.
The script must start with a branded greeting. It may continue naturally after the name. For recurring recommendation videos, prefer a column-like opening:
大家好,我是向阳乔木,又到好书推荐时间。The script must end with the user's requested closing when provided. If no closing is specified, use a clean branded closing:
感谢你的收看,我是向阳乔木。Do not show internal metadata in the final code blocks:
- no
第零条:作者介绍与系列引入 - no
第一条:核心观点一 - no
第二条:核心观点二 - no
第三条:核心观点三与系列收尾 - no
主题一 - no
核心观点一 - no
预估时长 - no planning notes
The visible output should look like:
大家好,我是向阳乔木,又到好书推荐时间。
完整口播文案。
感谢你的收看,我是向阳乔木。Do not add an explanation of the framework after the scripts.
If book information is insufficient, add one short sentence before the first code block, for example:
我对这本书的版本信息不完全确定,下面按最常见的中文译名与核心主题来写。Then continue. Do not stop.
Book Content Rules
- Extract the few ideas that actually change cognition after reading the book.
- Do not retell the table of contents.
- Do not force unrelated talking points.
- Include 3-5 core ideas by default.
- The themes must have an inner reasoning sequence, not a listicle feel.
- Every core theme needs a concrete daily scene or detail.
- If knowledge is uncertain, narrow the claim and write the part you can defend.
- Prefer fewer well-understood themes over many vague claims. If the user explicitly requests a minimum number, satisfy it only when the ideas remain strong.
Author Introduction Rules
- Do not write a Wikipedia-style biography.
- Explain why this person is worth hearing.
- If the author has a counterintuitive identity, experience, research path, or position, use that as the entry.
- Comparison with other people in the field can quickly create a cognitive anchor, but do not smear others.
Opening Rules
Do not design a hook by using hook phrases.
Ask this instead:
If I had only 3 seconds with a stranger, what sentence would make them stop?The opening may be:
- an unexpected fact
- a painful question
- a counterintuitive claim
- a sentence that names a truth people usually avoid
- a contrast between two thinkers, schools, or common explanations
- a forgotten author or overlooked reason this book matters
Avoid:
你知道吗今天我要告诉你- a long setup before the real point
Ending Rules
Each script should land emotionally before the final closing line.
Use the user's requested closing line when provided, for example:
感谢你的收看,如果觉得内容有帮助,请一键三连。Do not add more selling after it. Do not ask the viewer to buy the book, join a course, click a link, or follow an account unless the user explicitly asks.
If the user does not specify a CTA, prefer:
感谢你的收看,我是向阳乔木。Voice
- Oral, conversational, and human.
- Short paragraphs.
- One sentence, one thought.
- Short, sharp logical moves beat long explanatory coverage.
- A strong script often uses a simple comparison early, for example one thinker says A, another says B.
- Restrained. No adjective piles.
- Sincere. No anxiety farming.
- Admit complexity when the idea deserves it.
- Use data and details only when they are true and useful.
- Give the viewer a feeling of "now I see it."
Forbidden Sentence Patterns
Do not use:
不是……而是when it is used as a lazy formula. It is allowed when the contrast is genuinely clarifying, for example不是没有想法,而是想法太散,没有结构和顺序。想象一下你有没有想过值得注意的是不难理解毋庸置疑随着……的发展对于……来说首先……其次……最后
Forbidden Words
Do not use:
震惊绝了太牛了赋能落地深度融合内卷这个时代年轻人精准打击
Forbidden Structural Phrases
Do not use:
重点来了接下来告诉你划重点- similar forced rhythm markers
Punctuation And Markup
- Use Chinese punctuation in the spoken text:
,。:?、《》 - Do not use em dashes.
- Do not use horizontal rules.
- Do not include delivery annotations such as
【停顿】or【加重】. - Important ideas may be marked with
**加粗**. - Keep the script pure spoken text. Do not add camera directions, music notes, subtitles, shot lists, visible section labels, or duration metadata unless the user explicitly asks.
Self-Check
Before returning, check:
- There is exactly one fenced code block.
- The script starts with
大家好,我是向阳乔木 - The script ends with the user's requested closing, or a clean branded closing if none was specified.
- The script contains 3-5 strong core ideas from the book, unless the user explicitly requested a different number.
- The themes unfold as reasoning, not as visible headings or disconnected list items.
- No visible
第零条、第一条、第二条、第三条labels appear inside the code block. - No visible
主题一or核心观点一labels appear inside the code block. - No
预估时长appears inside the code block. - The author intro answers why this author is worth listening to.
- Every core theme has one concrete life scene.
- No forbidden phrases or words appear.
- The opening does not start with empty hook language.
- The ending is short and does not expand into a sales pitch.
- The text sounds natural when read aloud.
Benchmark Style Notes
For scripts like 《被讨厌的勇气》, prefer this shape:
- Use author contrast early:
弗洛伊德说……阿德勒说…… - State the uncomfortable thesis plainly.
- Explain the logic in one or two clean steps.
- Use ordinary examples only after the idea is clear.
- Keep transitions short.
- Stop before the script becomes a lecture.
- The best line should be easy for the viewer to repeat.
Use references/qiaomu-voice-benchmark.md as the concrete benchmark for Qiaomu's preferred script rhythm. Key lessons from the user-edited version:
- Prefer
过去发生了什么很重要,但更重要的是,你现在怎么看过去。over harsher blame-like framing. - Explain concepts as
概念名 -> 一句话解释 -> 生活例子 -> 结论. - Use ordinary examples: 写完又删的消息、不想去的饭局、删掉发出去的内容、拒绝朋友后反复解释。
- Keep the conclusion simple:
真正的自由,不是让所有人都喜欢你。真正的自由,是你终于不用为了被喜欢,而委屈自己。 - Default closing can be
感谢你的收看,我是向阳乔木。
Revision Learning Loop
When the user edits a generated script, treat the edit as preference evidence. Do not only say "understood". Compare the two drafts and extract reusable style rules.
Look especially for:
- Deleted sentences: often signal overexplaining, filler, moral pressure, or performative cleverness.
- Softened words: often signal a preference for direct but non-punitive phrasing.
- More concrete nouns: often signal that vague terms should be replaced with visible actors or situations.
- Repeated book concepts: often signal that using the author's own conceptual vocabulary is better than paraphrasing too loosely.
- Shorter examples: often signal the ideal number of examples before a section starts dragging.
- Changed ending: often shows where the emotional landing should stop.
For the user-tuned 《被讨厌的勇气》 revision, the hidden preferences were:
- Replace harsh narrator judgment with measured framing:
说得更狠became说:;刺耳became很难被很多人接受. - Replace accusatory agency language with interpretive agency:
怎么使用过去became怎么看过去. - Keep the concept exact and simple:
最核心的第一件事became最核心的概念. - Make examples more concrete with one small noun:
小时候总被否定became小时候总被大人否定. - Preserve precise topic words instead of shortening too soon:
不适合关系became不适合亲密关系. - Reduce drama:
过去太痛became过去难以忘怀;很痛became很难. - Compress paired sentences when oral rhythm improves:
这不是否认伤害。伤害当然是真的。became这不是否认伤害,伤害肯定会有。 - Prefer agency language over ornate metaphor:
不能自动获得你余生的管理权became不能影响你的人生主动权. - Remove extra examples when two examples already prove the point: the
父母一句...人生答辩example was deleted. - Prefer natural fear language over clever prediction language:
还提前替对方生气became生怕对方生气. - Use the book's vocabulary when it is clearer:
替别人活完他的反应became替别人承担课题. - Delete directive filler:
然后放手was removed from你把自己的部分做好,剩下的,不全是你的事. - Shorten abstract phrases:
人生目标became目标. - Replace abstract internal change with visible behavior:
改过自己的观点became附和别人的观点. - Add uncertainty when guessing motivation:
因为觉得回应太少became可能觉得回应太少. - Delete meta-emphasis:
这句话很重was removed. - Use grammatically natural explanatory verbs:
它是明白一件事became它是让你明白一件事. - Align with book terminology:
我和别人有关,我在这里有用became我和他人有关,我在对他人有用. - Prefer common speech over polished phrasing:
没有急着教育他became没急着教育他. - Avoid trendy comparative words when simpler words work:
更稳became更好. - Remove transition filler:
所以你看was deleted. - Make the final contrast active and burden-focused:
不是所有人都喜欢你became不是让所有人都喜欢你. - Prefer everyday emotional language over literary imagery:
一点点删掉自己became委屈自己. - Stop after the clean final insight. The extra line
你不能决定别人怎么看你...was deleted because the conclusion had already landed.
For the user-tuned 《金字塔原理》 revision, the hidden preferences were:
- Use recurring-program opening when appropriate:
今天我给大家推荐一本书became又到好书推荐时间. - Make workplace dialogue shorter and more oral:
所以你到底想说什么?became你到底想说啥?. - Compress biography:
曾经在麦肯锡工作became曾在麦肯锡工作. - Diagnose the real failure mode:
想法没有顺序became想法太散,没有结构和顺序. - Prefer numbered/simple setup:
这套结构听起来很简单became听起来不复杂,四个词就能概括. - Compress instructions:
先把答案给出来became先给答案. - Combine tightly related sentences:
后面的信息...它们都...became后面的信息,不再是一堆材料,而是变成了.... - Add natural helper verbs:
真的支撑became真的能支撑. - Remove hedging when teaching logic:
不一定支撑became不支撑. - Prefer practical explanation over moral pressure:
尊重听众的大脑 / 没有义务became照顾听众的大脑 / 大脑...最怕整理散乱的内容. - Use native business verbs:
理由摆整齐became理由码齐;只能先做became建议先做. - Prefer practical clarity over metaphor:
还在雾里became还没想明白.
Qiaomu Voice Benchmark
Use this as the default quality target for book spoken scripts.
The model is not "cover every theme". The model is:
strong author/book anchor -> one uncomfortable thesis -> 3-5 concepts -> plain logic -> ordinary examples -> calm branded closingFor recurring book recommendation videos, default opening can be:
大家好,我是向阳乔木,又到好书推荐时间。What The User's Edited Version Teaches
1. Open With A Cognitive Anchor
Prefer a quick contrast or forgotten-author hook.
Good pattern:
弗洛伊德你可能听过。
荣格你可能也知道。
但还有一个人,和他们并称心理学三巨头,但却在很长一段时间里,被普通读者忽略了。
他叫阿尔弗雷德·阿德勒。Why it works:
- It gives the viewer a known map before introducing the book.
- It makes the author worth hearing without a Wikipedia biography.
- It creates instant contrast: famous people everyone knows vs. a neglected thinker.
2. State The Book's Hard Thesis In Simple Words
Prefer:
弗洛伊德说,你现在的样子,和过去有关。
阿德勒说:过去发生了什么很重要,但更重要的是,你现在怎么看过去。Avoid making the thesis sound like blame.
Do not overstate it as:
你的不幸都是你自己选的。The stronger, safer framing is:
过去发生了什么很重要,但更重要的是,你现在怎么看过去。3. Explain Each Concept With One Clean Logic Chain
Use this structure for every core idea:
概念名。
一句话解释。
三个生活例子。
一句真正的结论。For 《被讨厌的勇气》:
- 目的论:我们会用过去、自卑、受伤经历保护自己,避免开始新生活。
- 课题分离:谁承担后果,谁拥有课题。
- 被讨厌的勇气:不能把“不被讨厌”当成目标。
- 共同体感觉:我和他人有关,我在对他人有用。
4. Examples Should Be Ordinary And Immediately Recognizable
Use examples like:
- 小时候总被大人否定,所以现在没有自信。
- 曾经受过伤,所以不敢谈亲密关系。
- 能力不够,所以不敢争取机会。
- 给领导发消息,写完又删,删完又改,连标点都要揣摩。
- 拒绝朋友一次,却要解释十遍,生怕对方生气。
- 参加不想去的饭局,怕别人说你不合群。
- 删掉发出去的内容,因为回应太少。
Do not drift into extreme trauma, workplace spectacle, or moral instruction unless the user asks.
5. Keep The Language Slightly Milder Than The Sharpest Version
Prefer:
这不是否认伤害,伤害肯定会有。
但阿德勒提醒我们,伤害不能影响你的人生主动权。The tone should be direct, but not punitive.
Avoid sounding like the viewer is weak, guilty, or fully responsible for being hurt.
6. Use Repeatable Lines
Good lines from the benchmark direction:
这些时刻,本质上都是你在用自由换认可。被讨厌的勇气,不是变得强硬。这不是失败。
这是自由的正常代价。真正的自由,不是让所有人都喜欢你。
真正的自由,是你终于不用为了被喜欢,而委屈自己。7. Close Without Overexplaining
Preferred ending when no platform CTA is required:
感谢你的收看,我是向阳乔木。Do not keep explaining after the final takeaway.
Micro-Revision Principles Learned From The User Edit
The user's edit tightened the draft in a consistent direction. Apply these rules in future scripts.
A. Be Direct Without Sounding Punitive
Prefer measured challenge over harsh narrator judgment.
Better:
这个观点放在今天,依然很难被很多人接受。Avoid:
这个观点放在今天听,依然很刺耳。
因为它不让你一直躲在“我没办法”后面。The user tends to delete lines that sound like the speaker is diagnosing or scolding the viewer.
B. Prefer "怎么看" Over "怎么使用" When Talking About Pain
For trauma, past experience, regret, failure, or原生家庭 topics, avoid wording that sounds like the viewer is manipulating their pain.
Prefer:
过去发生了什么很重要,但更重要的是,你现在怎么看过去。Use "使用" only when the context clearly discusses a psychological mechanism and the tone is already safe.
C. Use One Concrete Word To Make A Sentence Visible
Small additions can make a sentence more vivid without making it longer.
Better:
小时候总被大人否定。Weaker:
小时候总被否定。The user prefers ordinary specificity over abstract generality.
D. Keep Concept Terms Stable
Do not over-paraphrase important book concepts.
Better:
但不要总替别人承担课题。Weaker:
但不要替别人活完他的反应。The second line is more literary, but the first line keeps the book's concept alive and is easier to remember.
E. Delete The Third Example When Two Are Enough
If two examples already make the concept obvious, stop.
The user deleted the parent-life-defense example from the课题分离 section. That suggests a preference for momentum over exhaustive resonance.
Rule:
Use 2-3 examples per concept. Stop at 2 when the point is already clear.F. Cut Meta-Commentary
Avoid speaker comments that explain how heavy, sharp, or important a sentence is.
Often delete:
这句话很重。
所以你看。
如果你只记住一句话,我希望是这句。Let the idea carry itself.
G. Prefer Common Oral Words Over Stylish Words
Better:
这种感觉,比被夸更好。Weaker:
这种感觉,比被夸更稳。"更稳" is not wrong, but "更好" sounds more ordinary and less like creator jargon.
H. End On The Cleanest Emotional Landing
The preferred final turn:
真正的自由,不是让所有人都喜欢你。
真正的自由,是你终于不用为了被喜欢,而委屈自己。
感谢你的收看,我是向阳乔木。Avoid adding another broad maxim after this. It weakens the landing.
Micro-Revision Principles Learned From The Pyramid Principle Edit
The user's 《金字塔原理》 edit shows preferences for business/tool-book scripts. Apply these when the book teaches a method, framework, communication skill, productivity system, management idea, or consulting-style thinking.
I. Use A Column-Like Opening For Recurring Recommendations
Prefer:
大家好,我是向阳乔木,又到好书推荐时间。This sounds more like a recurring program than:
大家好,我是向阳乔木,今天我给大家推荐一本书。J. Make Workplace Dialogue More Colloquial
Prefer natural spoken workplace lines.
Better:
你做了三十页 PPT,讲了十分钟,大家问:你到底想说啥?Weaker:
你做了三十页 PPT,讲了十分钟,对方只问一句:所以你到底想说什么?The user prefers shorter, more everyday speech over polished paraphrase.
K. Diagnose The Problem More Precisely
For tool books, identify the failure mode with practical precision.
Better:
很多聪明人不是没有想法,而是想法太散,没有结构和顺序。Weaker:
很多聪明人不是没有想法,而是想法没有顺序。"太散,没有结构和顺序" explains the real business problem better than "没有顺序".
L. Compress Setup Phrases
Prefer short oral compression.
Better:
曾在麦肯锡工作。
先给答案。
听起来不复杂,四个词就能概括。Weaker:
曾经在麦肯锡工作。
先把答案给出来。
这套结构听起来很简单。M. Combine Lines When The Relationship Is Tight
Separate lines are good, but do not split a cause-result sentence when combining improves flow.
Better:
后面的信息,不再是一堆材料,而是变成了支撑结论的理由。Weaker:
后面的信息,不再是一堆材料。
它们都变成了支撑结论的理由。This also means 不是……而是 / 不再……而是 should not be treated as absolutely forbidden. Use it when it makes a clean contrast.
N. Reduce Hedging When The Logic Is Clear
Better:
它可能重要,但不支撑这个结论。Weaker:
它可能重要,但不一定支撑这个结论。If the example is designed to show a category error, be decisive.
O. Prefer User-Centered Care Over Moral Obligation
Better:
它教你照顾听众的大脑。
大脑是人最耗能的器官之一,最怕整理散乱的内容。Weaker:
它教你尊重听众的大脑。
别人没有义务替你整理一堆散乱材料。The user prefers helpful explanatory framing over scolding or obligation language.
P. Use Business Verbs That Sound Native
Prefer:
再把理由码齐。
如果必须本周启动,建议先做核心流程。
还不知道你站哪边。Weaker:
再把理由摆整齐。
如果必须本周启动,只能先做核心流程。
还不知道你站在哪边。The user's version sounds more like real workplace speech.
Q. Prefer Clear Thinking Language Over Metaphor
Better:
它把表达这件事讲得很透。
脑子里的结构没搭好。
自己也还没想明白。Weaker:
它把表达这件事讲得很诚实。
脑子里的结构还没有搭好。
自己也还在雾里。For business/tool books, avoid poetic abstraction. Say the practical thing.
Reusable Script Skeleton
大家好,我是向阳乔木,今天我给大家推荐一本书。
[熟悉人物/流派/常识锚点。]
[被忽略的人或反常识观点。]
[为什么这本书值得讲。]
[核心概念一。]
[一句话解释。]
[生活例子 1。]
[生活例子 2。]
[结论。]
[核心概念二。]
[判断标准或操作方法。]
[生活例子。]
[边界说明。]
[核心概念三。]
[书名或核心命题的真正含义。]
[生活例子。]
[自由或代价。]
[可选核心概念四。]
[把锋利观点带回关系和生活。]
[全书逻辑一句话收束。]
[最终可复述金句。]
感谢你的收看,我是向阳乔木。Quality Bar
A good draft should be:
- short enough to read in one take
- clear enough that every paragraph answers "so what"
- memorable enough that at least one sentence can be clipped as a title
- restrained enough that it does not sound like lecturing the viewer
- concrete enough that examples feel like daily life, not invented drama
- plain enough that the speaker never sounds like they are showing off a phrase
- compressed enough that the user does not need to remove explanatory scaffolding
#!/usr/bin/env python3
"""Lightweight lint for qiaomu-book-script outputs."""
from __future__ import annotations
import argparse
import re
import sys
from pathlib import Path
FORBIDDEN_LITERAL = [
"想象一下",
"你有没有想过",
"值得注意的是",
"不难理解",
"毋庸置疑",
"震惊",
"绝了",
"太牛了",
"赋能",
"落地",
"深度融合",
"内卷",
"这个时代",
"年轻人",
"精准打击",
"重点来了",
"接下来告诉你",
"划重点",
"你知道吗",
"今天我要告诉你",
"【停顿】",
"【加重】",
]
FORBIDDEN_PATTERNS = [
(re.compile(r"随着[^。!?\n]{0,80}的发展"), "随着……的发展"),
(re.compile(r"对于[^。!?\n]{0,80}来说"), "对于……来说"),
(re.compile(r"首先[^。!?\n]{0,240}其次[^。!?\n]{0,240}最后"), "首先……其次……最后"),
(re.compile(r"^-{3,}$", re.MULTILINE), "水平分隔线 ---"),
(re.compile(r"^={3,}$", re.MULTILINE), "水平分隔线 ==="),
(re.compile(r"[—]+"), "破折号"),
]
REQUIRED_LABELS = [
"第零条:作者介绍与系列引入",
"第一条:核心观点一",
"第二条:核心观点二",
"第三条:核心观点三与系列收尾",
"第零条",
"第一条",
"第二条",
"第三条",
"主题一",
"主题二",
"主题三",
"主题四",
"核心观点一",
"核心观点二",
"核心观点三",
"核心观点四",
]
REQUIRED_OPENING = "大家好,我是向阳乔木"
ALLOWED_CLOSINGS = [
"感谢你的收看,我是向阳乔木。",
"感谢你的收看,如果觉得内容有帮助,请一键三连。",
]
def read_text(path: str | None) -> str:
if not path or path == "-":
return sys.stdin.read()
return Path(path).read_text(encoding="utf-8")
def fenced_blocks(text: str) -> list[str]:
return re.findall(r"```(?:[a-zA-Z0-9_-]+)?\n(.*?)```", text, flags=re.DOTALL)
def lint(text: str) -> list[str]:
errors: list[str] = []
blocks = fenced_blocks(text)
if len(blocks) != 1:
errors.append(f"expected 1 fenced code block, found {len(blocks)}")
for index, block in enumerate(blocks, start=1):
stripped = block.strip()
if not stripped.startswith(REQUIRED_OPENING):
errors.append(f"script must start with: {REQUIRED_OPENING}")
if not any(stripped.endswith(closing) for closing in ALLOWED_CLOSINGS):
endings = " or ".join(ALLOWED_CLOSINGS)
errors.append(f"script must end with: {endings}")
if "预估时长" in block:
errors.append("script contains visible duration metadata")
for label in REQUIRED_LABELS:
if label in block:
errors.append(f"script contains visible internal label: {label}")
for phrase in FORBIDDEN_LITERAL:
if phrase in text:
errors.append(f"forbidden phrase: {phrase}")
for pattern, label in FORBIDDEN_PATTERNS:
if pattern.search(text):
errors.append(f"forbidden pattern: {label}")
calls_to_action = ["关注", "转发", "分享给", "收藏", "下单", "去买", "购买链接"]
block_text = blocks[0] if blocks else text
for phrase in calls_to_action:
if phrase in block_text:
errors.append(f"possible extra call to action in final script: {phrase}")
return errors
def main() -> int:
parser = argparse.ArgumentParser(description="Lint qiaomu-book-script output.")
parser.add_argument("path", nargs="?", help="Output file path, or stdin when omitted.")
args = parser.parse_args()
errors = lint(read_text(args.path))
if errors:
for error in errors:
print(f"ERROR: {error}", file=sys.stderr)
return 1
print("qiaomu-book-script lint passed")
return 0
if __name__ == "__main__":
raise SystemExit(main())