从执行到决策:矛盾论视角下的 AI 工程实践

AI 时代每天冒新名词——Agent、RAG、MCP、thinking_budget、tool_choice……追新名词永远追不完。但如果你能识别新名词背后对应哪个老规律,你就不再是被动学习者,而是主动判断者。这篇文章做一件事:用《矛盾论》这套完整的思维框架,重新解释我们每天都在做的 AI 工程决策。

TL;DR

■ ReAct 循环 ≈ 《实践论》:算法语言和哲学语言,表达了同一条规律——知行统一

■ 矛盾论六概念全部映射到 AI 工程:普遍性(矛盾是天生内置)、特殊性(参数没有最佳值)、主要方面(场景定权重)、同一性(找第三条路)、斗争性(矛盾推动范式跃迁)、对抗性区分(调参 vs 改架构)

■ 核心命题:AI 能列 trade-off、能给最优参数、能写代码,但判断”这一次哪边更重要”、发现”框架本身是问题”、区分”结构问题还是参数问题”——是人的主场

开篇:ReAct ≈ 《实践论》

ReAct(Reasoning + Acting)循环——思考→行动→观察→再思考——和 1937 年《实践论》的”实践→认识→再实践→再认识”几乎是同一套逻辑。

ReAct 论文批判 实践论批判 本质
Reason-only(只推理不行动)→ 幻觉 教条主义 脱离实践的认识是空洞的
Act-only(只行动不思考)→ 盲目乱试 经验主义 缺乏理论指导的实践是盲目的
核心命题:reason to act + act to reason 知行统一观 认识和实践的辩证统一

论文作者没引用《实践论》,但他们引用的维果茨基学派受马克思主义认识论深刻影响。同一个底层规律,1937 年用哲学语言表达,2023 年用算法语言表达。

这个洞察引出一个方法论:新名词会越来越多,但底层规律没变。下面逐条用矛盾论的六个概念,对照真实工程决策。

矛盾论全景地图

# 概念 一句话 AI/工程映射
1 矛盾的普遍性 矛盾无处不在,是事物的本质特征 AI 系统天然内置矛盾,不是 bug
2 矛盾的特殊性 每个矛盾都有特殊性,要具体分析 同一参数不同场景需要不同值
3 主要矛盾 & 矛盾主要方面 抓主要矛盾,抓矛盾的主要方面 安全场景可控性优先,创意场景自主性优先
4 矛盾的同一性 对立面互相依存,一定条件下互相转化 好的设计让对立双方互相促进
5 矛盾的斗争性 对立面斗争是发展的动力 矛盾张力推动系统迭代优化
6 对抗性 vs 非对抗性 不同质的矛盾用不同质的方法解决 有些是调参问题,有些必须改架构

再加三组每天都在碰的工程矛盾:

# 矛盾 日常工程映射
7 快速上线 vs 安全合规 先跑通再合规,还是先合规再上线?
8 快速验证 vs 工程复用 先交付原型,还是先抽象通用组件?
9 安全兜底 vs 业务不中断 覆盖率重要还是稳定性重要?

概念 1:矛盾的普遍性——AI 系统的矛盾是天生的

“矛盾存在于一切事物的发展过程中,每一事物的发展过程中存在着自始至终的矛盾运动。”

RAG 检索天生矛盾:召回率(多召回不遗漏)和精确率(少召回不干扰)永远互斥。检索 Token 预算设大→答案发散,设小→遗漏关键信息。

Agent 自主性天生矛盾:LLM 越自主越容易幻觉,越约束越无能。Tool Call 节点即使没配工具,LLM 依然会尝试调用——它天生有”想干活”的倾向,会幻觉出不存在的工具名 → Tool not found → 无限重试。

thinking 质量天生矛盾:思维链越长推理越深,但延迟越高、成本越大。thinking_budget 是硬截断——达到上限直接掐断,不管你推理完没完。

