{/* 此页面由 website/scripts/generate-skill-docs.py 从技能的 SKILL.md 自动生成。请编辑源文件 SKILL.md,而非此页面。 */}

一三一法则

技术方案与权衡分析的结构化决策框架。当用户在多个方案之间做选择时(架构决策、工具选择、重构策略、迁移路径),此技能生成 1-3-1 格式:一个清晰的问题陈述、三个带有优缺点的不同选项、一个具体建议含完成标准和实施计划。当用户要求 “1-3-1”、说”给我选项”或需要在竞争方案中选择时使用。

技能元数据

来源可选 —— 使用 hermes skills install official/communication/one-three-one-rule 安装
路径optional-skills/communication/one-three-one-rule
版本1.0.0
作者Willard Moore
许可证MIT
平台linux, macos, windows
标签communication, decision-making, proposals, trade-offs

参考:完整 SKILL.md

:::info 以下是 Hermes 在触发此技能时加载的完整技能定义。这是技能激活时代理所看到的指令。 :::

1-3-1 沟通法则

结构化决策格式,适用于当任务有多种可行方案且用户需要清晰建议时。生成简洁的问题框架、三个带有权衡的选项以及推荐路径的可操作计划。

使用时机

  • 用户明确要求 “1-3-1” 格式的回复
  • 用户说”给我选项”或”我有哪些选择”面对技术决策时
  • 任务有多个可行方案且存在重要的权衡(架构、工具、迁移策略)
  • 用户需要一份可以转发给团队或利益相关者的提案

对于有明确答案的简单问题、调试会话或用户已决定方案的场景,不要使用。

操作步骤

  1. 问题(一句话)

    • 用一句简洁的话陈述核心决策或期望结果。
    • 关注 做什么(what),而非 怎么做(how) —— 不涉及实施细节、工具名称或特定技术。
    • 保持精炼。如果出现”并且”,说明你在描述两个问题。
  2. 选项(恰好三个)

    • 提出三个独特且可行的方案,标注为 A、B、C。
    • 每个选项包含简要描述、优点和缺点。
    • 选项应代表真正不同的策略,而非同一方法的微小变体。
  3. 建议(一个选项)

    • 根据用户的背景和优先级,说明你推荐哪个选项及其理由。
    • 直接了当 —— 这是你的专业判断,而非模糊表述。
  4. 完成标准

    • 列出推荐选项的具体成功标准。
    • 这些应是具体、可验证的成果 —— 而非模糊的期望。
    • 如果用户选择了不同选项,修订此部分以匹配。
  5. 实施计划

    • 执行推荐选项的具体步骤。
    • 在适用处包含具体命令、工具或操作。
    • 如果用户选择了不同选项,修订此部分以匹配。

验证

  • 回复中恰好有一个”问题”句子。
  • 回复中恰好有三个”选项”(A、B、C),每个带有优缺点。
  • 回复中有一个单独的”建议”,选择一个选项并附上理由。
  • “完成标准”和”实施计划”与推荐的选项一致。
  • 如果用户选择了不同选项,建议、完成标准和实施计划相应更新。

示例

用户:“给我一个关于为我们的 API 客户端添加重试逻辑的 1-3-1。”

代理:

问题: 对外部服务的 API 调用在负载下间歇性失败,需要优雅的重试处理。

选项:

  • 选项 A:在共享工具类中使用带抖动的指数退避。 优点:简单、广为理解的模式;所有调用方共享单一实现。 缺点:没有熔断机制;调用方在重试期间仍然阻塞。

  • 选项 B:使用重试库(tenacity)作为每个端点调用的装饰器。 优点:可每个端点配置;内置支持熔断器和速率限制。 缺点:增加依赖项;装饰器模式可能模糊控制流。

  • 选项 C:基于队列的异步重试,带死信处理。 优点:非阻塞;失败的调用被追踪且可重放;扩展性好。 缺点:复杂度显著增加;需要队列后端;对低流量服务过于复杂。

建议: 选项 A。调用量不足以 justifying 队列基础设施,共享工具类配合指数退避 + 抖动可以干净地处理失败模式,且无需新依赖项。

完成标准:

  • api_retry() 工具类处理瞬时 HTTP 错误(429, 502, 503, 504)。
  • 最多重试 3 次,采用指数退避和抖动。
  • 所有外部 API 调用通过重试工具类路由。
  • 每次重试尝试记录端点名称和尝试次数。
  • 测试覆盖重试耗尽、立即成功和先失败后成功的场景。

实施计划:

  1. 创建 utils/api_retry.py,支持可配置的最大重试次数、基础延迟和可重试状态码。
  2. 使用 random.uniform(0, base_delay) 添加抖动以防止惊群效应。
  3. api_client.py 中使用重试工具类包装现有 API 调用。
  4. 添加单元测试,模拟每种重试场景的 HTTP 响应。
  5. 使用针对不稳定端点模拟的简单压力测试验证负载下的行为。