ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI Engineering从零构建:用契约驱动替代黑盒堆叠

AI Engineering从零构建:用契约驱动替代黑盒堆叠 1. 这不是“搭积木”而是重建AI系统的地基“AI Engineering from Scratch”——看到这个标题很多人第一反应是“又要从零写Transformer是不是得先手推反向传播”其实完全不是。我带过六支AI工程团队做过金融风控模型平台、工业质检流水线、医疗影像标注中台踩过所有能踩的坑。所谓“from scratch”根本不是指从汇编语言开始造芯片而是放弃现成的黑盒框架封装亲手定义数据流边界、决策责任归属、故障回滚粒度、监控指标语义。它解决的不是“能不能跑通”而是“出问题时你敢不敢拍着胸脯说‘这锅我背’”。核心关键词ai-engineering和from-scratch必须拆开理解前者是工程范式后者是实施姿态。AI Engineering 的本质是把模型训练、部署、监控、迭代这一整条链路当成和数据库事务、HTTP服务、K8s调度一样可设计、可测试、可审计的软件系统来对待而 from scratch则意味着拒绝直接套用 MLflow 的 experiment tracking、拒绝无脑上 SageMaker Pipelines、拒绝把 Prometheus metric 当成“AI可观测性”的全部答案。我去年重构一家物流公司的路径优化引擎时团队最初用的是 Hugging Face FastAPI Redis 缓存的“标准栈”上线三个月后业务方提了17个模糊需求“预测不准的时候能不能告诉我哪条路被低估了”“为什么昨天调参后整体准度下降了0.3%但A仓没变B仓暴跌”——这些问法暴露的正是黑盒堆叠带来的责任真空。适合谁来读如果你是刚从算法岗转岗的工程师还在为“模型上线后没人管”发愁如果你是技术负责人发现MLOps工具链越买越多但线上事故复盘会却越来越难开如果你是数据科学家厌倦了每次重训模型都要求运维改配置、等审批、手动拷权重文件——那这篇就是为你写的。它不教你怎么调 learning rate但会告诉你为什么一个 batch size 的变更必须同步触发数据校验规则重编译为什么 model card 不该是PDF文档而该是可执行的 schema 验证器为什么“模型版本”这个词在工程语境下必须拆解成 data version、feature version、train code version、inference code version 四个独立可追踪实体。这不是理论空谈后面每一步我都用真实产线代码、配置片段、监控截图和故障日志来佐证。2. 为什么必须抛弃“端到端Pipeline”幻觉2.1 工程化的核心矛盾确定性 vs 概率性传统软件工程的基石是确定性输入A经过明确逻辑B必然输出C。而AI系统天然携带概率性噪声——同样的输入模型可能给出不同置信度的输出同样的训练数据随机种子不同收敛路径就不同。很多团队试图用“端到端Pipeline”掩盖这个矛盾比如用 Airflow 调度一个 DAG上游跑数据清洗 → 中间跑模型训练 → 下游跑模型评估 → 最后自动部署。表面看很流畅但实际一出问题就崩盘。我见过最典型的案例某电商推荐系统凌晨三点报警CTR 下降12%。运维查 Airflow 日志显示所有 task status 都是 green算法查 MLflow显示 latest model 的 test AUC 是0.89比上一版还高0.02SRE 查 K8s eventpod 全部 running。最后花六小时定位到上游数据清洗脚本里一个日期解析函数在跨月时少加了一天导致特征时间戳偏移24小时但模型评估用的 test set 是静态的根本没覆盖这个case。问题不在模型不在部署而在数据契约data contract的缺失。这就是“from scratch”的第一个硬核动作把Pipeline拆解成有明确输入/输出契约、可独立验证、可单独替换的原子单元。不是“训练Pipeline”而是“特征生成服务”、“模型训练作业”、“在线推理服务”、“离线评估任务”四个独立实体。它们之间不靠 DAG 依赖而靠版本化数据契约连接。比如“特征生成服务”输出一个 Parquet 文件其 schema 必须严格符合feature_contract_v1.2.json“模型训练作业”启动前必须校验该 schema 版本与自身代码兼容性矩阵“在线推理服务”加载模型时必须验证模型 metadata 中声明的 feature version 是否匹配当前请求特征的实际 version。这种设计让每个环节都能独立演进、独立压测、独立回滚。我们给某银行做的反欺诈模型平台就强制要求所有特征服务输出带 version tag 的 Delta Lake 表schema 变更必须走 RFC 流程任何不兼容变更都触发全链路 regression test。上线一年因数据问题导致的线上事故归零。2.2 “黑盒集成”为何必然失败另一个常见误区是把开源模型当乐高积木拼。比如用 Sentence-BERT 做语义相似度再接一个 LightGBM 做最终打分。看起来很美但工程上灾难重重。问题出在接口语义失配BERT 输出的是 768 维 float32 向量LightGBM 输入的是结构化特征表。中间那个“向量转特征”的胶水层往往是一段临时写的 numpy 代码没有类型检查、没有异常处理、没有性能压测。某社交平台曾因此出现过经典故障BERT 服务因 GPU 内存泄漏重启期间返回 NaN 向量胶水层没做 nan check直接喂给 LightGBM导致整个推荐流返回空结果——用户刷屏全是空白卡片。根因不是模型而是胶水层缺乏工程约束。“from scratch”要求我们为每个接口定义精确的语义契约。以向量服务为例它的 API 不该是POST /encode返回{vector: [0.1, -0.5, ...]}而应是{ request_id: req_abc123, status: success, payload: { embedding: { values: [0.1, -0.5, ...], dtype: float32, dimension: 768, norm: 0.998, nan_count: 0 }, metadata: { model_version: all-MiniLM-L6-v22023.10.15, latency_ms: 42.3 } } }这个响应体里nan_count字段是硬性要求——服务端必须计算并上报客户端必须校验nan_count 0才接受结果。norm字段用于快速检测向量是否被意外截断或缩放。这些字段不是“锦上添花”而是故障隔离的哨兵。我们在做多模态搜索时就靠nan_count在3秒内定位到某批图像 embedding 服务因显存不足返回了全零向量避免了下游排序模块的连锁雪崩。2.3 工程化的真正成本不是写代码是建契约很多人低估了“from scratch”的真实成本。它不在于重写 PyTorch而在于建立一套可执行、可审计、可演进的契约体系。这包括数据契约Data Contract定义数据源的 schema、质量规则如 null rate 0.1%、更新 SLA如 hourly update、血缘关系。模型契约Model Contract定义输入输出格式、性能 SLI如 p95 latency 100ms、准确率衰减阈值如 weekly AUC drop 0.01 must alert、公平性指标如 demographic parity difference 0.05。服务契约Service Contract定义 API 的 OpenAPI spec、错误码语义如 422 表示 input violates data contract、降级策略如 fallback to cached result when model latency 500ms。这些契约不是文档而是可执行的代码。比如数据契约我们用 Great Expectations 定义 rule但关键在于这些 rule 必须嵌入到数据写入 pipeline 中作为 pre-commit hook 运行。任何违反 rule 的数据写入都会被 pipeline 主动拒绝而不是事后告警。某保险公司的保单特征平台就因为强制执行policy_start_date policy_end_date这条 rule提前拦截了上游系统因时区转换错误导致的 37% 无效数据避免了后续模型训练污染。契约即代码Contract-as-Code这才是 AI Engineering 的起点。3. 核心模块拆解从零构建的四大支柱3.1 数据基础设施不是存储是可信数据流“from scratch”的第一步永远是重建数据基础设施。别急着选 Spark 还是 Flink先回答三个问题数据所有权归谁是数据科学家“借”数据还是数据平台“交付”数据数据质量谁兜底是下游模型为脏数据负责还是上游管道为数据质量负责数据变更如何追溯一个字段含义变了影响多少模型需要多久通知所有相关方我们给某制造业客户搭建预测性维护平台时彻底放弃了传统的“数据湖BI工具”模式采用分层契约化数据总线架构Raw Layer原始设备日志不做任何清洗仅做格式标准化统一为 JSON Schema v1.0保留完整时间戳和设备ID。Trusted Layer由数据工程师团队维护执行确定性清洗如单位换算、异常值截断输出带 version tag 的 Delta Table每个 table 附带data_quality_report.json包含 completeness、uniqueness、validity 三大维度指标。Feature Layer由算法团队按需订阅 Trusted Layer 表通过 Feature Store SDK 构建特征SDK 强制要求声明feature_origin来自哪个 Trusted table、feature_computation_logicSQL or Python UDF、feature_slafreshness。关键创新点在于Feature Layer 不是物理存储而是逻辑视图。当算法要新增一个“过去24小时振动峰值”特征他不是写 SQL 插入新表而是提交一个 Feature Spec YAMLname: vibration_peak_24h description: Max vibration amplitude in last 24 hours origin_table: trusted.machine_sensor_v2 computation: | SELECT machine_id, MAX(amplitude) as value FROM {origin_table} WHERE ts NOW() - INTERVAL 24 HOURS GROUP BY machine_id sla: freshness: 5mFeature Store 服务会自动编译此 spec生成物化视图并注入数据质量监控如检查MAX(amplitude)是否超出历史 3σ。这样特征不再是散落在 Jupyter notebook 里的 magic code而是可发现、可复用、可审计的一等公民。上线半年特征复用率从12%提升到68%新模型开发周期缩短40%。提示不要迷信“统一数据平台”。我们试过用单一 Presto 集群支撑所有场景结果 OLAP 查询拖慢实时特征计算。最终拆分为Trusted Layer 用 Delta Spark批处理Feature Layer 用 ClickHouse实时聚合Raw Layer 用 Kafka流式接入。分而治之各司其职才是工程现实。3.2 模型生命周期管理版本不是标签是契约快照“模型版本”这个词被严重滥用了。很多人以为model_v2.1.0就是版本其实这只是个字符串。真正的模型版本必须是可重现、可验证、可回滚的完整契约快照。它至少包含五个不可分割的部分Data Version训练所用数据集的精确 hash如 Delta table version 12345Feature Version特征计算逻辑的 commit hash如 feature_repoabc789Train Code Version训练脚本及依赖的 git commit如 train_pipelinedef012Model Artifact序列化模型文件如 .pt 或 .onnxEvaluation Report在标准 test set 上的完整指标accuracy, f1, fairness metrics我们自研的 Model Registry 不是简单的 S3 bucket metadata DB而是一个契约验证引擎。当用户注册一个新模型时系统会自动拉取train_code_version对应的代码运行pip install -r requirements.txt验证依赖兼容性根据data_version和feature_version重建训练环境执行python train.py --dry-run确认能成功加载数据和特征加载model_artifact在 sandbox 环境中运行model.predict(sample_input)验证输入输出格式执行预设的 evaluation script生成 report 并与 baseline 比较。只有全部通过才允许注册。某次算法提交了一个新模型registry 卡在 step 2feature_version对应的代码里一个 UDF 函数签名变了但没更新feature_spec.yaml导致特征计算失败。系统立刻报错“Feature computation logic mismatch: expected 3 args, got 4”。这比上线后才发现“特征漏算”早了三天。版本管理的本质是自动化契约守门员。3.3 在线推理服务不是 REST API是 SLA 承诺书把模型打包成 Flask API只是万里长征第一步。真正的在线推理服务必须是可承诺 SLA 的生产级服务。这意味着延迟保障p99 latency ≤ 100ms超时必须有明确定义的 fallback如返回缓存结果或默认值容量弹性支持自动扩缩容且扩容决策基于真实请求特征如并发请求数 输入 token 长度安全隔离不同业务线的请求必须物理隔离避免 A 业务的流量 spike 影响 B 业务的 SLO我们为某金融风控场景设计的推理服务采用双通道架构Fast Path纯 CPU 推理处理 95% 的简单请求如单条交易评分使用 ONNX Runtime TensorRT 加速p99 30msSlow PathGPU 推理处理剩余 5% 的复杂请求如关联图谱分析使用 Triton Inference Server支持动态 batching。关键设计是请求路由的智能分流。我们不按随机或轮询而是根据请求 payload 的complexity_score由轻量级规则引擎实时计算决定路径def route_request(payload): # 规则引擎快速评估复杂度 score 0 if len(payload.get(related_accounts, [])) 10: score 5 if payload.get(transaction_amount, 0) 100000: score 3 if payload.get(device_risk_score, 0) 0.8: score 2 return slow if score 7 else fast这个complexity_score是服务契约的一部分必须在 OpenAPI spec 中明确定义。运维团队据此设置 Fast Path 的 autoscale thresholdCPU usage 70% 扩容Slow Path 的 queue depth limitpending requests 100 时触发告警。上线后整体 p99 从 180ms 降至 42ms且从未因流量突增导致服务不可用。3.4 监控与可观测性不是看指标是读故事AI 系统监控的最大陷阱是把 Prometheus 的model_latency_seconds当成全部。一个数字无法告诉你延迟升高是因为模型变慢了还是特征计算变慢了还是网络抖动真正的可观测性是能把故障还原成一条有因果关系的故事线。我们的监控体系分三层Infrastructure LayerK8s pod metrics、GPU utilization、network latency —— 告诉你“硬件怎么了”Service LayerAPI 的 request count、error rate、duration —— 告诉你“服务怎么了”AI Layer数据漂移data drift、概念漂移concept drift、性能衰减performance decay—— 告诉你“AI怎么了”。其中 AI Layer 是核心。我们不用现成的 Evidently 或 Arize而是自建Drift Detection Engine它监听两个数据流Production Data Stream实时采集线上请求的输入特征分布如 age 分布、transaction_amount 分布Reference Data Stream训练时的特征分布快照来自 Trusted LayerEngine 按固定窗口如每小时计算 KS Statistic、PSI 等指标并生成 drift report{ timestamp: 2023-10-20T08:00:00Z, feature_drifts: [ { feature: user_age, ks_statistic: 0.18, threshold: 0.15, severity: HIGH, impact: May cause bias against elderly users } ], concept_drift: { metric: auc, current: 0.72, baseline: 0.78, delta: -0.06, severity: CRITICAL } }这个 report 不是丢进 Grafana 就完事。它会触发Automated Root Cause Workflow如果feature_drift.severity HIGH自动暂停该特征在所有模型中的使用并通知数据工程师如果concept_drift.severity CRITICAL自动触发 retraining pipeline并将新模型标记为candidate等待人工审核所有动作记录 audit log供事后复盘。某次drift engine 发现user_income特征的 PSI 在一周内从 0.02 涨到 0.25原因是合作银行调整了收入申报口径。系统自动禁用该特征并邮件通知算法团队。他们用替代特征重新训练两周后上线避免了模型准确率持续下滑。监控不是看板而是自动化的故障响应中枢。4. 实操落地从零开始的七步工作法4.1 第一步定义你的“最小可行契约”MVC别一上来就画架构图。先用一张白纸写下你系统里最痛的三个问题然后为每个问题定义一个最小契约问题1“模型上线后不知道谁该负责数据质量问题” → 契约data_contract_v1.yaml强制要求每个数据源提供null_rate,duplicate_rate,schema_compatibility三项指标问题2“新模型上线老模型不能同时运行导致AB测试无法进行” → 契约model_deployment_policy.md规定所有模型必须支持canary_release和traffic_split问题3“线上故障复盘花80%时间在确认‘到底用了哪个版本的数据’” → 契约versioning_rule.md规定所有 pipeline 必须输出data_version,code_version,model_version三元组并存入统一 registry。这三份契约就是你的 MVP。它们不需要完美但必须可执行、可验证、可违反。我们给初创公司做咨询时第一周只交付这三份 markdown第二周就用它们评审现有 pipeline。某团队发现自己根本没有data_version的概念所有数据表都是latest于是立刻停掉所有“最新数据”消费改为指定 version。契约的价值不在于它多宏大而在于它能否立刻止血。4.2 第二步选择“可插拔”的基础组件“from scratch”不等于“全自研”。关键是选对可替换、可审计、可调试的基础组件。我们坚持三条选型铁律必须开源且主仓库 commit 活跃近3个月 50 commits必须提供清晰的扩展点如 Spark 的 DataSourceV2 APITriton 的 Custom Backend必须自带可观测性接口如暴露 /metrics endpoint支持 OpenTelemetry tracing。例如日志系统我们不用 ELK而选 Loki Promtail因为Loki 的日志索引是 label-based天然适配 AI 系统的多维上下文model_id, request_id, feature_versionPromtail 支持自定义 pipeline可轻松注入extract_feature_hashprocessor所有 metrics 都通过 OpenMetrics format 暴露与 Prometheus 无缝集成。再比如特征存储我们不用 Feast而用Feast 自研 Feature Validator。Feast 负责 feature discovery 和 servingValidator 负责在 feature materialization 时自动运行 Great Expectations rules并将结果写入 feature metadata。这样既享受开源生态又掌控关键校验逻辑。组件是螺丝契约是图纸图纸比螺丝重要得多。4.3 第三步构建“契约即代码”的CI/CD流水线所有契约必须进入 CI/CD 流水线成为 gatekeeper。我们用 GitHub Actions 构建的 pipeline 包含Pre-commit Hook提交data_contract_v1.yaml时自动运行great_expectations checkpoint run验证本地数据样本PR Pipeline合并请求时自动拉取 referenced data version运行 full validation失败则 blocking mergeRelease Pipeline发布新模型时自动触发model_contract_verification包括 data compatibility check、feature compatibility check、SLA benchmark关键设计是“契约验证必须在生产环境镜像中运行”。比如验证数据契约不是在 dev laptop 上跑而是启动一个临时 Kubernetes pod挂载 production data volume用 production spark config 运行 validation job。这样验证结果才有生产意义。某次dev 环境验证通过但 prod 环境因权限问题失败pipeline 立即阻断发布避免了线上事故。流水线不是自动化工具而是契约的司法系统。4.4 第四步设计“故障友好”的降级策略AI 系统必须假设“模型会失效”。降级策略不是备胎而是第一公民。我们要求每个推理服务必须实现三级降级Level 1模型内部降级如 LightGBM 的predict_proba失败时返回predict结果Level 2服务级降级如模型超时返回 cache 中最近一次成功结果Level 3业务级降级如所有 AI 服务不可用切换至规则引擎或默认值所有降级逻辑必须可配置、可开关、可监控。例如cache 降级的 TTL 不是硬编码而是通过 Consul KV 动态配置规则引擎的开关不是改代码而是 toggle feature flag。某次大促GPU 集群因散热问题部分宕机Level 2 降级自动启用cache hit rate 达 92%业务无感。运维只需在 dashboard 上点击一个按钮就能关闭 cache强制走 fallback。降级不是应急方案而是日常能力。4.5 第五步建立“人机协同”的告警体系告警不是越多越好而是要精准指向人的决策点。我们禁用所有“CPU 90%”这类基础设施告警只保留三类契约违约告警如data_contract_v1.null_rate 0.1%收件人数据工程师SLA 违约告警如inference_service.p99_latency 100ms for 5min收件人SRE 算法工程师AI 健康告警如concept_drift.auc_delta -0.01收件人算法负责人 产品经理每条告警必须附带Actionable Context直接链接到相关契约文档显示最近3次该指标的趋势图提供一键诊断命令如curl -X POST http://drift-engine/debug?featureuser_age列出受影响的下游模型列表。某次concept_drift告警触发算法负责人收到邮件点击链接看到趋势图显示 AUC 从 0.82 持续跌到 0.75诊断命令返回“主要衰减发生在 high-risk user segment”他立刻知道要聚焦分析这部分用户的数据。告警不是噪音而是决策加速器。4.6 第六步推行“契约驱动”的协作文化技术再好文化跟不上也白搭。我们强制推行三项协作仪式契约评审会Contract Review Meeting每月一次所有数据、算法、SRE、产品代表参加评审新增/修改的契约必须达成共识才能生效故障复盘会Blameless Postmortem任何线上事故必须追溯到哪个契约被违反以及为什么契约没起作用契约健康度报告Contract Health Dashboard每周自动邮件展示各契约的 compliance rate如 data_contract_v1.compliance_rate 99.8%低于95%的契约负责人必须在下周会上说明改进计划。某次data_contract_v1 的 compliance_rate 掉到 93%数据工程师在会上坦白上游埋点 SDK 升级后user_device_type字段新增了foldable类型但契约里只定义了mobile,desktop,tablet。团队当场决定要么升级契约要么要求 SDK 回滚。最终选择了前者并更新了所有下游模型的特征处理逻辑。契约不是法律条文而是团队共同的语言。4.7 第七步持续演进但永不放弃“from scratch”姿态“from scratch”不是一次性项目而是持续状态。我们每季度做一次Contract Audit检查是否有契约已过时如model_deployment_policy还要求 k8s 1.18但生产已是 1.25是否有新场景未被契约覆盖如新增了实时语音识别但data_contract_v1没定义音频特征是否有契约执行成本过高如某个 drift detection job 占用 40% GPU需优化算法。Audit 结果形成Contract Evolution Backlog按 ROI 排序纳入下季度 OKR。某次 audit 发现feature_layer_sla中的 freshness 要求5分钟导致特征计算资源浪费严重团队将其拆分为critical_features5min和non_critical_features30min节省了35% 计算成本。工程化不是追求终极架构而是让架构始终匹配业务脉搏。5. 常见问题与实战避坑指南5.1 “我们团队没那么多人力能做 from scratch 吗”这是最常被问的问题。答案是必须做而且可以从最小处开始。我们服务过12人的创业团队他们的“from scratch”实践是第一周定义data_contract_v1.yaml只包含3个字段table_name,null_rate_threshold,update_frequency第二周在 Airflow DAG 中加入 pre-check task用pandas-profiling生成 report对比 threshold第三周把 report 存入 Confluence每天晨会花5分钟 review三个月后他们发现 70% 的数据质量问题都在数据写入环节就被拦截模型训练失败率下降80%。“from scratch”不是人力竞赛而是认知升级。一个工程师用20小时定义契约胜过十个工程师用2000小时修 bug。5.2 “现有系统太庞大如何渐进式改造”别想着“推倒重来”。我们用Strangler Pattern绞杀者模式Step 1识别“痛点模块”如数据清洗脚本、模型评估脚本Step 2为它编写契约如cleaning_contract_v1.yamlStep 3并行运行新旧两套逻辑用 diff tool 比较输出Step 4当 diff rate 0.01% 时切流到新逻辑Step 5删除旧逻辑。某银行核心风控系统我们花了18个月用此方法逐步替换了12个关键模块全程零停机。关键技巧是diff tool 必须能理解业务语义。比如比较两个模型输出不能只看数值差异还要看“高风险用户识别一致性”。我们自研的model_diff工具会生成risk_overlap_matrix报告直观显示哪些用户被新旧模型同时标为高风险、哪些被新模型漏标。渐进式不是慢而是稳。5.3 “如何说服老板投钱做这个”老板只关心 ROI。我们用Three-Bucket Framework展示价值Bucket 1止损Stop the Bleeding量化当前因契约缺失导致的成本如“每月因数据问题导致的模型重训耗时200人时折合$XX万”Bucket 2增效Accelerate Delivery展示契约化后新模型上线周期缩短比例如“从平均42天降至14天每年多交付8个模型”Bucket 3赋能Enable Innovation指出契约化释放的能力如“支持实时 AB 测试让产品能用数据驱动决策预计提升转化率X%”。某次汇报我们用 Bucket 1 的数据打动了 CFO过去一年因特征不一致导致的线上事故造成客户投诉赔偿 $1.2M。老板当场批准预算。不要讲技术要讲钱、讲时间、讲风险。5.4 “契约会不会变成官僚主义”绝对会如果契约脱离业务。我们的反官僚主义三原则契约必须有 owner每个契约文件顶部必须写明owner: data-engineer-teamowner 负责维护和解释契约必须有 expiry date所有契约默认有效期6个月到期自动归档需 renewal 才能继续生效契约必须有 usage stats用 Prometheus 监控每个契约的被引用次数连续3个月 zero usage 的契约自动发起 deprecation process。某次model_evaluation_template_v1因无人使用被归档算法团队才发现自己一直用本地脚本跑评估于是主动申请新建v2加入了 fairness metrics。契约的生命力在于它被使用而不是被制定。5.5 “遇到紧急上线能跳过契约吗”可以但必须走Emergency Override Process提交 override request注明原因、影响范围、预计恢复时间获得 data owner model owner SRE 三方 approveoverride 期间所有 bypassed checks 必须 logging并生成 audit trail48小时内必须补上契约并 root cause analysis。某次大促前算法发现一个 critical bug需紧急 hotfix。他们走 override绕过 model contract verification但所有操作被完整记录。事后复盘发现是 training code version 的 git tag 生成脚本有 bug于是修复了脚本并将此 case 加入 CI 流水线的 smoke test。应急不是破窗而是开窗窗开多大必须登记在册。6. 我的体会从“模型工程师”到“AI系统建筑师”做了十年 AI 工程我最大的体会是算法能力决定你能走多远工程能力决定你能走多稳。早年我痴迷于 SOTA 模型觉得调参调到 AUC 0.95 就是巅峰。直到第一次线上事故——模型在生产环境 AUC 只有 0.72排查三天发现是特征 pipeline 里一个 timezone 转换 bug。那一刻我明白模型再好也是建筑的砖块而 AI Engineering是设计地基、承重墙、消防通道的全过程。“from scratch”不是苦行僧式的自我折磨而是夺回技术主权的宣言。当你亲手定义数据契约你就不再是个“数据消费者”而是数据生态的共建者当你亲手验证模型版本你就不再是个“模型上传者”而是模型质量的第一责任人当你亲手设计降级策略你就不再是个“API 提供者”而是业务连续性的守护者。这条路没有终点。上周我们团队在讨论是否要把 LLM 的 prompt engineering 也纳入契约体系——定义 prompt version、prompt performance SLA、prompt drift detection。有人觉得太激进我说这不就是“from scratch”的本来面目吗每一次对“理所当然”的质疑都是工程化的新开端。
返回列表