APSer-Atelier

APSer-Atelier 的几条原则

APSer-Atelier 在一个个真实问题里长出来,也沉淀下十四条底层原则,分三组:经典软件原则(深模块、最小权限、先想好怎么退等),AI 时代原则(上下文少而准、AI 起草程序把关、规矩写成钩子等),工作方式(一个事实一个出处、单写入者、完成分阶段举证)。本文逐条说明它讲什么、为什么这样做、对交付意味着什么。

发布于 更新于 青岛艾普仕

先说结论

  • APSer-Atelier 背后的十四条原则,是我们在 AI 时代的项目开发与交付中,从一个个真实痛点里逐步沉淀下来的;本文介绍的是原则,不构成对产品功能的承诺。
  • 第一组是经典的软件原则:深模块、只为真实场景增加复杂度、最小权限、规则集中把关、机制与策略分开、先想好怎么退。改动变快以后,这些老问题的分量反而更重了。
  • 第二组回答 AI 的输出带有概率性这个新问题:上下文少而准,AI 起草、程序执行和把关,用评测衡量效果,工具可换、认知写在开放格式里,规矩写成钩子当场拦下。
  • 第三组是工作方式:一件事实只认一个出处,一次一件事、一个仓一个写入者,「完成」分阶段拿证据,AI 自己报告「完成」不算证据。

APSer-Atelier 是青岛艾普仕在自身交付中使用的工作平台,目前仍在持续打磨中。它背后的原则,是我们在 AI 时代的项目开发与交付中,从一个个真实痛点里逐步沉淀下来的:碰到新问题、拿不准怎么做的时候,我们先回到这些原则对照。

下面十四条分成三组。第一组是经典的软件原则,有的来自软件设计著作,有的来自信息安全和管理领域的成熟做法;第二组是 AI 时代的原则,回答的是 AI 的输出带有概率性、会出错以后,系统该怎样搭;第三组是工作方式,回答一个人同时推进多个项目、大量借助 AI 执行时,工作该怎样组织。每条讲三件事:它说的是什么,我们为什么这样做,对交付意味着什么。

本文介绍的是我们遵循的原则,不构成对产品功能的承诺。

一、深模块:为什么接口要简单,复杂留在里面?

它说的是什么。 这个说法来自斯坦福大学 John Ousterhout 教授的《A Philosophy of Software Design》[1]:一个模块的内部实现明显比它对外的接口复杂,就称它「深」[2]。好的模块用很少、很简单的入口,把大量细节藏在内部。

我们为什么这样做。 AI 助手改代码很快,也容易顺着能调用的地方四处扩散:对外暴露的入口越多,被误用、被重复实现的机会就越多。把容易出错的细节收进一个入口很少的模块里,例如写文件时的编码、写到一半中断怎么办、哪些位置允许写,调用的一方就碰不到这些细节,也就改不坏。

对交付意味着什么。 容易出错的地方集中在少数几处,后续改动不容易牵一发而动全身;接手的人先看懂几个简单的入口,就能把握系统的大致结构。

二、为什么只为真实场景增加复杂度?

它说的是什么。 增加任何一层抽象之前,先回答「它服务哪个真实的使用场景」,答不出来就不加。已经稳定运行的部分,不为了好看而重写。

我们为什么这样做。 深模块有一个反面的诱惑:为想象中的将来提前搭框架。每多一层,以后每次修改都要多读一层、多验证一层。所以我们的取舍是:数据流转、权限、调度这类关键部分做深;界面展示这类部分保持简单,只做减法。

对交付意味着什么。 系统的结构跟着真实业务生长,您不必为想象中的需求买单;运行稳定的部分少动,减少无谓的风险。

三、为什么默认不给权限,需要什么再明确授予?

它说的是什么。 每个执行者,包括 AI 助手,起步时只有最少的权限:能读哪里、能写哪里、能运行哪些命令,逐项明确授予,并在边界处检查。这与信息安全领域的「最小权限原则」一致:只授予完成任务所需的最小权限 [3]。

