从论文到实践:面向意图对齐的 Coding Agent 工作流与公共机制设计

在分析了 Mise en Place for Agentic Coding (Zigler, 2026)、Intent Formalization (Lahiri, 2026) 和 Intent-Centric SE (De La Cruz, 2026) 三篇论文,并深入研究了 TiCoder、VeriStruct 的开源实现后,我设计了一套面向意图对齐的 Coding Agent 完整技术方案。
四个根本命题
| # | 命题 | 来源 |
|---|---|---|
| P1 | 代码生成的瓶颈不是速度而是对齐——Agent 能写,但写的不一定对 | Lahiri (2026), De La Cruz (2026) |
| P2 | 对齐问题的本质是准备问题——缺乏足够上下文导致返工,准备 1 单位时间可节省 5+ 单位返工 | Zigler (2026), MEP |
| P3 | 准备的核心是把隐性知识外化——从"我知道"变成"Agent 也能知道",理论基础来自 Polanyi (1966) 和 Nonaka (1995) SECI 模型 | MEP Phase 1 |
| P4 | 意图的可靠性 = 形式化程度 × 验证覆盖率——从轻量测试到完整证明有一条可走的光谱 | Lahiri (2026), TiCoder |
总体架构
访谈式对话] --> A2[Domain Encyclopedia
领域百科] A2 --> A3[Context Compiler
分层注入] end A -->|结构化上下文| B subgraph B[Phase B: 意图形式化] B1[Disagreement Detector
多候选歧义检测] --> B2[Interactive Clarification
分歧点提问] B2 --> B3[Intent Formalization
形式化光谱 L0-L4] end B -->|形式化意图| C subgraph C[Phase C: 任务分解] C1[Dependency Graph Builder] --> C2[Parallelism Optimizer] C2 --> C3[Bead Generation
64个结构化任务] end C -->|Task Beads| D subgraph D[Phase D: 执行循环] D1[Planner 状态机] --> D2[Generator LLM] D2 --> D3[Verifier 测试+验证] D3 -->|失败| D4[Error Classifier] D4 --> D5[Repair Router
14+修复模块] D5 --> D2 D3 -->|通过| E end subgraph E[Phase E: 证据门禁] E1[语法类型] --> E2[静态安全] E2 --> E3[意图符合性] E3 --> E4[回归保护] E4 --> E5[架构一致性] E5 --> E6[风险分级审查] end E -->|自动合入| M[Merge] style H fill:#1a1a2e,stroke:#e94560,color:#e0e0e0 style M fill:#1a1a2e,stroke:#0f3460,color:#e0e0e0
Phase A:上下文奠基(Context Grounding)
借鉴 MEP Phase 1——在 Agent 动手写代码之前,把人类头脑中的隐性知识外化为结构化上下文。
Knowledge Externalizer(知识外化器)
通过结构化访谈式对话,引导人类把"说不出的"变成"写下来的":
| 访谈模块 | 引导问题 | 产出 |
|---|---|---|
| 领域约束 | "有哪些绝对不能违反的规则?""用户最常误解什么?" | invariants.yaml |
| 架构决策 | "为什么选这个技术栈?""哪些决策后来被证明关键正确?" | adr-*.md |
| 设计哲学 | "什么是'好代码'在这里的定义?""哪些简化是刻意的?" | principles.yaml |
| 隐性知识 | "有什么你知道但文档里没有的?""新成员最容易踩的坑?" | traps.md |
黑客马拉松实证: 20 分钟口述教学设计哲学(9,386 词,10 份文档)→ 大幅减少 Socratic tutor 组件的迭代次数。隐性知识外化直接转化为执行效率。
Domain Encyclopedia(领域百科)
将外化知识组织为分层结构——架构决策、业务约束、设计原则、领域术语——Agent 可精确检索。
Context Compiler(上下文编译器)
分层注入,不是全量塞进 prompt:
| 层级 | 上限 | 内容 |
|---|---|---|
| System Prompt | ≤ 4,000 tokens | 架构约束 + 编码规范(always-on) |
| Task Context | ≤ 8,000 tokens | BM25+向量检索 → LLM 重排序(per-task) |
| Runtime Context | ≤ 4,000 tokens | 错误日志 + 性能数据(on-demand) |
| Constraint Checklist | ≤ 1,000 tokens | 门禁检查项(pre-merge) |
Phase B:意图形式化(Intent Formalization)
把自然语言任务描述转化为可检查的意图规约。融合 TiCoder 的交互模式和 Lahiri 的形式化光谱。
歧义驱动的交互式澄清
核心理念:不问全部,只问分歧点。
Task: "给用户列表加一个按角色筛选的功能"
↓
LLM 生成 N=5 个候选实现(temperature=0.7)
↓
Disagreement Detector 分析:
| 测试点 | 候选A | 候选B | 候选C | 区分度 |
|--------|-------|-------|-------|--------|
| admin 看到? | 仅admin | 全部角色 | admin排序 | 0.8 |
| 空字符串行为? | 报错 | 返回全部 | 空列表 | 0.9 |
↓
TOP-K 歧义测试向用户提问:
Q1: admin角色应该看到:A)仅admin B)所有角色
Q2: 空字符串应该:A)报错 B)返回全部 C)返回空
↓
用户: "1-B, 2-B" → 剪枝不匹配候选
↓
Accepted Tests 持久化为回归基线
↓
Intent Record 归档
关键参数来自 TiCoder 用户实验:N=5 覆盖歧义空间,K=3-5 保证认知负荷不超载(p=0.007),提问策略用区分度排序。
形式化光谱:风险驱动的自动选级
| 等级 | 场景 | 机制 |
|---|---|---|
| L0 探索 | 原型、个人工具 | 3-5 歧义点 Yes/No |
| L1 常规 | CRUD、UI 组件 | L0 + 自动生成 postcondition |
| L2 重要 | 核心业务逻辑、支付 | L1 + property-based test |
| L3 关键 | 认证、数据完整性 | L2 + Dafny/Verus 验证 |
| L4 安全攸关 | 密码学、协议解析 | DSL + 验证编译(3DGen 模式) |
风险评分 = 是否触碰认证(+3) + 是否触碰支付(+2) + 是否触碰数据完整性(+2) + 影响模块数(+1/3+) + 历史缺陷率(+1/10%)。≥5 走 L3,≥3 走 L2,≥1 走 L1。
Phase C:任务分解(Task Decomposition)
借鉴 MEP Phase 3——将形式化意图分解为依赖感知、可并行执行的结构化 Beads。
Bead 数据模型
{
"bead_id": "bead-042",
"priority": 1,
"title": "实现 RoleFilter 组件",
"dependencies": ["bead-038", "bead-040"],
"dependents": ["bead-045"],
"estimated_minutes": 15,
"acceptance_criteria": [
"admin 看到所有用户",
"空选择显示全部",
"切换角色保持滚动位置"
],
"files_to_modify": ["src/components/UserList.tsx"],
"constraints": ["使用现有 Select 组件"],
"evidence_required": ["passes_accepted_tests", "typecheck"]
}
并行度优化
拓扑排序 + 打包可并行任务:
Batch 1: [bead-001, bead-002, bead-005] ← 无依赖
Batch 2: [bead-003, bead-006] ← 依赖 Batch 1
Batch 3: [bead-004, bead-007, bead-008] ← 依赖 Batch 2
...
黑客马拉松数据: 64 个 bead → 43 个关闭 → 中位 5.9 分钟/bead → 4 个 Agent 真正并行 → 0 架构返工。协调负担从运行时转移到准备时——人的架构判断在准备阶段价值最大。
Phase D:Agentic 执行循环
借鉴 VeriStruct(TACAS 2026)的 Planner + Repair Router 架构。
Planner 状态机
PLAN → GENERATE → VERIFY → REPAIR → GENERATE(循环)
│ 全部通过 │ 重试>N
▼ ▼
DONE STUCK → HUMAN
Error Classifier + Repair Router
Agent 生成代码后验证失败,不盲目重试——先分类错误,再路由到专用修复模块:
验证失败输出
↓
Error Classifier(10 种错误模式正则)
↓ "type_error"
Repair Router
↓
TypeRepairModule → 修复类型错误
SyntaxRepairModule → 修复语法错误
MissingImportRepair→ 补充缺失导入
AssertionRepair → 修复断言失败
PrecondRepair → 加强前置条件
PostcondRepair → 放松后置条件
InvariantRepair → 修复不变量
...
↓
每个模块含:专用 prompt 模板 + 修复策略(改代码/改规约/回退)
Loop Detector
收敛检测规则:
- 同一错误重复 3 次 → 升级人工
- 总重试 > 8 次 → 升级人工
- 耗时 > 30 分钟 → 升级人工
- 否则继续修复
Phase E:证据门禁与治理
六层自动化门禁
Gate 1: 语法与类型 → 编译通过?类型检查?
Gate 2: 静态安全 → SAST?依赖漏洞?密钥泄露?
Gate 3: 意图符合性 → 通过所有 accepted_tests?spec评分?
Gate 4: 回归保护 → 现有测试全部通过?
Gate 5: 架构一致性 → 违反约束?循环依赖?
Gate 6: 风险分级审查 → LOW自动合入 / MED轻量审查 / HIGH完整审查
证据包(Evidence Package)
每次变更附带完整证据:原始 prompt、歧义点与用户决策、候选代码数、选择理由、测试通过率、静态检查结果、规约 soundness/completeness 评分、diff 摘要、风险等级。不依赖人类逐行审查。
Provenance Chain(溯源链)
NL Prompt → Formalized Intent → Task Decomposition
→ Agent Plan → Tool Calls → Generated Code
→ Repair Attempts → Gate Results → Human Decision → Merge
每环节记录:timestamp | agent/human ID | input | output | rationale
Policy-as-Code(OPA/Rego)
规则示例:
- 不能碰的文件:package.json, deploy.yml, *.tf
- 触碰 auth → 强制人类审查
- 风险=LOW + 全部门禁通过 + 部署窗口开放 → 自动合入
完整数据流:一次典型执行
User: "给用户列表加一个按角色筛选的功能"
│
Phase A: Context Compiler 加载领域百科
├── 约束: "所有列表查询必须有分页"
├── 术语: "Workspace = 用户的完整研究会话"
└── 架构: "使用现有 Select 组件"
│
Phase B: Disagreement Detector
├── 生成 5 候选 → 找到 4 歧义点
├── 问用户 3 个问题 → 用户回答
├── 剪枝 3 候选 → 保留 2 个对齐候选
├── 生成 2 个 accepted_tests
└── Formalization Level: L1(常规任务)
│
Phase C: Task Decomposer
├── 依赖分析: 需要 bead-038 (API route), bead-040 (Select 组件)
└── 分解: bead-042 "实现 RoleFilter" (deps=[038,040], 15min)
│
Phase D: 等待 bead-038, bead-040 完成 →
├── Planner → GENERATE (注入领域百科 + accepted_tests)
├── Verifier: 编译✓ 2/2 accepted_tests✓ 47/47 回归✓
└── DONE
│
Phase E: Gate Pipeline
├── Gate 1-5: 全部通过
├── Gate 6: Risk=LOW → AUTO-MERGE
└── Evidence Package 归档 + Provenance Chain 追加
Context Fluency:Agent 时代的新技能
论文提出了一个重要概念——上下文流利度(Context Fluency):创造丰富结构化上下文让 Agent 能有效行动的能力。Prompt Engineering 优化单次调用指令;Context Fluency 是 prompt 的上游——关心 Agent 执行周围的信息架构。
| 组件 | 描述 | 对应传统能力 |
|---|---|---|
| Decomposition | 分解为可并行任务,明确边界 | 任务拆分 |
| Specification | 描述"做什么"+"为什么" | 需求分析 |
| Constraint Definition | 知道排除/简化/推迟什么 | 范围管理 |
| Domain Encoding | 把隐性知识外化为Agent可读格式 | 文档+知识传承 |
三篇论文的对话
| 论文 | 核心论点 | 本方案的对应 |
|---|---|---|
| De La Cruz (2605.11027) | 软件工程从 code-centric 到 intent-centric | Phase A+B:将隐性意图外化 + 形式化 |
| Lahiri (2603.17150) | 意图形式化是可靠性瓶颈 | Phase B:形式化光谱 L0-L4 + soundness/completeness 指标 |
| Zigler (2605.05400) | 对齐问题本质是准备问题 | Phase A+C+D:准备优先 + Beads + 并行执行 |
三篇交汇在同一个点上:在 vibe coding 时代,可靠性不来自更好的代码生成,而来自更充分的准备和更可检查的意图。
实施路线图
| 阶段 | 内容 | 产出 |
|---|---|---|
| P0 立即 | Domain Encyclopedia 数据模型 + Error Classifier + Evidence Package | 基础设施就绪 |
| P1 近期 | Knowledge Externalizer (/mep-ground) + Disagreement Detector + Repair Router + Loop Detector | 最小可行闭环 |
| P2 近期 | Task Decomposer + Gate Pipeline + Risk Classifier + Provenance Tracker | 完整工作流 |
| P3 中期 | Spec Soundness/Completeness 指标 + Policy Engine + 属性测试生成 | 高级特性 |
关键指标
| 指标 | 当前基线 | 目标 |
|---|---|---|
| 意图对齐率 | ~60%(vibe coding) | ≥ 85%(TiCoder: 84%) |
| 架构返工率 | 未测量 | ≤ 5% |
| 准备:代码比 | 0(无准备) | 0.5-1.0:1 |
| 门禁自动化率 | 0% | ≥ 60% |
| 单 bead 中位时间 | - | ≤ 10 min |
| 修复循环次数 | 2-5 次(无分类) | ≤ 1.5 次均值 |
引用
- Zigler, A. (2026). Mise en Place for Agentic Coding. arXiv:2605.05400. VibeX 2026.
- Lahiri, S. K. (2026). Intent Formalization: A Grand Challenge. arXiv:2603.17150.
- De La Cruz, E. (2026). From Code-Centric to Intent-Centric SE. arXiv:2605.11027.
- Lahiri, S. K. et al. TiCoder. github.com/microsoft/TiCoder
- Sun, C. et al. (2026). VeriStruct. TACAS 2026. github.com/ChuyueSun/VeriStruct
- Polanyi, M. (1966). The Tacit Dimension.
- Nonaka, I. & Takeuchi, H. (1995). The Knowledge-Creating Company.