前言
在之前的文章中,我们讨论了如何通过 Prompt Engineering 构建 Skill 的"软实力"。今天,我们将结合wechat-publisher(微信公众号发布助手)的实战案例,深入探讨 Skill 开发的硬实力——即如何通过代码实现、API 集成和工程化思维,让 AI 从"只会说"进化到"能干活"。
1. 什么是 Skill 的"硬实力"?
如果说"软实力"是教 AI 如何思考,那么"硬实力"就是给 AI 配备双手和工具箱。
1.1 软硬实力对比
| 维度 | 软实力 (Prompt-based) | 硬实力 (Code-based) |
|---|---|---|
| 定义 | 基于纯文本指令,依赖大模型逻辑推理 | 基于脚本和 API,执行确定性任务 |
| 核心资产 | 高质量 Prompt、逻辑框架 | Python/Node.js 脚本、API 集成 |
| 输出形式 | 文字、建议、分析报告 | 实际操作(发邮件、存数据、推送) |
| 可复现性 | 中等(依赖模型状态) | 高(代码执行结果确定) |
| 边界 | 受限于模型能力 | 受限于 API 和系统权限 |
| 典型场景 | 内容创作、逻辑分析、决策建议 | 自动化发布、数据处理、系统集成 |
硬实力的核心标志:AI 不再只是生成一段文字,而是能够自主调用本地或远程的程序去改变现实世界的状态(如发邮件、存数据库、推送公众号)。
1.2 为什么需要硬实力?
用户需求: "帮我把这篇文章发到公众号"❌ 纯软实力的回应:"好的,以下是发布步骤:1. 打开微信公众平台... 2. 点击素材管理..." → 用户还是要手动操作,AI 只是个「说明书」✅ 软硬结合的回应:"正在调用 wechat-publisher 脚本...""✅ 成功推送到草稿箱!Media ID: xxx" → AI 真正完成了任务,成为「执行者」2. 硬核 Skill 的三位一体架构
以我们开发的wechat-publisher为例,一个成熟的硬核 Skill 包含三个核心组件:
2.1 业务执行层 (The Scripts)
这是 Skill 的"肌肉"。在wechat-publisher中,就是scripts/publish.py
- 功能:处理 Markdown 转换、调用微信 API、管理素材上传。
- 硬核点:处理复杂的网络请求、超时重试、二进制文件(图片)上传等 AI 纯靠文本处理不了的任务。
核心类结构:
classWeChatPublisher:def__init__(self, app_id: str, app_secret: str):self.access_token = self._get_access_token()def_get_access_token(self) -> str:"""获取微信 API 访问令牌"""defupload_image(self, image_path: str) -> str:"""上传素材获取 media_id"""defmd_to_wechat_html(self, content: str, template: str) -> str:"""Markdown 转微信兼容 HTML"""defcreate_draft(self, title: str, content: str, ...) -> dict:"""创建草稿并返回结果"""2.2 技能描述层 (Metadata & SKILL.md)
这是 Skill 的"说明书"。它告诉 AI:
- 触发词:什么时候该用这个技能(例如:“发布到公众号”)。
- 调用参数:需要传给脚本什么参数(例如:
--file和--title)。 - 操作范例:给 AI 一个命令行调用的模版。
SKILL.md 关键字段:
---name:wechat-publisherdescription:将Markdown内容一键推送到微信公众号草稿箱。用户提到"发布到公众号"、"存为草稿"、"同步到微信"时激活此技能。---2.3 环境隔离层 (Security & Config)
这是 Skill 的"安全边界"。
- 凭证管理:通过
.env文件存储APP_ID和APP_SECRET,而不是硬编码在代码里。 - 依赖管理:明确脚本所需的第三方库(如
requests,markdown)。
目录结构示例:
wechat-publisher/├── SKILL.md # 技能描述(AI 读取)├── .env# 凭证配置(不入库)├── default_cover.png # 默认封面图└── scripts/ └── publish.py # 核心执行脚本3. 实战案例:wechat-publisher的深度优化之路
在最近的迭代中,我们针对"排版差异"和"脚本重复执行"这两个真实痛点进行了硬核重构。这不仅是代码的改写,更是 AI Skill 开发思维的进阶。
3.1 突破样式过滤:精准内联样式注入 (Inline Styling)
微信公众号后台有一个非常棘手的限制:它会过滤几乎所有的外部 CSS 和<style>标签。
- 挑战:如何在不破坏原始 HTML 结构(特别是其自动生成的 ID 和 Class)的前提下,实现精美的排版?
- 硬核实现:
- 样式映射表:我们在脚本中定义了一套专业模板(如
tech科技蓝),将 HTML 标签映射到对应的内联 CSS 上。 - 属性敏感的正则表达式:我们使用了
rf'<{tag}(?P<suffix>\s|>)'这种更严谨的正则写法。 - 后缀保留技术:通过正则捕获组
suffix。如果标签后面带属性(如<h1 id="foo">),我们会保留该后缀并注入样式,确保原有属性不损坏。如果直接闭合(如<h1>),则直接闭合。这解决了之前"页面上莫名出现乱码代码"的 Bug。
核心代码实现:
defmd_to_wechat_html(self, content: str, template: str = "minimal") -> str:import re# 转换 Markdown 为基础 HTML html = markdown.markdown(content, extensions=['extra', 'toc', 'tables']) styles = self._get_styles(template)# 更加严谨的正则注入方式for tag, style in styles.items():# 匹配 <tag 或 <tag 后面紧跟空格的内容# (?P<suffix>\s|>) 使用命名捕获组来处理后缀 pattern = rf'<{tag}(?P<suffix>\s|>)'definject_style(match): suffix = match.group('suffix')# 如果是 > 结尾,直接注入并闭合# 如果是空格,注入后保留空格以连接后续属性(如 id)returnf'<{tag} style="{style}"{suffix}' html = re.sub(pattern, inject_style, html)return html3.2 多模板排版系统:一键切换风格
为了满足不同场景的审美需求,我们内置了 8 套专业排版模板:
| 模板名称 | 风格描述 | 适用场景 |
|---|---|---|
minimal | 简约蓝,清爽专业 | 通用文章、技术博客 |
tech | 科技蓝,渐变标题 | 技术教程、AI 相关 |
elegant | 典雅黑,大气沉稳 | 深度长文、商业分析 |
fresh | 清新绿,活力自然 | 生活类、健康类 |
minimal-bw | 极简黑白 | 严肃内容、学术风格 |
warm-orange | 暖橙色,温馨活泼 | 情感类、故事类 |
dark | 暗色系,高级质感 | 设计类、夜间阅读 |
business | 商务蓝,专业稳重 | 企业公告、行业报告 |
使用示例:
# 默认 minimal 风格python3 scripts/publish.py --file article.md --title "文章标题"# 指定 tech 科技蓝风格python3 scripts/publish.py --file article.md --title "文章标题" --template tech# 指定 elegant 典雅风格python3 scripts/publish.py --file article.md --title "文章标题" --template elegant模板样式定义示例 (tech 模板):
"tech": {"h1": "font-size: 24px; background: linear-gradient(90deg, #0066cc, #00aaff); ""color: white; padding: 12px 18px; border-radius: 6px;","h2": "font-size: 20px; border-bottom: 2px solid #0066cc; ""padding-bottom: 6px; color: #0066cc;","pre": "background: #1e1e1e; color: #d4d4d4; padding: 15px; ""border-radius: 6px; border-left: 4px solid #0066cc;","blockquote": "border-left: 4px solid #0066cc; background: #f0f8ff; ""padding: 12px 15px; border-radius: 4px;",# ... 更多标签样式}3.3 状态管理与"幻觉循环":退出码的妙用
AI 助手(如 Claude Code)在执行命令行操作时,主要依赖程序的退出状态码(Exit Code)来感知任务是否真正结束。
- 痛点:若脚本推送成功但只是自然结束(未显式声明状态),AI 可能会因为"状态不明"而反复尝试推送,不进行强制会陷入循环中。
- 硬核做法:
if"media_id"in result:print("✅ 成功推送到草稿箱!") sys.exit(0) # 强制宣告成功,切断 AI 重试的念想else:print(f"❌ 推送失败: {result}") sys.exit(1) # 宣告失败,触发 AI 的错误捕捉逻辑Exit Code 设计规范:
| 退出码 | 含义 | AI 行为 |
|---|---|---|
0 | 成功完成 | 停止执行,报告成功 |
1 | 业务逻辑失败 | 可尝试修复参数后重试 |
2 | 配置错误 | 提示用户检查配置 |
124/137 | 超时/被杀 | 提示网络问题 |
3.4 逆向审美:将 Web UI 逻辑脚本化
我们将优秀的 Web 端微信编辑器(如开源的wechat-markdown-editor)中的排版逻辑,逆流提取到了 CLI 脚本中。这种从"用户界面"到"生产指令"的抽象,是开发高质量定制化 Skill 的关键思维。
逆向工程思路:Web UI 编辑器 CLI 脚本┌─────────────────┐ ┌─────────────────┐│ 用户选择模板 │ ──提取──▶ │ --template 参数 ││ 实时预览样式 │ ──提取──▶ │ 样式映射字典 ││ 一键复制 HTML │ ──提取──▶ │ md_to_wechat_html() ││ 手动粘贴发布 │ ──升级──▶ │ API 直接推送 │└─────────────────┘ └─────────────────┘3.5 异常处理:健壮性是硬实力的基石
生产级 Skill 必须优雅地处理各种异常情况:
def_get_access_token(self) -> str:"""获取 Access Token,带完善的错误处理"""print(f"正在获取 Access Token (AppID: {self.app_id[0:4]}***)...") url = f"https://api.weixin.qq.com/cgi-bin/token?..."try: response = requests.get(url, timeout=10) # 设置超时 data = response.json()if"access_token"in data:print("Access Token 获取成功。")return data["access_token"]else:# 微信 API 返回错误码raise Exception(f"获取失败: {data}")except requests.exceptions.Timeout:print("❌ 请求超时,请检查网络连接") sys.exit(2)except requests.exceptions.ConnectionError:print("❌ 网络连接失败,请检查 IP 白名单") sys.exit(2)except Exception as e:print(f"❌ 未知错误: {e}") sys.exit(1)4. 如何练就 Skill 开发的"硬实力"?
如果你想从一个"提示词工程师"进化为"AI 技能开发者",建议按以下路径修练:
4.1 技能成长路线图
4.2 核心能力清单
| 能力 | 要求 | 学习资源 |
|---|---|---|
| 脚本语言 | Python 或 Node.js(推荐 Python) | 《Python Crash Course》 |
| API 调试 | 理解 RESTful、OAuth2、HTTP 状态码 | Postman 实战 |
| CLI 设计 | argparse/click 参数解析 | Python 官方文档 |
| 错误处理 | try-except、退出码设计 | 本文案例 |
| 环境管理 | .env 配置、依赖隔离 | python-dotenv |
4.3 具体修炼步骤
掌握一种脚本语言:Python 或 Node.js 是首选,因为 AI 对它们的编写能力最强,且生态最丰富。
学会 API 调试:不仅仅是看文档,还要学会处理 RESTful API 的各种异常状态码和权限验证(如 OAuth2)。
# 推荐工具链- Postman / Insomnia:API 测试- curl:命令行调试- httpie:更友好的 curl理解 AI 的执行环境:
- Cursor/Windsurf:它们通过
.agent/skills下的配置来识别技能。 - Claude Code:通过
.claude/skills下的SKILL.md来动态加载指令。
- 标准化流程化:
- 永远提供显式的成功/失败提示。
- 尽量减少人机交互。如果脚本能自动找到文件,就不要让 AI 手动输入。
4.4 从零开发一个 Skill 的完整流程
# Step 1: 创建目录结构mkdir -p .claude/skills/my-skill/scripts# Step 2: 编写 SKILL.mdcat > .claude/skills/my-skill/SKILL.md << 'EOF'---name: my-skilldescription: 描述这个技能做什么,何时触发。---# My Skill## 操作指令\`\`\`bashpython3 scripts/main.py --param value\`\`\`EOF# Step 3: 编写核心脚本cat > .claude/skills/my-skill/scripts/main.py << 'EOF'import sysimport argparsedef main(): parser = argparse.ArgumentParser() parser.add_argument('--param', required=True) args = parser.parse_args()# 业务逻辑print(f"处理参数: {args.param}")# 显式退出print("✅ 任务完成") sys.exit(0)if __name__ == "__main__": main()EOF# Step 4: 测试python3 .claude/skills/my-skill/scripts/main.py --param test ``````plaintext 在Cursor在使用就直接说:使用 wechat-publisher 技能将 xxx.md 这篇文章推送至微信Cursor 中调用技能实现功能,截图如下:
5. 总结:软硬结合,开启 AI 生产力的新纪元
在wechat-publisher的整个进化过程中,我们可以清晰地看到 AI 时代的两种核心竞争力是如何交织的:
- 软实力(逻辑的灵魂):它决定了 AI 的"审美"和"判断力"。正是通过高质量的 Prompt,AI 懂得了如何解析复杂的 Markdown 结构,学会了根据文章调性选择
Elegant还是Tech模板,并能推敲出最具传播力的标题。 - 硬实力(执行的躯干):它决定了 AI 的"边界"和"落地能力"。通过 Python 脚本和微信 API 的深度打通,我们解决了 Token 超限、样式过滤、多端同步以及状态反馈等纯文字模型无法逾越的物理障碍。
核心启示:从"使用者"进化为"定义者"
开发硬核 Skill 的本质,是将人类的领域知识(Domain Knowledge)转化为 AI 可理解、可调用的"能力模块"。当我们不再纠结于如何微调一句提示词,而是开始思考如何构建稳健的正则引擎、如何设计高效的 API 交互、如何通过退出码管理 AI 的状态机时,我们已经跨越了"提示词工程师"的阶段,进化为了AI 架构师。
未来已来,但它是不均匀分布的。那些能够同时驾驭"自然语言逻辑"与"程序语言执行"的开发者,将拥有第一批定义自动化未来的权力。
希望这套从wechat-publisher实践中打磨出的"硬核"方法论,能帮你打破 AI 编程的玻璃天花板,构建出真正具备商业价值、能自发运转的智能体资产。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。