DECISIONS / REVISIONS / EVIDENCE

和 AI 一起做。
把判断留下来。

为什么采纳提案、为什么修改、怎么验证。用事后能解释的形式记录协作过程。全部是真实发生的事,数字和编号可追溯到原始记录。

先看其他 AI 开发也能借鉴的协作与验证方法,再进入具体项目的设计问题。

记录 01 / 2026-10-30

七个版本推倒重来:错的不是工具,是做法

一天做了七个版本,七个都被推倒重来。从 HTML 出 PDF 的工具一次都没出错——正因为它不出错,错误才积得这么快。

01 发生了什么

  • 我把"流程"只理解成了出图的机制:切页、渲染、查溢出,几分钟转一圈。可是"这页放什么、为什么"没有任何一道关口在把守,而且每次都七页一起做完再拿去看。一个判断错,七页同时错;工具越快,错得越快。
  • 按字面执行,不确认意图。对方说"出规则",我造了十二条规则,又为了守这些规则把更好的素材换掉;说"定稿",我就把文字逐字落成条目;没有合适素材的页也放上数字表、方框流程图——事先明明说过"没有就空着"。这些都是同一件事:从没问过"读的人在这页要带走什么"。
  • 文字是每收到一条指摘就补一句堆出来的,页与页的衔接从未整体重写。对数字的谨慎原样漏进了版面,每页都挂着灰色的但书。再加上三方都在产出——本人、我、另一个 AI——没有人对最终版负责,版本越来越多而不是越来越好。

02 人的修正

  • 固定顺序,每一步只给一样东西看:对方的骨架 → 连贯的文字 → 删减(只留最后一页会回收的)→ 一页或一张图定方向 → 再做其余。工具的检查只做下限:不溢出、字不过小、不在每页挂但书;不设"每页必须有图"这类上限。没有素材的页空着写"未定"。
  • 动手前先确认:谁读、读几分钟、希望用一句话带走什么;"好"的参照不是形容词,是两三张实物;素材哪些可用、哪些禁用、哪些可以空着;以及谁拍板最终版。执行任何一句话之前,先把这些问题放在前面。

根据課題選考デッキ v3〜v7 の作業記録(非公開)process · design · communication

记录 02 / 2026-09-26 / J-Grad Admission RAG

不再让 AI 反复跑腿,把资料一次备齐只交一遍

「在职的人报这个专攻,要不要交英语成绩?」——回答这一个问题,页面要等 30 秒,然后显示「超时」。

01 发生了什么

  • 最初的做法是把一个问题拆成几个小问题,每个小问题单独去问一次 AI,回复再用模板拼起来。像让一个人为一件事反复跑腿,每一趟都在累加等待。
  • 分段计时后看清:理解问题那一步成功了,写回答那一步撞上了外部服务的时限。
  • 把时限调长,只是让失败来得晚一点。

02 人的修正

  • 改了顺序。理解一次问题之后,查资料、按学校范围过滤、核对规则这些能确定的事,全部由手边的程序做完,把找到的根据打成一个包交给 AI,让它只写一次。同样的问题再来,直接给上次的答案。
  • 每个问题最多问 AI 两次。变快的不是 AI,是求助 AI 的次数。

根据Issue #171 ↗Issue #180 ↗ADR 0006 ↗RAG · latency · design

记录 03 / 2026-09-25 / J-Grad Admission RAG

检查加得越多,对的回答反而被拦下

「信息工学系英语满分 100 分,面试采用线上形式」——前半资料里有,后半没有。这个回答通过了我们全部的检查。

01 发生了什么

  • 为了不让 AI 说资料里没有的话,我在验收条件里写了:"回答里任何无根据的说法,程序都必须能找出来"。
  • 第一版查字面是否一致,第二版逐词核对意思。每发现一个反例就加一条规则,结果「最高可得 100 分」这种正确的改写也被拦下。
  • 第三版开始解析句子的主语和宾语时,我意识到:我已经说不清这个检查在做什么了。自动测试一直是绿的。

02 人的修正

  • 撤回了这个方向。"有没有资格""要交什么"这类判断,由程序按人审核过的规则回答,AI 只负责把结果写成文章,并且在界面上标明是"参考"。
  • 此后的规矩:反例是找原因的线索,不直接变成新规则。还有一条:我自己解释不了的机制,测试全绿也不上线。

根据PR #176 ↗PR #178 ↗PR #179 ↗LLM · review · scope

记录 04 / 2026-10-24

禁令堆成的指令,换来了审计报告式的回复

