【置顶】人在 AI Coding 中的价值:一次架构决策带来的思考

梦想游戏人
目录:
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 深入分析下这个区别”

人类做了两个决断:

  1. 直接否决了”中间方案”——不要 tree-sitter 过渡
  2. 要求深入分析 LSP vs Code Graph 的本质区别——不是表面的功能对比

AI 深入对比发现:

  • LSP 本质是 IDE 协议,受限于协议定义的能力边界
  • Code Graph 是知识图谱,预计算了所有结构关系
  • 三个决定性差距:
  • 多层调用链(LSP 需多次往返)
  • 字段读写分析(LSP 完全没有)
  • 数据流追踪(LSP 根本不可能)

💡 人类的价值:不被”看起来都能用”迷惑,要求看到本质差异。

🤖 AI 的价值:被要求”深入分析本质区别”时,产出了一个多维度的系统对比(协议限制、多层调用链、字段读写、数据流),这种结构化的深度展开是人类难以在短时间内完成的。

第四幕:追问结合使用的问题(人类介入 #3)

🧑 人类判断:

“结合使用会不会出现某些场景并不是最优解?”

不是问”能不能结合”,而是问”结合了会不会反而更差”——这是典型的逆向思维。

AI 被迫认真分析了结合使用的五个问题:

  1. 数据一致性冲突——两套系统给出矛盾结果
  2. 路由决策的模糊地带——查询复杂度前置判断难
  3. 维护成本翻倍
  4. AI 工具选择困难——24 个工具有重叠
  5. LSP 唯一不可替代的场景只有实时诊断(IDE 已有)

AI 的结论从”可以结合”转变为“推荐 Roslyn Workspace MCP 单一方案”

💡 人类的价值:主动质疑”看起来都要”的方案,逼 AI 暴露组合方案的真实代价。这是典型的逆向思维——不问”能不能”,而问”会不会更差”。

🤖 AI 的价值:被追问后不固执己见,而是认真暴露了 5 个组合方案的真实问题。好的 AI 助手不应该只顺着用户说话。

第五幕:抓住核心矛盾——实时性(人类介入 #4)

🧑 人类判断:

“基于 Code Graph 的现实问题,你需要给出其他方案,我担心 coding 过程中出现延迟,导致 coding 的问题”

人类把问题聚焦到了最本质的矛盾:coding 过程中的实时性。不是理论上的优劣比较,而是”用起来会不会出问题”。

AI 被迫跳出 Code Graph 的框架,提出了四个完全不同的方案:

  1. Roslyn Workspace MCP(非 LSP,直接用 Roslyn API)
  2. 按需构建局部子图
  3. Code Graph + 实时校验层
  4. 纯 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 听你指挥。而是两个不同维度的智能体,在对话中碰撞出任何一方都无法独立到达的方案。”


本案例基于一次真实的技术方案讨论记录整理。

Scroll Up