O que maybe-im-smart — 保持目标,换地方找做法 faz?
输出是一个动作——执行者、本周第一步、如何知道它已生效。不是一个想法。
标准:加载后是否继续
仅在命中 description 中的触发条件时加载。加载后,通过第一道门:下一步在视野之外——困难不算,只有没有候选才算。然后通过第二道门:缺少什么——只有第一类进入此流程:
| 缺少什么 | 去哪找 | 边界 |
|---|---|---|
| 缺少行动(应该做什么) | 此流程 | 只有此类需要换地方找做法 |
| 缺少事实(是什么) | 查出来 | 让用户回答AI能查到的事实浪费用户时间 |
| 缺少约束(不能动什么) | 问,且精准地问 | 只问“什么不能动”;问“怎么做”就把行动空间交还给了用户 |
其他几种情况不在此列。下一步已知仅因不想执行 = 执行问题。技术意义上的死锁(线程互相等待、工具调用循环、重试风暴) = 要修复的 bug,不是“用户反复问AI、AI反复问用户”的来回;那种来回属于“≥3 轮来回问答”类别。无卡点的主题头脑风暴 = 直接征集想法。润色和解释 = 没有可供切换的检索领域。
另一半是审计,跳过上述判断和宣告。 要判断一个已有的跨域对应在结构上是否自洽(在进入推理链之前,或其机制被搬回领域A之前),直接阅读 references/audit.md;仅限结构,不是判断类比是否为真。
自查:无需等待用户开口
外部事件信号可从记录中计数。以下信号仅存在于AI侧,且只有AI能承认:
- AI当前回复的实质动作是让用户在候选里挑选(要求选择,而非事实)
- AI即将提出的候选中,没有一个用户未提过
如果任意一个成立,那就算作卡住,并且“下一步在视野之外”和“缺少的是行动”这两道门不再需要满足。
判断成立时,宣告触发条件,以便用户当场拒绝或降级:
<那一条证据> —— 使用 maybe-im-smart 跑一轮,三个步骤:分解、检索、落地(
references/probe.md)。
逐字复制 <那一条证据> 来自 description 中命中的条目,或AI承认的句子;不要重写为摘要。
如果不成立,一个字都别说。
1. 任务类型分类
| 类型 | 卡住的形态 | 示例 |
|---|---|---|
| 检测 | 必须发现某物是否存在;漏报或误报 | 审查仍遗漏 |
| 阻塞 | 必须阻止某事发生 | 同一事故重复发生 |
| 分配 | 有限资源在多个需求间分配 | 计划冲突、预算拆分 |
| 协调 | 多方行动须保持一致 | 交接失真、跨团队共识 |
| 时序 | 顺序或节奏出错 | 依赖倒置、反馈延迟 |
| 连续性 | 系统在干扰下不能崩溃 | 容量满载、关键人员离职 |
| 决策 | 必须在信息不完整时做出结论 | 是否在证据不足时发布 |
如果都不匹配,自己命个名。 此表格仅用于逼出“这个问题是什么形态”。
2. 分解:四列
| 列 | 询问什么 | 示例(代码审查遗漏缺陷) |
|---|---|---|
keep 必须保持的 | 现在是什么在维持它运行?移动它就全垮 | 合并前的独立判断 |
block 必须阻塞的 | 哪个失败正在发生? | 有判断但未起到判断作用 |
stuck 卡在哪 | 一句话“想要X,但缺少Y” | 提高检测率,但增加人员反而降低它 |
constraints 不能动的 | 写出实际碰到的那条约束 | 不能加人;不能延长工期 |
在四列之外,保留领域A的操作表 ops_A —— 名称: 输入 → 输出,对象使用其真实名称。落地闸门用它来判断 subject(在领域A?)和 action(旧动作改名?)。
分解失败 = 卡点尚未定位;返回去定位。如果 stuck 不能写成“想要X,但缺少Y”,就不要继续。
3. 去提示重述
反复询问两个问题直到两者都失败:此名称是否暗示了用途?它能进一步分解吗?方法、标准与示例:见 references/probe.md 的第一阶段。
产出:
- 一个中性重述(≤40字符,不含本领域特定术语)
- 3–5 个搜索词(中性名词或动词)
搜索词中出现本领域术语意味着该步骤未完成。 将这些术语列在 domain_terms 中;工具通过子串匹配阻断。
4. 检索(2a 方向生成 → 2b 根据原始资料验证 → 2c 缺口填补)
先扫描本领域,然后离开它。 2a 的第一步。
这里的“来源”并非指“另一个领域”。 来源有两个粒度:
| 什么被改变了 | 来源是 | 机制 |
|---|---|---|
| 分支切换 | 领域A内的另一个分支 | 替换主线的前提,不是映射 |
| 跨领域切换 | 另一个领域 | 结构映射 φ: A→B |
两种“另一个分支”,都算: 一种是被同行挤掉的(曾经做过,后来放弃);一种是从未被当作方法使用过——本领域已有的东西(文档标准中的必填字段、现有索引结构、另一团队使用的粗略变通方法),只是没人把它应用于此问题。第二种不是发明:它必须已存在于本领域;只是位置发生了变化。
b_domain 记录实际来源:对于分支切换,写领域A的名称加分支名;对于跨领域切换,写那个领域。只有可命名的具体来源才算。
“本领域已穷尽”是不可判定的;不要判断它。 检查两张表,各一条记录:
| 扫描什么 | 如何扫描 | 记录什么 |
|---|---|---|
| 共享前提 | 见下文“如何打破前提”,五个步骤 | 一个前提 + 一个拒绝该前提的做法,或“本领域无此做法” |
| 未走过的分支 | 询问两种类型。① 本领域曾一度主流的做法现已被放弃——是被驳倒了,还是仅仅过时了?② 为什么本领域已有的东西从未被当作方法使用? | 分支名 + 为什么没走;如果没有,写“本领域无此分支” |
如何打破前提 —— “共享前提”表的扫描。五个步骤,不可跳过:
- 将失败路径并排放置;将其共享前提写成可被否定的一句话——如果不能否定,则前提尚未陈述。
- 将其分解为可单独否定的子句。
- 对每个子句:是否存在一种本领域实践不以其为前提?如果有,填入;该子句扫描完成。
- 回答“没有”的子句就是离开的方向。
- 使用该子句的否定形式作为搜索词。不是学科名称——学科名称只会返回该学科的关键词论文,搜索会直接回到起点。
在打破前提时 confidence 不起作用。
仅当两张表都回答“无”时才允许离开。“空”意味着没有反例实践,而不是没有文字。 一行写着“本领域无此实践”也算作空。
分支切换不仅仅是重新思考。 一个标准:新分支不采用失败路径的共享前提。更多努力、更细粒度、相同前提下的参数调优只会让主线走得更远。不能命名它:分支尚未找到。
两张表扫描的是主线未走过的地方,而不是主线本身。 开放式问题同样对待:避开本领域的老套,而不是本领域。
本领域条目与跨领域条目同等地位进入 recall:structure 写明“哪个本领域分支,现在取的是哪一个”。离开的承认由步骤三的两个输出决定:restated 中零个领域A术语(工具不检查——自己计数)且 terms 中无 domain_terms 术语(工具阻断)。工具不检查两张表。
三个子步骤都属于第二阶段,在一轮内按顺序执行。 不要合并为一个查询——合并后,2c 会变成 2a 的延续。
| 步骤 | 动作 | 输出 | 硬格式 | 能证明什么 |
|---|---|---|---|---|
| 2a 方向生成 | 从参数化记忆:哪里可能有做法(首选本领域未走分支) | 一个方向 + “那里可能有什么” | origin: "recall"、confidence、镜头 operator;3–6 条,≥2 个镜头;status 总是 unverified | 仅“见过此区域”,不是做法存在于此 |
| 2b 根据原始资料验证 | 对照外部原始资料检查每条:那个做法确实存在吗? | verified / refuted / unverified(已检查但不可判定保持 unverified) | verified 必须带有出处;refuted 必须带有修正 | 将猜测变为可引用的事实 |
| 2c 缺口填补 | 更换搜索词并再次搜索,为 2a 从未想到的方向 | 新来源 | origin: "search" 和每条的状态 status;每条结果记录 query | 超越训练数据的边界 |
2c 返回与 2a 相同的做法(相同领域、相同做法)= 该步骤未离开;那是延续,不是缺口填补。相同领域中另一个做法算——但“其他”必须进入 structure,否则无法与记录中的 2a 条目区分,工具也无法判断重复。工具不检查这个;自己计数。
对于提示和顺序,见 references/probe.md。不要计算 recall 的准确性:2a 给出方向,而非命题。
四个框架镜头(用于 2a 方向生成,在落地闸门对候选项重新检查)
在 2a 中,为每个方向打上一个镜头标签;3–6 条覆盖 ≥2 个镜头。 四个条目来自一个镜头是同一个类比的四个副本,正确与错误并存——在 2a 检查多样性,而不是在最后的落地闸门。
镜头问的是“在哪里”,而不是“有多远”。答案可以是本领域的另一个分支或另一个领域。
| 框架镜头 | 用它提问 |
|---|---|
功能 | 哪个领域将此动词(检测/缓冲/限速/校准)视为标准组件? |
矛盾 | 谁把“想要X同时不想要X”当成日常事务? |
尺度 | 低一级(单次发生)和高一级(组织、生态系统)的领域如何做同样的事? |
失败 | 哪个领域有书面的事故档案处理此类失败? |
5. 回译:落地为领域A的动作
将来源侧的每个做法回译;将不可回译的丢弃。
先写 why;如果写不出来,丢弃该条目。 不要在其他列之后附加——到那时保留已决定,写出来的只是为它找到的理由。why 是准入闸门:A侧引用 decompose.stuck 的原话;B侧说明那个领域什么起了作用。仅B侧(“那个领域这样做很好”)偏离;仅A侧重述卡点;两者对不上 = 不可回译。
对于 evidence,二选一:来源做法的出处 或 inferred。标记 inferred 是允许的;将推理写成出处是不允许的。它管辖事实(做法存在于那里);why 管辖对应关系(与领域A卡点相同的位置?)。
工具只检查 why 非空;无法判断它是先写还是后附加的。 软性,像 2c 的自查:阻断明显未完成的。
6. 两道闸门和命令
python3 scripts/maybe_smart.py --recall decompose.json # 记录闸门
python3 scripts/maybe_smart.py --check cands.json decompose.json # 落地闸门
python3 scripts/maybe_smart.py analogy.json # 审计(可选)
--quiet 是输出开关,不是模式位:默认打印完整报告;加上后仅输出结果行(PASS / FAIL;--check 处理一对并打印一行)。退出码:0 通过 / 1 阻断 / 2 输入错误。
记录闸门:task_type 非空且所有四列都存在;restated ≤40 字符;terms ≥3 且无 domain_terms 中的术语(如果 domain_terms 未列出,此闸门无法检查,视为未通过);每条 recall 条目都有非空的 b_domain;≥3 条 recall 条目;相同来源、相同实践不重复(一个分支下的两个不同实践算两个);status 仅取 verified / refuted / unverified;verified 带有 source,refuted 带有 correction;至少 1 条 origin 为 search 的条目且记录了 query。
落地闸门,七项检查:
- 六个字段非空:
operator/action/subject/first_step/observable/why - ≥2 个框架镜头;
operator仅可取文字 功能 / 矛盾 / 尺度 / 失败;任何其他值都不合规 - ...(原文截断,但完整翻译遵循上述模式)