"三次执行授权已用完,没有第四次的授权。未知用量整额占额仍保留。"——读完也看不出 AI 懂了什么。

01 发生了什么

  • 原因是我自己写的指令:只有禁令和术语定义,没有一行写这件事是为了什么。
  • AI 会镜像指令的文体。禁令越多,"〜不视为〜"式的自我辩护越多。
  • 加上深挖需求的工具也没用。问题不在需求,在没写目的。

02 人的修正

  • 指令开头改成三句话:为了什么、谁在用、做成什么算结束。禁令只留不可逆的操作。
  • 第二天同一个 AI 的复述:"我理解你要的是:对照日本 AI 岗位要求和你已有的成果,找出技术缺口,写成简报,交付后就停。"

根据COLLABORATION.md(内部)agents · prompting

记录 05 / 2026-09-28 / J-Grad Admission RAG

"不知道"不能当成"不用"

一个没填"是否在职"的人,系统回答「不需要提交在职证明」。正确的回答是「请先确认是否在职」。

01 发生了什么

  • 大多数程序把判断做成"是/否"两种,没填就算"否"。于是"在职者需提交"这条规则,对没填的人就被读成了"不用交"。
  • 出愿现场最怕的就是这种错:被告知"不用交"的学生,不会再去确认。
  • 接入东京大学资料时,发现了一处这样的错。

02 人的修正

  • 判定一律三种结果:符合、不适用、信息不足。信息不足时,告诉用户缺的是什么。
  • 这套三态判定只写一份,两所大学的条件判定都用它。不按学校各做一套,是为了同一个错不用修两遍。

根据PR #215 ↗ADR 0012 ↗rules · design · safety

记录 06 / 2026-10-01 / J-Grad Admission RAG

我成了传话员

把负责开发的 AI 的摘要贴给负责设计的 AI,再把回复贴回去。回过神来,我只是在来回搬运小修改,没有在看做出了什么。

01 发生了什么

  • 每加一份材料,同样的内容要在界面、报告、来源说明三个地方各写一遍。写的地方越多,总有一处会过期。
  • 我变成传话员,是因为一直在"一个问题一个回复"地细碎往返,没有在阶段节点上把成果合起来看。
  • 加一份材料的工作,被抄写填满了,而不是被判断填满。

02 人的修正

  • 改了两件事。问题一次列完,修改在阶段结束时作为一整套成果收下;界面、报告、配置都从一份人确认过的整理表自动生成。
  • 没有前后工时对比,所以不说"快了几成"。能说的是:同一件事在五个地方写五遍的活没了,我看的只剩内容对不对。

根据PR #277 ↗PR #289 ↗ADR 0017 ↗agents · process

记录 07 / 2026-09-27 / J-Grad Admission RAG

接第二所学校时,第一所学校的知识从代码里冒了出来

什么都没输入,程序却"找出"了 25 个东京科学大学的学院名。知识不是来自 PDF,是来自代码。

01 发生了什么

  • 按第一所学校的资料写的代码里,嵌着"第 7 页是共通事项""2027 年度的条款""这个学院叫这个名字"这类知识。只有一所学校时,没人会发现。
  • 把东京大学的资料走同一套代码,东京科学大学的页码划分和学院名就直接混进来。
  • 这不能证明自动抽名词、抽关系的方法行不通,这是写法的问题。但它提醒了一件事:第一所学校上跑对的东西,第二所学校上未必对。

02 人的修正

  • 旧代码挂上"仅限第一所学校"的标签隔离起来,别的学校不能走它。新学校的知识只能从人审核过的片段和关系进入。
  • 此后加学校时的检查清单多了一条:上一所学校的知识,有没有藏在代码的某处。

根据PR #208 ↗ADR 0011 ↗data · multi-school · testing

记录 08 / 2026-09-01 / J-Grad Admission RAG

招牌是"带页码",一半以上却说不出哪一页

第一次读入真实的募集要项,抽出来的事实有一半以上说不出"来自哪一页"。测试全部通过。

01 发生了什么

  • AI 写的代码先把 PDF 的页码信息丢掉转成文本,之后再在正文里找"Page N"字样往回猜。
  • 没有标题的段落没有这个字样,页码就丢了。测试用的是带标题的合成数据,所以这条路径一次都没走过。
  • 发现的方式很朴素:在真实 PDF 生成的结果里,数"页码:空"有多少条。

02 人的修正

  • 页码在读 PDF 的那一刻就贴到每个段落上,一路带到最后,不再从显示文本倒推。
  • 此后每个阶段的第一个节点都是"用真实 PDF 端到端跑一遍"。合成数据上通过,只算开始。

