
从 Markdown 到精美排版,一键生成、多主题切换、零维护成本——这是 AI Agent 给公众号运营者的礼物。
文章写完了,排版又要半小时。
打开微信编辑器,调字体、调颜色、调间距。好不容易调好了,下一篇又要重来。想换个风格?之前的样式全废了。代码块复制过去格式乱了,表格没有边框,引用块看起来像普通文字。
更惨的是,你攒了几十篇文章,想统一换一套主题色——每一篇都要手动改一遍。
如果有这样一个 Agent:
• 输入:Markdown 原文
• 输出:可直接粘贴微信编辑器的 HTML
• 支持 6 种主题一键切换
• 全流程自动化,无需维护 CSS
这篇文章,我们就来实现它。
在说实现之前,先聊聊为什么用 AI Agent 的思路来解决这个问题。
对比维度 | 传统脚本/模板 | AI Agent |
|---|---|---|
样式调整 | 改 CSS 代码,调半天 | 描述需求,自动生成 |
内容适配 | 硬编码规则,总有漏网之鱼 | 理解语义,智能处理 |
主题切换 | 维护多套模板,改一个要改 N 个 | 一行参数搞定 |
异常处理 | 预设规则覆盖不全,手动补丁 | AI 自动适配,持续优化 |
维护成本 | 样式变了要改代码 | 改配置即可 |
AI Agent 的核心能力可以概括为三个阶段:

感知:读取 Markdown 原文,识别标题层级、代码块、列表、引用、表格等结构。
决策:根据用户选择的主题,分析每个元素应该应用什么样式。比如代码块用什么背景色、引用块用什么边框、标题用什么字号。
行动:生成最终的 HTML,确保样式内联(微信编辑器的要求),处理图片尺寸、表格边框等兼容性问题。
整个流程可以抽象为四个阶段:

