← Back to Vibe Lab

Experience

Experience

构建产品的总体思路

为整体框架留出容错性与可扩展性

设计整体框架时,需要具有一定的容错性和可扩展性,避免后续添加新组件或功能时带来麻烦。

实例 & 分析CN-travel-MCP · 模块组织

实例

构建 CN-travel-MCP 时,没有将不同模块的工具统一集中展示给 agent,而是以模块为单位,分别展示模块内部的工具。

问题 & 分析

两者在给 agent 的形式呈现上基本没有差别,但以模块组织工具,让开发者可以相对自由、方便地嵌入新模块,并对模块内的工具实现自定义调整。

不要尝试一口气完成全部产品功能

即便借助 agent,即便只是前端效果,也不要尝试一次完成全部功能构建。

一口气开发的问题

  • 组件间冲突难以定位。不同模块发生冲突时,无论人类还是 agent,都难以定位关键问题出在哪里。
  • 解决方案不可控。在大项目中,agent 可能只给出局部解决方案,例如针对测试场景打补丁,而没有真正解决核心问题。
  • 跑通之后仍然难以调优。无法区分问题来自组件间的协同,还是组件本身。

基本原则

先跑通最小 demo 或主干流程,再考虑输入输出的约束限制,以及效率提升(例如提高文档阅读效率)。

划分最小组分时,应只包含核心模块,暂不加入其余的校准、验证等模块。

难点:多大程度上才算适合 agent 开发的模块?这需要工程开发经验,以及对 agent 能力的感知。

方法:采用瀑布开发,先做出包含核心功能和基本布局的 demo,逐步测试每个功能的完备性,而后逐步拓展。

实例 & 分析Autoresearch 插件 · 开发范围

实例

对于自己的 autoresearch 插件,初步设想是三步走:

  1. 对 idea 进行可控打磨。
  2. 结合数据库与论文语言标准化,实现 idea 自动构建。
  3. 结合下游的具体代码实现与实验结果,打通链路。

问题 & 分析

在构建第一步的过程中,我希望约束 research contract,以编程形式强制设置检查点,并设立安全防御机制等。这些构想带来了过大的工程量。

即便借助 GPT-6-Astra max 高强度运行并得到插件,最终仍因 token 消耗和不同模块间的潜在冲突,造成插件难以使用,问题也难以准确定位。

  • 尤其是需要让 agent 自行定位 harness 中的问题时。

针对不同模块

Skill 构建:独立职责与流程编排

原则上,不同 skills 应相对独立,避免冲突。对于联合多个 skill 构建的流程,应采用1 个流程 skill + n 个独立 skill的形式。

然而,在实际体验中,根据用户的实际需求,通常并不期待独立 skill 执行完后直接停止,而是希望它继续执行后续的默认任务,或至少以提问的形式,请用户给出反馈或确认。这可以通过 system prompt(例如 rules / AGENTS.md)来约定。

好处
  • Skill 相对隔离,边界明确。
  • 整体流程易于管理,尤其是相对固定的多链调用,方便控制和调整。
代价
  • 流程中心化。底层的机动性可能不足,例如限制了 agent 自主组合流程的能力。
  • 长上下文中的流程错误。上下文过长时,LLM 可能因 attention 失败而出现流程错误。
  • 无效的上下文占用。后续流程未必会实际执行,却已占用上下文;这一影响相对较小。

Agent trajectory:关注中间执行过程

除了最终是否执行成功,还要关注中间流程是否有效、直接,包括以下两个方面:

效果
  • 反复失败的工具调用,以及由此造成的大量工具原始代码读取。
效率
  • 在 thinking 中,纠结于不必要的工具或 skill 选择。
  • 目标是读取文档中的特定内容,最终却读取了整份文档。

细节

异常行为监测

单一行为(固定步幅、固定间隔)会在服务端行为分析里聚成异常簇;每个动作加一层独立随机源,分布就被打散成“真人噪音”。

主干内容处理完后,仍需真实执行与人工打磨

  • 拿真实实例执行。启动完成后,即便 unit tests 已经通过,仍需要真实执行,才能触发各种可能的边界条件。
  • 逐项抠细节。效率、美观、修改前后的一致性等,都需要人工一点一点检查与调整。

其他思考

自主性与可控性之间的权衡

人类在设计产品或框架时,需要权衡 agent 的自主性与 workflow 的固定可控性。

Agent 的自主性,模糊了“用户”与“开发者”的边界

Agent 的自主性允许“用户”和“开发者”在一定程度上不再严格区分,从而使开发者在一定程度上不必考虑用户端的呈现形式。

对开发者而言,需要重新考量 agent 需要什么,并重新思考惯常操作中不同设计细节的合理性。例如:

  • 查询时,--limit 等参数是否需要设置,又该如何设置?
  • 官方应提供怎样的 skills,来辅助用户调整结果的呈现?
实例 & 分析买票 · 中转联程策略

对于买票时的中转联程策略,agent 可以根据用户的个体需求,自行设计不同算法。这部分可以交给用户的 agent 根据需求实现,而不必全部由开发者预先设计。

先做市场调研,也要真实试用

构建产品前,优先做好市场调研,尤其要关注 GitHub 上的个人开发者,避免重复造轮子。

同时,需要真实试用,才能知道现有方案的效果,判断是否值得改进,以及哪里需要改进,而不是简单地接受或拒绝。梳理好自己的产品优势和产品定位后,再开始具体执行。

实例 & 分析CN-travel-MCP / paper-polish-product

实例

构建 CN-travel-MCP 和 paper-polish-product 前,我没有进行详细调研,仅仅考察了市面上大厂的产品是否存在、是否满足需要,简单考察后就直接执行。

问题 & 分析

  • 完成后需要写总结报告时,才发现 GitHub 上已经有比较多类似产品。虽然采用的技术路径不完全相同,但都强烈依赖 agent 的自主性,没有显著差别。
  • 实际使用时发现,部分官方 API(例如飞猪 API 和美团 API)返回的信息并不完整;加上我在设计之初就不计划加入规划功能,只提供信息接口,使得自己的产品在这里具有一定差异性。

这完全是自己的幸运,也是让人尴尬的幸运。

Tools、MCP、Skills 与 Harness:选择什么载体?

作为面向 agent 开发的产品,究竟应该选择怎样的载体?

MCP

类似专业工具集合,适合作为工具箱。由于用户通常需要和服务器连接,才能获取工具列表及描述,这为开发者调整工具提供了便利。

Skills

面向执行某项任务的具体流程,目标是减少由于 agent 缺少外部知识而造成的流程错误或效率低下。

Skills 一旦下载和确认,往往不会主动更新。尤其与 Python packages 不同,自然语言的形式很难准确定位不同 skills 之间的冲突。它们会在用户电脑上相对长期存在,因此不应作为可变的工具接口。

目前 agent 发展迅猛,工具本身的构建形式很可能发生转变。在这个时期,部分大厂为了蹭上 skills 的热点,以及利用其简单易用性,通过 skills 来充当工具接口,很难不让人认为是一个错误。