我们为什么这样做。 AI 助手的输出不会每次都对,交给它的材料里也可能夹带误导性的指令。默认什么都能做,任何一次出错都可能造成破坏;默认什么都不能做,出错的影响就限定在授予的范围之内。

对交付意味着什么。 即使某一步出了错,波及范围也有边界;哪个执行器能动哪些东西,事先写得清楚,事后查得到。越权的写法,入口本身就不提供。

四、怎样集中把关规则,让错误不致命?

它说的是什么。 数据写入之前必须满足的条件,例如一项任务能从哪个状态变到哪个状态、引用的对象必须存在,集中写在一处;所有写入都先经过这里检查,不满足就拒绝。

我们为什么这样做。 同一条规则如果散在几处各写一遍,改了这一处、漏了那一处,就会出现这里拦、那里不拦,数据慢慢变得不一致。AI 助手一次往往只看到其中一处,更容易漏改。集中把关之外,我们还假定出错一定会发生:进程意外中断,重启时把停在半路的任务判为失败、回到一致的状态,不让它半死不活地挂着。

对交付意味着什么。 同一条规则改一处、处处生效;错误的数据在写入之前就被挡住,不必事后清理。

五、为什么要把机制与策略分开?

它说的是什么。 这是操作系统设计里的一条老原则:框架只管「怎么执行」,具体「做什么」由挂在框架上的一段段规则决定。新增一条规矩,是注册一段新的规则,不往主流程里加分支。

我们为什么这样做。 让 AI 助手改一条规矩时,改动如果要伸进调度主流程,就可能牵动所有任务。规则各自独立挂载,改一条只动一条,出了问题也只需撤下那一段。

对交付意味着什么。 新的要求能较快加进来,又不容易把已经稳定的部分改坏。

六、为什么动手之前先想好怎么退?

它说的是什么。 每次重要改动之前先问:如果改错了,从发现问题到完全恢复要多久?时间可以接受,就正常推进;时间太长,就先准备退路,例如新功能先用开关关着、验证通过再打开,关键上线前先备份。

我们为什么这样做。 AI 让改动变快,出错也会变快。亚马逊创始人贝索斯在 2015 年致股东信里把决策分为两类:难以回头的「单向门」要慎重,可以回头的「双向门」可以快速决定 [4]。我们借这个思路:能退回来的内部改动放手推进;风险大的动作在系统里直接设限,派出去的 AI 执行器不能推送、部署或改动凭据,涉及数据库迁移的改动不自动上线;涉及客户和对外承诺的事项,由人亲自处理。衡量的尺子是对业务的影响,改动的代码量说明不了什么。

对交付意味着什么。 出了问题,可以先把系统恢复到上一个验证过的版本,让业务照常运转,再查原因。

七、给 AI 的上下文,为什么要少而准?

它说的是什么。 大模型本身不记事,每次调用都要为它准备上下文。Anthropic 在 2025 年的一篇工程文章里把这件事称为「上下文工程」:要找的是信息量最高的那一小部分,给得越多并不越好 [6]。

我们为什么这样做。 塞给 AI 的东西越多,关键的几条越容易被淹没;过时的材料混进来,它会照着过时的做。所以每次开工,都从项目自己的权威文件现场取最新的一小部分:先读项目说明,再看当前状态,再看待办,其余按需再取。

对交付意味着什么。 AI 每次拿到的都是当下最新、最相关的信息,减少照着旧材料做错事的情况;换一个人或换一个工具接手,读的也是同一份材料。

八、为什么由 AI 起草,由程序执行和把关?

它说的是什么。 AI 的输出带有概率性,不会每次都对。所以让它做擅长的事:理解意图、起草、解释;真正改变数据和系统状态的动作,由行为确定的程序执行,AI 的输出要先通过格式和规则检查才会被采用。

我们为什么这样做。 把一段看似合理的 AI 输出直接当结论执行,出了错很难察觉。在它和执行之间设一道检查,错误就有机会在进入系统之前被拦下:AI 的输出按约定的格式解析,解析不过的归为失败,不反复重试碰运气。能用确定的检查判断的事,就不交给大模型。

