共享语言
定义
共享语言是指在一个项目中,专门整理并文档化的一套术语体系,用来让开发者、领域专家与 AI 代理围绕同一套领域模型说话和写代码。
在本文语境里,它被明确提出为解决“代理过于冗长”这一问题的修复方式:代理刚进入项目时,往往需要一边做事一边猜项目黑话和业务术语,于是经常“20 个词才能说清 1 个概念”。共享语言的作用,就是把这些术语提前定义成可复用的短语,让代理能直接 decode 项目里的 jargon,而不是每次都用长句临时解释。
在本文档中的语境
原文把共享语言放在“#2: The Agent Is Way Too Verbose”这一问题下讨论。这里的核心判断是:项目一开始时,开发者与他们服务的领域专家通常并不说同一种语言;作者在与 agents 协作时感受到了同样的张力,因为 agents 也是被直接丢进项目里,再被要求边做边理解术语。
因此,作者给出的修复方式不是单纯要求代理“简洁一点”,而是建立一份文档,让代理能读懂项目内部的术语系统。原文直接将其描述为“a document that helps agents decode the jargon used in the project”。
这一定义说明,共享语言首先不是某个模型参数、提示词技巧或编码规范,而是一种面向项目语义层的文档资产。它解决的是术语压缩、语义对齐和表达复用问题。
关键机制或组成
1. 以领域模型为中心压缩表达
原文引用了 Eric Evans 在 领域驱动设计 中的表述:开发者之间的对话,以及代码中的表达,都应当来自同一套领域模型。共享语言的关键机制正是把“业务概念”压缩成可反复调用的术语。
文中的示例非常具体:
- Before:"There's a problem when a lesson inside a section of a course is made 'real' (i.e. given a spot in the file system)"
- After:"There's a problem with the materialization cascade"
这不是单纯把句子写短,而是把一整串上下文、约束和对象关系,折叠进一个项目内已经定义好的术语 materialization cascade。一旦这个术语被文档化,后续每次提到它,代理就不需要重新铺陈“course / section / lesson / file system spot”这一长串解释。
2. 通过文档帮助代理解码项目黑话
共享语言在本文中被明确描述为一份文档。原文提到的例子是一份 CONTEXT.md,说明这种语言通常不是口头约定,而是项目中的可读文档。
它的作用包括:
- 解释项目内已经形成的 jargon
- 为复杂概念提供统一叫法
- 让代理在后续对话、修改建议和代码实现中反复复用这些叫法
- 减少每个会话都重复定义概念的成本
作者特别强调这种简洁性会“session after session”持续产生收益,也就是收益不是一次性的,而是在多轮协作中不断累积。
3. 反向影响代码命名
共享语言不仅用于对话,还会进入代码表达层。原文明确列出其额外收益之一:
- 变量、函数和文件会使用共享语言进行一致命名
这意味着共享语言不是只影响 issue 描述、讨论记录或 prompt,而是会沉淀到代码符号中。一个术语一旦被项目确认,它就更可能同时出现在:
- 需求讨论中
- 代理与人的对话中
- 变量名中
- 函数名中
- 文件名中
这种一致性会进一步降低代理在代码库中搜索、定位和迁移语义时的成本。
4. 降低代理的 token 开销
原文还指出,共享语言会让代理“spend fewer tokens on thinking”。其原因不是模型被修改了,而是语言被压缩了:同一个概念如果有一个简洁、稳定、被文档定义过的名字,代理在理解、计划和表达时就不必反复展开长描述。
因此,共享语言对 token 的节约至少体现在两层:
- 输入侧节约:人类不必每次都用长句解释旧概念
- 推理与输出侧节约:代理内部思考和最终表达都可以借助更短、更稳的术语
这也是它被视为不仅减少冗长,而且能提升协作效率的重要原因。
细节与边界
它主要解决的是“术语对齐”,不是一切工程问题
在原文结构中,共享语言对应的是“代理太啰嗦”这一类问题;而“代码根本跑不起来”则被放到下一节,通过 tdd、静态类型、浏览器访问和自动化测试等反馈回路来解决。
这说明共享语言的边界很明确:
- 它擅长解决表达过长、术语不统一、语义难以压缩的问题
- 它不能替代测试、调试、类型系统和运行反馈
- 即使你和代理已经靠共享语言对齐了要做什么,代码仍然可能写得很差,这时需要别的机制介入
换言之,共享语言改善的是“理解与表述层”的质量,不直接保证“执行与验证层”的正确性。
它不是单纯的简写表,而是项目语义基础设施
如果只是随手发明一些缩写,但没有让代理真正理解这些词背后的领域含义,那么这种做法并不能构成本文所说的共享语言。原文强调它来自同一套 domain model,因此共享语言的前提是:术语必须能稳定映射到项目中的对象、关系、流程或决策。
因此,好的共享语言通常具有几个特征:
- 术语背后有清晰定义,而不是含糊口号
- 相同概念在不同会话里应尽量使用相同说法
- 术语不仅能说得短,还能指导代码中的命名与结构
- 复杂且难解释的决策可以被额外文档化,而不是只留在临时对话里
在本文中,它与文档化工作流绑定出现
原文明确说明,这一做法已经被内建进 grill-with-docs:它不仅是一轮 grilling session,还会帮助你与 AI 建立共享语言,并把难以解释的决策记录进 ADR。
这说明共享语言并不是一次性写完的词汇表,而更像一种伴随式文档实践:
- 在开始改动之前先对齐
- 通过追问把概念打磨清楚
- 把稳定术语写入文档
- 把难讲清的设计决定沉淀为 ADR
作者甚至把它称为整个仓库里“可能最酷的技术之一”,并明确建议实际去试。这一评价侧面说明,在其方法体系里,共享语言不是边角优化,而是高杠杆实践。
与其他条目的关系
- grill-with-docs:共享语言在原文中被直接说成内建于这个 skill 中;它通过 grilling session 帮助人与 AI 建立术语共识,并把难说明的决定写入 ADR。
- grill-me:
/grill-with-docs被描述为与其相同但“加了更多好东西”的版本,因此共享语言可以理解为比基础 grilling 更进一步的文档化对齐能力。 - User-invoked skills:共享语言并非纯理论,而是通过显式调用的 skill 落地到项目协作流程中。
- Productivity:共享语言直接提升会话效率、命名一致性和导航效率,属于典型的高收益生产力实践。