1. 从概念到生产:Jev 到底在解决什么问题
第一次听到“Jev”这个词,是在一个做智能客服系统的朋友嘴里。他当时正被一套规则引擎折磨得死去活来——业务方每天改需求,决策树越画越乱,上线之后还经常出现“同一个用户在不同入口得到不同答案”的诡异情况。他跟我说:“我需要一个能自己学、能解释、还能扛住生产流量的决策系统,不是那种跑在笔记本上的玩具。”
这就是 Jev 这类 AI 决策系统出现的背景。它不是又一个“把模型包成 API”的简单封装,而是一套从概念验证到生产部署的完整技术架构。核心目标很明确:让决策逻辑从“人写规则”变成“数据驱动+模型推理”,同时保证决策过程可追溯、可干预、可回滚。
你可能会问,这和传统的推荐系统、风控引擎有什么区别?区别在于“决策”这个词的权重。推荐系统关心的是排序和点击率,风控引擎关心的是拦截和通过,而 Jev 这类系统关心的是“在多个约束条件下,选择最优动作”。这个动作可能是一次营销触达、一次资源调度、一次定价调整,甚至是一次内容推荐。它的输出不是分数,而是带有置信度和解释的决策结果。
适合谁来参考这篇内容?如果你正在做以下任何一件事,这篇东西应该能帮到你:第一,你手里有一堆业务规则,维护成本已经超过收益;第二,你尝试过用机器学习模型做决策,但发现模型上线后业务方不敢用,因为“不知道它为什么这么选”;第三,你已经在用某个决策引擎,但性能或者扩展性遇到了瓶颈;第四,你单纯想了解下一代 AI 决策系统的架构长什么样,提前做技术储备。
我接下来会从整体设计思路、核心模块拆解、实操落地步骤、常见坑和排查方法四个维度,把 Jev 从概念到生产的完整路径讲清楚。所有内容基于我对这类系统的理解和实际项目经验,不涉及任何特定平台的内部实现,你可以直接拿去对照自己的场景做适配。
2. 整体架构设计与核心思路拆解
2.1 为什么是“决策层”而不是“模型层”
很多团队做 AI 决策系统,第一反应是先把模型训好。这个思路不能说错,但很容易掉进一个陷阱:模型指标很漂亮,上线之后业务方不买账。原因很简单,业务方要的不是一个概率值,而是一个“可执行的决策”。概率值到决策之间,还隔着阈值设定、规则兜底、多目标权衡、冷启动处理、异常降级这一大堆事情。
Jev 的架构设计把“决策层”作为核心,模型层只是其中一个输入源。决策层负责的事情包括:接收上下文特征、调用一个或多个模型或规则、根据策略配置做融合、输出最终动作、记录决策日志、支持人工干预和回滚。这样做的好处是,模型可以换、规则可以改、策略可以调,但决策层的接口和日志格式保持稳定。业务方看到的是一个统一的决策结果,而不是一堆散乱的模型输出。
我见过太多团队把模型直接暴露给业务方,结果每次换模型都要改业务代码,每次调阈值都要重新联调。Jev 这种分层思路,本质上是用工程手段把“决策”这件事产品化。你可以把它理解成一个“决策操作系统”,模型和规则是上面的应用,决策层是内核。
2.2 核心模块划分与数据流向
一套完整的 Jev 类系统,从概念到生产,通常包含以下六个核心模块。我按数据流向的顺序来说,这样你更容易理解它们之间的关系。
第一个模块是上下文接入层。它负责接收来自业务系统的请求,提取决策所需的特征。这些特征可能来自实时流、离线数仓、缓存、外部 API,甚至人工输入。接入层的关键设计点是“特征契约”——每个特征必须有明确的名称、类型、来源、更新频率和缺失处理策略。没有契约,后面全是坑。
第二个模块是决策编排层。这是整个系统的大脑。它根据配置好的决策流,依次调用规则引擎、模型服务、外部工具,最后汇总成一个决策结果。编排层通常支持条件分支、并行调用、超时控制、重试策略和降级方案。你可以用 DAG 来描述决策流,也可以用状态机,关键是让业务方能看懂、能修改。
第三个模块是模型与规则服务。模型服务负责加载和推理机器学习模型,规则服务负责执行专家规则。两者在编排层看来都是“可调用的决策单元”,输入是特征,输出是分数或标签。模型服务需要支持热更新、版本管理和 A/B 测试;规则服务需要支持动态加载、优先级管理和冲突检测。
第四个模块是策略配置中心。所有决策逻辑的配置都放在这里,包括阈值、权重、分支条件、兜底策略、灰度比例等。配置中心的核心要求是“变更可追溯、可回滚、可审计”。每次配置变更都要记录谁改的、改了什么、什么时候生效、影响范围是什么。
第五个模块是决策日志与监控。每一次决策请求都要记录完整的输入特征、调用的模型和规则、中间结果、最终决策、耗时和异常信息。这些日志一方面用于排查问题,另一方面用于离线分析和模型迭代。监控指标包括决策量、延迟分布、异常率、模型调用成功率、规则命中率等。
第六个模块是反馈与迭代闭环。决策结果产生之后,业务系统会返回实际效果,比如用户是否点击、是否转化、是否投诉。这些反馈数据回流到训练管道,用于更新模型和调整策略。没有闭环的系统,上线即巅峰,之后只会越来越差。
2.3 技术选型背后的取舍逻辑
在技术选型上,Jev 类系统有几个关键决策点,我逐个说下我的理解和实际项目中的取舍。
决策编排用 DAG 还是状态机?DAG 适合表达“多个步骤并行执行、最后汇总”的场景,比如同时调用风控模型、推荐模型和规则引擎,然后加权融合。状态机适合表达“根据上一步结果决定下一步”的场景,比如先查黑名单,命中就直接拒绝,没命中再走模型评分。实际项目中,我倾向于用 DAG 做外层编排,用状态机做内部分支。这样既保留了并行能力,又支持复杂的条件逻辑。
模型服务用自研还是开源?如果团队规模不大,我建议直接用开源方案,比如把模型封装成 gRPC 服务,用容器化部署。自研模型服务听起来很酷,但你要处理模型加载、内存管理、并发控制、版本切换、GPU 调度这一大堆问题,投入产出比不高。除非你有非常特殊的性能要求,否则没必要重复造轮子。
规则引擎用 Drools 还是自己写?Drools 功能强大,但学习曲线陡峭,而且和业务系统的集成成本不低。如果规则数量在几百条以内,我建议用配置化的方式自己实现一个轻量级规则引擎,把规则写成 JSON 或 YAML,用解释器执行。这样业务方容易理解,开发维护也简单。规则数量上千之后,再考虑引入专业规则引擎。
配置中心用 etcd、Apollo 还是数据库?如果只是存配置,数据库加缓存就够了。但如果你需要配置变更实时推送、灰度发布、版本回滚,那就需要专门的配置中心。Apollo 在国内用得比较多,etcd 更适合基础设施层面的配置。我的经验是,决策策略配置和基础设施配置分开管理,不要混在一起。
日志存储用 Elasticsearch 还是 ClickHouse?决策日志的特点是写入量大、查询模式固定、需要按时间范围聚合。ClickHouse 在这种场景下性能优势明显,压缩率也高。Elasticsearch 更适合全文检索和灵活查询。如果预算允许,我建议用 ClickHouse 存决策日志,用 Elasticsearch 存异常和调试日志。
3. 核心细节解析与实操要点
3.1 特征契约的设计与落地
特征契约是 Jev 系统里最容易被忽视、但影响最大的东西。我见过一个项目,因为特征命名不统一,同一个“用户活跃度”在三个模块里有三种计算方式,导致决策结果前后矛盾,排查了整整一周才发现问题。
特征契约至少包含以下字段:特征名称、特征类型、数据来源、更新频率、缺失值处理策略、取值范围、负责人。我通常用一个 YAML 文件来管理所有特征契约,放在代码仓库里,任何变更都要走 PR 审核。这样做的好处是,特征定义和代码一起版本化,不会出现“线上特征和文档不一致”的情况。
feature_name: user_active_score feature_type: float source: offline_dw.user_profile update_frequency: daily missing_strategy: fill_with_zero value_range: [0, 100] owner: data_team description: 用户过去30天活跃度综合评分缺失值处理策略需要特别注意。有些特征缺失代表“未知”,有些代表“没有发生”,有些代表“数据延迟”。这三种情况的处理方式完全不同。比如“用户最近一次购买金额”缺失,可能是新用户从未购买,也可能是数据同步延迟。前者应该填充为 0,后者应该走降级策略或者等待数据到达。我通常会在特征契约里明确标注缺失原因,并在决策编排层做差异化处理。
3.2 决策编排的 DAG 设计与超时控制
决策编排的核心是 DAG 设计。一个典型的决策流可能包含以下节点:特征获取、黑名单检查、规则过滤、模型评分、多模型融合、阈值判断、兜底策略、结果输出。每个节点都有输入、输出、超时时间和失败处理策略。
超时控制是生产环境的关键。我见过一个系统,因为某个外部 API 超时没有处理,导致整个决策链路阻塞,最终拖垮了上游业务。正确的做法是给每个节点设置独立的超时时间,并且定义超时后的降级行为。比如模型评分超时,可以降级到规则引擎的默认策略;黑名单检查超时,可以降级到“放行但记录日志”。
# 决策节点配置示例 decision_node = { "name": "risk_model_score", "type": "model", "timeout_ms": 200, "retry": 1, "fallback": "rule_based_default", "input_features": ["user_age", "transaction_amount", "device_risk_score"], "output_key": "risk_score" }并行调用的节点需要设置整体超时,而不是只设置单个节点超时。比如同时调用三个模型,整体超时 500ms,那么每个模型的实际可用时间可能只有 300ms 左右,因为还要留出融合和输出的时间。这个时间预算需要在设计阶段就算清楚,不能等到上线后才发现延迟超标。
3.3 模型热更新与版本管理
模型热更新是生产环境的刚需。业务方不可能接受“每次换模型都要重启服务”。实现热更新的方式有几种:第一种是用共享内存加载模型,通过信号触发重新加载;第二种是用 sidecar 模式,模型服务独立部署,通过服务发现做版本切换;第三种是用模型注册中心,决策编排层根据配置动态选择模型版本。
我倾向于第二种和第三种结合:模型服务独立部署,每个版本一个实例组,决策编排层通过配置中心获取当前生效的模型版本,然后路由到对应的实例组。这样做的好处是版本切换对编排层透明,回滚也方便,只需要改配置就行。
版本管理需要记录每个模型版本的训练数据范围、评估指标、上线时间、下线时间、负责人。我通常会在模型注册中心里维护一张表,每次模型上线都要更新。这张表在排查问题时非常有用,比如发现某个时间段决策质量下降,可以快速定位到是不是模型版本切换导致的。
3.4 策略配置的灰度与回滚机制
策略配置的变更比代码变更更频繁,也更危险。一个阈值改错了,可能导致大量误判。所以策略配置必须支持灰度发布和快速回滚。
灰度发布的实现方式通常是按用户 ID 哈希、按流量比例、按业务线维度做分流。比如新策略先对 1% 的用户生效,观察核心指标没有异常后,再逐步扩大到 10%、50%、100%。灰度期间需要对比新旧策略的决策分布、业务指标和异常率。
回滚机制的关键是“配置版本化”。每次配置变更都生成一个新版本,旧版本保留。回滚时只需要把生效版本指回旧版本,不需要重新编辑配置。我见过一个团队用数据库存配置,每次变更直接 update 原记录,结果回滚时找不到旧值,只能凭记忆恢复,非常危险。
-- 配置版本表设计 CREATE TABLE decision_config ( id BIGINT PRIMARY KEY, config_key VARCHAR(128), config_value TEXT, version INT, status ENUM('draft', 'gray', 'active', 'rolled_back'), created_by VARCHAR(64), created_at TIMESTAMP, activated_at TIMESTAMP );4. 从零到一:实操过程与核心环节实现
4.1 环境准备与基础服务搭建
假设你现在要从零搭建一套 Jev 类系统,我按实际项目中的顺序来说。第一步不是写代码,而是把基础服务准备好。你需要的东西包括:一个配置中心、一个模型服务框架、一个规则引擎、一个日志存储、一个监控系统。
配置中心我推荐用 Apollo 或者 Nacos,两者都支持配置变更推送和版本管理。模型服务框架可以用 TensorFlow Serving、TorchServe 或者自己用 FastAPI 封装。规则引擎如果规则不多,可以用 Python 的business-rules库或者自己写一个简单的解释器。日志存储用 ClickHouse 或者 Elasticsearch。监控用 Prometheus + Grafana。
环境准备阶段最容易踩的坑是“版本兼容性”。比如 TensorFlow Serving 的版本和模型训练时的版本不一致,导致加载失败。我的经验是,把所有基础服务的版本号写在一个requirements.txt或者docker-compose.yml里,用容器化部署,确保开发、测试、生产环境一致。
4.2 决策流的配置与调试
决策流配置是 Jev 系统的核心工作。我通常用一个 JSON 文件来描述整个决策流,包含节点定义、连线关系、条件分支和兜底策略。下面是一个简化版的示例。
{ "decision_flow": "loan_approval", "nodes": [ { "id": "feature_fetch", "type": "feature", "features": ["user_age", "income", "credit_score"], "next": "blacklist_check" }, { "id": "blacklist_check", "type": "rule", "rule_set": "blacklist_rules", "on_hit": "reject", "on_miss": "model_score" }, { "id": "model_score", "type": "model", "model_name": "loan_risk_model", "model_version": "v3", "timeout_ms": 300, "next": "threshold_check" }, { "id": "threshold_check", "type": "condition", "condition": "risk_score < 0.3", "on_true": "approve", "on_false": "manual_review" } ], "fallback": "manual_review" }调试决策流的时候,我建议先用手工构造的测试用例跑通全流程,再用历史数据做回放测试。回放测试可以发现很多边界问题,比如特征缺失、模型超时、规则冲突等。我通常会用一周的历史数据做回放,对比新旧决策流的决策差异,人工抽查差异较大的案例,确认是否符合预期。
4.3 模型接入与推理优化
模型接入的关键是“标准化”。不管你是用 TensorFlow、PyTorch 还是 XGBoost,最终都要封装成统一的推理接口。输入是特征字典,输出是分数或标签。我通常会用 gRPC 做推理接口,因为性能比 HTTP 好,而且支持流式传输。
推理优化有几个方向:第一,特征预处理尽量放在模型服务内部,减少网络传输;第二,批量推理,把多个请求合并成一个 batch,提高 GPU 利用率;第三,模型量化,用 FP16 或者 INT8 减少显存占用和推理时间;第四,缓存高频请求的结果,比如同一个用户的多次决策请求,如果特征没变,可以直接返回缓存结果。
# 批量推理示例 def batch_predict(features_list): batch = preprocess(features_list) with torch.no_grad(): outputs = model(batch) return postprocess(outputs)实测下来,批量推理能把 GPU 利用率从 30% 提升到 70% 以上,延迟反而降低,因为减少了 kernel launch 次数。但批量大小需要调优,太大反而会增加延迟。我通常从 16 开始试,逐步增加到 64 或 128,观察延迟和吞吐的变化。
4.4 决策日志的采集与分析
决策日志是排查问题和迭代优化的基础。每条日志至少包含:请求 ID、用户 ID、时间戳、输入特征、调用的模型和规则、中间结果、最终决策、耗时、异常信息。日志格式建议用 JSON,方便后续解析和分析。
采集方式可以用 Kafka 做缓冲,然后写入 ClickHouse。Kafka 的好处是解耦,决策服务只管发消息,不用关心存储。ClickHouse 的写入性能很好,单机每秒可以写入几十万条日志。查询的时候按时间范围和用户 ID 过滤,速度也很快。
分析决策日志的时候,我通常关注几个指标:决策分布是否合理、模型调用成功率、规则命中率、延迟 P99、异常率。如果发现某个模型的调用成功率突然下降,可能是模型服务出问题了;如果某个规则的命中率异常升高,可能是特征数据出了问题。
5. 常见问题与排查技巧实录
5.1 决策结果不一致的排查思路
决策结果不一致是生产环境最常见的问题之一。同一个用户,同样的输入,两次决策结果不同。可能的原因有:特征数据不一致、模型版本不一致、规则配置不一致、缓存不一致、并发竞争。
排查的时候,我通常按以下顺序来:第一,对比两次决策的完整日志,看输入特征是否一致;第二,检查模型版本是否一致;第三,检查规则配置是否一致;第四,检查是否有缓存,缓存是否过期;第五,检查是否有并发写入导致的状态不一致。
我遇到过最隐蔽的一次是特征数据不一致。原因是特征服务有两个实例,一个连的是主库,一个连的是从库,主从延迟导致两次请求读到的特征值不同。解决办法是特征服务统一读主库,或者用版本号做一致性校验。
5.2 模型推理超时的降级策略
模型推理超时在生产环境很常见,尤其是模型比较复杂或者 GPU 资源紧张的时候。降级策略的设计原则是“宁可给一个保守的决策,也不要阻塞整个链路”。
常见的降级策略有:返回默认分数、切换到轻量级模型、切换到规则引擎、直接走人工审核。选择哪种策略取决于业务场景。比如风控场景,超时后应该走保守策略,宁可误拦也不要放过;推荐场景,超时后可以返回热门内容,保证用户体验。
降级策略需要配置化,不能硬编码。我通常会在决策编排层定义一个fallback节点,当主节点超时或失败时,自动路由到 fallback 节点。fallback 节点的逻辑可以很简单,比如返回一个固定分数,或者调用一个轻量级规则。
5.3 规则冲突与优先级管理
规则冲突是规则引擎的经典问题。比如两条规则,一条说“用户年龄大于 60 岁,拒绝”,另一条说“用户信用分大于 800,通过”。如果一个用户同时满足这两个条件,应该听谁的?
解决办法是给规则设置优先级。优先级高的规则先执行,命中后直接返回,不再执行后续规则。优先级的设定需要业务方参与,不能由技术人员拍脑袋决定。我通常会把规则分成几个层级:硬性规则(如黑名单)、强规则(如年龄限制)、弱规则(如信用分加分)。硬性规则优先级最高,强规则次之,弱规则最低。
规则冲突的检测可以在配置阶段做。比如两条规则的条件有重叠,且动作相反,就应该报警。我通常会在规则配置中心加一个冲突检测模块,每次保存规则时自动检查。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 决策结果不一致 | 特征数据不一致 | 对比两次决策日志的输入特征 | 统一特征读取源,加版本校验 |
| 决策延迟突然升高 | 模型推理超时 | 查看模型服务监控和日志 | 增加超时降级,优化模型推理 |
| 规则命中率异常 | 特征数据异常 | 检查特征分布和缺失率 | 修复特征管道,加数据质量监控 |
| 配置变更不生效 | 缓存未刷新 | 检查配置中心推送日志 | 加缓存过期时间,手动刷新 |
| 模型加载失败 | 版本不兼容 | 检查模型文件和框架版本 | 统一训练和推理环境版本 |
| 日志丢失 | Kafka 积压 | 检查 Kafka 消费延迟 | 增加消费者,扩容 ClickHouse |
5.5 实操心得与避坑建议
第一个心得是“先跑通再优化”。很多团队一开始就追求高性能、高可用,结果架构设计得很复杂,半年都上不了线。我的建议是先用最简单的方案跑通全流程,哪怕 QPS 只有 10,哪怕延迟 1 秒,先让业务方看到效果,然后再逐步优化。
第二个心得是“日志要全,但不要什么都记”。决策日志要记录关键信息,但不要把整个特征向量都记下来,那样存储成本太高。我通常只记录决策相关的特征和中间结果,原始特征如果需要,可以通过请求 ID 去特征服务查。
第三个心得是“灰度发布是保命符”。任何策略变更、模型更新、规则调整,都要走灰度。我见过太多因为直接全量上线导致的事故。灰度比例从 1% 开始,观察至少一个业务周期,确认没问题再扩大。
第四个心得是“业务方参与配置”。决策系统的配置不应该由技术人员独占。业务方最了解业务规则,让他们参与配置和审核,能减少很多沟通成本和误判。我通常会给业务方提供一个简单的配置界面,让他们自己调整阈值和规则,技术人员只负责审核和上线。
第五个心得是“定期做决策回放”。用历史数据回放决策流,对比新旧策略的差异,可以发现很多潜在问题。我通常每个月做一次全量回放,抽查差异案例,确认决策质量没有下降。
6. 生产环境部署与性能调优
6.1 容器化部署与资源规划
生产环境部署我推荐用 Kubernetes,因为决策服务通常需要弹性伸缩。资源规划的关键是“按峰值预留,按均值调度”。决策服务的 QPS 波动可能很大,比如电商大促期间是平时的几十倍。如果按峰值配置资源,平时浪费太多;如果按均值配置,峰值时扛不住。
我的做法是用 HPA(Horizontal Pod Autoscaler)做自动伸缩,同时设置一个最小副本数保证可用性。模型服务因为加载模型需要时间,伸缩速度比较慢,所以需要提前预热。我通常会在预测到流量高峰之前,手动扩容模型服务,或者用定时伸缩策略。
资源分配上,决策编排层是 CPU 密集型,模型服务是 GPU 密集型,规则引擎是内存密集型。需要根据实际负载做差异化配置。我通常会给决策编排层分配 2-4 核 CPU,模型服务分配 1 块 GPU,规则引擎分配 4-8GB 内存。
6.2 缓存策略与性能优化
缓存是提升决策性能最有效的手段之一。但缓存用不好,会导致决策结果不一致。我的原则是“只缓存幂等的决策结果”。也就是说,同样的输入,同样的配置,决策结果应该是一样的。如果决策依赖实时数据或者随机因素,就不应该缓存。
缓存层级可以分几层:第一层是本地缓存,用 Caffeine 或者 Guava,缓存高频请求的结果;第二层是分布式缓存,用 Redis,缓存跨实例共享的结果;第三层是特征缓存,缓存特征服务的查询结果,减少对后端存储的压力。
缓存过期时间需要根据业务特点设定。比如用户画像特征,可以缓存几小时;实时交易特征,只能缓存几秒。我通常会在特征契约里标注每个特征的缓存策略,然后在特征服务里统一实现。
6.3 监控告警与容量规划
监控告警是生产环境的眼睛。我通常关注以下几类指标:业务指标(决策量、通过率、拒绝率)、性能指标(延迟 P50/P95/P99、QPS、错误率)、资源指标(CPU、内存、GPU、网络)、依赖指标(模型服务、特征服务、配置中心的可用性)。
告警阈值需要根据历史数据设定。比如延迟 P99 平时是 200ms,那告警阈值可以设 500ms。错误率平时是 0.1%,告警阈值可以设 1%。告警要分级,P0 告警直接打电话,P1 告警发消息,P2 告警记录工单。
容量规划需要定期做。我通常每季度做一次压测,模拟峰值流量,观察系统瓶颈。压测的时候要逐步增加 QPS,直到系统出现瓶颈,记录此时的 QPS 和延迟。然后根据业务增长预测,提前扩容。
7. 迭代闭环与持续优化
7.1 反馈数据的采集与回流
决策系统上线只是开始,真正的价值在于持续迭代。反馈数据的采集是迭代的基础。反馈数据包括:决策结果是否被执行业务动作、业务动作的实际效果、用户的显式反馈(如投诉、点赞)、系统的隐式反馈(如超时、降级)。
采集方式通常是在业务系统里埋点,把决策 ID 和业务结果关联起来。比如决策是“给用户推荐商品 A”,业务结果是“用户点击了商品 A”,这两个信息通过决策 ID 关联,形成一条完整的反馈记录。
反馈数据回流到训练管道,用于更新模型和调整策略。回流频率取决于业务周期。电商场景可能每天回流一次,金融风控场景可能每周回流一次。回流的时候要注意数据质量,过滤掉异常和噪声数据。
7.2 模型迭代与策略调优
模型迭代的流程通常是:收集新数据、重新训练、离线评估、A/B 测试、全量上线。离线评估的指标包括 AUC、KS、准确率、召回率等。但离线指标好不代表线上效果好,所以 A/B 测试是必须的。
A/B 测试的设计要注意几点:第一,分流要随机,避免选择偏差;第二,样本量要足够,保证统计显著性;第三,测试周期要覆盖完整的业务周期,比如至少一周;第四,除了核心指标,还要观察护栏指标,比如延迟、错误率、用户投诉率。
策略调优更多依赖业务经验和数据分析。比如阈值调整,可以通过分析决策分布和业务效果,找到最优阈值。我通常会用网格搜索或者贝叶斯优化来寻找最优参数组合,但最终决策还是要结合业务判断。
7.3 决策系统的长期维护
决策系统的长期维护需要建立一套规范。包括:配置变更流程、模型上线流程、规则审核流程、故障处理流程、容量规划流程。每个流程都要有明确的负责人和操作步骤。
配置变更流程我通常要求:提交变更申请、技术审核、业务审核、灰度发布、全量发布、效果观察。模型上线流程类似,但多了离线评估和 A/B 测试环节。规则审核流程重点是冲突检测和优先级确认。
故障处理流程要定义清楚不同级别故障的响应时间和处理方式。P0 故障要求 5 分钟内响应,30 分钟内恢复;P1 故障要求 30 分钟内响应,2 小时内恢复。每次故障之后要做复盘,记录原因、影响、处理过程和改进措施。
我在实际项目中体会最深的一点是,决策系统的价值不在于技术多先进,而在于能不能持续产生正确的决策。一个用简单规则实现的决策系统,如果规则准确、迭代及时,可能比一个用深度学习模型但没人敢用的系统更有价值。所以从概念到生产,最重要的不是架构多复杂,而是能不能形成“决策-反馈-迭代”的闭环。这个闭环转起来了,系统就会越用越准;转不起来,再先进的模型也只是摆设。