经济学家阿格拉沃尔、甘斯和戈德法布在《权力与预测》里把 AI 归结为预测,并指出机器按事先写进去的判断行事,写进这些判断的人才是做决定的人 [7]。这条原则的分工与此一致:AI 负责预测,也就是起草和给出最可能对的结果;判断和拍板留给人,写成规矩和检查,由程序执行。在我们的交付里,这条分工由 APSer-Atelier 作为主控落实。这里说的 APSer-Atelier 主控包括两部分:面对我们的主控会话(一段 Claude Code 或 Codex 对话),负责组织和派出;Atelier 平台,负责登记每一件事、挂起待拍板、记下要求、按规矩放行并留下记录。

对交付意味着什么。 《排程为什么交给确定性求解内核,大模型只在外围工作》是这一条在生产排程上的具体做法:计划由求解器计算,写入前逐条核对约束,大模型负责解说,最后由人拍板。

九、怎样用评测衡量 AI 的效果?

它说的是什么。 普通代码的对错是确定的,同样的输入永远得到同样的输出;AI 参与判断的环节,对错是一个比例。衡量这类环节,要准备一组评测样例,定下基线,看通过率。

我们为什么这样做。 改一句提示词、换一个模型,通过率可能大幅变化,而且单看一两次结果发现不了。有了基线,每次改动后重跑一遍,退步了能看出来。

对交付意味着什么。 系统里用到 AI 的地方,改动前后有数可比,不靠「感觉好一些」下结论。

十、为什么工具可换,认知要写在开放格式里?

它说的是什么。 执行工作的 AI 编程工具可以替换,平台不绑定其中任何一家;项目的工程知识,包括架构决策、踩过的坑、实测结论,写在代码仓里多家工具都认的开放格式文档中,不只留在某一家工具的私有记忆里。能力也按「随时可能整段换掉」来设计:模型更新得比软件快,今天的做法过几个月可能就要重写。

我们为什么这样做。 我们换过一次主要的 AI 编程工具,也两家并用过。那段时间最深的教训是:认知锁在一家工具的私有记忆里,换工具就要从头重建,原来靠工具「记得」的规矩悄无声息地失效。

对交付意味着什么。 您的项目不绑定某一家 AI 工具;换了工具、换了人,项目知识照样在,能接着做。

十一、为什么把规矩写成钩子,当场拦下?

它说的是什么。 写下来的要求只能提醒,忙起来就会被跳过。能由机器判断的要求,我们写成钩子:在收到消息、调用工具、提交代码、推送代码、一轮回复结束这些固定时机,自动运行一段检查,按写好的条件放行或拦下。

我们为什么这样做。 同一条要求说过多次、写进了记忆和规则,照样一再被违反;拦截点放在出错的那一刻,才管得住。例如:会一次抹掉工作区里未提交改动的命令一律拦下,因为那些改动可能是别的会话正在写的;一个会话只能写开工时声明过的代码仓,范围外的写入、提交、推送都拦;推送即上线的代码仓,推送时必须写明是哪一个复核过的版本;推送之后没做验收,这一轮就不能结束;上线检查没跑完或报错,就不推送。设计钩子有三条讲究:判断看命令实际做了什么、写到哪里,不看它叫什么名字;检查脚本自己出错时默认放行,宁可漏拦也不卡住日常工作,只有上线检查反过来,出错就拦;判断不调用大模型,同样的输入每次得到同样的结论。钩子的来由和做法,见本栏目《从记忆、规则到钩子:让 AI 编程助手真正服从指挥》。

对交付意味着什么。 最常出错的那几类操作,由机器在当场拦下,不靠人盯、不靠 AI 记性;拦下了什么、为什么拦,都留有记录。

十二、为什么一件事实只认一个出处?

它说的是什么。 每一类事实只在一个地方说了算:项目的计划、进度和决策,写在项目自己的文档里;业务数据,留在业务系统里。Atelier 主要记工作进行到哪一步,以及指向这些出处的引用,一切以原出处为准;它能存哪些数据,列在一张明确的清单里,清单之外的一律不存。

