---
slug: "technical-writing"
source_type: "skill_md"
source_url: "https://cdn.jsdelivr.net/gh/luoling8192/technical-writing@main/SKILL.md"
repo: "https://github.com/luoling8192/technical-writing"
source_file: "SKILL.md"
branch: "main"
---
---
name: technical-writing
description: Use when drafting or revising internal technical design docs, review notes, architecture writeups, or sharing posts in Chinese, especially when the tone should stay evidence-backed, calm, and suitable for peers or leaders rather than marketing or literary writing.
---

# Internal Technical Writing

## Overview

Use this skill when the writing target is an internal技术方案、评审稿、架构说明、分享文稿，重点在于把背景、猜想、证据、抽象、实现影响面讲清楚。

这类写作更接近技术汇报，不是宣传稿，也不该写成散文。语气要平稳，判断要有来路，段落要能顺着问题往下读。

## When to Use

- 在写内部技术方案、设计说明、评审文档、分享稿
- 在改一篇已经有内容、但文风过满、结论过快、证据不足的技术文章
- 在解释代码、模块边界、架构演进、可观测性、评测方法
- 在把聊天记录、讨论结论整理成可传播的技术文档

**When not to use**

- UI 文案、按钮文案、产品营销稿
- 面向外部用户的帮助文档
- 纯粹的 API reference 或机械说明书

## Core Stance

先接住读者，再往下解释。

常见写法是作者替读者抢先下判断，像 `很清楚`、`说明了`、`显然`、`真正`。这里更适合换成三步：

1. 我们观察到了什么
2. 基于这些观察，可以归纳出什么
3. 这些归纳暂时更适合落在哪类实现或组织方式里

如果要给出更强的判断，至少满足下面任一条件：

- 前文已经提出了对应的猜想，这一段是在 callback
- 同一段上下文里已经有交叉验证的 evidence
- 已经引用了具体模块、代码、issue、trace、指标或实验结果

这些 bad case 往往有同一种共性：

- 句子承担的是“主持文章”的功能，不是“推进论证”的功能
- 句子在表达作者感受，不是在交代条件、对象、约束或判断
- 句子把英文抽象写作习惯直接投到了中文里
- 句子删掉以后，不影响事实，不影响论证，也不影响结构

遇到这类句子，默认处理方式不是“换个更文雅的说法”，而是：

1. 先判断这句是否真的提供信息
2. 如果不提供信息，直接删除
3. 如果提供信息，就把信息改写成条件、对象、关系、结果

## Preferred Structure

写长文时，优先用这条主线：

`背景 -> 拆解现状 -> 提出猜想 -> 分节解答 -> 回指前文 -> 影响面 -> 可观测性 / eval -> 收束`

如果文章围绕一个系统展开，可以把每一节都写成“在回答前面哪个问题”。这样读者会知道当前段落在解决什么，而不是只看到一串观点。

更具体一点，常见结构会是：

- 先交代背景和目标
- 拆现状，尤其是已有系统的优势、局限、宏观规律
- 把猜想或设计问题提出来
- 逐节解释每一层能力怎样补上
- 回到代码、模块、数据流、观测面和评测面

如果某一节表面上在讲模块，实际目的是在替另一个概念安家，可以优先用这种结构：

1. 先用一个很短的 quote 收住上下文
2. quote 里优先放 `mindmap` 或极简结构图
3. 再给一个生命周期或时序图
4. 最后才进入正文，解释这个概念为什么放在这里、怎样和现有模块对上

如果要给 leader 或评审一个放在最开头的 TL;DR，优先用三段结构：

1. 先讲启发来源或背景变化
2. 再讲当前系统已经具备哪些输入、还缺哪一层结构
3. 最后讲新模块设计和架构决策

这个 TL;DR 只保留三类信息：

- 原因
- 猜想
- 决策

不要在 TL;DR 里复述整篇目录，也不要解释作者接下来会怎么写。

## Language Rules