Scaling Law 天生矛盾:模型越大能力越强——GPT-2(1.5B)到 GPT-3(175B)到 GPT-4,每次膨胀都带来智能跃迁。但训练成本从几万美元涨到几亿美元,推理延迟从毫秒涨到秒级。能力增长和成本增长是同一枚硬币的两面,从 Scaling Law 提出那天就注定了。

给 AI 写约束也是天生矛盾——规则的无限递归:你加约束 A(别幻觉工具名)→ 发现有工具时也得限制白名单,加 A1 → 发现不同模型对约束响应不一样,加 A1.1 → 发现 prompt 层不够还要 API 层兜底,加 B。每条规则都在暴露下一条规则的缺失——你以为在”完善规则”,实际是沿着矛盾的无限递归往下挖。矛盾不可能在规则层面被终结。

日常工程也一样:快速上线和保证质量永远互斥,安全合规和开发效率永远互斥。

启发:

第一句话对自己说:认知到这是客观规律,降低焦虑——矛盾不是你的系统做坏了,是这类系统本来就是如此。

第二句话对团队说:当出现”为什么参数不生效”时,可能不是谁错了——是系统各层的行为不一致,需要有人站出来翻译。AI 告诉你”这个参数没透传”,人告诉团队”这不是谁的错,是各层行为不一致,需要对齐”。前者是诊断,后者是翻译。诊断 AI 能做,翻译需要担当。这个翻译者就是决策者。这是人的主场。

概念 2:矛盾的特殊性——同一参数,不同场景需要不同值

“尤其重要的,成为我们认识事物的基础的东西,则是必须注意它的特殊点。”

thinking_budget 六档配置:

场景 thinking_budget 为什么是这个值
闲聊 500 不需要深度推理
RAG 检索 2K 靠外部知识回答,推理浅
RAG + MCP 8K 工具调用需要推理链
多智能体规划 16K Agent 拆解步骤需深度思考
极深推理链 32K 复杂多步逻辑推理
不确定 不限制 让模型自己判断

没有”最佳值”。 不能拿着一组参数到处套。RAG 场景设 32K = 浪费;多智能体场景设 500 = 不够。每个场景的矛盾特殊性不一样——闲聊场景质量和延迟的矛盾不尖锐,多智能体场景这个矛盾就非常突出。

同一类问题,也可以有不同答案——AI Agent 需要记忆,但”怎么记”没有标准答案:

策略 机制 适用场景
RAG 提问时检索,向量召回相关内容塞进 Prompt 海量文档(百万级)、高并发查询
LLM Wiki 录入时由模型归纳、链接,生成可读知识页面 团队知识沉淀(几十到几百篇)、低频查询

RAG 解决”海量文档快速检索”,LLM Wiki 解决”团队知识持续积累”。不是替代,是互补。 小团队知识库跟风上 RAG + 向量数据库就是杀鸡用牛刀——纯 Markdown + LLM Wiki 可能更聪明、更低成本。

同样的逻辑,Transformer 同一个架构分化出三条路:BERT(Encoder-only)专攻理解、GPT(Decoder-only)专攻生成、T5(Encoder-Decoder)专攻翻译。没有”最好”的架构,只有”适合你场景”的架构。

就连”把文本变成向量”这一个操作,Embedding 也没法通用:代码场景用 CodeBERT 或 text-embedding-3-large、中文语义用 bge-large-zh、多语言用 multilingual-e5。选错了模型,RAG 召回率直接掉一半——不是模型不好,是你的场景特殊性决定了该用哪一个。

启发:

警惕”最佳实践”陷阱。AI 领域今天出一个最佳实践明天就被打脸。具体场景具体分析——说起来简单,做到需要你真正理解”这个场景的特殊性在哪”。

面试时我常考察”你用过什么优化手段”——重要的不是手段本身,而是在什么场景下、为什么选这个。

AI 给你的是统计意义上的最优解——“大多数人在大多数场景下这样选”。你判断的是具体场景下的适配解——“我们这个场景有什么特殊性,为什么大多数人的选择不适用”。前者来自数据,后者来自判断。这是人的主场。