下面展示关键代码片段,帮助你理解核心逻辑。完整工具已封装好,可直接使用。
第一步是将 Markdown 转为结构化的 HTML:
import markdown
from bs4 import BeautifulSoup
def parse_markdown(md_content: str) -> str:
"""将 Markdown 转为 HTML 结构"""
extensions = [
'fenced_code', # 代码块
'tables', # 表格
'toc', # 目录
'nl2br', # 换行转 <br>
'sane_lists' # 更智能的列表处理
]
html = markdown.markdown(md_content, extensions=extensions)
return html
这一步的关键是选对扩展。微信编辑器对 HTML 的支持有限,所以要用 sane_lists 避免列表嵌套问题,用 nl2br 保证换行正确。
第二步是注入主题样式。核心思路是将 CSS class 转为内联 style:
def apply_theme(html: str, theme: str = "mist-blue") -> str:
"""注入主题样式"""
css_content = load_theme_css(f"templates/{theme}-theme.css")
style_map = parse_css_to_style_map(css_content)
soup = BeautifulSoup(html, 'html.parser')
for element in soup.find_all(True):
classes = element.get('class', [])
inline_styles = []
for cls in classes:
if cls in style_map:
inline_styles.append(style_map[cls])
if inline_styles:
existing_style = element.get('style', '')
element['style'] = existing_style + ';' + ';'.join(inline_styles)
return str(soup)
为什么要内联?
微信编辑器会过滤掉 <style> 标签和外部 CSS 文件,只保留元素上的 style 属性。所以必须把所有样式"内联"到每个元素上。
第三步是处理微信编辑器的兼容性问题:
def adapt_for_wechat(html: str) -> str:
"""微信编辑器兼容性处理"""
soup = BeautifulSoup(html, 'html.parser')
for img in soup.find_all('img'):
existing_style = img.get('style', '')
img['style'] = f'max-width: 100%; height: auto; {existing_style}'
for pre in soup.find_all('pre'):
existing_style = pre.get('style', '')
pre['style'] = (
f'background: #f6f8fa; '
f'padding: 16px; '
f'border-radius: 6px; '
f'overflow-x: auto; '
f'{existing_style}'
)
for table in soup.find_all('table'):
existing_style = table.get('style', '')
table['style'] = f'border-collapse: collapse; width: 100%; {existing_style}'
for td in table.find_all(['td', 'th']):
existing_style = td.get('style', '')
td['style'] = f'border: 1px solid #ddd; padding: 8px; {existing_style}'
for blockquote in soup.find_all('blockquote'):
existing_style = blockquote.get('style', '')
blockquote['style'] = (
f'border-left: 4px solid #dfe2e5; '
f'padding-left: 16px; '
f'color: #636e72; '
f'margin: 16px 0; '
f'{existing_style}'
)
return str(soup)
将以上模块组合起来:
def format_article(input_path: str, theme: str = "mist-blue") -> str:
"""主函数:Markdown → 微信 HTML"""
md_content = read_file(input_path)
html = parse_markdown(md_content)
styled_html = apply_theme(html, theme)
wechat_html = adapt_for_wechat(styled_html)
final_html = wrap_with_container(wechat_html, theme)
return final_html
我们预设了 6 套主题,覆盖常见的内容风格:
主题 | 配色 | 适用场景 |
|---|---|---|
mist-blue | 蓝灰雾霾蓝 | 技术长文、仓库解读、工程实践 |
ai-tech | AI 科技感 | 产品展示、模型介绍、AI 主题 |
forest | 清新森林绿 | 环保、健康、成长类内容 |
sunset | 温暖日落橙 | 创意、设计、生活方式 |
slate | 中性石板灰 | 企业、商业、技术文档 |
midnight | 深邃午夜蓝 | 深度分析、夜间阅读 |
切换主题只需一个参数:
python scripts/markdown_to_html.py \
--input article.md \
--theme sunset
## 为什么需要自动化?
手动排版太耗时,每次都要调样式...
### 核心优势
- 一键生成,零维护
- 多主题切换
- 微信完美适配
\`\`\`python
def format_article(md: str, theme: str) -> str:
return apply_theme(parse_markdown(md), theme)
\`\`\`
> AI Agent 让排版不再是苦力活。
直接粘贴到微信编辑器,无需任何调整:
• 标题层级清晰,间距舒适
• 代码块有背景色和圆角
• 引用块有左侧边框
• 列表对齐整齐
• 表格自带边框
cd wechat-article-formatter
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python scripts/markdown_to_html.py \
--input /path/to/article.md \
--theme mist-blue \
--output /path/to/article.html \
--preview # 自动打开浏览器预览
如果你用 Obsidian、Typora 等 Markdown 编辑器,可以配置一个快捷键:
on_save: python scripts/markdown_to_html.py --input {file} --theme mist-blue
每次推送 Markdown 文件到仓库,自动生成 HTML:
name: Format WeChat Article
on:
push:
paths: ['articles/*.md']
jobs:
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Format Article
run: |
pip install markdown beautifulsoup4
python scripts/markdown_to_html.py \
--input articles/${{ github.event.head_commit.message }}.md \
--theme mist-blue
排版只是第一步,一个完整的公众号发布 Agent 还可以包含:
根据文章标题和主题,自动生成封面图:
def generate_cover(title: str, theme: str) -> str:
"""调用图片生成 API,创建封面图"""
prompt = f"微信公众号封面图,主题:{theme},标题:{title}"
return image_generation_api.generate(prompt)
自动提取文章核心观点,生成 120 字以内的摘要:
def generate_summary(content: str) -> str:
"""调用 AI 生成文章摘要"""
prompt = f"请为以下文章生成 120 字以内的摘要:\n\n{content[:2000]}"
return ai_api.generate(prompt)
调用微信公众号 API,实现从 Markdown 到发布的全流程:
def publish_to_wechat(article_path: str, theme: str):
"""完整发布流程"""
md_content = read_file(article_path)
title = extract_title(md_content)
html = format_article(article_path, theme)
cover = generate_cover(title, theme)
summary = generate_summary(md_content)
wechat_api.create_draft(
title=title,
content=html,
thumb_media_id=cover,
digest=summary
)
对比维度 | 传统排版工具 | AI Agent 方案 |
|---|---|---|
使用方式 | 复制粘贴,手动调整 | 命令行一键生成 |
主题切换 | 每次重新排版 | 参数切换,秒级生效 |
样式维护 | 修改模板,逐篇调整 | 改 CSS 文件,全局生效 |
代码块处理 | 格式经常错乱 | 自动美化,语法高亮 |
批量处理 | 不支持 | 脚本批量转换 |
自动化程度 | 手动操作 | 可集成 CI/CD |
这篇文章展示了如何用 AI Agent 思路解决公众号排版问题:
核心价值:
1. 效率提升:从半小时手动排版 → 1 秒自动生成
2. 一致性保证:主题统一切换,风格稳定
3. 零维护成本:改配置文件,不用改代码
4. 可扩展性:集成封面生成、摘要生成、自动发布
Agent 能力体现:
• 感知:读取 Markdown,识别结构
• 决策:根据主题选择样式策略
• 行动:生成兼容微信的 HTML
AI Agent 的魅力在于:你只需告诉它要做什么,它会自己想办法做到。
如果你想在自己的公众号工作流中使用这个工具:
1. 获取工具:关注公众号回复「排版Agent」获取完整代码
2. 选择主题:根据你的内容风格选择合适的主题
3. 集成流程:配置到你的写作工具或 CI/CD 中
有问题欢迎留言讨论!
本文工具已开源,完整代码可在 GitHub 仓库获取。
参考资料: - Python Markdown 文档:https://python-markdown.github.io - BeautifulSoup 文档:https://www.crummy.com/software/BeautifulSoup - 微信公众号编辑器 HTML 支持规范