中文语气以自然、平实、技术同伴之间的说明为主。

- 中文引用统一用 `「」`
- 少用修辞和比喻，尤其是面对前线开发和内部评审
- 少用居高临下的口吻，避免说教感
- 少写成议论文式对抗句，优先顺着读者的理解路径展开
- 专有概念按正式名字书写，大小写保持稳定，例如项目里的 `Collector`、`Scheduler`、`Alert` 这类专名，全文统一一种写法
- 指标、能力、链路这些名词先钉住，再配动词和形容词；优先复用已经确定的词系，例如 `流通性`、`筛选`、`聚合`、`命中`，不要临时拼接近义词
- 不要写口语化的过场句，例如 `聊到这里`、`继续往下看`、`这条方向很值得继续推开`、`先把这件事单独拿出来说`、`最后可以用一句话收住`；如果一句话只是在主持文章，不承载信息，就直接删掉
- 少用空评价词，例如 `很现实`、`很重`、`很轻`、`很顺`；改成具体约束、具体风险、具体影响

下面这类句型要主动收一层：

- `不是……而是……`
- `不在……而在……`
- `为什么？原因其实很直接`
- `这条路径已经很清楚了`
- `说明了一件事`
- `自然会`
- `真正`

更稳妥的写法通常是：

- `也许你会先想到……`
- `把视线收回到今天的代码里，会先看到几组比较稳定的规律`
- `顺着这些模块往回看，可以归纳出……`
- `前面提到的猜想，在这里开始有了一个更具体的回答`
- `先把判断放轻一些，后面再结合代码或指标继续说明`

遇到段落里的关键问题句，可以适度用 `**...**` 强调，但只留给真正的主问题，不要把普通判断句全部加粗。

## Buzzword Blocklist

下面这些词在中文技术文档里几乎都是「让句子看起来有信息，但读完不知道发生了什么」。看到先停一下，能换成具体动作 / 对象 / 约束就换掉。

原则：不是逐词替换，而是逐句重写。原句里如果只有黑话词承载信息，整句通常没信息。删掉看论证少不少东西，少了再补具体的，没少就让它消失。

### 抽象抢戏词

- `生态` / `生态位` / `产品生态` → 列出具体依赖关系、用户类型或集成方
- `赋能` / `赋能用户` → `让用户能 X` / `把 X 能力开放给 Y`
- `闭环` / `形成闭环` → `X 之后 Y 也接进去了` / `现在能从 A 走到 B 再回到 A`
- `抓手` / `核心抓手` → `我们能改的那一个变量是 X`
- `心智` / `用户心智` / `心智模型` → `用户在第一次看到 X 时会怎么想 / 怎么操作`
- `链路打通` / `打通` → `A 现在能调用 B` / `A 写入的数据 B 也能读到`
- `沉淀` / `沉淀经验` / `沉淀方法论` → `记录到 docs/X` / `整理成 skill / runbook`
- `落地` / `落地能力` / `落地场景` → `在 A 模块实现` / `在 B 业务用上`
- `心力` / `认知负担` → `需要记住 X 个步骤` / `上手要先理解 Y`
- `收口` / `统一收口` → `所有 X 都走 Y 一个入口`
- `加持` / `AI 加持` → `加了 X 之后能 Y` / `在 X 步用了 LLM`
- `底座` / `底层逻辑` → `基础设施层是 X` / `这件事成立的前提是 Y`

### 评价腔 / 主持腔

- `很值得` / `非常值得` → 给具体理由：值得在哪个维度上
- `极致` / `极致体验` → 改成具体指标：延迟降到多少、步骤减到几步
- `丝滑` / `顺畅` → 改成具体约束：哪步原本卡，现在跳过了
- `深度集成` / `深度对接` → 改成集成点的具体范围
- `一站式` → `在 A 入口能完成 B / C / D`
- `颠覆` / `重塑` → 默认不用；真要用得有 before / after 对比

## Evidence-First Writing

写代码和架构时，避免直接把实现细节翻译成抽象结论。