概念 3:主要矛盾与矛盾的主要方面——判断”这一次哪边更重”

“在复杂的事物的发展过程中,有许多的矛盾存在,其中必有一种是主要的矛盾。””矛盾着的两方面中,必有一方面是主要的,他方面是次要的。”

Demo 1:ToolCall 的自主性 vs 可控性

场景:Agent 没配工具,LLM 自己编了一个工具名去调用 → Tool not found,无限重试。

跨栈碰撞:产品说 Agent 越灵活越好,能自主判断调什么工具;后端说幻觉工具名导致线上报错,必须兜底。

判断矛盾主要方面——不同场景,主要方面不同:

场景 矛盾主要方面 理由
无 MCP 工具 可控性 没工具可用,自主性是假的,幻觉就是纯损失
有 MCP 工具 自主性为主,可控性兜底 列出白名单即可,不需要全禁
安全敏感场景 可控性压倒自主性 宁可不调工具,不能调错工具

具体解法:双层约束,按场景分强度——提示词层注入禁用声明(覆盖面广,弱约束)+ API 层 tool_choice: 'none' 强制禁用(精确打击,强约束)。两层都做,因为单层扛不住所有模型行为。

Demo 2:先跑通再合规——快速交付是主要矛盾

场景:分析工作台急着交付,SSO 认证接入卡住了。决策:先删除所有登录模块,免认证直接上线,认证改造代码完整存档。2 天交付,后续恢复 SSO,登录回归零损失。

关键判断:P0 阶段,快速交付是主要矛盾,合规认证是次要方面。”先跑通再合规”是刻意的策略选择,不是偷懒。认证是加回来容易的(可逆的),但业务跑不通才是真问题(不可逆的)。

Demo 3:rkhunter 替换 ClamAV——矛盾主要方面在实践中翻转

初始决策:等保要求恶意代码防范,全服务器部署 ClamAV 全量扫描。

矛盾暴露:ClamAV 加载 360 万病毒库需 1-2GB 内存,资源紧张的服务器触发 OOM Killer——扫着扫着容器被杀了。加了 --memory 限制后 oom_score_adj 反而更高、更容易被杀,因为 Docker 认为”你设了限制就是愿意被杀的”。

矛盾的主要方面在实践中翻转:

阶段 主要矛盾 矛盾主要方面 决策
最初 覆盖率 vs 资源消耗 覆盖率(等保要求全覆盖) ClamAV 全量部署
OOM 后 可部署性 vs 覆盖率 可部署性(服务器不能挂) 换成 rkhunter

为什么是 rkhunter 而不是 chkrootkit:chkrootkit 2014 年停更、现代内核误报高、等保审计风险,否决;rkhunter 30MB 内存、活跃维护、白名单支持、等保认可,选定。

最终架构——两者不是替代,是互补:全量服务器部署 rkhunter 做日常 rootkit 巡检(覆盖”入侵防范”)+ 保留 ClamAV 带内存限制作为等保材料(覆盖”恶意代码防范”)+ 某台真有感染时单台用 ClamAV 查杀——不作为日常扫描,作为按需武器。

判断:等保要的是”证据”不是”天天跑”。日常轻量扫描 + 按需深度查杀 = 两个矛盾的同一性。不是”选 A 还是选 B”,是”让它们各自做最擅长的事”。

Demo 4:行业的战略转型——主要矛盾变了

2023 年之前行业信条只有一个:堆参数、追能力(概念1 讲的 Scaling Law 矛盾就是它——能力越强成本越高)。GPT-4 之后能力够了,矛盾的主要方面悄然转移——不再是”能不能”,而是”贵不贵、快不快”。GPT-4o mini、Claude Haiku、DeepSeek 这批”小而强”模型成新战场,蒸馏技术把大模型能力压进小模型。

同一个行业,2023 年主要矛盾是”智能”,2025 年是”效率”。你要识别的不是”哪个模型好”,是这一年的主要矛盾是什么。

启发