我们为什么这样做。 同一件事抄在两处,迟早对不上,而且说不清该信哪一份。一条信息放在哪里,只看它属于谁:只属于一个项目的,放在那个项目里;天生横跨多个项目的,例如眼下正在推进哪几件事,才放进 Atelier。

对交付意味着什么。 您的系统和项目文档自成一体,不依赖我们这一侧的平台;两处说法对不上时,有明确的依据可查。

十三、为什么一次只做一件事,一个仓只有一个写入者?

它说的是什么。 安排工作的单位是一件完整的事:由一个明确的意图驱动,可能同时涉及几个项目;排期也按一整块来排,不切成一小步一小步地试。人的注意力同一时间只放在一件主要的事上。

我们为什么这样做。 按项目切,一件事会被撕成几片;同时开太多件,每件都在动,每件都推得慢。组织行为学者 Sophie Leroy 的研究发现,人从一项工作切到另一项时,前一项会留下「注意力残留」,影响后一项的表现,前一项没有收尾时尤其明显 [5]。所以离开一件事之前,我们先写下下一步,同时限制手上同时在做的事情数量。另一条限制在代码仓上:同一个代码仓同一时间只允许一个写入者,不同代码仓之间可以并行;复核只读,发现问题退回原来那一件事里改。

对交付意味着什么。 一件事从提出到验收由同一条线贯穿,来龙去脉集中在一处;您问起某项改动,能讲清前因后果。

十四、为什么「完成」要分阶段拿证据?

它说的是什么。 我们把「完成」拆成几段:改了代码、测试通过、提交、推送、上线、在真实环境里走通。每一段单独留证据,前一段的证据顶替不了后一段;AI 自己报告「完成」,不算证据。

我们为什么这样做。 「测试通过」「接口返回正常」「服务在线」都只证明了其中一段。用临时的小例子或「运行没有报错」代替在真实环境里看实际结果,是我们踩过最多次的坑。验收没通过,就在原来那件事里做一次有限的修正;还不行,就退回上一个验证过的版本,不另开一件新事绕过去。

对交付意味着什么。 我们说「交付完成」时,真实环境里的那一次验收一定做过,而且有记录可查。

以下是我们的看法

以下内容是我们的观点,供您参考。

第一组原则大多由来已久,AI 没有让它们过时。改动变快以后,接口是否简洁、权限是否收紧、规则是否集中、退路是否备好,这些老问题的分量反而更重了。

第二组原则回答的是一个新问题:AI 的输出带有概率性。我们的办法是把它装进确定的外壳里:给它少而准的上下文,让它起草、由程序把关,用评测看效果,用钩子在出错的时刻拦下。

第三组原则是给人用的。一个人同时推进多个项目,瓶颈是人的注意力,不是 AI 的速度。原则写下来的意义,在于换了工具、换了执行者,判断依据依然一致。

选择交付方时,您也可以请对方讲讲自己遵循哪些原则,以及每一条来自什么问题。能讲清来由的原则,更可能在日常交付里一直用着。

参考来源

  1. John Ousterhout. A Philosophy of Software Design(第 2 版,2021). 作者主页
  2. Marco Tulio Valente. Modules Should Be Deep!. Software Engineering: A Modern Approach
  3. NIST CSRC Glossary: least privilege
  4. Jeff Bezos. 2015 Letter to Shareholders(美国证券交易委员会存档)
  5. Sophie Leroy. Why is it so hard to do my work? The challenge of attention residue when switching between work tasks. Organizational Behavior and Human Decision Processes, 109(2): 168–181, 2009
  6. Anthropic. Effective context engineering for AI agents,2025-09-29
  7. Ajay Agrawal, Joshua Gans, Avi Goldfarb. Power and Prediction: The Disruptive Economics of Artificial Intelligence. Harvard Business Review Press, 2022;中文版《权力与预测:人工智能的颠覆性经济学》,何凯译,中信出版集团,2024