推荐顺序：

`代码 / issue / trace / metric -> 宏观规律 -> 抽象归纳 -> 设计判断`

例如，不要直接写：

> 当前代码里，这条路径已经很清楚了。

更适合写成：

> 把视线收回到今天的代码里，会看到几组比较稳定的宏观规律。顺着这些模块往回看，可以先归纳出一个较稳定的结构。前面提到的几层能力，也因此开始有了几种更适合继续承接的实现位置。

## Reader-Aware Explanations

很多技术分歧来自“作者默认读者已经接受了自己的前提”。这里更适合先猜测读者可能会怎么想，再把误会拆开。

常用句法：

- `也许你会先想到定时巡检，像是……`
- `顺着这个方向想下去，会发现我们更关心的是……`
- `这样理解，会更贴近这次设计的边界`

适合接一个 quote：

> 一条巡检任务如何按预定周期扫描每个指标

然后再转入你真正要讨论的问题：

> 持续涌入的原始日志，怎样在不拖慢写入链路的情况下，被判定成一条值得通知的告警

## Few-Shot Fixes

下面这些例子比抽象规则更重要。写作时如果遇到类似句式，优先按这个方式改。

### 1. 不要把英文里的 `real / realize / reality` 直接翻进中文

原句：

> 一旦把告警规则接到多个采集端上，粒度问题会马上变得很现实。

问题：

- `现实` 在这里不是合适的表语
- 主语是 `粒度问题`，谓语是 `变得`，搭配不成立
- 句子像是在表达感受，不是在说明约束

改写：

> 可以预见的是，告警规则接入多个采集端之后，规则粒度的控制会很重要。

为什么这样改：

- 先写条件：`接入多个采集端之后`
- 再写对象：`规则粒度的控制`
- 最后写判断：`会很重要`

### 2. 不要用空评价词替代约束

原句：

> 这样的组合很顺。

问题：

- `很顺` 只有情绪，没有信息
- 读者不知道顺在成本、链路、延迟还是模块边界

改写：

> 这种组合更接近实际分工。

或者：

> 这种组合能把日志写入链路和告警判定链路拆开。

为什么这样改：

- 直接说分工关系
- 或者直接说结构变化
- 不用作者主观感受替代技术判断

### 3. 不要用对立句法硬造强调

原句：

> 它值得认真看的地方，不在宣传语，而在它把一组采集与告警机制组织得很完整。

问题：

- `不在……而在……` 容易写出说教感
- 读者还没进入正文，就先被作者带去站队

改写：

> 更值得认真拆开的，是它把一组采集与告警机制组织得比较完整。

为什么这样改：

- 少掉对立结构
- 句子仍然保留重音
- 读者更容易直接进入后文

### 4. 不要用过场句替代内容

原句：

> 聊到这里，告警去重相关的模型也该放进来一起看了。

问题：

- 这是主持人口吻，不是技术文档
- 删掉这句，论证不会损失任何信息

改写：

> 告警去重相关的模型也需要放进来一起讨论。

为什么这样改：

- 直接进入主题
- 不拿过场句占正文位置

同类句子也直接删掉，不做“温和改写”：

原句：

> 先把「压缩」这件事单独拿出来说。

问题：

- 这是主持句，不提供任何新信息
- 删掉之后，后文论证不受影响

处理：

> 直接删除，让下一句作为段落开头

### 5. 不要把“主持文章”的句子写进正文

原句：

> 这张图想说明的事情很简单。

问题：

- 这是主持句，不提供图外的新信息
- 读者真正需要的是图后的结论，不是作者先出面做导语

处理：

> 直接删除，下一句直接解释图里的结构关系

原句：

> 接下来进入这一节真正关心的问题：

问题：

- 这句话只是在带节奏，没有补充任何事实
- 如果下一句本身已经是问题句，这一句就没有存在价值

处理：

> 直接删除，或者把下一句改成完整的问题句

原句：