做决策时先问自己:”在这个场景下,矛盾的主要方面是什么?” 不是永远站在固定的一端。P0 交付阶段速度优先,稳定运营阶段合规优先——上一轮的次要矛盾,换一个场景可能变成主要矛盾。 去年追 1.8T 参数是对的,今年追蒸馏小模型也是对的——因为主要矛盾变了。

AI 能帮你列出所有 trade-off——“速度 vs 安全、成本 vs 精度、覆盖率 vs 稳定性”。但它不会说”这一次,速度更重要,安全可以暂时让步”。优先级排序不只是逻辑,是对时机、压力、后果的综合感知。这是人的主场。

概念 4:矛盾的同一性——不是零和,是互相成就

“矛盾着的双方,依据一定的条件,各向着其相反的方面转化。”

Demo 1:自主性增强了,可控性反而更高

直觉上,Agent 越自主越难控制。实际上:

  • 自主性不够时:thinking_budget 设 500,推理不充分 → 规划质量差 → 人工频繁纠正 → 用户失去信任、绕过系统 → 可控性其实丧失了
  • 自主性给够时:设 16K,充分推理 → 自主规划正确 → 减少人工介入 → 系统更可靠 → 可控性反而增强了

这不是理论推导——线上 Agent 的 thinking_budget 从一刀切改为分档配置的过程,本质上就是在找”给多少自主性才能最大化可控性”的平衡点。

结论:自主性和可控性不是零和博弈。限制自主性来追求可控性,反而可能把系统推向更不可控的方向。好的设计让它们互相促进。

Demo 2:RAG + Fine-tuning——看似对立,实则互补

“该用 RAG 还是 Fine-tune 注入领域知识”?这个争论本身是伪命题:

看似 实则
RAG 管检索,Fine-tune 管训练,二者互斥 Fine-tune 给模型领域直觉(”这大概是什么类型的回答”),RAG 给模型实时数据(”具体这条信息是什么”)
选了 RAG 就不用 Fine-tune 1+1>2:Fine-tune 过的模型更懂怎么用 RAG 召回的结果

真正的矛盾同一性:两个看起来互斥的方案,组合使用能达到单方案达不到的效果。不是”选哪个”,是”怎么让它们互相成就”。

启发

不要只盯着对立面,要找同一性。好的设计方案经常是”看起来加了东西,实际上整体更简单了”。

AI 很难做到这一点:AI 擅长在给定框架内优化——“要快,给你最快的方案;要安全,给你最安全的方案”。但”两个都要”的第三条路,不是优化,是重新定义问题。这是人的主场。

概念 5:矛盾的斗争性——矛盾是进化的动力

“矛盾的斗争贯串于过程的始终,并使一过程向着他过程转化。”

Demo 1:Agent 通信进化——矛盾推动的范式跃迁

阶段 做法 矛盾
Prompt 夹带 工具描述拼进提示词,靠 LLM 自己理解 理解力够强 vs 输出不稳定、不可靠
Function Calling API 原生支持,输出结构化 JSON 各家 Schema 不统一(OpenAI/Google/Anthropic 各搞各的)
MCP 协议 标准化接口,Agent 和 Tool 之间的”USB-C 插座” 统一标准 vs 生态迁移成本

每代方案的矛盾被解决后,新的矛盾又冒出来。 Prompt 夹带的”不可靠”被 Function Calling 解决了,立即暴露”各家不互通”;MCP 解决了互通,现在又面临”生态迁移”。

这不是坏循环——是进化。矛盾永远不会消失,只会升级。你的价值就是识别当前阶段的矛盾在哪、推动它往下一阶段走。

Demo 2:深度学习架构演化——每次跃迁都是旧矛盾的爆发

架构 主要矛盾 为什么被淘汰
RNN 序列建模强 vs 无法并行(必须等上一步) 训练慢到不可接受,长序列直接跑不动
LSTM 解决短序列遗忘 vs 长距离依赖仍衰减 门控加了复杂度但没根本解决
CNN 局部特征好 vs 看不到全局关系 堆很多层才能扩大感受野,效率低
Transformer 并行计算 + 全局注意力 当前霸主,但 O(n²) 面对超长序列已是新矛盾

