
写技术博客和写代码最大的区别在于代码可以通过编译器和测试用例判断对错而一篇文章要判断好坏往往要等读者读到一半才见分晓。LLM 技术写作之所以在开发者群体中流行不是因为模型能代替人总结思想而是因为它能把写作过程从“面对空白页面”改成“面对一份可以修改的初稿”。这篇报告会拆解开发者为什么愿意用 LLM 写博客、应该怎样准备运行环境、如何把写作流程工程化以及发布前必须做哪些验证和排错。文章面向正在尝试用 LLM 整理技术笔记、输出博客、沉淀团队文档的开发者。看完之后你会得到一条从选题到大纲、从初稿到验证、从排错到发布的完整链路而不是停留在“用 AI 生成一段文字再复制粘贴”的层面。1. 先回答核心问题开发者为什么愿意用 LLM 写技术博客1.1 技术写作的低效环节恰好是 LLM 能补齐的环节写一篇技术博客真正耗时的地方往往不是打字而是组织内容。打开编辑器之后不知道先写概念还是先写操作步骤同一个主题在不同平台要重新调整结构代码块和配置片段粘贴进来之后还要整理格式中英文术语混在一起读起来不顺畅。这些环节本身不需要太多“创作灵感”却会消耗大量时间。LLM 解决的是“从零开始”的成本问题。给它一个主题、一份踩坑记录、一段报错日志它可以在几秒钟内生成结构完整的初稿。开发者要做的不再是凭空搭建文章框架而是在初稿上做增删、验证代码、补充真实细节。从实际使用体验来看写作时间可以减少一半以上而且这部分节省下来的时间几乎都来自格式整理、大纲调整和措辞打磨而不是来自内容质量的注水。需要强调的是这里说的“效率提升”有一个前提写作素材要来自真实项目。如果让模型在没有任何输入的情况下凭空生成一篇“缓存优化实战”得到的内容往往正确但无重点最后改稿的时间可能比直接写还长。LLM 在下游整理环节效率高在上游事实生产环节并不具备可靠性。1.2 从“代笔”到“辅助”LLM 在写作链路中的真实定位把 LLM 当成“代笔”是最常见的误区。模型可以生成一段逻辑通顺的文字但它不知道这段文字描述的功能是否真的存在不知道命令在你所在的环境里是否能跑通也不知道某个版本号是否已经过时。技术博客的信任基础是可复现。读者收藏一篇文章通常是因为它解决了某个具体问题并且照做之后能成功。如果代码不能运行、日志是编造的、路径是虚构的那么文章发布后只会带来更多提问和差评。因此LLM 的合理定位是“协作者”而不是“作者”。写作环节LLM 可以承担的程度开发者必须负责的部分选题拓展高可以快速列出相关子话题判断这个主题是否真的有真实需求大纲组织中高能生成完整目录树判断结构是否符合读者认知习惯初稿生成高能快速铺开内容事实核查、删改、补充细节代码块生成中能给出常见写法在真实环境运行验证排错段落低容易编造错误原因提供真实日志和真实的排查过程1.3 收益与成本要分开核算把 LLM 接入写作流程不会只带来收益。它的成本集中在三个地方调试提示词、核查模型输出、把生成的代码跑通。这三个环节的工作量取决于文章的主题离项目和真实数据有多远。项目收益成本适合场景效率初稿速度快格式更规整第一次调试提示词需要时间素材充足的实战类文章覆盖度容易扩展开头、对比、扩展方向容易产生与主题无关的内容需要发散找角度的科普型文章一致性多篇文章结构能保持统一提示词模板需要维护系列博客、团队文档准确性无直接收益需要逐条核对事实和运行代码排错和教程类文章尤其明显结论很直接当写作素材来自真实项目时LLM 的投入产出比最高当内容完全依赖模型想象时返工成本最高。这也是为什么优秀的 AI 辅助写作流程第一步通常是收集素材而不是打开对话框。2. 写作不是孤立任务LLM 工具链和运行环境怎么准备2.1 两条路线云端 API 还是本地模型接入 LLM 之前要先选运行路线。云端 API 适合大多数个人博客场景注册之后就能调用不需要关心 GPU 和显存。本地模型适合两种情况一是文章涉及未公开的项目细节不希望把内容发送到外部服务二是离线写作或者对数据流向比较敏感。对比维度云端 API本地模型部署难度低获取密钥即可调用较高需要下载模型并配置运行环境硬件要求无特殊要求需要 GPU、内存和磁盘空间数据隐私取决于服务商的条款数据不出本机单次使用成本按 token 计费主要是电费和硬件成本离线可用否是输出稳定性通常较高取决于模型尺寸和量化方式对普通技术博客来说云端 API 已经足够。如果平时会写一些关于内部系统、商业项目、安全漏洞的文章就优先考虑本地部署避免把敏感信息拼进提示词。2.2 本地部署 LLM 时的硬件、依赖和目录规划本地部署 LLM 不一定需要高端显卡但要提前规划好资源。模型文件动辄几个 GB量化后的模型能降低显存占用但也会影响输出质量。上下文越长显存压力越大。建议先跑通一个小模型验证流程再根据实际效果决定是否升级。# 示例启动本地模型服务 # 具体工具和模型名称以官方文档为准 python -m venv .venv source .venv/bin/activate # 安装调用接口所需的 Python 依赖 pip install requests环境准备好之后建议把写作项目按目录拆分。这样提示词、草稿、脚本和素材不会混在一起也方便后续做批量生成。blog-writer/ ├─ prompts/ │ ├─ system.txt │ └─ outline.txt ├─ drafts/ │ ├─ cache-penetration.md │ └─ redis-miss.md ├─ scripts/ │ └─ generate.py └─ notes/ └─ project-notes.md目录分层不需要很复杂但“素材、提示词、脚本、产出”四类文件一定要分开。很多人直接把所有内容堆在一个对话框里等一个月后想复用提示词时发现什么都找不到。2.3 一个容易混淆的问题ComfyUI 和 LLM 必须在同一台电脑上吗很多开发者会在同一台机器上同时使用 ComfyUI 做图像生成、使用 LLM 做文本处理因此经常有人问这两者是不是必须部署在同一台电脑上。答案是没有必要。ComfyUI 负责图像生成任务LLM 负责文本理解和生成它们在功能上没有依赖关系。所谓“必须同机”通常来自两种场景一是当前只有一台带 GPU 的机器二是在 ComfyUI 里通过节点调用 LLM 来增强提示词。如果只是分别完成图像和文本任务完全可以通过 HTTP API 把两个服务部署在不同的机器上甚至把 LLM 换成云端接口。真正需要注意的是资源竞争。ComfyUI 和本地 LLM 都是显存大户同时运行很容易触发 OOM。减少冲突的做法包括分开部署文本生成走云端 APIComfyUI 留在本机。错峰使用避免两个大任务同时执行。LLM 使用量化和小上下文配置给图像生成留出显存。用独立进程启动服务方便单独重启和观察日志。2.4 环境检查清单在开始搭建写作流水线之前先按下面的清单确认环境。检查项确认方式正常状态Python 版本python --version能正常运行脚本API 密钥检查环境变量是否设置目标环境能读取到密钥网络连通性用 curl 请求接口地址能返回 JSONGPU 显存nvidia-smi剩余显存足够加载模型磁盘空间df -h模型文件所在分区有足够空间依赖版本pip freeze与需求文件对比版本不冲突这份清单不是一次性的。模型版本升级、显卡更换、接口服务调整时都应该重新走一遍。3. 把写作流程工程化一个可复用的技术博客生产链路3.1 先定选题和大纲再让 LLM 生成初稿直接让 LLM 写一篇“关于缓存穿透的博客”得到的结果往往大而全但读完找不到重点。正确顺序是先定大纲再逐段生成。大纲的作用类似代码里的接口定义先把结构定清楚后面的实现才不会跑偏。你是资深技术编辑。下面是我的主题和素材 主题Redis 缓存穿透的排查和应对 素材项目日志、代码片段、踩坑记录 请输出 Markdown 格式的大纲包含 1. 目标读者和前置知识 2. H2 章节和 H3 小节 3. 每节需要的代码、配置、表格 4. 需要开发者手动验证的事实点 不要输出正文只输出大纲。大纲生成之后要做一次人工检查确认是否覆盖“是什么、为什么、怎么做、怎么查”确认每个 H2 下是否有足够细节支持。如果大纲里全是“概述、原理、实践、总结”说明结构还不够具体需要继续细化。3.2 用系统提示词约束角色和输出生成正文之前先定义系统提示词。系统提示词的作用是让模型进入特定的写作模式避免输出过于空泛。你是一名有十年经验的后端开发者和技术博主。 写作规则 1. 全文使用中文技术术语保留英文并给出中文解释。 2. 结构顺序必须是概念解释、环境准备、代码实现、运行验证、常见问题。 3. 所有命令和配置必须说明运行环境。 4. 段落必须有信息量禁止使用缺少实义的套话。 5. 生成代码后用一个自然段解释关键参数。系统提示词不需要一次写得完美可以在使用过程中迭代。但要注意规则越具体输出越接近可发布状态。如果你希望文章里保留个人经验可以在系统提示词里加入“必须加入真实踩坑记录不得编造错误日志”。3.3 用 Python 脚本批量调用 LLM把写作变成流水线一篇完整博客往往超过两千字单次生成容易截断也容易丢失前面章节的细节。更稳妥的做法是把文章拆成章节逐段生成然后再合并。这样任何一个章节质量不达标只需要重新生成该章节不需要整篇重来。import os import requests from pathlib import Path API_KEY os.environ[LLM_API_KEY] BASE_URL os.environ.get(LLM_BASE_URL, https://api.example.com/v1) MODEL os.environ.get(LLM_MODEL, example-chat-model) def generate(system_prompt: str, user_prompt: str) - str: resp requests.post( f{BASE_URL}/chat/completions, headers{Authorization: fBearer {API_KEY}}, json{ model: MODEL, messages: [ {role: system, content: system_prompt}, {role: user, content: user_prompt}, ], temperature: 0.3, timeout: 120, }, ) resp.raise_for_status() return resp.json()[choices][0][message][content] def gen_sections(sections, system_prompt: str, out_dir: Path): out_dir.mkdir(parentsTrue, exist_okTrue) for sec in sections: text generate(system_prompt, sec[prompt]) (out_dir / f{sec[name]}.md).write_text(text, encodingutf-8)这段脚本把“调用模型”和“保存文件”拆开好处是失败时能看清楚是网络问题、接口问题还是内容质量问题。temperature设低一些输出会更稳定适合技术文档类内容。实际项目中接口地址、模型名和鉴权方式要以你的服务商文档为准。3.4 代码、日志和配置片段要回到真实工程环境验证模型生成的代码只能证明“它看起来像代码”不能证明“它能运行”。技术博客一旦被读者收藏往往说明读者把它当作操作手册。如果代码在干净环境里跑不通文章的可信度会直接归零。建议在发布前把每个代码块放进一个干净的临时环境运行。干净环境的意思是不要使用本机已经装好一堆依赖的解释器而是新建虚拟环境再安装需求文件。python -m venv /tmp/verify-env source /tmp/verify-env/bin/activate pip install -r requirements.txt python 示例脚本.py如果代码需要数据库、Redis、消息队列等外部依赖至少要在文章里写明启动方式和版本要求。这一步看起来繁琐但它是把“AI 生成的草稿”变成“可以发布的技术文章”的核心环节。4. 让文章具备技术颗粒度提示词、RAG 和输出格式控制4.1 提示词要约束角色、背景、范围和禁止项写好提示词是使用 LLM 写作的核心技能。一个可复用的提示词通常包含四个部分角色、背景、范围和禁止项。角色决定语感背景决定内容方向范围决定边界禁止项决定哪些输出必须避免。你是服务端开发工程师。 写作主题Redis 缓存穿透、击穿、雪崩。 目标读者1 到 3 年经验的 Java 后端开发者。 交付内容概念解释、最小示例、代码、常见问题排查表。 禁止不要写与主题无关的性能营销内容不要编造日志。对比一下如果只写“帮我写一篇 Redis 缓存的博客”模型会按自己的理解自由发挥。结果往往是结构完整但没有针对性也没有颗粒度。提示词越具体返工越少。4.2 把项目资料交给模型RAG 与轻量知识库模型不知道你的项目里有什么代码、遇到过什么报错、最终怎么解决的。要让文章贴合项目就必须把素材带进提示词。最简单的方式是直接拼接把笔记、日志、配置文件贴进用户消息。更强的做法是把个人 wiki 和踩坑记录整理成可检索的知识库。维护个人技术 wiki 是一个成本很低、收益很高的习惯。把常见问题、代码片段、命令记录按主题整理成条目写作时直接检索相关条目拼进提示词。这样每次写博客实际上是在复用过往经验而不是让模型凭空生成。# 伪代码把与主题相关的笔记检索出来拼进提示词 related_notes search_notes(topic缓存穿透, top_k3) user_prompt f下面是项目笔记\n{related_notes}\n\n请基于笔记生成正文对个人博客来说刚开始不需要引入向量数据库和完整 RAG 架构。先维护好碎片笔记写作时手动选择相关内容效果已经足够。只有当笔记量很大、手工挑选明显耗时之后再考虑自动化检索。4.3 输出格式控制为什么 JSON 比自由文本更可靠如果生成结果需要程序化处理可以要求模型输出 JSON而不是自由格式的 Markdown 文本。JSON 可以被 JSON 解析器校验字段缺失能及时发现后续转成 Markdown 或 HTML 也更方便。{ title: Redis 缓存穿透的三种应对方式, summary: 面向初中级后端的缓存穿透排查笔记, sections: [ { heading: 什么是缓存穿透, content: 第一次请求一个不存在的数据时缓存没有命中请求打到数据库。 } ], code_blocks: [ { lang: java, code: // 示例代码 } ], risks: [ 调用远程缓存时未设置超时时间 ] }使用 JSON 输出时注意两点第一模型可能偶尔输出不合法 JSON脚本里要做异常处理第二JSON 结构里不要放太多自由文本每个字段尽量短避免模型在中途截断。转成 Markdown 时可以用一个小脚本渲染 sections 和 code_blocks把最终结果写回文件。4.4 版本、路径和参数信息必须保守处理LLM 的训练语料有时效性。模型的回答可能停留在某个较旧的版本也可能把不同版本的功能混在一起。写技术博客时涉及版本号、命令参数、API 名称、路径和平台规则的内容必须做保守处理。模型容易生成的确定表述发布前应该改成官方已支持某个功能我验证的版本支持该功能在所有环境都能运行以下步骤在特定环境验证通过修改某个配置文件即可修改项目中的对应配置路径以实际项目为准这是目前最优方案在我的场景下更合适的方案保守不是含糊而是把结论限定在自己验证过的范围内。读者想要的是可以判断是否适用于自己环境的文章而不是一句没有边界的断言。5. 运行验证从“生成了”到“能发布”要过哪些检查5.1 代码可执行性检查发布前把所有代码块提取出来逐段运行。这个过程可以部分自动化但核心步骤仍然需要人工盯住结果。# 提取 Markdown 中的脚本并做语法检查 python -m py_compile 示例脚本.py如果代码块里包含命令要确认命令在当前系统 shell 下能执行如果包含配置片段要确认文件名、路径和占位符没有遗漏。最容易被忽略的是图片路径和示例文件路径模型喜欢生成your-project/src/main/java/...这类示意路径发布前要改成读者真正能对应的结构。5.2 技术事实与版本时效审查逐条审查文章中的确定性表述。把所有“官方支持”“最新版本”“默认开启”这类说法找出来与自己的验证记录对照。凡是没有验证过的事实要么删除要么改成“需要在你的环境确认”。重点核对以下内容API 名称和参数是否与当前文档一致命令参数是否存在是否区分大小写版本号是否写错或过时平台和工具的规则是否变化引用的依赖是否存在兼容性问题5.3 风格一致性与平台规范检查一篇博客发布到技术平台之前还要做格式和风格检查。人工逐行看太慢可以用脚本扫描常见的模板表达。from pathlib import Path BANNED [众所周知, 毋庸置疑, 废话不多说, 你学会了吗] for md in Path(.).glob(*.md): text md.read_text(encodingutf-8) for word in BANNED: if word in text: print(f{md.name}: 发现模板表达 {word})除了禁用词还要检查 Markdown 格式是否规范H2 标题是否编号、代码块是否带语言标识、表格是否有对齐线、段落是否有超长行。CSDN 这类平台对代码块语言标识尤其敏感缺少语言标识的代码块会失去高亮效果。6. 常见问题与最佳实践6.1 高频问题排查表问题现象常见原因检查方式处理建议文章结构空洞只给了主题没有给大纲和读者定位查看用户提示词是否包含读者和交付物先让模型生成大纲确认后再写正文生成的代码不能运行模型没有获得真实环境信息在干净虚拟环境运行代码以运行结果为准补齐版本和日志API 名称和版本写错训练语料过期与官方文档逐条核对发布前把所有确定性表述过一遍多篇文章风格雷同提示词缺少个人经验约束对比不同 prompt 的输出在提示词中加入自己的踩坑和结论本地显存溢出ComfyUI 与 LLM 同时运行用nvidia-smi查看显存占用分开部署、错峰运行、使用量化模型长文后半部分被截断上下文太长或单次生成内容过多查看输出末尾是否完整拆分章节逐段生成再合并6.2 从现象倒推原因质量下降排查路径当使用 LLM 写作的质量突然下降时按顺序检查以下环节。输入是否正确主题、素材、日志路径是否有误。提示词是否完整有没有丢失角色、范围或禁止项。上下文是否合适素材太少导致信息不足素材太长导致重点丢失。模型参数是否异常temperature过高会导致输出发散。接口是否变化服务商是否切换了模型版本。输出是否被后续脚本改写合并、格式化逻辑是否引入了错误。这条排查路径适用于大多数情况。不要一遇到质量问题就急着换模型先检查输入和提示词大部分问题出在这里。6.3 可执行的最佳实践把真实日志、真实错误信息作为素材不给模型编造排错的机会。模型最擅长整理最不擅长发明事实。发布前在干净环境运行所有代码块。这一步能避免大多数“文章看起来很好但照做失败”的风险。对版本敏感信息使用占位符或验证记录。建议在文章开头或末尾标注“本文验证环境”让读者知道适用范围。建立自己的提示词模板库像管理代码一样管理模板。提示词是解决写作问题的代码值得用版本控制工具管理。每周固定用个人 wiki 记录踩坑写作时直接引用。知识库和工作流是长期复利。用脚本检查禁用词和格式减少人工 Review 负担。但脚本只能检查文本不能代替对技术事实的核对。发布前检查清单检查项检查方式通过标准代码可运行干净环境执行所有代码块按预期输出事实核对与官方文档对照版本、参数、行为一致格式规范Markdown lint 脚本标题编号、代码块语言、表格正常术语统一全文检索同一术语没有多种译法素材完整对照大纲逐节检查每节都有示例、代码或表格禁用表达脚本扫描无模板套话无空泛形容词6.4 下一步扩展方向把写作流水线接入 CI提交草稿后自动执行代码块验证和格式检查适合有固定发布节奏的团队或系列博客。用 RAG 接入团队文档可以生成内部技术方案和复盘报告。相比个人博客团队场景对数据隐私要求更高更适合本地部署加私有知识库。用同一组提示词对比不同模型的输出能帮助你找到最适合自己写作风格的工具也能在模型升级时快速评估效果变化。如果要长期做技术输出下一步最有价值的事情不是接入更多自动化工具而是把个人 wiki 沉淀成可复用的知识库。素材积累得越早LLM 辅助写作的收益越大。回到最初的问题开发者为什么愿意用 LLM 写技术博客核心原因是它把写作从“从零表达”改成了“从初稿修订”。模型负责把散乱的素材整理成结构完整的文本开发者把节省下来的时间用来验证代码、核对事实、补充真实踩坑过程最终形成自己的技术判断。这个分工能成立的前提是你始终清楚哪些环节可以交给模型哪些环节必须自己完成。写技术博客的护城河从来不是打字速度而是对问题真正深入的理解。