1. 项目概述:当LLM成为系统核心
最近和不少做架构和开发的朋友聊天,发现一个挺有意思的现象:大家嘴上都在聊大模型、聊AI,但真到了要动手改造自家系统的时候,又有点无从下手。感觉像是手里有了一把瑞士军刀,却不知道从哪块木头开始削。这其实就是“AI原生架构”这个概念的起点——它不是一个简单的技术选型,而是一场从底层逻辑开始的系统性重构。
简单来说,AI原生架构意味着,大型语言模型(LLM)不再是系统外围的一个“智能插件”或“聊天机器人”,而是成为整个应用架构的“中央处理器”和“决策大脑”。传统的软件架构,无论是单体还是微服务,核心是处理确定性的逻辑和结构化的数据流。而LLM带来的是一种非确定性、基于概率的推理能力。当这种能力成为核心驱动力时,我们过去习以为常的设计模式、数据流、甚至运维监控体系,都需要被重新审视和构建。
这不仅仅是技术栈的升级,更是思维模式的转变。比如,一个传统的电商推荐系统,其核心是规则引擎和协同过滤算法,输入是用户的历史行为数据,输出是商品列表。而在一个AI原生的推荐场景里,LLM可以理解用户用自然语言描述的模糊需求(“我想找一款适合周末露营、轻便又能装的三脚架”),结合商品知识库、用户画像、实时上下文(如天气、地理位置),生成一个带有解释的、个性化的推荐方案。这里的LLM,扮演的是需求理解、信息整合、推理决策和自然语言生成的多重角色。系统重构的目标,就是让LLM的这些能力能够被高效、可靠、低成本地调用和管理起来。
2. 核心设计思路:从“调用”到“编排”
当我们决定拥抱AI原生时,第一个要摒弃的想法就是“把LLM API当数据库查”。这会导致系统脆弱、成本失控且难以维护。真正的重构,始于设计思路的转变:从简单的函数“调用”(Invocation)转向复杂的智能“编排”(Orchestration)。
2.1 思维范式转变:确定性 vs. 概率性
传统软件是确定性的。给定相同的输入,经过相同的代码路径,必然得到相同的输出。我们依赖单元测试、集成测试来保证这种确定性。但LLM是概率性的模型,其输出具有随机性(即使温度设为0,不同版本、不同批次的模型也可能有细微差异)。这种根本差异要求我们在架构中内置对“不确定性”的管理。
我的一个实操心得是 :不要试图用工程手段完全消除LLM的不确定性,而是设计系统去“包容”和“利用”这种不确定性。例如,对于关键的业务决策点(如是否批准贷款),可以设计一个“双保险”机制:LLM给出初步判断和理由,再通过一个确定性的规则引擎或更小、更专精的分类模型进行二次校验和兜底。这样既利用了LLM强大的语义理解能力,又保证了核心业务逻辑的可靠性。
2.2 核心架构模式:智能体(Agent)与工作流(Workflow)
这是当前AI原生架构的两大核心范式。它们不是互斥的,而是常常协同工作。
智能体(Agent) 是一个具有自主性的软件实体,它能感知环境(通过工具),利用LLM进行思考规划,然后执行动作(调用工具),并基于结果持续学习或调整。你可以把它想象成一个拥有专业知识和一套工具箱的虚拟员工。例如,一个数据分析智能体,用户可以用自然语言让它“分析一下上季度华东区的销售数据,找出下滑最严重的三个产品并分析可能原因”。这个智能体会自主规划步骤:1. 调用数据库查询工具获取数据;2. 调用Python计算工具进行聚合排序;3. 调用LLM分析原因并生成报告。
工作流(Workflow) 则更侧重于对复杂、多步骤任务的流程编排。它定义了任务执行的顺序、条件分支、并行处理以及错误处理。工作流引擎负责协调LLM调用、工具执行、人工审核等不同节点。例如,一个内容审核工作流:用户提交内容 -> LLM进行初筛(标记高风险内容)-> 对于高风险内容,并行启动“敏感词过滤工具”和“图像识别模型” -> 综合结果送入“人工审核队列”或直接做出终审决定。
在实际架构中,我们常常采用 “工作流编排多个智能体” 的模式。工作流是骨架,定义了业务的宏观流程;而智能体是肌肉和器官,负责在每个环节完成具体的、需要智能判断的微观任务。这种分层设计使得系统既保持了宏观流程的清晰可控,又具备了微观执行的灵活与智能。
3. 关键技术组件与选型考量
构建一个健壮的AI原生系统,远不止是接一个API那么简单。它需要一整套技术组件的支撑。下面我结合自己的踩坑经验,聊聊几个关键组件的选型和设计要点。
3.1 LLM网关与模型路由层
这是系统的“交通枢纽”。直接让每个应用服务去调用各大厂商的原始API是灾难的开始,会导致密钥管理混乱、成本不可控、无法统一降级和限流。
一个基础的LLM网关应具备以下核心能力:
- 统一接入与认证 :对外提供统一的API接口,内部集成OpenAI、Anthropic、国内各大厂商以及开源模型(如通义千问、DeepSeek、GLM等)的SDK。所有密钥在网关层统一管理。
- 智能路由 :根据请求的语义、对延迟/成本/质量的要求,自动将请求路由到最合适的模型。例如,简单的意图分类可以路由到低成本的小模型,复杂的创作任务则路由到能力最强的大模型。
- 降级与熔断 :当某个模型服务出现高延迟或故障时,能自动切换到备用模型,保证服务的可用性。
- 缓存 :对于频繁出现的、结果确定的提示词(Prompt),将其输出结果缓存起来,能极大降低成本和提升响应速度。特别是对于一些知识库问答的场景,缓存命中率可以非常高。
- 监控与计量 :详细记录每次调用的模型、Token消耗、耗时、成本,为后续的优化和计费提供数据支持。
在选型上,你可以考虑像 FastGPT 、 Dify 等开源项目提供的网关能力,也可以基于 LangChain 或 LlamaIndex 的抽象层自行封装。如果团队规模大、需求复杂,自研一个轻量的网关控制层往往是更灵活的选择。 我个人的经验是 ,初期可以先用开源方案快速搭建,但一定要预留好扩展接口,因为随着业务深入,你对流量调度、成本优化的策略会越来越复杂。
3.2 提示词(Prompt)工程与管理
Prompt是驱动LLM的“燃料”和“指令”。在AI原生架构中,Prompt不应该散落在各个业务代码的字符串里。
-
模板化与变量注入
:将Prompt设计成模板,比如一个客服回答模板:
“你是一个专业的客服,请根据以下用户问题{question}和知识库内容{knowledge},用友好、专业的口吻回答。”这样,业务代码只需要关心注入哪些变量(question, knowledge),而不需要改动Prompt本身。 - 版本管理与A/B测试 :Prompt的微小改动可能对输出质量产生巨大影响。需要像管理代码一样管理Prompt的版本,并能对不同的Prompt版本进行线上A/B测试,通过数据(如人工评分、用户满意度)来选择最优版本。
-
结构化输出(JSON Mode)
:这是连接LLM非结构化输出和下游确定性业务逻辑的关键桥梁。强制要求LLM以指定的JSON格式输出,下游系统就能像解析API响应一样可靠地处理。例如,让LLM分析用户情绪,输出
{“sentiment”: “positive”, “confidence”: 0.95, “key_reasons”: [“...”, “...”]}。
这里有个常见的坑 :过于复杂和冗长的Prompt。初期我们总想通过一个“万能Prompt”解决所有问题,结果导致Token消耗巨大、响应慢,且效果未必好。更好的做法是 “链式思考(Chain-of-Thought) + 任务分解” 。设计多个简单的、专一的Prompt,让它们通过工作流串联起来,各司其职。比如,先用一个Prompt做意图识别,再根据识别出的意图,调用另一个专用的Prompt来处理具体任务。这样每个Prompt都更精准,也更容易调试和优化。
3.3 工具调用(Function Calling)与知识检索
LLM本身的知识可能过时,也不擅长精确计算或查询私有数据。因此,为LLM“装配工具”是提升其实用性的关键。
- 工具定义与封装 :将内部API、数据库查询、计算公式等封装成LLM可以理解和调用的“工具”。工具的描述(名称、功能、参数格式)必须清晰准确,这直接决定了LLM能否正确使用它。
-
检索增强生成(RAG)
:这是解决LLM“幻觉”和知识更新问题的核心技术。其核心流程是:用户提问 -> 将问题转换为嵌入向量 -> 在向量数据库中搜索最相关的文档片段 -> 将这些片段作为上下文注入Prompt -> LLM生成基于给定上下文的答案。
- 难点在于检索质量 :如果检索到的文档不相关,LLM就会“胡编乱造”。提升检索质量需要多管齐下:1. 文档预处理要精细(合理分块、添加元数据);2. 尝试混合检索(结合关键词搜索和向量搜索);3. 使用重排序模型对初步检索结果进行二次精排。
-
Agent执行循环
:智能体的核心执行逻辑是一个循环:
感知(用户输入+工具结果)-> 思考(LLM规划下一步)-> 行动(调用工具)-> 观察(获取工具结果)。架构上需要设计一个稳定的执行引擎来驱动这个循环,并设置超时、最大步数等限制,防止智能体陷入死循环或产生过高成本。
在工具调用上,一个重要的实践是“权限最小化”原则 。不要给智能体开放所有数据库的读写权限。应该通过专门的、功能明确的工具API来暴露能力。例如,不是让智能体直接执行SQL,而是提供“查询用户最近订单”、“根据产品ID获取详情”这样的工具。这样既安全,也降低了LLM理解和使用工具的难度。
4. 非功能属性的架构挑战与应对
当LLM成为核心,传统的性能、可靠性、安全等非功能属性要求都面临着新的挑战。
4.1 性能与成本优化
LLM API调用慢、贵,是不争的事实。优化是贯穿始终的课题。
-
延迟优化
:
- 流式响应 :对于长文本生成,务必使用服务端推送事件(SSE)实现流式输出,让用户能边生成边看到内容,极大提升体验。
- 缓存策略 :如前所述,实施多级缓存(Prompt结果缓存、嵌入向量缓存、检索结果缓存)。
- 模型蒸馏与小模型 :并非所有任务都需要千亿参数模型。探索使用蒸馏后的、更小的专用模型(如几亿参数的模型)来处理特定任务,如情感分析、实体抽取,速度能快一个数量级。
-
成本控制
:
- Token精打细算 :优化Prompt,移除冗余信息;在RAG中,控制注入上下文的长度,只选取最相关的片段。
- 异步与批处理 :对于非实时任务(如批量生成商品描述、审核大量内容),可以将请求队列化,然后批量发送给LLM API,有些厂商的批量接口有折扣。
- 预算与告警 :在LLM网关层设置每日/每月预算和消耗告警阈值,严防意外流量导致的“账单爆炸”。
4.2 可观测性与调试
调试一个概率性的黑盒系统是痛苦的。传统的日志仅能记录输入输出,远远不够。
- 全链路追踪 :必须为每一次用户会话分配一个唯一的Trace ID,这个ID需要穿透整个调用链:前端 -> 网关 -> 多个Prompt调用 -> 多个工具调用 -> 向量检索。这样当出现问题时,你能完整地复现智能体的“思考过程”。
- 思维过程记录 :除了最终输出,更要记录LLM在每一步的“内心独白”(Chain-of-Thought),这对于分析智能体为什么做出了错误决策至关重要。像LangSmith这类工具就是专门为此设计的。
- 评估体系 :建立自动化和人工结合的评估体系。自动化评估可以检查输出格式、是否包含敏感词、是否调用了正确的工具等。人工评估则针对核心场景,制定评分卡(相关性、有用性、安全性等),定期抽样评分,指导模型和Prompt的迭代。
4.3 安全与合规
这是红线,尤其在内容生成领域。
- 输入输出过滤 :在网关层或应用层,必须部署强大的内容安全过滤器。对用户输入和模型输出进行双重扫描,过滤违法、违规、歧视性内容。这通常需要结合关键词、正则表达式和专门的安全分类模型。
- 数据隐私 :确保用户输入的个人隐私信息(手机号、身份证号)不会原封不动地送入第三方LLM。需要在送入前进行脱敏处理,或者在输出后进行二次掩码。
- 可控性与兜底 :对于高风险操作(如发送邮件、执行数据库写入),必须设计“人工确认”环节,或者要求智能体提供完整的执行计划经审核后再行动。系统必须有“急停”开关,可以随时切断某个智能体或某类任务的执行。
5. 演进路径与团队协作建议
从传统架构迁移到AI原生架构,不可能一蹴而就。我建议采用“由外而内,由点到面”的渐进式演进策略。
第一阶段:外围赋能 在现有系统不动的前提下,选择1-2个独立的、对现有业务流程影响小的场景进行试验。例如:
- 智能客服助手 :在现有客服系统中增加一个基于知识库的问答机器人。
- 内容摘要生成 :为新闻列表或长报告自动生成摘要。 这个阶段的目标是让团队熟悉LLM的基本使用模式、Prompt工程和RAG技术,并积累最初的信心和案例。
第二阶段:流程增强 开始改造核心业务流程中的某些环节,用LLM增强其能力。例如:
- 订单审核流程 :引入LLM智能体,自动预审订单备注中的异常信息(如矛盾地址、特殊要求),将可疑订单标记并优先推给人工,提高审核效率。
- 代码开发 :为研发团队部署基于本地或云端代码大模型的编程助手(如Cursor、通义灵码),将其深度集成到IDE和代码评审流程中。 这个阶段,LLM开始与核心系统交互,需要建立前面提到的网关、监控等基础设施。
第三阶段:原生重构 当经验和基础设施足够成熟后,可以考虑设计全新的、以LLM为核心驱动力的产品功能或业务线。例如,设计一个完全由智能体驱动的、支持多轮复杂对话的个性化旅行规划器。此时,你需要从第一天就以AI原生的思维来设计数据流、状态管理和用户体验。
在团队协作上,最大的变化是角色融合。 传统的“产品经理提需求、设计师出原型、工程师开发”的流水线模式会面临挑战。因为LLM的行为难以精确预测,需求无法被完全“规格化”。建议组建小型跨职能团队(产品、研发、算法、测试),以“实验”和“迭代”为核心工作方式。产品经理需要学习如何撰写和评估Prompt,工程师需要理解模型的能力边界,测试人员需要设计针对非确定性输出的评估用例。大家共同面对这个“黑盒”,通过快速构建原型、测量效果、分析归因、持续调整来共同推进项目。

629

被折叠的 条评论
为什么被折叠?