每次”淘汰”都是矛盾的质变:RNN 的并行矛盾 → LSTM 缓解未根治 → Transformer 用 Attention 彻底推翻。Transformer 现在的 O(n²) 矛盾,正在催生 Mamba、RWKV 等下一代架构。

没有终极架构,只有当前矛盾的暂时平衡。

启发

出问题不是坏事——是系统在告诉你矛盾在哪。运维的本质不是”灭火”,是让矛盾的张力推动系统迭代。 每次故障都是矛盾暴露的时刻,也是系统进化的机会。

AI 能帮你定位问题、生成修复方案——“这个报错改这行代码就好”。但它不会判断”这次故障是修完就完,还是该顺势推动架构升级”。AI 擅长回答”怎么修”,人决定”修完之后系统该往哪走”。这是人的主场。

概念 6:对抗性 vs 非对抗性——调参解决不了的要改结构

“不同质的矛盾,只有用不同质的方法才能解决。”

类型 AI 工程例子 解决方式
非对抗性 RAG 召回率 vs 精确率 设计层面平衡(Token 预算、ReRank)
非对抗性 thinking 质量 vs 延迟 场景分级配置
对抗性 LLM 幻觉本质(概率生成 vs 确定性要求) 调参解决不了,必须改架构(双层约束、外部校验)
对抗性 SSE 长连接 vs 网关超时(502) 不能靠”优化网络”,要改连接管理(状态机+重试+指数退避)
对抗性 Context Window”永远不够长” 从 4K→128K→1M,但用户永远会塞更多。扩窗口是调参;催生 RAG、MemGPT 等外部记忆方案才是改架构

Demo 1:CallerRunsPolicy 的教训

线程池拒绝策略从 CallerRunsPolicy 改为 AbortPolicy 后,偶然发现 Token 写入阻塞——CallerRuns 让调用线程自己执行被拒绝的任务,表面上”不丢任务”,实际上把慢调用线程堵死了。

判断:丢任务(Abort + 落补偿记录)vs 堵线程(CallerRuns 静默阻塞)——后者看起来”不丢数据”,实际是对抗性矛盾,调线程池大小解决不了,必须改策略。

Demo 2:AI 编程的新型屎山——调 prompt 解决不了

传统屎山是”一看就知道该重构了”;AI 写的代码单独看每个文件都很漂亮,但二十个文件放一起:同一个功能三种实现,同一个概念四个名字。这不是 prompt 问题,是结构性的——AI 的本质是”每次从零开始理解上下文”,等于 100 个只见过你一面的人轮流给你写代码:三天前的会话叫 event,今天的会话叫 eventNameEn,各自”局部最优”,拼起来就是命名漂移。

三类 AI 特有屎山:会话失忆型(同一概念在不同会话被赋予不同名字,局部都合理,全局精神分裂)、叠兼容补丁型(不修根因,在消费端一层层打兼容补丁,堆成大型 if-else)、无主代码型(代码有了,但”为什么这么写”的决策信息随窗口关闭丢失)。

为什么是对抗性:prompt 写得再好也解决不了跨会话一致性——AI 没有跨会话记忆。解法不在代码层在流程层,跟 ESLint 一样:流程硬约束——新建类前先 grep 已有命名、禁止兼容补丁优先统一源头、必须写”为何”注释。

Demo 3:AI 记忆系统为什么也救不了——“没有银弹”

有人问:Claude Memory、Agent 记忆、RAG 长期记忆,不能解决跨会话问题吗?能缓解,不能根除——和 Brooks 1986 年”No Silver Bullet”完全同构:记忆系统消除得了偶然复杂性(上次用了什么命名、选了哪个方案),消除不了本质复杂性(在那个时刻、面对那些约束、排除那些方案后,为什么是这个决定)。记忆存”纪要”,心智模型要”经历过”——纪要读一百遍,替代不了亲身参会的认知深度。

