一次上下文工程的真实实践:把系统从“靠经验运行”拉回到工程轨道

作者:痛风少年 发布时间: 2026-01-14 阅读量:1

在业务复杂度还不高的时候,系统往往可以靠“默认前提”顺畅运转。
但当业务模式、渠道和策略开始叠加,系统迟早会走到一个临界点:
所有问题都看起来像 bug,但实际上都是上下文问题。

这篇文章记录一次真实的上下文工程实践,完整复盘从“哪里出问题”到“如何落地”的全过程。

一、问题不是突然出现的

系统最早的问题并不严重。

同一套商品和库存,在不同销售通路下,偶尔会出现价格偏差;
某些边缘场景下,风险拦截和定价策略的命中结果不一致。

这些问题最初都被当成个例,通过补逻辑、加判断的方式被“修复”了。

直到有一天,我们发现一个现象:
同一个商品,在不同系统视角下,结论是完全不同的,而且都“有理有据”。

这已经不是简单的逻辑问题,而是系统对“当前所处语境”的理解彻底不一致。

二、一次失败的常规重构

第一反应是做一次常规重构:

  • 梳理逻辑分支

  • 合并重复代码

  • 抽象公共方法

结果是代码更“干净”了,但问题并没有消失。

原因很快变得清晰:
我们只是在优化计算方式,而没有触碰计算前提本身

上下文依旧分散在:

  • 方法参数里

  • 配置中心里

  • 表字段的隐含含义中

  • 以及几位核心同学的脑海里

系统仍然在一个模糊前提下运行。

三、真正的转折点:把“前提”当作一等公民

转折发生在一次问题复盘会上。

我们尝试用一句话描述某次异常计算的前提,却发现没人能完整说清:

  • 到底是哪个业务模式

  • 适用的是哪套规则

  • 风控是在什么阶段介入的

这次讨论最终达成了一个共识:
系统缺的不是逻辑,而是一个被工程化管理的上下文。

从这一刻开始,我们不再讨论“怎么改逻辑”,而是先回答一个问题:
一次决策,究竟依赖哪些前提?

四、上下文拆解的真实过程

上下文拆解并不是一开始就很顺利。

我们最初列出的上下文信息超过 40 项,其中相当一部分是重复或语义模糊的。

经过多轮收敛,最终保留了几类核心上下文:

  • 不可变事实:商品属性、货品状态、基础成本

  • 场景信息:渠道、业务模式、生命周期阶段

  • 决策目标:当前关注的是利润、周转还是风险

  • 运行态信息:库存、流量、实时风险信号

一个重要原则是:
只要会影响决策结果,就必须显式进入上下文。

五、上下文对象的落地方式

在工程实现上,我们做了几个关键约束:

  • 上下文对象在决策前一次性构建

  • 决策过程只读上下文,不允许再查询外部状态

  • 上下文具备清晰的构造入口和版本演进能力

这意味着,很多过去“顺手查一下”的逻辑,被强制前移到上下文构造阶段。

短期看,代码写起来更“麻烦”了;
但长期看,系统行为开始变得可预测、可解释

六、最明显的变化:分支开始消失

引入上下文工程后,一个非常直观的变化是:

if/else 数量开始减少,而不是增加。

过去新增一个场景,往往意味着:

在已有逻辑上加一层判断

现在新增场景的方式变成了:

构造一个新的上下文组合,复用既有策略

逻辑代码只关心上下文满足哪些条件,而不关心“这是哪个业务线”。

七、一次真实的收益场景

在一次促销策略调整中,业务提出临时新增一种混合模式。

按照旧模式,这类需求通常意味着高风险改动;
而这次,只是新增了一种上下文组合方式,策略本身几乎未改。

最终上线过程平稳,没有引发历史场景回归问题。
这是团队第一次明确感受到:
上下文工程不是洁癖,而是真正的风险控制手段。

八、与 AI 协同的意外收获

后来在引入 AI 辅助定价和风险分析时,这套上下文体系直接成为了输入标准。

我们没有要求 AI 去理解复杂业务,而是只让它面对已经结构化好的上下文。

结果是:

  • 输出稳定性显著提升

  • 结果更容易解释和复盘

  • 人工干预成本明显下降

这让我们更加确信:
AI 能否靠谱,前提是上下文是否靠谱。

九、踩过的坑

这次实践也并非一帆风顺:

  • 上下文粒度过细,初期导致构造成本过高

  • 部分历史逻辑对上下文依赖不清,重构成本被低估

  • 团队需要时间适应“先想上下文,再写逻辑”的方式

这些问题最终都通过持续收敛和约束解决,但确实需要耐心。

十、最后的思考

回头看,这次上下文工程并没有引入新技术,也没有复杂框架。
它更像是一种“工程认知升级”。

系统真正成熟的标志,不是逻辑有多复杂,而是:
它是否清楚自己所处的环境,以及为什么会做出当前决策。

如果你的系统已经开始依赖“老同学经验”才能安全运行,
那很可能不是人不够努力,而是上下文还没有被工程化。

这,往往是下一次系统进化的起点。