> 最后可以用一句更轻一点的话结束：

问题：

- 这句话只是在管理作者自己的写作动作
- 正文里不需要暴露作者“现在准备收尾”

处理：

> 直接删除，让引文或结论直接出现

### 6. 论证有顺序，就直接写成 1. 2. 3. 4.

原句：

> 第一，采集端很多，但日志最终还是会被收束到告警引擎。
> 第二，采集层已经承担了日志归一化……
> 第三，告警引擎自己已经天然拥有一组规则边界……
> 第四，外围模块已经把不少有价值的事件散落出来了……

问题：

- 如果只是散写四段，读者不容易看出这是一组并列论据
- 论据顺序和论证强度不够醒目

改写：

1. 采集端很多，但日志最终还是会被收束到告警引擎。
2. 采集层已经承担了日志归一化、字段提取、标签注入、来源标注。
3. 告警引擎自己已经拥有一组稳定的规则边界。
4. 外围模块已经给出了足够多的事件与状态。

为什么这样改：

- 论证顺序被显式标出来
- 每一点都能单独成立
- 后文更容易 callback

### 7. 指标名和动作词要属于同一套语义系统

原句：

> 第一组命题靠近转化率。不同 source 类型进入系统之后，有多少被 dedupe 掉，有多少在 cooldown 里停住，有多少被 policy 接住，最后又有多少真的升级成一条告警。

问题：

- `转化率`、`dedupe 掉`、`停住`、`接住`、`升级` 混了多套词
- 指标名和动作词不在一个语义系统里

改写：

> 1. 计算流通性。
>    不同 source 类型进入系统之后：
>    - 有多少被 dedupe 筛选
>    - 有多少进入 cooldown 聚合
>    - 有多少被 policy 命中
>    - 最后又有多少升级成一条告警

为什么这样改：

- 先钉住指标名：`流通性`
- 再统一动作词：`筛选 / 聚合 / 命中 / 升级`
- 这一组词能互相支撑，不会彼此打架

### 8. 表面在讲模块，实际是在给概念安家时，先给短图

原句：

> 从采集入口到告警判定层……
> 后面直接开始解释告警引擎、采集层、规则模块……

问题：

- 读者还不知道这节到底想回答什么
- 容易把“解释模块”写成“复习已有系统”

改写结构：

1. 先点明问题：`这一节表面上在讲告警引擎，真正要回答的是去重模块应该放在哪里。`
2. 用一个很短的 `mindmap` 收住周边模块
3. 再给一个生命周期图
4. 最后才写 `1. 2. 3. 4.` 论据，把概念安到现有系统上

为什么这样改：

- 图负责建立工作机理
- 正文负责回答设计问题
- 模块介绍不会挤掉概念论证

### 9. TL;DR 先讲启发来源，再讲问题定义，最后讲模块设计

原句结构：

> 当前系统已经具备了大量可利用的信息来源……
> 我们的猜想是……
> 基于这个判断，我们的决策是……

问题：

- 起手就落在“系统现状”，重心太平
- 启发来源没有先出现，读者不容易立刻进入问题
- `基于这个判断，我们的决策是` 也带一点主持口吻

更合适的结构：

> 第一段：先讲外部启发或上游项目带来的变化
> 第二段：再讲日志、指标、trace、事件等输入已经存在，系统接下来要整理的是反复出现、需要聚合的重复告警
> 第三段：直接提出新模块设计，以及消息队列、异步消费框架这类架构决策

例子：

> 上游某个监控项目让大家看到了另一种告警形态……
> 当前系统也已经具备了足够多的输入和状态来源……
> 这里提出一个新的模块设计……

为什么这样改：

- 第一段先建立背景和动机
- 第二段再定义问题
- 第三段直接落到决策
- 读者扫三段就能抓住全文主轴

### 10. 不要把作者感受写成技术判断

原句：

> 这样的组合很顺。

原句：

> 这条路径很清楚。

原句：

> 这会马上变得很现实。

