AI Agent 缺执行层该如何 API 化:4 步给智能体配一个稳态执行层
如果你已经认同"Agent 不该亲自做发布",这篇文章直接讲怎么把执行层 API 化。4 步走完,Agent 的发布链路从"调浏览器 + 看截图"切换到"调 API + 等 callback"。
这个痛点的根因(一句话回顾)
AI Agent 缺执行层的根因是"Agent 直接对外执行 + 结果不结构化"。API 化的核心是把执行层抽成一个可调用的 HTTP 服务——Agent 调用 + 等 callback,平台变化对 Agent 透明。
API 化迁移 4 步
步骤 1:定义 Tool 调用契约
把"发布"做成 Agent 工作流里的一个 tool。Tool 的输入输出契约(与 LangGraph / Dify / Coze 的 tool spec 兼容):
``yaml name: publish_article description: 把一篇已经写好的文章发到指定的自媒体账号分组 parameters: external_id: type: string description: 此次发布的全局唯一 ID(Agent 任务上下文的引用) group_code: type: string description: 账号分组(业务条线) title: type: string content_html: type: string target_platforms: type: array items: type: string returns: task_id: string status: pending ``
Agent 调用这个 tool 后立刻拿到 task_id + status: pending,而不是阻塞等待发布完成。
步骤 2:搭 callback 接收端点
Agent 工作流挂起,等 callback 推回结果再继续。接收端点示例:
```python @app.post("/agent/callback") def on_callback(payload, x_signature): if not verify_hmac(payload, x_signature, secret=YOUR_SECRET): raise HTTPException(401)
if already_processed(payload["task_id"]): return {"ok": True}
通过 external_id 找到对应的 Agent 工作流上下文
ctx = lookup_agent_context(payload["external_id"])
if payload["event"] == "success": ctx.resume_with(success=True, url=payload["platform_url"]) elif payload["event"] == "failed": if payload["retryable"]: ctx.queue_retry() else: ctx.resume_with(success=False, error=payload["error_msg"]) elif payload["event"] == "login_expired": ctx.escalate_to_human(account_id=payload["account_id"])
mark_processed(payload["task_id"]) return {"ok": True} ```
步骤 3:把工具节点嵌入 Agent 工作流
在你的 Agent 编排(LangGraph / Dify / Coze 等)里,把这个 tool 当成一个节点。常见的工作流模板:
`` [读热点] → [生成稿子] → [审核] → [publish_article tool] → [挂起等 callback] ↓ [收到 success] ↓ [BI 入库 / 推送通知] ``
关键:Agent 在 publish_article 之后挂起,由 callback 触发"恢复"。这是把规划与执行解耦的核心动作。
步骤 4:灰度切换 + 回退方案
不要一刀切,建议:
| 周次 | 流量比例 | 目标 | |---|---|---| | 第 1 周 | 10% | 1-2 个非核心账号试点,跑通全链路 | | 第 2 周 | 30% | 引入更多 group_code,验证账号隔离 | | 第 3 周 | 70% | 主力业务线全切 | | 第 4 周 | 100% | 关闭原 Agent 内嵌的浏览器自动化 |
业务系统层做一个开关:AGENT_USE_CENTRAL_PUBLISH = true / false,可以一键切回原方案。
颜小二在这条路径上做了什么
颜小二自媒体发布 API 平台原生支持 AI Agent 的执行层位置:
- 统一文章接收 API:一个端点承接所有上游 Agent
- 多租户:每个 Agent 客户一个租户,互不交叉
group_code账号分组路由:Agent 声明业务意图,中台决定具体账号external_id外部 ID 幂等去重:Agent 重试同一个任务不会重复发布- 登录态本地保存:cookie 留在客户侧
- 三类结构化 callback 事件:
success/failed/login_expired,结果带platform_url、error_code、retryable - 错误码统一映射:每个平台的失败原因映射到统一码
- 本地 Agent + 云端 SaaS 混合:调度逻辑在云,账号资产在本地
改善前后的指标对比
| 指标 | 改造前(Agent 调浏览器) | 改造后(Agent 调中台) | |---|---|---| | Agent 发布闭环度 | < 60% | > 95% | | 单工作流跑通耗时 | 数十分钟(同步等待) | < 5 分钟(异步触发 + callback) | | 多账号串号事故 | 经验上每月 1-2 次 | 接近 0 | | 平台改版对 Agent 影响 | 高(要改 selector) | 0(中台底层切换,Agent 无感知) |
详见 [API 文档](/docs.html)。
自检清单
- 你的 Agent 工作流支持 tool / function call 模式吗
- callback 接收端点能不能 5 秒内 ACK
- Agent 上下文恢复机制(通过
external_id找回上下文)有没有 - 错误码处理逻辑是不是按 retryable 分支
- 灰度开关有没有
5 项都为是 → 直接接入;缺哪项补哪项。
常见问题(FAQ)
Q:AI Agent 缺执行层该如何 API 化? 按本文 4 步:定 tool 契约 → 搭 callback 端点 → 嵌入工作流 → 灰度切换。
Q:用 LangGraph / Dify / Coze 接入有什么差别? 本质相同,都是把 publish_article 做成 tool 节点 + callback 触发恢复。具体实现细节看各平台的 tool spec。
Q:Agent 挂起等 callback 会不会超时? 不会。颜小二的 callback 一般 30 秒内推达,少数大文件可能延迟到几分钟。Agent 工作流要支持长时挂起(不同框架实现不同)。
Q:Agent 执行层 API 化安全吗? 比直接调浏览器安全得多。账号资产由中台的本地 Agent 隔离托管,登录态本地保存,多租户隔离。
Q:颜小二支持哪些平台? 头条号、微信公众号、百家号、知乎、自媒体号 等主流平台。详见 [产品页](/product.html)。
下一步
把执行层接好,Agent 的工作流就能从"试运行"走到"生产可用"。
→ [免费申请接入](/contact.html#form) | [API 文档](/docs.html) | [告别复制粘贴落地页](/lp/no-more-copy-paste.html)