在 AI Agent 席卷而来的今天,我们听到了太多关于模型智能的宏大叙事。但回到代码编辑器前,开发者面临的问题往往非常具体:
'我写好的 Python 代码,怎么才能被 AI 顺畅地调用?'
本文将以 ChatTool 中的 SSL 证书工具为例,复盘它是如何从一个**'只有自己能跑'的脚本,一步步进化为'AI 也能用'**的智能体技能。这不仅是代码形态的重构(Script -> CLI -> Server -> Skill),更是一次面向 AI 时代的思维升级。
引言:跨越'代码'与'智能体'的鸿沟
想象一下,你写了一个完美的 Python 脚本 cert_gen.py 来自动申请 SSL 证书。
你自己用得很顺手:配置好环境,敲入参数,回车,搞定。
但当你试图构建一个 AI Agent 来接管运维工作时,尴尬的事情发生了: AI 不知道怎么用它。
- AI 不知道你的脚本依赖什么环境,甚至不知道它的存在;
- AI 可能会生成一段调用代码,但无法处理运行时依赖;
- AI 即使调用成功,也难以理解输出结果的含义。
这揭示了一个核心矛盾:传统的开发模式是面向'人'的,而智能体时代的工具必须是面向'模型'的。
要让一个简单的脚本进化为强大的智能体技能,我们需要跨越四个维度的认知升级。
第一层:代码即能力 (Code Import)
'能跑就行。'
这是工具诞生的初级形态。核心逻辑被封装在一个 Python 类或函数中。
以我们的 SSL 证书工具为例,核心逻辑是 SSLCertUpdater 类,它负责和 ACME 协议交互、调用 DNS 接口验证域名。
# src/chattool/tools/cert/cert_updater.py
class SSLCertUpdater:
def __init__(self, domains, email, ...):
# ... 初始化逻辑 ...
pass
async def run_once(self):
# ... 核心业务逻辑 ...
pass
- 特点:纯粹、灵活,无外部依赖。
- 适用场景:开发者自己在 IDE 里跑,或者作为库被其他 Python 项目集成。
- 局限:对非开发者不友好,环境依赖重,难以复用。
第二层:命令行工具 (CLI)
'一行命令解决问题。'
为了让非 Python 开发者(或者不想打开 IDE 的自己)也能用,我给代码穿上了一层外衣——CLI。
使用 click 这样的库,我们将 SSLCertUpdater 包装成了 chattool dns cert-update。
# 申请证书
chattool dns cert-update -d example.com -d *.example.com -e [email protected] --provider aliyun
# 使用测试环境(Staging)
chattool dns cert-update -d example.com --staging