问题：

- `顺`、`清楚`、`现实` 都是作者感受，不是技术判断
- 读者不知道到底顺在什么、清楚在哪里、约束是什么

改写方向：

> 先写条件
> 再写对象
> 最后写判断

例如：

> 可以预见的是，告警规则接入多个采集端之后，规则粒度的控制会很重要。

### 11. 不要把结构写成隐喻动作

原句：

> 散落出来了

原句：

> 收拢出来

原句：

> 往一层里收

原句：

> 延展下去

原句：

> 停在 action skipped

原句：

> 落在 failed

问题：

- 这些词在脑子里成立，是因为作者把系统想成了“流动中的东西”
- 一旦写成中文，主谓和宾语关系经常不成立
- 它们会把“状态”“结构”“结果”误写成“位置”或者“动作”

改写方向：

- `提供了`
- `整理出来`
- `集中到同一层处理`
- `继续追加后续处理`
- `最终生成了 action skipped`
- `最终生成了 failed`

## Lists, Quotes, and Flow

不要为了“像文章”而硬把所有东西写成整段 prose。内容本来就是 list-shaped 时，直接列出来更清楚。

适合列出来的内容：

- 设计目标
- 猜想
- 模块影响面
- 待补充实现点
- 评测命题
- 适用 / 不适用场景

如果一组判断本身带有论证顺序，优先直接写成 `1. 2. 3. 4.`，不要把它们散落成几段并列 prose。

适合用 quote 的内容：

- 想强调的命题
- 读者可能先想到的另一种问题定义
- 控制论 / 系统论 / issue 摘录中的关键句

适合用箭头的内容：

- `event -> dedupe -> alert`
- `background -> hypothesis -> answer`
- `collect -> match -> notify`

## Module-Level Writing

只谈抽象很容易飘。只谈代码又会失去设计视角。内部技术文档通常需要两层一起出现：

- 抽象层：概念、边界、语义、主张
- 实现层：模块、类型、采集器、规则、存储、trace、eval

写实现层时，尽量把模块面摊开：

- 哪些模块已经存在
- 哪些模块只体现出局部规律
- 哪些模块更适合作为后续替代实现
- 哪些地方需要补偿、迁移、压缩、解耦

如果一段在说“改造”或“补充实现”，优先给出可扫描的块，例如：

> 可能涉及到的补充实现：
> - 告警存储层 CRUD 拓展
> - 告警编排从 inline 转向异步消费
> - tracing 压缩与聚合策略
> - 可观测面板的链路展示与命题聚合

## Tone Calibration

面向内部评审、leader、前线开发时，语气以「一起拆问题」为主。

- 少下定论，多给出推演路径
- 少用绝对化副词，多用 `先`、`可以`、`暂时`、`顺着这个观察`
- 少写审判式句子，多写解释式句子
- 少写“作者赢了”的结尾，多写“读者可以继续往下跟”的结尾

## Editing Checklist

交稿前，逐项扫一遍：

- 有没有没有证据支撑的强判断
- 有没有 `不是……而是……` 一类对立句法
- 有没有 `很清楚 / 说明了 / 显然 / 真正` 这种抢结论的词
- 有没有把代码直接翻译成抽象结论
- 有没有只讲概念，不讲模块和影响面
- 有没有该列清单的地方却硬写成长段
- 有没有前文提出的猜想，后文却没有 callback
- 指标名、动作词、状态词有没有混用，名词和动词是不是同一套语义系统
- 有没有过场句在替内容占位置；如果删掉一句话不影响论证，就直接删掉，不改写成另一句过场话
- 中文引号有没有统一成 `「」`

## Default Prompting Pattern

收到草稿时，先做三件事：

1. 标出文中最强的几个判断
2. 检查这些判断有没有 callback 或 evidence
3. 按 `背景 -> 猜想 -> 解答 -> 回指` 重排结构，再改句子

如果需要给出改写建议，优先直接改成可用的句子，不要只做抽象点评。
