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

May 24, 2026

从论文到实践:面向意图对齐的 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

总体架构

graph TB H[Human Operator] --> A H -->|隐性知识| A H -->|任务描述| B subgraph A[Phase A: 上下文奠基] A1[Knowledge Externalizer
访谈式对话] --> 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 tokensBM25+向量检索 → 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-centricPhase 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.