一个能长期工作的 Agent,不是一段越来越长的系统提示词。它至少要分清规则、资料、Skill、工具、执行入口和测试反馈。

我想做的东西并不复杂:给它一个主题,它先搜集可核验的资料,再整理文章大纲,最后生成适合不同博客平台的版本。

还有一条硬要求:可以把内容预填进编辑器,但不能替我点下最终发布。

最开始,我以为只要写好 Prompt 就够了。于是把账号定位、写作要求、平台规则、事实边界和发布流程全塞进系统提示词。短期看,它确实能跑;改过几轮之后,问题却越来越多:规则互相打架,平台要求难以维护,资料更新要改 Prompt,工具报错时也不知道该在哪一层处理。

这时我才意识到,Prompt 只是 Agent 的一部分。一个能重复执行的 Agent,更像一套小型软件系统。

先定义一个足够小的任务

不要一上来就做"全能内容运营"。我给第一版 Agent 只留一个目标:

输入主题和目标读者,基于可核验资料形成文章,再生成平台版本;信息不足时追问,涉及真实发布时停下来等待人工确认。

这个定义故意删掉了热点监控、自动配图、评论运营等能力。目标越多,越难判断一次失败到底来自模型、资料、工具,还是流程设计。

最小链路可以画成这样:

用户输入
   -> Agent 判断任务与缺失信息
   -> 读取相关资料和 Skill
   -> 调用搜索、文件或博客预填工具
   -> 验证工具返回
   -> 输出结果或请求人工确认

内容运营 Agent 的最小可用架构

Prompt 只放长期稳定的规则

系统提示词适合保存不应频繁变化的内容:角色、目标、事实边界、确认点和输出结构。

例如:

你是内容运营 Agent。
只使用用户资料或可追溯来源陈述事实;来源不足时明确标注。
先给出大纲,再生成正文。
博客工具只用于预填;未经用户新一轮明确确认,不执行真实发布。
工具未返回成功结果时,不得声称操作已完成。

至于"知乎开头要先回答问题""CSDN 代码块如何处理"这类平台细节,不必全部硬塞进 Prompt。否则每增加一个平台,系统提示词都会膨胀一轮。

资料负责事实,Skill 负责方法

我把账号定位、目标读者、品牌禁用词和历史高质量文章放进资料层。它们是 Agent 工作时要参考的事实,而不是行为指令。

把资料和指令分开有两个好处。第一,资料更新时不用改系统规则;第二,可以按任务只取相关内容,避免每次都把整个资料库塞进上下文。

Skill 则适合封装可复用的方法,例如"文章事实核验流程"或"四平台改写规范"。一个 Skill 可以包含执行说明、检查表、脚本和参考资料。只有任务命中时再加载细节,比在 Prompt 中常驻所有规则更节省上下文。

这里还要区分两种用法:

  • 强制能力:每次都必须执行,例如事实核验;
  • 可选能力:特定任务才调用,例如改写成掘金版本。

如果所有 Skill 都强制注入,最终只是把"超长 Prompt"换了一个存放位置。

工具和 MCP 要有稳定契约

工具不是一句"帮我搜索一下"。它应该有明确输入、输出和失败结构。

{
  "input": {
    "query": "string",
    "timeRange": "optional",
    "maxResults": 10
  },
  "output": {
    "status": "success | partial | failed",
    "items": [],
    "issues": [],
    "traceId": "string"
  }
}

普通工具适合稳定、单一的动作。MCP 适合把搜索、文件、博客预填或业务 API 以统一方式接进 Agent。无论哪一种,关键都不是"能调用",而是失败后能不能说清:哪个字段错了、是否部分成功、还能不能重试。

在一个编辑器里把各层装起来

完成分层后,我在 Tipkay 的 Agent 编辑器中配置模型、系统提示词、工具、客户端/服务端 MCP、Skill 和资料,并在同一个页面里用右侧会话测试。这里 Tipkay 承担的是搭建与测试环境,不替代前面的架构设计。

下面两张图来自 Tipkay 的真实创建页。为避免改动线上应用,我只在未保存的表单中装入测试配置:第一张展示模型、系统提示词、工具与 MCP;第二张专门展示 Skill 可选池、强制注入池和资料绑定策略。右侧测试区与配置区保持同屏。

Agent 编辑器中的模型、系统提示词、工具和 MCP 配置

Agent 编辑器中的 Skill、资料绑定策略与右侧测试区

三组测试比"感觉不错"更可靠

我会固定测试三类输入。

第一类是正常主题:资料齐全、来源明确,检查它能否按流程形成大纲和平台版本。

第二类故意缺少来源,例如要求写一个没有提供数据的增长案例。正确行为不是补一个看似合理的数字,而是追问或留下证据槽位。

第三类要求它直接发布。正确行为应停在预填或预览状态,并等待用户在新一轮消息中明确确认。Agent 自己说一句"即将发布",不能等同于用户授权。

三组测试都在 Tipkay 的独立会话中执行,内容只使用可公开的测试主题。

测试 A:正常主题生成文章大纲并区分知乎与 CSDN 版本

测试 B:缺少来源时拒绝编造 37% 并追问原始数据

测试 C:直接发布请求停在下一轮人工确认前

失败要落到具体层

真正有价值的测试不是三次都成功。至少要保留一次真实失败,例如工具重名导致选错、参数结构不匹配、Prompt 规则冲突,或无关资料污染输出。

记录时不要只写"效果不好",而要写清四件事:输入是什么、实际发生了什么、失败属于哪一层、修改后如何验证。没有完成真实测试前,不应预先编一个故障故事。

这轮配图测试还没有捕获到一条适合公开、且能完整复现"失败 -> 修改 -> 复测"的真实记录,因此这里暂不放图。后续只有在真实测试中出现工具选错、参数不匹配或规则冲突时,才补入对应截图;不会为了凑齐版面制作假报错。

最小配置检查表

发布成私有应用前,我会逐项检查:

  • 任务是否只有一个明确主目标;
  • Prompt 是否只保留稳定规则;
  • 事实资料和行为指令是否分离;
  • Skill 是否按需加载;
  • 工具是否有明确输入、输出和失败状态;
  • 缺资料时是否会追问;
  • 高风险动作是否等待新一轮人工确认;
  • 工具返回失败时是否拒绝宣称成功;
  • 是否通过正常、缺资料和高风险三组测试;
  • 是否保留至少一次失败及修复记录。

先保存为私有应用,稳定后再考虑发布。只有当其他 Agent 也确实需要复用它时,才值得把它发布为 Agent 工具。一开始就追求"公开、通用、全能",通常只会让问题更难定位。

一个可用 Agent 的核心循环其实很朴素:

observe(user_request)
load(relevant_profile, selected_skills)
plan(next_action)
if action_is_reversible:
    execute_tool()
    verify_result()
else:
    request_human_confirmation()

Prompt 决定它遵守什么,资料决定它知道什么,Skill 决定它如何做,工具决定它能做什么,测试则告诉我们它是否真的做对了。把这几层分开,内容运营 Agent 才有机会从一次演示变成可以持续维护的工作流。

透明说明:文中使用 Tipkay 作为 Agent 的搭建和测试环境。配置图来自未保存的测试表单,不代表已发布应用;三组会话截图为真实测试结果。正式发布前仍需补齐一次真实失败与修复记录。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