流程硬约束才是正解:不是让 AI 记住更多,是让人类能快速重建心智模型。

启发

判断力就体现在这里:你面对的问题是调参/改 prompt 能解决的(非对抗性),还是必须改架构/改流程的(对抗性)?把对抗性矛盾当非对抗性调——永远调不出来,因为路走错了。把非对抗性矛盾当对抗性改——过度设计,路走偏了。

这恰恰是 AI 替代不了程序员的地方:AI 能写代码、能生成方案,但它分不清当前面对的是偶然复杂性还是本质复杂性。它会用”再加一个兼容补丁”来应对命名漂移——因为它在自己的认知范围内找到了”最优解”。但人知道那是技术债。人的价值不是写代码比 AI 快,是知道什么时候代码背后的问题不是代码能解决的。 AI 看到 if (event == null) event = eventNameEn 会认为这是合法的防御性代码,人看到同一行会皱眉。皱眉不是能力,是问题意识——一种不请自来的警觉。这是人的主场。

收束:矛盾论给你的不是答案,是五个追问

每次面对决策时,问自己:

1
2
3
4
5
① 这个决策背后隐藏着什么矛盾?(找对立的双方,不是表面 trade-off)
② 当前场景下,矛盾的主要方面是什么?(判断"这一次哪边更重",不永远站一边)
③ 双方有没有同一性?(不是二选一,有没有第三条路)
④ 这是调参问题还是结构问题?(改 prompt 能解决,还是必须改架构/流程)
⑤ 实际生效了吗?(设了但没透传=没生效,名义≠实际,全链路验证是基本功)

程序员的不可替代性,不在写代码,在做判断

AI 能写代码、能生成方案、能替代大量”怎么做”。但——

判断矛盾的主要方面、找到场景化的平衡点、区分调参问题和结构问题、验证全链路实际生效——这些事,AI 替代不了。不是”暂时替代不了”,是结构上替代不了。

这不是智力差距。AI 的推理能力在持续进化,今天的”做不到”明天可能就能做到。但决策的前提不在模型参数里:

  • 你判断矛盾主要方面时,调用的不只是逻辑——是对这个系统线上历史的了解、对团队能力的评估、对业务压力的感知
  • 你找到第三条路时,用的不只是推理——是跨领域的经验迁移、对”看起来加了东西实际上更简单”这种反直觉路径的敏感
  • 你看到兼容补丁皱眉时,触发的不是模式匹配——是长期维护积累的审美直觉,一种不请自来的问题意识

这些输入源——现实感知、跨域经验、责任承担、主动探知——不在 AI 的上下文窗口里。不是 AI “不够聪明所以没有”,是结构上就没有。AI 只处理你描述的问题,人感知尚未被描述的问题。

没有银弹。 不管是 Brooks 1986 年的论断,还是今天的 AI 记忆系统——本质复杂性不会被任何单一技术消灭。矛盾的识别、权衡、转化、验证,需要人持续深入参与,发挥主观能动性。AI 可以写出代码,但写不出”面对这个矛盾,我选择站在这一边,因为——“后面的那个句号。

“等任务、听安排”的习惯,在职责面越来越宽的时代,是最大的职业风险。每个人都需要自己的决策思维。”会做判断”的人,AI 永远替代不了。

参考文献

  • 毛泽东《矛盾论》《实践论》(1937)
  • Yao et al., ReAct: Synergizing Reasoning and Acting in Language Models(2023)
  • Kaplan et al., Scaling Laws for Neural Language Models(2020)
  • Fred Brooks, No Silver Bullet — Essence and Accident in Software Engineering(1986)

本篇为整理稿,底稿形成于 2026-09 内部分享《从执行到决策——矛盾论视角下的 AI 工程实践》。


从执行到决策:矛盾论视角下的 AI 工程实践
https://blog.baoyanfudao.com/tech/从执行到决策:矛盾论视角下的AI工程实践/
作者
XuYafei
发布于
2026年10月15日
许可协议