【置顶】人在 AI Coding 中的价值:一次架构决策带来的思考
引言
- AI 会取代程序员吗?这个案例给出了一个不同的答案。
- 这是一次真实的技术架构决策记录。AI 提供了惊人的知识广度和分析深度,人类带来了判断力、洞察力和架构直觉。
- 最终的方案不是任何一方独立产出的——它在 6 轮对话中,从追问与展开的碰撞中涌现。
- 没有 AI 的展开,追问就没有素材。没有人类的追问,AI 就停在第一个安全方案上。
- 在这个过程中,人的核心价值清晰浮现:判断力、洞察力,以及对代码始终保持品味。
实践案例
第一幕:问题的提出
背景:Unity 大型 C# 项目,代码检索依赖 grep,效率低且不懂语义。
🧑 人类提问:
“C# 代码检索是 grep,效率低且不懂语义,有没有其他什么办法?”
AI 给出了完整的技术菜单:tree-sitter、Roslyn、向量检索、Sourcegraph、ast-grep、semgrep……并建议分三个阶段:Phase 1 用 tree-sitter,Phase 2 接入 Roslyn,Phase 3 加向量嵌入。
看起来很专业,但这只是 AI 的“安全方案”——风险低、步子小。
🤖 AI 的价值:一次性给出 6 种技术方案的完整菜单,每种附带适用场景分析。人类在几分钟内获得了可能需要几天调研的信息广度。
第二幕:引入外部实践,交叉验证(人类介入 #1)
🧑 人类判断:
“Code Graph MCP 会不会更好?”
人类没有被 AI 的分阶段方案说服,直接提出了更激进的方向。
AI 分析了 Code Graph MCP 的优势,并与之前的方案对比。
🧑 人类判断:
“另外有一个 Code Graph 实践分享可以参考。你交叉对比下”
人类引入了《我的世界》团队的 Code Graph MCP 实践文章,要求 AI 交叉对比。
AI 的关键发现(在人类引导下):
- tree-sitter 对强类型语言远远不够——MC 实践明确验证了这一点
- 数据流追踪是杀手级能力——AI 之前完全没提到
- 应该直接上 Roslyn,跳过 tree-sitter 过渡
💡 人类的价值:知道去哪里找参照物,知道要交叉验证,而不是只听 AI 的”安全方案”。
🤖 AI 的价值:交叉验证能力在这里发挥作用——读完《我的世界》团队的长篇实践文章后,能逐条对比识别出自己之前建议的不足(tree-sitter 不够用),并主动修正。
第三幕:坚持用 Roslyn,深究本质区别(人类介入 #2)
🧑 人类判断:
“我觉得应该用 Roslyn,不应该中间方案。但是你提到的 LSP 和 Code Graph MCP 深入分析下这个区别”
人类做了两个决断:
- 直接否决了”中间方案”——不要 tree-sitter 过渡
- 要求深入分析 LSP vs Code Graph 的本质区别——不是表面的功能对比
AI 深入对比发现:
- LSP 本质是 IDE 协议,受限于协议定义的能力边界
- Code Graph 是知识图谱,预计算了所有结构关系
- 三个决定性差距:
- 多层调用链(LSP 需多次往返)
- 字段读写分析(LSP 完全没有)
- 数据流追踪(LSP 根本不可能)
💡 人类的价值:不被”看起来都能用”迷惑,要求看到本质差异。
🤖 AI 的价值:被要求”深入分析本质区别”时,产出了一个多维度的系统对比(协议限制、多层调用链、字段读写、数据流),这种结构化的深度展开是人类难以在短时间内完成的。
第四幕:追问结合使用的问题(人类介入 #3)
🧑 人类判断:
“结合使用会不会出现某些场景并不是最优解?”
不是问”能不能结合”,而是问”结合了会不会反而更差”——这是典型的逆向思维。
AI 被迫认真分析了结合使用的五个问题:
- 数据一致性冲突——两套系统给出矛盾结果
- 路由决策的模糊地带——查询复杂度前置判断难
- 维护成本翻倍
- AI 工具选择困难——24 个工具有重叠
- LSP 唯一不可替代的场景只有实时诊断(IDE 已有)
AI 的结论从”可以结合”转变为“推荐 Roslyn Workspace MCP 单一方案”。
💡 人类的价值:主动质疑”看起来都要”的方案,逼 AI 暴露组合方案的真实代价。这是典型的逆向思维——不问”能不能”,而问”会不会更差”。
🤖 AI 的价值:被追问后不固执己见,而是认真暴露了 5 个组合方案的真实问题。好的 AI 助手不应该只顺着用户说话。
第五幕:抓住核心矛盾——实时性(人类介入 #4)
🧑 人类判断:
“基于 Code Graph 的现实问题,你需要给出其他方案,我担心 coding 过程中出现延迟,导致 coding 的问题”
人类把问题聚焦到了最本质的矛盾:coding 过程中的实时性。不是理论上的优劣比较,而是”用起来会不会出问题”。
AI 被迫跳出 Code Graph 的框架,提出了四个完全不同的方案:
- Roslyn Workspace MCP(非 LSP,直接用 Roslyn API)
- 按需构建局部子图
- Code Graph + 实时校验层
- 纯 Roslyn Workspace
💡 人类的价值:场景感知——从技术对比拉回”coding 过程中的实际体验”,不允许 AI 停留在理论分析。
🤖 AI 的价值:被重新定向后,迅速跳出之前的框架,几分钟内产出了 4 个全新的替代方案。这种”快速转向能力”是 AI 的独特优势。
第六幕:关键洞察——盲区可以降级(人类介入 #5)
🧑 人类判断:
“Code Graph + 校验层,缺陷是新代码盲区,新代码是不是盲区但是可以识别出来,降级处理?”
这是整个对话中最精彩的一刻。AI 之前把”新代码盲区”标记为 Code Graph + 校验层方案的 ❌ 缺陷,人类直接指出:
盲区 ≠ 错误。盲区是”已知的未知”,可以识别,可以降级。
AI 顺着这个思路展开,设计了完整的降级机制:
- 查询时发现图谱缺失 → 降级到 Roslyn
- 文件级版本比对 → 识别脏文件
- git diff 实时感知 → 标记变更区域
- 99% 查询命中干净区域(图谱毫秒级),1% 降级到 Roslyn(秒级)
💡 人类的价值:问题重构能力——把一个”缺陷”重构为一个”可管理的降级问题”。看到”缺陷”背后的解法,把不可接受的问题转化为可管理的问题。
🤖 AI 的价值:顺着人类的启发,立刻展开了完整的降级机制设计——脏文件追踪、版本比对、git diff 感知、99% 命中率估算。人类给了一个方向,AI 在几分钟内把它填充为工程方案。
第七幕:最终洞察——它们根本不冲突(人类介入 #6)
🧑 人类判断:
“其实我觉得 Roslyn Workspace MCP 和 Code Graph 本身不冲突啊,结合使用更好?”
回到了第四幕的”结合使用”话题——但这次完全不同。
第四幕问的是 LSP + Code Graph(两个竞争方案的拼凑)。
第七幕说的是 Roslyn Workspace + Code Graph(真相源 + 加速缓存的分层架构)。
人类看到了 AI 没看到的东西:
- Roslyn Workspace 不是 LSP,它不受协议限制
- Roslyn 是数据源,Code Graph 是缓存——就像 MySQL + Redis
- 它们在架构上是不同层,天然互补
AI 恍然大悟,输出了最终的统一架构。
💡 人类的价值:在经过充分分析后,做出综合判断——既不是第四幕的”都要”(没想清楚),也不是第五幕的”只要一个”(过度简化),而是在理解了本质后的“分层组合”。
🤖 AI 的价值:这一步最能体现协作的力量。人类在经过 5 轮充分分析后,做出了一个 AI 无法自主做出的综合判断。但这个判断之所以正确,恰恰因为前 5 轮 AI 提供了足够深度的分析素材。AI 立刻产出了统一架构设计。
最终架构
AI(CodeMaker / Claude)
│ MCP Protocol
▼
统一 MCP Server(对 AI 暴露一套工具)
├── 智能路由层(自动选择最优路径)
├── 脏文件追踪器(识别变更区域)
├── 结果合并器(统一格式返回)
│
├── Code Graph (Memgraph) ← 加速层 + 深度引擎
│ • 多层调用链(毫秒级)
│ • 跨函数数据流(独有能力)
│ • 全局拓扑分析(独有能力)
│ • 字段读写分析
│
└── Roslyn Workspace(常驻进程) ← 真相层 + 实时引擎
• 实时符号解析(永远准确)
• 新代码感知(无盲区)
• 类型推断 / 编译诊断
• 增量更新数据源(反哺 Code Graph)
路由规则
- 图谱有 && 文件干净 → 走图谱(最快)
- 图谱有 && 部分文件脏 → 图谱为主 + Roslyn 补脏的部分
- 图谱没有(新代码)→ Roslyn 兜底
- 只有图谱能做(数据流、全局拓扑)→ 图谱
决策路径回顾
6 轮对话如何逐步推动方案演进——人类的判断与 AI 的贡献并行:
| 轮次 | 人类的判断 | AI 的贡献 | 方案演进 |
|---|---|---|---|
| #1 | 引入 MC 实践交叉对比 | 读完长文逐条对比,识别自身不足 | “tree-sitter 过渡” → “直接 Roslyn” |
| #2 | 要求深究 LSP vs Code Graph 本质 | 产出多维度系统对比,发现三个决定性差距 | 明确 Code Graph 的核心优势 |
| #3 | 追问结合使用的问题 | 诚实暴露 5 个组合方案的真实代价 | 从”都要”到”聚焦” |
| #4 | 聚焦 coding 实时性 | 跳出框架,快速产出 4 个替代方案 | 引入 Roslyn Workspace MCP 新思路 |
| #5 | “盲区可以识别,降级处理” | 展开完整降级机制设计 | Code Graph 的实时性问题变为可管理 |
| #6 | “它们不冲突,是互补的” | 立刻产出统一架构设计 | 最终方案:统一 MCP Server |
三方价值解构
🧑 人的价值
以下按叙事节奏排列——从基础能力到高光时刻,像爬山一样渐入佳境:
❶ 持续追问的韧性——不在”看起来不错”上停下
AI 的每一轮回答都很完整、很专业、附带表格和架构图。大多数人可能在第 1 轮就会说”就按这个来吧”。
但这位开发者连续追问了 6 轮,每一轮都从 AI 几千字的分析中抓取一个关键点,提出新的问题。这种韧性不是技术能力,是思维习惯——对”足够好”的不满足,对”真正好”的持续追求。
❷ 节奏把控——知道什么时候展开,什么时候收敛
回顾 6 轮对话的节奏:第 1-2 轮展开(探索方案空间,引入外部参照),第 3-4 轮质疑(追问组合方案的问题,聚焦实时性),第 5-6 轮收敛(重构问题,做出最终架构决策)。
人类没有在第 1 轮就急着选方案(太早收敛),也没有在第 6 轮还在探索新方向(过度发散)。这种节奏感不是 AI 能学会的——它取决于人对”信息是否充分”的直觉判断。
❸ 判断力——在 AI 给出”正确但平庸”的方案时,敢于否决
“我觉得应该用 Roslyn,不应该中间方案。”
AI 给了一个稳妥的三阶段路线:先 tree-sitter,再 Roslyn,最后向量嵌入。这个方案没有错——但它是”不会犯错”的方案,不是”最优”的方案。人类一句话跳过了可能浪费数周的过渡阶段。
如果没有这个判断:团队可能花 2-3 周搭建 tree-sitter 管道,最终发现能力不足,再推倒重来。
❹ 信息嗅觉——知道去哪里找参照物,而不是只听 AI 的
“另外有一个 Code Graph 实践分享可以参考。你交叉对比下。”
人类没有问 AI “你觉得还有什么参考”,而是自己带来了《我的世界》团队的实践文章。这篇文章直接打破了 AI 的认知边界——AI 之前完全没提到数据流追踪这个杀手级能力。
如果没有这个判断:AI 会继续在自己的知识范围内打转,数据流追踪可能永远不会进入方案。
❺ 代码品味——分辨”看起来都行”和”本质上不同”
“你提到的 LSP 和 Code Graph MCP 深入分析下这个区别。”
AI 提到 LSP 和 Code Graph 时,语气是”两者各有优劣,可以互补”。人类的直觉告诉他:这两个东西不是同一层级的。追问之后,AI 发现了三个决定性差距——多层调用链、字段读写、数据流——彻底拉开了两者的距离。
如果没有这个判断:LSP 可能作为”够用”的方案被采纳,团队永远碰不到字段级分析和数据流追踪。
❻ 逆向思维——主动找自己想要的方案的反例
“结合使用会不会出现某些场景并不是最优解?”
注意:人类此时其实倾向于结合使用。但他没有急着确认,而是主动寻找反例。这种”向自己的直觉开枪”的习惯,逼出了 5 个组合方案的真实问题——数据一致性冲突、路由模糊、维护成本翻倍……
如果没有这个判断:可能直接上了 LSP + Code Graph 的拼凑方案,后期在一致性冲突上踩坑。
❼ 场景感知——从技术分析拉回真实使用场景
“我担心 coding 过程中出现延迟,导致 coding 的问题。”
AI 之前的所有分析都在比较”能力维度”——谁的调用链更深、谁的数据流更全。人类一句话把维度切换到了使用体验:再强大的分析能力,如果在写代码时卡 5 秒,开发者就不会用。
如果没有这个判断:可能选了一个”能力最强但日常体验最差”的方案。
❽ 洞察力——看到 AI 标注为”缺陷”背后的真相
“新代码是不是盲区但是可以识别出来,降级处理?”
AI 列出了 Code Graph + 校验层方案的优缺点对比,在缺点栏写着 ❌ “新代码盲区”。对 AI 来说,这是一个事实判断——图谱里没有新代码,所以是盲区,所以是缺陷。
但人类看到了 AI 没看到的一层:”盲区”和”错误”不是一回事。盲区是”已知的未知”——你知道自己不知道,这就意味着你可以处理它。
这个洞察不是逻辑推导出来的,是直觉。AI 拥有关于这个方案的所有信息,但它没有做出这个判断。人类只用了一句话。
如果没有这个判断:Code Graph 方案会因为”新代码盲区”被标记为不可接受,从候选中淘汰。
❾ 问题重构——把洞察转化为工程方案
洞察力告诉人类”盲区可以识别”,但光有洞察不够——还需要把它变成可执行的工程语言。人类用了四个字完成了这个转化:”降级处理”。
这四个字给了 AI 一个明确的工程方向。AI 立刻展开了完整的降级机制设计——脏文件追踪、版本比对、git diff 感知、99% 命中率估算。
这是整个对话的转折点。洞察(盲区 ≠ 错误)+ 重构(降级处理)= Code Graph 从”有致命缺陷”变成了”可以兼得深度和实时性”。
如果没有这个判断:如果只有洞察没有重构:人类知道”盲区不是问题”,但 AI 不知道该怎么做,方案仍然卡住。
❿ 综合判断与洞察——在充分分析后做出 AI 做不出的架构决策
“其实我觉得 Roslyn Workspace MCP 和 Code Graph 本身不冲突啊,结合使用更好?”
这和第四幕的”结合使用”看似相同,实则完全不同。第四幕是 LSP + Code Graph(两个竞争方案的拼凑),第七幕是 Roslyn Workspace + Code Graph(MySQL + Redis 的分层架构)。人类经过 5 轮深度分析后,看到了一个 AI 一直没看到的结构:它们不在同一层,所以不冲突。
这里同样有一个洞察在先:它们不在同一层,所以不冲突。AI 一直把 Roslyn Workspace 和 Code Graph 当作同一层级的替代方案来对比,人类看到了它们其实是不同层——一个是数据源,一个是缓存。先有这个洞察,才有”分层组合”的架构判断。
如果没有这个判断:要么停在”只用 Roslyn Workspace”(缺深度),要么停在”只用 Code Graph”(缺实时性),拿不到最终的最优解。
🤖 AI 的价值
| 价值 | 体现 |
|---|---|
| 知识广度 | 一次性列出 6 种技术方案,每种附带适用场景 |
| 深度展开 | 每一轮追问都产出完整的多维对比(表格、架构图、代码示例) |
| 结构化表达 | 把复杂技术对比组织为易于决策的格式 |
| 快速生成 | 被要求”给其他方案”时,几分钟内输出 4 个完整替代方案 |
| 交叉验证 | 读完外部长文后逐条对比,识别出自身建议的不足 |
| 细节设计 | 路由策略、降级机制、增量更新管道——完整的工程级细节 |
| 纠正后快速调整 | 人类每次指出问题,立刻调整方向,不固执 |
| 多维度并行思考 | 同时权衡实时性、深度、运维成本、内存、实现难度 |
🤝 协作的价值
1. 对话即设计
最终架构不是任何一方独立产出的。它在 6 轮对话中逐步涌现——人类追问打开新的分析维度,AI 展开填充技术细节,人类从中提取关键判断,推动方案进化。
2. 渐进式精炼
每一轮的模式相同:人类提出新角度 → AI 展开分析 → 人类判断取舍 → 方案向前推进一步。6 轮下来,方案从”tree-sitter 三阶段”进化到”Roslyn + Code Graph 统一架构”。
3. 信息不对称互补
人类有场景直觉但缺技术细节,AI 有技术细节但缺场景判断。对话弥合了这个 gap——人类问”coding 时会不会卡”,AI 回答”延迟模型是这样的”。
4. 思考放大器
人类一个追问(几秒钟)→ AI 展开完整分析(几分钟产出几千字)→ 人类从中抓取一个关键点(几秒钟)→ 推动方向性决策。人类的每一秒思考都被 AI 放大了数百倍。
5. 内置纠错
AI 给了次优方案?没关系。人类追问一下就能把它拉回来。协作过程自带纠偏机制——不需要一次做对,只需要能持续改进。
深层思考:这和”需求澄清”有什么区别?
有人可能会说:人类在这个过程中做的不就是”需求澄清”吗——告诉 AI 我要什么,AI 负责实现?如果是这样,人类的价值就被大大缩小了——毕竟需求澄清可以被一份好的需求文档替代。
但仔细审视这次对话,会发现它和需求澄清有三个根本不同。
区别一:答案在开始时不存在
需求澄清:
客户脑中已有模糊画面 → 开发者通过提问提取 → 画面变清晰
答案的位置:从始至终在客户脑中,只需要被提取出来
这次对话:
人类脑中:grep 不好用,想要更好的(具体是什么?不知道)
第 1 轮后:哦原来有 Code Graph 这种东西
第 3 轮后:哦原来 LSP 和 Code Graph 本质不同
第 5 轮后:哦原来盲区可以降级
第 6 轮后:哦原来它们可以分层组合
答案的位置:开始时不在任何人脑中,在对话中逐步生成
需求澄清是”提取”,这次对话是”生成”。你不可能”澄清”一个你自己还不知道的需求。
区别二:问题在双向循环中演化
需求澄清的信息是单向流动的:客户 → 开发者。问题始终是”客户到底要什么”。
这次对话的信息是双向循环的:人类追问 → AI 分析 → 人类获得新认知 → 基于新认知再追问 → AI 新分析 → …
关键证据:人类的问题在不断进化。
- 第 1 轮:人类问”有什么方案”(开放探索)
- 第 3 轮:人类问”LSP 和 Code Graph 本质区别”(基于 AI 的分析形成的新问题)
- 第 5 轮:人类问”盲区能不能降级”(依赖于 AI 在第 4 轮提出的”校验层”方案)
人类的第 5 个问题,在第 1 轮时是不可能被提出的——因为它依赖于前 4 轮 AI 的分析所创造的认知。
区别三:问题本身被重新定义了
需求澄清不改变问题本身——问题始终是”客户要什么”,只是答案越来越清晰。
这次对话中,问题被重新定义了三次:
- “有什么方案替代 grep?”
- “怎么在深度和实时性之间取最优?”
- “怎么让两套系统分层协作?”
“盲区可以降级处理”这句话,不是在澄清需求,而是在重新定义问题的解空间——把”二选一”转化为”可以兼得”。
对比总览
| 特征 | 需求澄清 | 协作式架构设计(本案例) |
|---|---|---|
| 答案的位置 | 在客户脑中 | 开始时不存在 |
| 信息流向 | 单向提取 | 双向循环 |
| 问题稳定性 | 问题不变,答案渐清 | 问题本身在进化 |
| 人类的角色 | 需求提供者 | 判断者 + 问题重构者 |
| AI 的角色 | 需求接收者 | 分析展开 + 方案生成 |
| 产出来源 | 从客户脑中提取 | 对话中涌现 |
为什么这个区别重要?
因为它决定了人类在 AI Coding 中的定位:
- 如果只是需求澄清 → 人类是”产品经理”,AI 是”开发者” → 人类可以被更好的需求文档替代
- 如果是协作式架构设计 → 人类是”思考伙伴”,和 AI 在不同维度上共同思考 → 人类不可替代,因为认知的演化依赖于双方的交互
“这意味着人在 AI Coding 中的核心价值不是’提需求’,而是’在对话中持续产生高质量的判断和追问,推动认知共同演化’。”
结论:最好的 AI Coding 是一场高质量的对话
1. 人不是 AI 的监工,AI 也不是人的替代
这个案例中,人类没有”指挥” AI 做什么。人类做的是追问、质疑、重构问题、做取舍。AI 做的是展开、分析、设计、快速调整。两者在能力维度上几乎没有重叠。
2. AI 的第一个答案是起点,不是终点
AI 的第一版方案(tree-sitter 三阶段)和最终方案(Roslyn + Code Graph 统一架构)之间,隔着 6 轮人类的追问和判断。第一个答案不是错的,但它是安全的、保守的、缺乏场景判断的。
3. 人的价值不在于知道答案,而在于知道该问什么问题
人类在这个过程中没有给出任何技术实现细节。但”Code Graph 会不会更好?”、”结合使用会不会反而更差?”、”盲区能不能降级处理?”——这些问题改变了方案的走向。好的问题比好的答案更稀缺。
4. 协作的产出 > 任何一方单独的产出
如果只有人类:缺乏技术广度和深度,可能停留在”Roslyn 应该比 grep 好”的模糊直觉上。
如果只有 AI:缺乏场景判断和追问韧性,大概率停在”tree-sitter 先跑起来”的安全方案上。
两者协作:产出了一个经过 6 轮验证的、既有深度又有实时性的统一架构。
“最好的 AI Coding 不是让 AI 替你思考,也不是让 AI 听你指挥。而是两个不同维度的智能体,在对话中碰撞出任何一方都无法独立到达的方案。”
本案例基于一次真实的技术方案讨论记录整理。