Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help


name: one-three-one-rule description: > Structured decision-making framework for technical proposals and trade-off analysis. When the user faces a choice between multiple approaches (architecture decisions, tool selection, refactoring strategies, migration paths), this skill produces a 1-3-1 format: one clear problem statement, three distinct options with pros/cons, and one concrete recommendation with definition of done and implementation plan. Use when the user asks for a “1-3-1”, says “give me options”, or needs help choosing between competing approaches. platforms: [linux, macos, windows] version: 1.0.0 author: Willard Moore license: MIT category: communication metadata: hermes: tags: [communication, decision-making, proposals, trade-offs]

1-3-1 沟通规则

当某项任务存在多种可行的解决方案,而用户需要明确的建议时,可采用此结构化决策格式。它包括简洁的问题描述、三种带有利弊分析的选项,以及针对推荐方案的具体执行计划。

适用场景

  • 用户明确要求以“1-3-1”格式获取回复。
  • 用户在面对技术决策时询问“有哪些选项”或“我有哪些选择”。
  • 某项任务存在多种可行的解决方案,且这些方案之间存在显著的权衡(如架构、工具或迁移策略方面的差异)。
  • 用户需要一份可直接转发给团队或利益相关方的建议方案。

不适用于答案显而易见的简单问题、调试过程,以及用户已确定解决方案的任务。

操作步骤

  1. 问题描述(一句话)

    • 用一句简洁的话明确说明核心决策点或期望达成的结果。
    • 重点描述“做什么”,而非“怎么做”——无需提及实现细节、工具名称或具体技术。
    • 表述要简明扼要。如果需要使用“和”字,说明你实际上是在描述两个问题。
  2. 选项列举(恰好三个)

    • 列出三种不同的可行方案,分别标记为A、B、C。
    • 每个选项都需要附上简要描述、优点及缺点。
    • 这些选项应代表真正不同的策略,而非同一方案的小幅变体。
  3. 推荐方案(一个选项)

    • 根据用户的实际情况和优先级,说明你推荐的选项及其理由。
    • 表达要直接——这是你的专业判断,而非模棱两可的表述。
  4. 完成标准

    • 列出推荐方案的具体成功标准。
    • 这些应是具体且可验证的结果,而非模糊的期望。
    • 如果用户选择了其他选项,需相应修改此部分内容。
  5. 实施计划

    • 为执行推荐方案而制定的具体步骤。
    • 在适用的情况下,需包含具体的命令、工具或操作内容。
    • 如果用户选择了其他选项,需相应修改此部分内容。

验证标准

  • 回复中恰好有一句问题描述。
  • 回复中恰好有三个选项(A、B、C),每个选项均附有优缺点分析。
  • 回复中包含一条推荐方案,明确指出所选选项并说明理由。
  • “完成标准”与“实施计划”需与推荐的选项保持一致。
  • 如果用户选择了其他选项,推荐方案、完成标准及实施计划也需相应更新。

示例

用户提问:“请为我提供一份关于为API客户端添加重试逻辑的1-3-1格式建议。”

智能体回复

问题描述:在负载较高时,对外部服务的API调用会间歇性失败,需要实现优雅的重试机制。

选项列举

  • 选项A:在共享工具中实现带抖动机制的指数退避重试。 优点:方案简单且易于理解;只需实现一次,所有调用方均可共用。 缺点:不支持断路保护;调用方在重试过程中仍会阻塞。

  • 选项B:为每个接口调用使用tenacity重试库作为装饰器。 优点:可针对每个接口单独配置;内置断路保护和速率限制功能。 缺点:会增加依赖项;装饰器模式可能会使控制流程变得复杂。

  • 选项C:基于队列的异步重试机制,并配套死信处理功能。 优点:非阻塞式处理;可追踪并重新执行失败的调用;具备良好的扩展性。 缺点:复杂性显著增加;需要队列后端支持;对于请求量较低的服务而言属于过度设计。

推荐方案:选择选项A。当前调用量尚不足以支撑队列基础设施,而使用带有指数退避和抖动机制的共享工具,即可有效应对故障情况,且无需新增依赖项。

完成标准

  • api_retry()工具能够处理临时的HTTP错误(如429、502、503、504状态码)。
  • 重试次数最多为3次,采用指数退避策略并加入抖动机制。
  • 所有对外部API的调用都必须通过该重试工具处理。
  • 需记录每次重试的尝试次数及对应接口信息。
  • 需编写测试用例,覆盖重试次数耗尽、立即成功以及先出现临时错误后再成功的各种场景。

实施计划

  1. 创建utils/api_retry.py文件,设置可配置的最大重试次数、基础延迟时间以及可重试的HTTP状态码。
  2. 通过random.uniform(0, base_delay)实现抖动效果,以避免大量请求同时发起造成的问题。
  3. api_client.py中用该重试工具包裹现有的API调用代码。
  4. 为每种重试场景编写单元测试,使用模拟的HTTP响应进行测试。
  5. 通过针对不稳定接口的简单压力测试,验证该方案在负载较高环境下的表现。