ARTICLE DETAIL

资讯详情

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

从零构建AI工程:项目定义、数据与评估是第一步

从零构建AI工程:项目定义、数据与评估是第一步 从零起步做AI工程很多人第一步就选错了。我见过太多小团队或者独立开发者拿到需求的第一反应是找一个开源模型把数据往里一塞然后对着训练曲线祈祷。我也不例外刚独立带项目那会儿手里只有一篇论文的复现代码和业务方丢过来的几份Excel报表天真地以为训练出模型就是项目的全部。结果半年下来真正让我脱了一层皮的根本不是模型训练而是怎么把整个系统在真实环境里稳定地跑起来、持续地产生价值。这篇文章我想围绕AI工程从零构建这条主线把我在几个从0到1的项目里沉淀下来的方法论、踩过的坑、以及现在带新人时反复纠正的认知误区系统地说清楚。适合那些正准备独立负责AI项目、或者已经在做但觉得全流程都磕磕绊绊的人。我不打算给你一份面面俱到的技术词典而是尽量还原一个真实项目从问题定义、数据准备、模型选型、上线部署到长期迭代的完整链路每个环节都告诉你为什么这样做。1. 为什么从零开始的项目往往死在起点而不是终点1.1 大多数人的起点顺序是错的很多朋友一接到AI项目脑子里最大的问题是用哪个模型。这不怪大家因为媒体和开源社区铺天盖地宣传的都是模型效果好像模型选对了项目就成了一半。但以我这些年的实际体验看模型只是AI系统这座冰山露出水面的那一角。水面之下的数据处理、评估机制、部署运维、效果迭代才是决定项目生死的大头工程量。从零做AI工程正确的起点不是选模型而是定义问题。就拿最常见的我想做个智能客服来说这句话至少有七八种理解方式是同类问题自动回复是人工坐席的实时话术推荐还是基于知识库检索增强的问答机器人每一种理解对应的数据要求、技术路线、交付形态完全不同。业务方往往只看到了最终交互界面的样子而你作为工程负责人必须把它拆成一个可执行、可验证的技术方案。定义问题做不好后面选出来的任何模型都等于在碰运气。1.2 把模糊需求翻译成可量化指标在动手写第一行代码之前我现在的固定动作是先产出一页纸的项目定义书。里面固定包含五样东西要解决的用户场景、当前工作流的痛点、判断成功的量化指标、可用的数据资源、以及必须交付的最晚时间。这五样东西只要有一项是含糊的后面几乎必然会在某个环节付出几倍代价来还债。举个例子之前接手一个遗留系统改造业务方给的目标就一句话提升搜索准确率。我问他们现在准确率是多少答不上来。哪一类搜索最影响用户体感答不上来。有没有点击或转化日志可以做标准答案标注没有。这个项目当时根本没法启动。后来我们花了两周时间做了一件表面上很笨的事情把历史搜索日志里的失败案例全部人工分类先搞清楚用户到底想找什么但系统没找到。等到我们把目标翻译成核心导航搜索Top1命中率从62%提升到80%以上之后所有后续工作才有了靶心。这个阶段我很推荐一个朴素但极其有效的目标-数据-方案三角对齐法。每周项目周会就回到这三件事上目标变了数据能不能支撑数据变了方案需不需要调整方案变了目标还成不成立。从零起步的项目做到一半发现做不下去的情况我复盘了十几个追到根上基本都是这个三角在某一个时点脱节了。1.3 项目定义书里容易漏掉的三个角色除了上面五要素之外还有三件事是很多从零开始的项目会漏掉的我建议一定写进定义书里。第一是明确谁是最终验收人。AI项目最怕的就是做完了没人拍板。你要在项目启动那天就锁定一个人他有权说这个效果合格了后面所有评估口径都围绕他的业务判断来对齐。第二是写清楚不做什么。比如智能客服项目明确不做语音识别、不做情绪分析、不做多轮复杂共情。把边界划出来才能避免需求在开发过程中无声地膨胀。第三是注明人工兜底方案。AI系统不可能100%可用必须提前约定当系统不可用或答案质量无法保证时人工流程怎么接管。这个在项目初期看起来是浪费精力但一旦上线它就是你的安全网。我见过太多项目因为没有兜底方案模型一个小故障就导致整个业务链路停摆。2. 数据与评估在写第一个模型之前先把两根支柱立稳2.1 数据质量比模型大小更能决定项目天花板如果你问我在从零搭建AI系统的一年里最深的体会是什么我的答案会是很多失败不是因为模型不够强而是因为数据工作没做到位。一个不严谨的结论是脏数据带来的上限损失通常远大于模型结构的差异。说一个具体场景。我们曾经处理一批历史工单数据用来训练一个分类模型。乍一看数据量很充足有几十万条但清洗完发现三成样本存在字段错位约两成样本的标签是过期分类——业务部门上半年调整过类目体系旧标签没有同步迁移。这种情况下你就算是把最先进的模型拿过来它也学不到正确的东西只会把历史流程里的混乱一并复刻进模型参数里。所以我的习惯是在项目启动的头两周只做数据盘点与清洗不碰任何模型代码。清洗内容包括缺失值处理、重复样本合并、标签一致性校验、样本时间范围确认以及最重要的业务规则嵌入。比如退款时间不能早于下单时间这类约束必须在数据层就校验掉而不是指望模型自己从数据里领悟。数据不一致的时候再贵的算力也是浪费。2.2 从零搭建数据管线的四个层次数据管线听起来很高大上回到落地层面其实就是下面四件事原始数据层把业务系统里的日志、数据库、第三方数据统一收集到一个可访问的存储里。初期用一台机器加定时脚本就够了没必要上复杂的消息队列。清洗加工层写清楚每一步清洗规则。我强烈建议把清洗规则当成代码一样做版本管理因为规则会随着业务理解深入不断调整没有版本记录就会变成一笔糊涂账。特征一致性层模型训练时用的特征口径和上线服务时在线计算的特征口径必须完全一致。不一致导致的线上线下效果落差是AI项目最隐蔽的坑。样本版本层训练数据集要用唯一的版本标识管理起来这样模型出问题时你能准确回溯到它是拿哪一版数据训练出来的。对于从零开始的团队我建议用轻量方案落地数据存在本地或对象存储清洗脚本用Python的Pandas/Dask数据集打包成parquet文件并打上版本号用简单的命名规则或数据版本控制工具管理。核心不是工具多高级而是任何数据变更都可追溯。2.3 评估体系为什么必须在建模之前就写好我在项目里立过一条规矩不写完评估脚本不许训练模型。原因很简单没有事先定义的评估标准模型训练过程中的每一次看起来不错都可能是主观错觉。很多从零开始的项目会犯一个毛病模型训练完找几个测试集样本看一眼觉得输出像模像样就宣布成功。这种操作有两个致命问题一是几个样本无法代表整体分布二是没有历史对比基线你根本不知道这次训练到底进步了还是退步了。我所说的评估体系是指在训练开始前就把下面这些东西写好并运行起来一套固定的测试集这个测试集只用来做最终效果判断绝对不能混进训练集里去训练。一组量化指标分类任务看准确率、召回率、F1排序任务看TopK命中率、平均倒数排名生成任务看答案相关的自动打分。一组坏案例集合把已知的典型失败样本单独归档每次模型迭代都要专门看这些坏案例有没有被修复有没有引入新的典型错误。一个与当前业务线上版本对比的入口哪怕线上版本只是一个简单的规则系统也要先把它的效果在同一个测试集上打出来。打个比方评估体系就像游泳时的浮板。你在深水区练游泳没有浮板每划一下水都心惊胆战姿势全走样有了浮板你只管练动作方向对了就往前进。2.4 从主观感觉走向可复现的评估一个最小实现对于生成式AI项目很多人会问自动评估靠谱吗直接靠人看不是更准确吗人看当然更准确但不能规模化。我采用的做法是分三层第一层用规则和关键词检查做快速过滤第二层用强模型当裁判做质量打分第三层对抽样样本做人工复核。人只负责抽检和校准不负责给全量结果做判断。这里有一个非常实用的工具函数把评估结果输出成标准JSON结构方便后续统计分析。import json def evaluate_batch(items): results [] for item in items: row { sample_id: item[id], gold_answer: item[answer], model_output: item[output], rule_check_pass: bool(rule_validate(item)), judge_score: judge_model_score(item), } results.append(row) return results with open(eval_results.json, w, encodingutf-8) as f: json.dump(evaluate_batch(batch_data), f, ensure_asciiFalse, indent2)这个基础框架搭好之后之后的模型迭代就变成了一个可量化的工程过程。这是AI工程和AI实验之间最本质的区别。3. 模型选型与训练从基线开始不要上来就堆算力3.1 先做有把握的简单方案如果一句话概括我在模型选型上的经验那就是先把简单方案跑到极致再考虑复杂方案。很多从零开始的项目失败不是因为没用到先进模型而是因为连一个靠谱的基线都没建立起来。什么是基线就是一个实现成本最低、逻辑最简单、但效果可被量化评估的方案。比如做智能问答基线可以是一个带同义词扩展的BM25关键词检索做分类任务基线可以是基于规则的关键词匹配加统计模型。关键在于这个方案在同样的测试集上能跑出多好的成绩。基线成绩是你后续所有工作的参照系。没有基线你真的很难判断一个大模型微调到底带来了多少增益。我曾见过一个团队微调了一个大模型业务方觉得回答显得有道理但回头拉了一下和基线检索方案的对比发现命中率几乎没有提升成本却高了好几个数量级。这种时候基线就是你拦住无效投入的底气。3.2 模型不是越强越好而是越合适越好模型选型本质上是一个约束求解问题。你的约束条件通常是数据规模、算力预算、推理延迟要求、部署环境限制。我用一张简化的表来总结不同场景的选型思路任务类型数据规模推荐起点什么时候升级结构化数据预测千级到十万级LightGBM/XGBoost数据量大且有强非线性关系再考虑深度模型文本分类/实体识别万级到百万级预训练语言模型微调如BERT类少数样本时先用小模型确实不够再升级开放域问答/生成无标注语料为主RAG检索增强加指令模型领域性强且效果不稳定时再微调多模态理解依赖具体场景先验证基座模型API成本、隐私或效果问题突出时再做私有化部署我特别想强调一个反直觉的结论在数据量有限的时候微调大模型不一定比直接用成熟的模型API加提示词工程效果更好。大模型微调容易在小数据集上发生灾难性遗忘——学新东西的时候把原有通用知识覆盖掉结果在边缘case上的表现反而不如微调前。在数据量没有达到一定量级之前与其微调不如把精力放在提示词设计和检索质量上。3.3 数据划分里的隐形炸弹模型训练环节看着最直观其实暗藏不少坑其中最常见的一位隐形炸弹是不合理的数据划分。很多人拿到数据以后一个train_test_split就完事完全不管样本背后的时间结构或用户结构。举个例子一个用户行为预测模型数据来自去年1月到12月。如果随机划分训练集和测试集同一个用户的行为会同时出现在两边模型相当于提前见过了答案测试指标虚高得离谱。上线以后面对新用户、新行为效果立刻现出原形。正确做法是按时间切分前10个月的数据做训练后2个月的数据做验证和测试。同理有些场景要按用户ID分成训练用户组和测试用户组保证同一个人不会跨组出现。另一个常见的坑是重复样本。数据爬取或日志拼接时同一个样本可能出现多次如果不做去重模型会对这些重复样本过度学习导致在测试集上表现很好但泛化能力一塌糊涂。3.4 训练的复盘习惯训练过程本身在现在的技术条件下已经相对成熟照着一套checklist走就行确认数据划分、设置好随机种子、记录每个epoch的训练损失和验证指标、保存效果最好的checkpoint、监控过拟合信号。我觉得更重要的是复盘习惯。每次模型训练结束不只记录最终指标还应该记录这版模型对比基线在每一类样本上的具体变化哪些类别的召回率上升了哪些类别的新错误增多了。这些细颗粒度的变化会指引你下一步是把数据补充给薄弱类别还是调整后处理规则。没有这个复盘训练就真成了瞎子摸象每个版本都好得稀里糊涂也坏得不明不白。模型训练阶段还有一个容易忽略的成本控制问题。很多团队一心追求最优指标上了大规模GPU训练集群结果数据集只有几万条训练成本高得吓人性价比低到没法看。从零开始的项目我更推荐先用API或小模型跑通全链路确认整个系统能转起来再决定要不要在更大算力上投入。4. 从Demo到线上服务部署、监控与安全这三关怎么过4.1 Demo和线上系统之间隔着多远Notebook里的Demo和在线上跑的服务差距比很多人想象的大得多。Demo只需要在你有空的时候跑一次线上系统要求每时每刻稳定响应Demo只服务于你自己线上系统服务于成千上万的用户Demo出错了可以重来线上出错了就是真实的业务事故。一个典型的AI服务工程上至少要考虑三件事并发请求处理能力、响应延迟的稳定性、以及依赖组件比如数据库、外部模型API故障时的降级策略。对于从零起步的团队我建议服务架构不要过度设计。初期标准配置就是模型推理服务用FastAPI封装成HTTP接口前端或业务系统通过接口调用配合一个消息队列做异步任务处理。容器化是必须的方便在不同环境之间保持一致但K8s这类复杂编排工具可以等业务量起来了再上不要第一天就给自己上一个运维大包袱。4.2 两类监控指标都不可偏废模型上线以后监控是最重要的活。监控指标我习惯分成两类缺一不可。第一类是系统指标。响应时间的P50、P95、P99分别是什么水平服务负载多高显卡显存还剩多少外部API调用失败率有没有飙升。这些指标直接决定用户体验和服务稳定性。第二类是业务指标。模型预测的分布有没有突变比如二分类模型预测为正样本的比例从14%突然跳到31%这就是一个强警示信号。用户对答案的反馈数据每天都需要回流分析。还有业务方最关心的核心KPI比如命中率、采纳率、转化率都要在监控大盘上实时可见。从数据漂移的角度讲我见过最多的翻车现场是模型训练用的历史数据和上线后遇到的真实数据分布不一致。比如一个商品推荐模型在618大促期间上线数据分布和平时完全两样效果直线下跌。这个不是模型写错了而是没有做分布监控没有及时发现环境已经变了。4.3 灰度发布与人工抽检AI系统上线不适合搞一次性全量切换。我们现在几乎所有的AI功能都是先灰度再全量。灰度比例从5%开始观察几天业务指标和用户反馈再逐步放量到10%、30%、100%。这个过程允许我们尽早发现问题把爆炸半径控制到最小。即使是灰度期间模型输出也建议过一个人机协同的环节。对于高风险或高价值场景模型给出的结果只作为推荐意见最终需要人工确认。比如医疗健康类、金融类、法律类的AI助手人工复核不是可选项而是必选项。团队规模有限时可以用抽样的形式做人工评估。每天抽几十条灰度流量让业务人员判断模型回答好不好、有没有安全隐患。这个抽检结果既用来决定是否继续放量也用来积累下一轮微调的训练数据。4.4 安全基线不是等出事之后再补的AI系统的安全合规意识要从第一天就建立。我至少建议做三件事一是数据脱敏任何训练数据和线上请求里的个人信息手机号、身份证、地址等都要经过脱敏处理越低层的数据越严格二是权限控制模型服务的接口必须做鉴权不是谁拿到链接都能调用三是输出合规生成式模型的内容输出要经过敏感词和合规检查该拦截的必须拦截。我自己第一次做AI服务时就因为没有在接口层做鉴权导致模型服务被外部调用刷了几十万次请求产生了高额成本。这类教训一次就够了永远不要在成本和安全上省前期投入。5. 上线远不是终点反馈闭环与长期演进5.1 模型上线之后项目其实才完成了一半我见过一个特别典型的项目节奏团队加班加点把模型训练好、部署上线效果不错业务方也认可然后团队就散了。三个月之后模型效果不断下滑没人管数据怎么回流没人做迭代最后业务方对AI的印象就变成了这玩意儿越用越不灵。AI系统和传统软件最大的区别是传统软件上线即交付AI系统上线才开始积累迭代素材。如果模型上线后没有配套的数据回流、定期重训、效果分析机制它就会像一个不吃不喝的人光靠以前的储备硬扛迟早要垮。具体跑起来流程是这样的线上用户请求经过模型服务同时记录原始输入、模型输出、用户后续行为是否采纳、是否有反馈这些数据定期回流到存储系统经过和训练数据一样的清洗流程加入下一轮训练集。一个新的机器学习项目效果最痛苦的提升期往往不是第一版上线之前而是稳定运行两三周、积累了一批线上真实反馈之后。5.2 版本管理AI工程的质量生命线这里说的版本管理不只是代码还包括数据、特征、模型参数、提示词模板每一环都要能回溯。否则线上出了问题你连这个行为是哪版模型产生的都定位不出来查错就无从谈起。我们内部的实践是给每次模型发布打一个完整的版本标签里面包含代码git提交号、数据集版本号、特征配置号、模型参数配置、评估报告链接。这个版本标签随着模型服务一起发布线上流量回来的日志里带上模型版本信息后续所有分析都按版本分组展开。从零开始做这个并不费事用命名规范加简单的配置文件就能跑通。怕就怕大家觉得太麻烦等出了事故再后悔。工程体系的价值从来不体现在顺风顺水的时候恰恰体现在乱成一团的时候你还能按图索骥。5.3 团队分工和协作方式从零开始做AI工程团队可能只有一两个人那就要求你是个全栈手——既要懂数据清洗又要会模型优化还得能部署运维。但如果后期业务规模起来了角色就会分化。前端业务对接、数据工程、ML工程、平台开发、SRE每个角色都有自己的专业纵深。我见过很多团队在转型AI时的通病让算法工程师干全部的事既要他们调模型又让他们处理数据还要他们负责上线运维。结果就是每个环节都做得不深项目搁浅在各个环节的缝隙里。团队再小在项目规划时也应该把五种角色职能拎出来业务需求分析、数据处理、建模调参、工程部署、质量评估。哪怕一个人身兼多职职责边界也要清晰。和业务方的协作方式也值得多说一句。模型效果这类模糊语言在跨职能沟通中具有极大破坏力。业务方说效果不太行到底是哪不满意是答非所问还是速度太慢还是某些类型的问题没有覆盖工程方一定要把这些模糊反馈转译成具体的数据事件再纳入迭代列表。我建议每次周会前先跑一遍线上效果周报用数据说话不要让大家在会议室里凭感觉争论。5.4 持续沉淀属于自己的工具链最后一个长期演进的方向是把项目里重复出现的需求沉淀成工具。比如我们经常会用到数据集一致性校验模型离线评估线上日志回流这些功能每个新项目都重新写一遍很浪费时间。花些心思把这些能力抽成公共模块一次建设后来者直接复用。从零开始的人不需要一开始就追求平台化。我的建议是第一遍先把它做成脚本第二遍再封装成函数库或服务等到第三个项目还需要它的时候才值得做成一个正式的组件。过早抽象和从不抽象都是效率的敌人。这些年我越来越觉得AI工程本身并不神秘它就是把一个AI想法变成可持续运行的业务系统的全过程。从定义问题开始到数据准备、模型构建、交付上线再到以数据驱动的持续迭代每一个环节都有大量的经验成分在里面。最重要的一件事是始终用工程思维去对待你的AI系统而不是永远停留在一个又一个模型实验的兴奋里。踩过的坑都可以变成下一个项目的铺路石你的技术栈和个人能力也是从这些从零到一的项目中真正长出来的。
返回列表