核心结论
AI 要持续参与同一个科研项目,靠的不是一段越来越长的聊天记录,而是一份由团队维护的“当前项目记录”。研究问题、术语、证据、已经作出的决定和仍未解决的问题要分开保存;每次任务只取其中有关的部分,任务结束后也不能让模型直接改写正式记录。
这份记录可以叫研究上下文包。它的作用不是替 AI 塞入所有资料,而是回答几个会反复影响工作的具体问题:项目现在采用哪个定义,哪个方案已经被否决,某项判断依据什么,哪些内容还只是候选。只要这些状态清楚,换一次聊天甚至换一个工具,都不必重新靠模型猜项目背景。
三个月的项目,先在一个变量上发生了漂移
下面是一项模拟队列研究。团队计划在三个月内完成文献整理、数据清洗和分析方案讨论,研究社区步行环境与中年人身体活动变化的关系。材料使用公开模拟数据,不包含真实参与者信息。
第一次讨论时,“身体活动”在材料里出现了三种写法:每周中高强度活动分钟数、日均步数、是否达到每周 150 分钟。AI 在一次文献表里用分钟数,下一次写代码说明时又把步数当成主要结局。每次回答单独看都说得通,放回项目却无法合并。
随后又出现了更危险的变化。AI 建议把三次随访取平均后做横断面回归,团队讨论后没有采用,因为研究问题关注的是个体随时间的变化。几天后,另一段长聊天没有带上这次决定,模型又把横断面方案当成默认方法。问题并不是它“忘了”,而是团队从未给这项决定一个可以被后续任务稳定引用的位置。
继续在聊天里提醒“请记住以前的决定”不会解决这种漂移。聊天中同时存在旧口径、新建议、被否决的方案和正式决定,文字都以同一种样子出现。团队需要把它们从对话中拿出来,标明身份。
一份当前记录,比完整聊天更有用
团队建立了 CONTEXT-01 v1.4。下面不是空白模板,而是足以支持当前数据任务的一段实际内容。
| 记录类型 | 当前内容 | 依据与状态 |
|---|---|---|
| 项目问题 | 社区步行环境是否与三次随访中的身体活动变化有关 | 模拟方案 2.1,已确认 |
| 主要结局 | 每周中高强度身体活动分钟数 | 模拟方案 2.1 第 4 节,已确认;不得与日均步数混用 |
| 暴露 | 住址 500 米路网范围的步行性指数 | 数据字典 1.3,已确认;不是行政区平均指数 |
| 决定 D-007 | 不采用三次测量简单平均后的横断面回归 | 研究问题关注个体变化,已否决 |
| 决定 D-008 | 主要分析保留三次测量结构 | 统计讨论记录,已确认;缺失模式严重时重新评估 |
| 开放问题 Q-011 | 第三次随访缺失是否与基线活动水平有关 | 待检查;不能写成已知结论 |
这张表把几种容易混淆的内容放在一起展示,却没有把它们混成一种状态。主要结局来自方案,分析选择来自团队决定,缺失问题仍在等待证据。AI 可以根据 Q-011 提出检查办法,却不能把一个可能性改写成“第三次随访存在选择性缺失”。
已否决的 D-007 也需要保留。删除它会让当前记录看起来更干净,却无法解释团队为什么没有采用更简单的横断面分析。以后若有人再次提出相同方案,团队可以直接看到原来的理由,以及什么情况下才值得重新讨论。
FAIR 原则在数据可复用方面强调详细来源和演变记录。这里借用的不是“把所有聊天都永久保存”这一做法,而是让关键定义和决定能够追溯:现在使用的内容从哪里来,过去怎样变化,为什么成为当前版本。
检查清洗代码时,只带需要的那一部分
上下文包建好后,团队准备让 AI 检查主要结局的清洗逻辑。这个任务需要主要结局定义、数据字典版本、D-008、二十行模拟测试数据和预期输出。它不需要三个月的全部聊天,也不需要整套文献全文。
实际交给模型的上下文可以写成:
本次任务:检查主要结局变量的清洗逻辑
依据版本:CONTEXT-01 v1.4、数据字典 1.3、决定 D-008
允许材料:模拟数据 20 行、当前清洗代码、预期输出
明确排除:真实数据、未确认的模型建议、已否决决定 D-007
输出:逐条对应清洗规则、测试结果和仍未解决的问题
排除 D-007 不是要销毁它,而是说明这次代码检查不能把已否决方案重新当作要求。等团队专门复核分析设计时,可以重新调出 D-007 的理由。每次只载入有关内容,也避免一项简单代码任务顺带接触不需要的研究资料。
检查过程中,AI 发现部分分钟数似乎按小时转换了。它可以列出受影响的测试行、当前代码位置和建议规则,但结果先停在候选区。数据负责人对照模拟输入后确认,原来是数据字典的一处单位说明写错了,而不是原始数值错误。正式写回的内容因此是:数据字典修正、清洗脚本版本和受影响范围;“这批数据质量很差”没有证据,不能进入项目事实。
这次写回可以具体到下面的程度:候选记录先写“第 6—9 行单位疑似错误,建议检查”;负责人对照测试输入后,把正式记录改成“数据字典 1.3 的活动时长单位由小时更正为分钟,清洗脚本升级到 0.8,测试数据第 6—9 行重新运行并与预期一致”。前一句只报告疑点,后一句才是经过核验的变更。上下文包保存后一句,同时把前一句留在本次任务日志中,不把模型的推测升级成项目事实。
负责人还检查了这个更正会影响哪些下游产物。若错误版本只处理过模拟数据,无需重算正式结果;若已有表格引用脚本 0.7,就必须把表格列入重跑清单。上下文维护到这里才完成,因为“定义已经改对”与“受错误定义影响的工作已经修复”是两件不同的事。
一次自动总结,差点改掉了研究设计
这个项目曾经让 AI 根据最近几段聊天自动更新项目摘要。聊天里有人随口说“也许可以按行政区聚合”,后面又明确否决。模型生成的摘要却只留下前半句:
AI 候选更新
暴露定义:采用行政区平均步行性指数。
分析方式:对三次随访取平均后进行横断面回归。
正式记录中的依据
暴露定义:住址 500 米路网范围的步行性指数。
D-007:横断面平均方案已否决。
如果这段摘要直接覆盖 CONTEXT-01,下一次生成的代码会忠实执行一个团队没有批准的设计。团队因此改变了写回方式:模型只能提交候选变化,并为每项变化指出原记录位置;负责人逐项接受、拒绝或标为待确认,随后才产生新版本。没有出处的“更新”不能进入正式记录。
这也解释了为什么自动总结不等于维护上下文。总结追求缩短文字,维护上下文则要保留状态、来源和被否决的理由。两者目标不同,把前者直接用作后者,最容易丢掉的恰恰是科研决定中最重要的限定。
NIST AI 风险管理框架要求在具体使用情境中记录预期用途、人的监督和系统限制。放到这个项目里,写回权限就是一项限制:AI 可以发现冲突和拟写候选记录,但正式项目事实仍由有权限的研究者确认。
两份正式材料冲突时,先停下来
上下文包不能替团队消灭真正存在的分歧。假如研究方案写“基线为招募日”,数据字典却写“第一次随访日”,模型不应选择看起来更常见的一种,也不应把两个说法平均成模糊表述。它应生成一条冲突记录,列出两份来源、受影响变量和已经运行的任务。
负责人解决冲突以前,依赖基线定义的分析暂停。决定作出后,团队更新相应正式文件,在上下文包中记录采用哪个定义、为何采用、哪些代码和结果需要重跑。旧版本保留在历史记录里,但不再作为日常任务的默认输入。
冲突也可能来自文献证据。证据登记表若把一篇论文标为支持某项测量方法,后来全文核对发现它只在讨论中提到该方法,并未实际使用,就要降低支持状态,并查找哪些综述段落引用过这条记录。修改一行登记表而不检查已经生成的文字,会让旧错误继续留在论文里。
版本名也不能只写“最终版”“最终版2”。v1.4 到 v1.5 的变更要说明日期、修改人、原因和影响范围;涉及主要结局或统计方案时,还要记录修改发生在查看研究结果之前还是之后。这个信息会直接影响团队如何解释方案偏离。
项目进入写作阶段时,当前记录给出了什么
三个月后,团队从分析转入论文写作。此时 CONTEXT-01 没有保存所有对话,而是留下了当前研究问题、有效术语、证据位置、D-007 和 D-008 的来由,以及 Q-011 最终如何处理。作者可以从方法段的一句话返回分析决定,再返回代码和数据字典版本。
阶段切换时,团队请一名没有参加最近讨论的人做了一次反向追踪。他从草稿中的“主要结局为每周中高强度活动分钟数”返回 CONTEXT-01,再找到方案 2.1 第 4 节;从“保留三次测量结构”返回 D-008 和统计讨论记录。追到 Q-011 时,记录仍显示待处理,草稿中也没有把它写成结论。这比让原团队成员凭记忆说“应该没问题”更能暴露上下文断点。
NIH 关于严谨性与可重复性的说明把严谨性贯穿于设计、方法、分析、解释和报告。对长期项目而言,当前记录的价值正是让这些阶段能够相互对上:方法中的定义能回到方案,结果能回到分析版本,解释不会脱离当时采用的证据。
AI 在新任务中只读取写作所需的当前记录。它不会因为早期聊天里出现过“行政区平均”就把旧想法写回方法,也不会把尚未解决的问题当成研究发现。若要改变主要结局或分析口径,团队必须先更新正式决定,而不是在生成论文时临时改一句提示。
这份上下文包做到这里就够了:它不替项目作决定,只让已经作出的决定不再随聊天漂移,并让每次新工作都能找到当前、可核对的依据。