根据Issue #3 ↗PR #10 ↗RAG · data · testing

记录 09 / 2026-09-14 / J-Grad Admission RAG

测试全部通过。只属于数学系的例外,被标成了"全校通用"

「数学系的英语成绩另有规定」这一句,被登记成了"全校通用"的规则。旁边那一句有测试,那句确实是全校通用。

01 发生了什么

  • 给资料里每一句话标"适用于谁"的处理,把大章节的标题放在前面,系别名称放在后面看。
  • 这类错发生在检索和回答之前。"适用于谁"一旦标错,后面的出处和引用看起来全对,却把别的系的规则套到了这个学生身上。
  • 测试只保护了当时想修的那一句。

02 人的修正

  • 能判成"全校通用"的,只限资料结构上真正处于共通位置的段落。不对特定句子或词语做特殊处理。
  • 从同一份真实 PDF 里,把相邻的正例和反例一起加进测试。修一句的时候,顺手确认旁边那句。

根据PR #108 ↗RAG · testing · scope

记录 10 / 2026-10-24 / J-Grad Admission RAG

README 里的数字,找不到出处

公开页面上写的检索成绩,和仓库里保存的唯一一份结果文件的数字,对不上。

01 发生了什么

  • 发现的是另一个 AI。它读公开仓库时,自己从保存文件重算了成绩,报告"对不上"。
  • 全仓库搜下来,公开页面上的数字只存在于文字里,结果文件只保存过一次。
  • 大概是某次在不入库的工作目录里试跑的数字,只留在了文字里。

02 人的修正

  • 三处数字改成保存文件里的值,数字旁写明"何时、多少题、用哪份数据测的",旧文档留一行更正记录。
  • 此后公开的数字必须绑到保存的记录。没有记录的数字,哪怕记得,也不写。

根据PR #300 ↗保存レポート ↗evaluation · honesty

记录 11 / 2026-09-26 / J-Grad Admission RAG

同样的索引,已经在 5 个地方

每次开始验收,都要等七分钟左右:它在重建资料索引。可索引早就该建好了。

01 发生了什么

  • "读取索引"和"构建索引"写在同一个函数里,读不到存放位置就判定"不存在",然后重建。
  • 之前报了一次权限错误,AI 的解决办法是新开一个工作目录。结果索引也整套重建了一遍。
  • 盘点下来,内容完全相同的索引在 5 个目录各有一份。

02 人的修正

  • 写下三条规矩:功能侧只读使用已有数据;重建、复制、下载每次单独批准;没有权限不等于数据不存在。
  • "造之前先盘点已有的",成了我审查时固定会看的一项。

根据Issue #183 ↗PR #184 ↗data · ownership

记录 12 / 2026-10-24 / Japanese Speaking Coach

语法全对。但对这个人问这个问题,不对劲

对着一位日本同事,应用建议反问「来日本多久了?」。格式、语法、礼貌程度,检查全部通过。

01 发生了什么

  • 同在一处却问「你那边怎么样?」;对方先说了「お疲れさまです」,回复却没接。每一句语法都对,礼貌等级也对。
  • 自动检查满分。生成端的 AI 自带的"自己确认"步骤一次都没拦住。
  • 发现的是单独准备的审查员 AI。它站在对方的立场读,连续两轮提了同一个问题。

02 人的修正

  • 回复规则加了一条:反问和寒暄,站在对方立场上也要成立。然后重新跑了一轮确认。
  • 审查员也是 AI,可能有同样的疏漏。最终判断放在日语母语者的确认上,这一步还没做。

根据status.md ↗D-005 ↗evaluation · LLM-as-judge

记录 13 / 2026-09-27 / J-Grad Admission RAG

没有结论的实验,就按没有结论来收尾

试用新 PDF 解析工具的对比实验,处理的页数超出预算两倍多。中途几次中断重跑,已经分不清哪个结果属于哪次运行。

01 发生了什么

  • 实验设计里预先定了页数预算和合格标准。预算是为了防止"跑到出结果为止"。
  • 中途出过"作为备选采用"的方案,差点成了结论。另一个配置卡住时,又想说"这个工具慢"。
  • 两者证据都不够。卡住的原因在我们自己写的监控程序上。

02 人的修正

  • 不为了让结果好看而重跑,按"不采用"收尾。所有运行记录保留,写明哪些没有验证。
  • 超出预算的实验,数字再好也不成立。这一条当作实验开始前的约定。

根据Issue #177 ↗ADR 0009 ↗evaluation · decision