2 min read · 416 words
使用技巧 / 博客运营 / Python · API
约 2,400 字
使用 LLM 撰写博客文章时,最常见的模式是在 ChatGPT 或 Claude 的聊天窗口中输入“帮我写一篇关于这个主题的指南文章”,然后手动复制生成的 HTML 并粘贴到 Blogger 管理后台的 UI 中。这需要花费 5 分钟,而且每次都需要重新配置标签、元描述(Meta Description)和分类。为此,我们创建了一个旁路端点(endpoint),只需一行 curl 就能将 LLM 的聊天输出直接发送到 Blogger 草稿箱(DRAFT)。
创建原因
直接调用 LLM API(例如 Anthropic / Google)会产生累积的 Token 费用,每篇文章大约需要花费 $0.10-0.50。100 篇文章就是 $10-50。对于像我们网站这样由个人运营的博客来说,这是一笔不小的负担。
相比之下,订阅 ChatGPT Plus / Claude Pro / Gemini Advanced 每月只需 $20 固定费用。即使一个月写 100 篇文章,也不会产生额外费用。然而,“聊天窗口 → 博客”的复制粘贴工作流实在太慢,导致人们最终还是不得不回到 API 调用。
解决方案:将 LLM 聊天中获取的 HTML 发送到 Web 应用的发布端点一行命令即可 → 自动注入标签/元数据/图表 / 通过 SEO 元数据验证钩子链(hook chain) → 自动保存为 Blogger 草稿(DRAFT)。人要做的事情只有在聊天中获取回答后,运行一次 curl。
只需每月 $20 的固定订阅费,就能让 100 篇文章全部通过 Web 应用的发布钩子链(清理 / 质量门禁 / 5 个索引渠道)并成功发布。
工作原理
Web 应用中有一个独立的端点 POST /api/writer/external-publish。
请求格式 (Request shape)
{
"title": "글 제목",
"content_html": "<p>본문 HTML...</p><h2>섹션</h2>...",
"label": "활용 팁",
"post_type": "guide",
"primary_keyword": "키워드",
"meta_description": "100-160자 메타 설명"
}
只需将从 LLM 聊天中获取的 HTML 直接放入 content_html,并填好其余 5 个字段即可。
服务器处理
- 身份验证 — 仅限本地主机 (127.0.0.1)。不对外暴露。
- 标签规范化 (Label normalize) — 将类似
["활용 팁", "사용팁", "tips"]的变体输入自动映射到网站的 6 个规范标签(canonical label)之一。如果不是已知标签,则返回{"error":"unknown_label","allowed":["..."]}响应。 - HTML 检查 — 剥离
/,自动转换原始自动生成提示词模板 (Prompt template)
调用
GET /api/writer/external-publish/prompt-template?topic=foo&label=활용+팁会返回一段符合网站基调和结构的 LLM 提示词。直接将其复制粘贴到 ChatGPT/Claude 聊天窗口中获取回答即可。实际效果
- LLM API 费用:每月 $0.10-0.50 × 100 篇 → 每月 $20 固定订阅(ChatGPT Plus)
- 单篇文章发布时间(LLM 回答 → Blogger 草稿):5 分钟 → 30 秒
- 发布钩子链通过率:47 篇外部 LLM 文章中通过 47 篇(平均通过 publish_quality_gate 15/15)
- 标签贴错事故:引入前平均每月 3 起 → 0 起(规范化映射的功劳)
- 最常见的使用模式:ChatGPT 聊天 → 复制回答 → 终端运行单行 curl
如果用一个 ChatGPT Plus 订阅来处理每月 100 篇文章,每年的 LLM 费用是 $240(订阅)对比 $1,200-6,000(API 调用)。对于个人运营者来说,这是一个无法忽视的差距。
验证方法
通过以下三种方式进行验证:
发布钩子链通过率
记录了 47 篇外部 LLM 文章发布后的 publish_quality_gate 结果。47 篇全部得分 ≥ 90,平均得分为 95。publish_sanitizer 会自动清理 LLM 输出中不规范的 HTML(如 Markdown 残留、空
),从而满足评分要求。标签规范化回归测试
将 30 个黄金测试集用例(各种变体标签输入)写入单元测试。
"tips"→"활용 팁","사용팁"→"활용 팁","compare"→"비교"等 30/30 全部正常映射。未知标签则返回 400 响应。安全抽检
从外部 IP 调用端点时返回 403。强制仅限本地主机。5/5 通过。
如何实现
核心是一个 FastAPI 端点函数。
from fastapi import FastAPI, HTTPException, Request from pydantic import BaseModel app = FastAPI() LABEL_MAP = { "활용 팁": "활용 팁", "tips": "활용 팁", "사용팁": "활용 팁", "비교": "비교", "compare": "비교", "가이드": "가이드", "howto": "가이드", # ... 사이트 canonical 라벨 매핑 } class ExternalPublishBody(BaseModel): title: str content_Category Coverage Notice
This article follows our label-specific editorial criteria. Details: