ARTICLE DETAIL

资讯详情

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

AI Native架构实战:从零构建以AI为核心业务系统的完整指南

AI Native架构实战:从零构建以AI为核心业务系统的完整指南 去年我们组接了一个内部订单管理系统的改造需求老板给的方向很明确全面拥抱AI。第一版我们干的事和大多数团队差不多——在页面上加一个对话框背后用API调用接一个大语言模型用户问一句系统答一句查个订单、翻个工单都要靠程序员提前写好模板。上线一周日活个位数评论区全是吐槽问快了答不上来答错了没法纠偏稍微复杂点的需求就露馅。后来我们心一横把整个设计推翻重来不再把大模型当成页面上的一个“智能问答组件”而是让系统结构本身围着AI转。这就是我理解的AI Native不是给老系统打补丁而是从零开始把大模型的推理能力当作系统的中枢和第一公民来构建。这篇文章我会把这一整套思路完整地拆开从核心理念到运行时设计、记忆分层、工具接入、可观测性再到一个端到端的落地方案。如果你也在规划一个以AI为核心的内部系统或者正纠结于“是不是上个Agent框架就行了”这些话应该能帮你少走不少弯路。1. 到底什么是AI Native先拆掉三个常见误解1.1 不是“接入大模型”而是“围绕推理重构系统”AI Native被讨论了很久但很多人把“调了API”等同于“做了AI Native”这个混淆是根子上的问题。我觉得可以用一个类比说清楚马车装发动机不等于汽车。给汽车装上发动机变速器、传动轴、底盘、转向机构、刹车全都得重新设计甚至连驾驶员的习惯都要变。同样AI Native不是在一个传统的CRUD系统里嵌入一个智能模块而是把“感知—推理—行动—反思”这个循环作为系统的主干数据、流程、工具、权限全部围绕这条主干重新组织。你去看Alibaba发布的AI Native研发范式实践手册会发现里面强调的也不是“用了多少个大模型接口”而是研发范式本身的变化从“基于规则和确定性的编程”转向“基于目标和不完全确定性的协同”。传统模式下代码告诉系统每一步做什么AI Native模式下代码定义可能的动作空间和约束边界大模型在每一轮请求中实时决定下一步做什么。所以衡量一件事是不是AI Native我认为看三条就够了AI是否有权在运行时做出分支决策而不是只做检索或总结系统是否围绕“上下文”而不是“表单字段”设计核心数据流是否经过模型的推理而不是只在边缘调用API。三条都满足基本可算AI Native只满足第三条多半是名词包装。1.2 为什么现在才讨论AI Native不是过去的架构师笨是过去大模型的成本、延迟、稳定性根本撑不起这个循环。早期如果要让AI做一次决策动辄几十秒、几块钱的成本把它放在生产链路里当执行中枢老板看了报表会晕过去。但现在情况变了上下文窗口从几K涨到100K甚至百万级推理成本降了两个数量级以上响应速度也压缩到了秒级以内。更重要的是工具调用function calling和应用协议如MCP这类模型上下文协议逐渐标准化模型不再只能给你一段建议文字而是可以直接产出结构化的工具调用指令系统按这个指令去执行再把结果喂回去。基础设施的变化让AI Native从“理念”变成了“工程可落地”这是最根本的原因。当然市面上关于“AI Native架构”的说法并不统一有人讲的是“用AI原生重写业务系统”有人讲的是“AI原生的模型训练平台”还有人讲的是“AI原生的研发流程”。我在这里只谈工程落地视角一套业务系统从架构上把AI当作核心执行引擎来设计。1.3 哪些系统适合从零构建AI Native我见过不少团队把AI Native当银弹什么项目都想套。实际上适合从零构建AI Native的系统有三个比较明显的特征。第一业务逻辑中存在大量非确定性的判断和决策很难用穷举规则覆盖。比如售后工单的分类、维修方案的推荐、客户情绪的识别与应对策略选择。第二交互方式是自然语言为主而不是表单和按钮为主。第三用户愿意接受“有置信度”的服务体验也就是系统给出建议的同时允许人工介入修正而不是要求百分百精确。如果有团队拿一个纯财务对账系统来问我要不要重构成AI Native我的答案通常是不建议。那个场景规则清晰、结果必须可审计大模型的概率输出反而会制造麻烦。相反工单系统、运维辅助、客户成功运营、内部知识助手这类场景天然适合AI作为中枢。后续章节里我用一个订单服务助手作为案例来拆全过程也是因为它同时具备上面三个特征。2. 从零开始的第一个选择用什么做“AI核心”的运行时2.1 直接调API还是上Agent框架有了设计目标之后面临的第一个技术选型不是数据库也不是中间件而是“AI核心”的运行方式。目前市面上有三条路直接调用LLM API、上通用Agent框架比如LangChain、Semantic Kernel、自研轻量级Agent运行时。我把三者的特点拆成一张对比表方案上手成本灵活性与可控性长期维护风险适合场景直接调LLM API最低高全部自己拼装低依赖少PoC、单轮任务、学术验证通用Agent框架中中框架约束较深高升级频繁、抽象复杂快速原型、内部小范围工具自研轻量运行时较高最高逻辑完全由自己掌控中需要持续打磨生产级核心系统、长期演进我自己的结论很明确生产级AI Native系统最终都要走到第三条路。通用框架做一次Demo很痛快但一旦进入多轮复杂任务调试链路深不见底框架每个小版本都可能改变隐藏行为。我见过一个团队用某个框架上线后因为依赖库升级Agent的引擎行为全变了排查了整整一周才发现是老版本“碰巧”能用、新版本“正确地”拒绝了某个规范外的工具参数。2.2 自研Agent运行时最少要具备什么如果你认同自研的方向接下来就要聊清楚一个只满足生产需求的最简Agent运行时至少包含几件事——Agent循环、状态管理、沙箱执行。Agent循环是整个系统的心脏。它本质上是一个循环接收输入用户消息、系统事件、工具返回→ 组装上下文 → 调用推理引擎进行决策 → 得到结果可能是最终回复也可能是一个工具调用指令→ 执行工具 → 把结果写回状态 → 进入下一轮迭代。这个循环在我设计的方案里不是无限转的必须设置最大迭代上限。默认给10轮超过就强制终止并寻找人工介入防止模型在错误路径上空转。状态管理是新手最容易忽略的。AI Native系统的状态不只有数据库里的业务状态还包含“当前任务所处的推理阶段”。我建议把状态封装成一个可序列化的结构体里面至少有这么几个字段目标列表、已完成步骤、未决选择、执行计划、错误计数器。所有状态的变更都由Agent循环中的“执行器”负责模型本身只能通过工具调用来影响状态绝不允许模型直接修改内存里的状态对象。原因很简单模型输出是概率性的如果它能直接改状态一个幻觉就能让整个系统进入非法状态而且事后几乎无法追溯。沙箱执行则是一个机制层面的保障。所谓沙箱不是说一定要把工具放到容器里跑而是指“工具的访问范围必须显式声明”每个工具声明自己可以访问哪些资源、可执行哪些操作Agent运行时在执行前做一次权限匹配匹配不过直接拒绝并把原因写回给模型。这样一来即使模型产生了越权调用系统层面也能拦得住故事就变成了“可控的失败”而不是“不可控的事故”。2.3 为什么我把“编排逻辑”放在“代码提示词”的中间层自研运行时最容易掉进去的另一个坑是试图把所有的决策逻辑都塞进Prompt或者反过来全部塞进代码。纯Prompt驱动的坏处是AI一旦在某轮决策中选错工具你只能用自然语言去纠正它多轮下来模型会混乱测试也不好做。纯代码驱动的坏处是一旦出现规则无法覆盖的输入系统就没有任何兜底能力又退回了传统写死逻辑的老路。我的做法是在两者之间加一个“中间层”。我们可以给系统定义一个“策略配置文件”里面用结构化的方式描述任务类型、可用的决策路径、优先级和约束而不是让模型自由发挥。举个例子订单状态查询这个任务配置里直接写明第一步必须调用订单查询工具验证订单存在第二步才允许调用库存或物流查询未经验证的订单不允许进入售后动作。这个编排逻辑不是Prompt也不是散落的代码而是一份机器可校验的策略表。模型在策略表划定的范围里做选择和规划代码负责强制策略表的执行——两边各干各擅长的系统的确定性边界才清晰。提示这个中间层设计是自研运行时和通用框架最大的差别。通用框架把编排逻辑藏在框架内部出了问题你只能看文档、发issue自己设计中间层出了问题你直接看策略表就够了这决定了后续调试成本的高低。3. 把记忆和上下文升级为一等公民3.1 Token预算是AI Native系统的第一预算做过传统性能优化的人习惯盯着内存和CPU但AI Native系统的第一资源约束是Token。它的重要性远超网络带宽和磁盘IO因为Token消耗直接决定了系统的延迟、成本和上下文质量。我上线第一版的时候吃过很大的亏为了让模型“记住更多的用户信息”我把一年的聊天记录全部塞进上下文结果响应时间从2秒飙到20秒费用涨了十几倍更讽刺的是回答质量反而下降了——模型被大量无关历史信息干扰核心意图都找不准。后来我们定了一个常识级别的规则上下文里的Token一定要有预算意识。我曾经把一次查询的上下文预算分配成下面的结构供参考组成模块预算占比说明系统提示与策略定义5%设定角色、边界、语气工具Schema与描述10%让模型知道“能做什么”工作上下文当前任务状态30%任务目标、中间结果、当前进度历史对话与记忆检索结果40%与当前任务最相关的历史片段预留缓冲区5%给模型输出留空间这个比例不是金科玉律但它强制团队做一件事——每次请求前都要想清楚哪些上下文值钱、哪些该丢。我从那以后养成了一个习惯把上下文组装专门做成一个模块每次上线前跑一遍Token统计但凡发现预算超了就要问一句“这是必须的吗”效果很好。3.2 记忆分层工作记忆、短期记忆、长期记忆人类记忆是分层的AI Native系统的记忆也应该这样否则你会在成本和效果上两头亏。我设计的分层结构是这样的工作记忆对应当前对话过程中的状态数据存活时间极短跟着请求走放内存或Redis KV就够了。它负责的是“本回合发生了什么、当前在做什么”比如用户正在填写的参数、这轮对话已经确认过的信息。短期记忆负责跨会话但短期有效的信息例如用户最近3天的浏览和操作轨迹用Redis存JSON就行设置过期时间。长期记忆则是用户画像、领域知识、历史偏好这类稳定信息这部分我认为应该放在持久化存储并且最好能用向量索引支持的语义检索来读取。很多团队一上来就买向量数据库搞RAG检索增强生成把所有东西都往里倒。我的经验是先把工作记忆和短期记忆用最朴素的KV数据结构做好长期记忆才需要上升到向量化语义检索那一步不然就是杀鸡用牛刀还引入了一堆维护负担。3.3 RAG不是插件是语义记忆子系统传统的RAG在架构图里往往是个被框起来的“知识增强模块”输入查一下、拼进上下文、完事。但在AI Native系统里RAG不应该是一个旁路插件它应该被当作语义记忆子系统来设计——承担的是整个系统“知道什么”的职能与Agent循环里的“推理引擎”平级。这里说三类重点场景知识实时更新、冲突消解、引用溯源。知识实时更新指的是你修改了文档第二天系统查询到的语义结果必须随之变化不能依赖离线快照。冲突消解指的是同一问题在多份文档里答案不一致时系统要能判断“哪份是最近的”或者“哪份是业务权威源”而不是把两个答案一起丢给模型去猜。引用溯源指的是系统回答用户问题时需要能给出依据——它凭什么这么回答来源是哪里这不仅是解释性的问题也是业务审计对AI系统的期待。只做一个“文本切块向量检索”的RAG在这三个场景上都会露馅。4. 工具接入的正确姿势从REST到“自然语言指令”4.1 工具描述与Schema设计决定Agent能力边界在AI Native架构里传统的REST API依然是底层实现但模型与它们打交道的方式变了。模型不再读一遍开发文档而是通过一个工具协议来发现和调用它们。我认为工具描述的设计质量几乎决定了Agent能力的半条命。每个工具必须要有一份结构化的描述字段包括工具名称、一句话简介、参数Schema遵循JSON Schema规范、返回值Schema、调用前置条件、权限等级、执行是否可逆。其中参数描述里最容易被忽视的是枚举值和边界约束。比如一个“查询订单状态”的工具如果你在描述里不写清楚“status字段的可选值有CREATED、SHIPPED、COMPLETED、CANCELLED”模型就可能把“已完成”猜成“DONE”然后程序侧做字符串匹配就匹配不上白白浪费一轮甚至更多调用。我见过太多的工具接入程序员只把函数里的参数名抄到描述里连“这个参数是用来干什么的”“哪些情况会返回错误”都不写。然后模型在真实场景里翻车团队第一反应是“换个更大的模型”。其实很多时候不是模型不行是工具描述写得不行。4.2 多工具协作中的冲突与仲裁单体Agent调用单一工具很顺但真正常见的是同一个目标可以被多个工具达成。比如用户问“能不能帮我看看我的快递到哪了”系统里既有“订单查询工具”也有“物流查询工具”还有“客户服务历史查询工具”模型很可能调用错了。解决这个问题我不建议靠大模型的“智能”去猜而是要用中间层的仲裁逻辑做一次基于规则的优先路由。我见过的一个可行方法是对工具按“业务领域操作类型”打标签然后在策略配置里写明优先级规则用户请求中出现在哪个业务域的关键词优先使用哪个域的工具如果命中了物流关键词直接锁死物流查询工具不把决策权交给模型的自由发挥。设定优先级有点像是给工具加了“白话版收费指南”模型在合理路径上是自由的但在明显不该走的路口有路障。另一个必须处理的问题是工具的幂等性。模型在Agent循环里有可能对同一个工具发起重复调用比如网络超时导致模型重试。如果这个工具本身不是幂等的——比如“创建工单”“发送通知”“扣减库存”——就会造成线上事故。所以API侧每个工具最好支持调用方传入幂等键运行时负责生成并跟踪这个键重复请求过来直接返回第一次的结果。这是AI Native系统承上启下最容易被忽视的工程底线。4.3 工具执行的权限与审计工具接入的最后一个重要问题是权限模型。传统系统里权限是绑在用户身上的——你这个账号能看哪些页面、改哪些数据。AI Native系统里多了一层“模型发起工具调用”的间接性权限必须跟着用户走不能跟着模型走。也就是说Agent运行时要以当前用户的身份去执行工具并且这个身份验证必须放在运行时里强制做不能交给工具自己自觉。具体来说每个工具调用都要经过一个执行前的权限检查记录调用人、被模仿的用户身份、工具名称、参数、触发时间。凡是涉及写操作或对外可见动作的工具我建议一律要求二次确认。所谓“二次确认”可以是在应用里弹一个确认按钮也可以是比默认权限高一级的授权码校验。这块做得越严格后续上线后你睡得就越安稳。注意AI Native系统如果权限设计不到位你给别人服务的不是“AI助手”而是一个别人控制不了的“自动运维机器人”。哪怕是内部系统我也强烈建议把工具执行的审计日志当作核心监控数据来对待而不是事后追责用的边角料。5. 可观测性、成本与故障降级AI Native的运维三件套5.1 每次推理都是一次函数调用日志与链路追踪很多人第一次调试AI Native系统会特别不习惯传统代码是确定性的同样的输入必然同样的输出发现问题就能复现但大模型是概率性的同样的输入可能每次走不同的决策路径出错之后你想复现它偏不复现。所以AI Native系统的可观测性必须做到一个硬指标单次完整请求的全链路追踪。我要求每次请求进来立刻生成一个traceId。从第一轮模型调用到最后一轮工具执行完毕每一次LLM调用的入参、出参、token数、模型名、延迟全都要记录每次工具调用的入参、出参、错误信息也全都要记录。这些记录统一汇到日志中心支持按traceId一键回放整个请求的“决策路径”——用户说了什么模型在上一步做了什么判断它决定调用哪个工具结果如何下一步又怎么调整。没有这套trace体系AI Native系统就是一个黑盒子出现问题只能靠猜。5.2 模型分级路由与预算控制为了让AI Native系统运营成本可控不要一上来就给所有请求配同一个旗舰模型。系统里的任务有难有易有的是“判断用户情绪”这种轻量级意图分类有的是“规划一个多步骤售后方案”这种展开推理。我给系统设计了模型分级路由按需调用不同规格的模型。任务类型推荐模型档位理由意图分类、实体抽取低档快、便宜简单任务无需强大推理单步决策、工具调用解析中档需要一定的指令跟随能力多步骤规划、复杂推理高档需要深度思维链与复杂工具调度关键敏感会话总结高档人工抽检准确性要求极高容错空间小分级路由在工程上不是一句“动态换模型”那么简单它需要在策略配置文件的决策路径里提前标注“这一步允许使用哪个模型档位”。我建议先从固定映射开始系统提示固定使用中档工具调用解析可以使用中档多步骤规划固定使用高档。等跑通之后再考虑基于历史成功率的动态路由一步步优化成本。5.3 AI不稳怎么办降级链路设计即使模型能力再强它也会有抽风的时候会有接口超时的时候会有供应商服务降级的时候。AI Native系统在设计之初就必须把“AI不可用”当成一个正常状态来对待而不是小概率事件。我的做法是在Agent运行时外层加一个智能网关它负责两件事——健康检查和自动降级。健康检查会对每个外部模型API做定时探活和延迟统计当连续失败次数超过阈值时网关自动把请求切换到备用模型通道或者直接切到“人工客服模式”。“人工客服模式”看似是一个让步设计其实是AI Native系统必须有的逃生通道所有Agent无法决策的请求、超时的请求、连续重试失败的请求都必须能在阈值触发后转给一个固定的人工处理页面附带完整的上下文摘要和traceId让人最快时间接手。我再补充一个实践细节不管AI系统多成熟临界场景不要追求“AI全自动”而是“AI处理90%、人工兜底10%”这个比例已经是很好的生产体验了。主动设计降级链路比事后救火要体面得多。6. 落地一个AI Native功能端到端实例拆解6.1 场景选择为什么“订单状态助手”比“客服机器人”更适合首发如果团队内部还没有任何AI Native实践我建议选一个业务边界清晰、复杂度适中、业务价值明确的功能来做首发验证。我用我们自己做过的“订单状态助手”做例子拆解。有人会问这不是和客服机器人差不多吗其实差别很大。客服机器人的定位通常是“取代客服回答常见问题”而订单状态助手的定位是“帮助用户在订单生命周期内搞定一切状态相关的事”。前者偏问答后者偏任务执行。基于任务执行的系统更容易体现出AI Native架构的价值除了回答问题它还能帮你查库存、改地址、通知仓库优先发货、更新工单状态——每一个动作都是工具调用都是系统承担实际业务责任的证明。相比之下一个只聊天的机器人只是调用了模型API没有进入业务执行层根本检验不了架构的成色。6.2 从意图到工具一个具体请求的完整旅程假设用户发来一句话“订单ORD2024001为什么还没发货我后天就要用了能不能帮我催一下”在AI Native架构里这个请求的完整旅程是这样的意图分类器轻量模型识别出这是“订单状态查询紧急催发货”复合意图。运行时从工作记忆中加载当前会话上下文并从长期记忆里检索这个用户近期的购买记录和订单习惯。高档规划模型生成行动计划输出结构化结果第一步调用订单查询工具获取ORD2024001的当前状态第二步根据状态决定是否调用库存查询工具第三步若是缺货则调用仓库沟通工具尝试催发货第四步汇总状态给用户。运行时逐条执行计划先调用订单查询工具返回“已发货但物流未更新”再调用物流查询返回“运输中预计3天后到达”催发货工具因“运输中”状态不符合触发条件策略配置明确仅“待发货”“缺货”状态才允许催发被权限层拦下并给模型返回拦截原因。模型根据工具返回结果重新规划决定本轮不再执意催发而是回复告知用户运输中提供预计到达时间并主动询问是否需要设置到达提醒。用户回复“好帮我设置提醒”运行时执行设置提醒工具整个会话完成之前所有工具体执行动作都有日志记录。这个例子完整展现了AI Native的典型特征任务拆解、工具调用、规则拦截、自适应调整、上下文流转。每一步都是由系统内的“推理执行校验”结构完成的而不是一个简单的API问答。6.3 首发版本的功能边界哪些坚决不做对于首发版本功能边界定得清晰比功能丰富重要得多。我在做第一个版本时给自己定了三条明确的边界线第一不做任何涉及资金操作和不可逆操作的自动化执行。改地址可以由AI发起但要人工确认退款则必须转人工系统只能准备材料。第二不做AI虚拟人格拟人化。用户骂系统、开玩笑、发莫名的表情模型一律保持专业客服语气不回怼、不模仿幽默、不试图建立“情感连接”。第三不承诺百分百准确的自我认知。任何模型生成的内容在底部都自动带一句“由AI生成可能存在误差”并在复杂场景中主动提示用户“这个问题我拿不准帮你转人工”。这些边界看似保守但保证了首发版本在业务侧的可接受度也为后续放开自动化空间积累了信任基础。7. 从传统架构迁移的路线图与避坑清单7.1 三步走AI增强、AI编排、AI Native不少团队面对存量系统没法推倒重来。我建议的迁移路径是三步走AI增强、AI编排、AI Native。AI增强是在现有系统两侧增加AI能力比如给搜索结果做智能摘要、给客服系统加意图识别路由。这个阶段的特征是AI不直接进入业务执行链路改动最小、风险最低、见效最快。AI编排则是把现有业务系统的能力封装成工具让AI来做任务拆解和调度业务系统的核心数据与规则保持不变AI只做“决策”和“调用编排”。这个阶段你会发现原系统被改造成了一个“被AI调用的平台”这才是架构层面最大的变化。AI Native是最终形态核心的业务流程数据模型开始围绕Agent运行时设计传统的前端、后台、服务层之间的边界都被重新定义新业务逻辑默认写成“工具策略配置”而不是“接口表单”。我建议在存量系统上先走完第一步和第二步不要试图一步跨越到第三步。跨得太大团队和组织文化都跟不上最终往往会因为一次线上事故被紧急回退。7.2 我踩过的四个坑在这套体系从零到一的过程中我踩过不少坑下面这四个最值得拿出来提醒大家。第一个坑是“提示词万能论”。最开始我相信只要Prompt写得足够好模型就不会犯低级错误。实际上模型在大规模应用里的错误形态千奇百怪靠提示词去堵漏洞就像用卫生纸堵漏水的水管堵住一个、漏出三个。正确的姿势是用代码做确定性兜底提示词做柔性引导规则能判断的事绝不用模型去猜。第二个坑是“Agent自由发挥”。第一版给了模型10多个工具让它自由选择结果模型经常调错或者在两个功能重叠的工具之间反复横跳。后来我把工具分成“读工具组”和“写工具组”配合策略配置里的路径锁模型只能按策略走成功率翻倍。不是限制模型能力而是约束决策空间反而能提高它在该空间内的表现。第三个坑是“上下文塞满”。客户总觉得“让AI多看点历史它就能更懂用户”这个直觉没错但在工程上很危险。不加筛选地塞历史会让模型抓不住核心意图。我后来改用摘要在前、明细在后、强相关置顶的上下文组织方式模型回答准确率反而上来了。第四个坑是“调试无trace”。老一代思维做传统系统时出错就翻日志、看报错栈、断点调试。但AI系统出错往往是路径走错了而不是代码异常。没有全链路trace你只能把一次失败请求原封不动再发一遍也不能保证复现。建立trace体系的那一刻我才觉得这个系统是可管理的。7.3 团队能力模型如何调整最后说一句团队层面的变化。AI Native项目的研发团队能力模型和传统后端团队差别不小。除了常规的后端工程师、前端工程师团队里最好有专门负责策略配置和提示词设计的“AI交互工程师”还要有持续维护评测集的人——每改一版策略都要用一批真实历史请求做回归测试确保没把原来的能力改坏了。很多团队卡在“运维思维”上面——AI Native确实更难运维因为系统的行为空间变大了。你不能再用“改一行代码、跑一次部署、出结果都一样”的思维来看它。每次模型版本升级、每个Prompt细微调整都可能引发行为变化。所以我把评测集当成整个系统最重要的资产之一来维护它的重要性不亚于代码仓库。说到个人体会我在踩过这些坑之后最深的感受是AI Native没有一个放之四海而皆准的标准答案我们讨论的不是“最终形态”而是“演进方向”。核心原则其实就一条——把AI当作系统的心脏而不是挂在墙上的装饰画。不要等大模型再强一点才开始动手先把最小运行时跑通把工具协议、记忆分层、trace体系立起来后面所有的问题都是迭代问题而不是重新发明的烦恼。
返回列表