1. 大模型三层架构到底在拆什么
第一次听到“大模型三层架构”这个说法,很多人会下意识往MVC、物联网三层架构那边联想,觉得是不是又搞了个新名词来包装老概念。其实不是。我做了几年AI应用落地,从早期调API拼Demo,到后来自己搭推理服务、做微调、接业务系统,踩了一圈坑之后回头看,发现所有能跑通、能维护、能持续迭代的大模型应用,骨子里都逃不出三层:基础模型层、模型服务层、AI应用层。而这三层里真正决定一个产品好不好用、能不能活下去的,恰恰是标题里说的那句话——输入什么,输出怎么处理。
先把话说透。基础模型层就是那些参数量动辄几十亿上百亿的大家伙,比如Qwen、LLaMA、DeepSeek、GPT系列、Claude系列。它们负责一件事:给定一段输入,生成一段输出。模型服务层是把这些模型包装成可调用、可管理、可扩展的服务,解决并发、显存、版本、计费、限流这些问题。AI应用层则是面向具体场景的那一层,比如制度条例学习助手、医疗问答、工业质检报告生成、代码补全插件。三层各司其职,但真正拉开差距的,从来不是“你用了多大的模型”,而是你在输入侧喂了什么、在输出侧怎么接。
我见过太多团队,花大价钱部署了70B模型,结果效果还不如别人用7B模型加一套精心设计的输入输出处理流程。原因很简单:基础模型是通用能力,它不知道你的业务黑话,不知道你的格式要求,不知道你的边界条件。你不把业务知识、格式约束、异常处理塞进输入输出环节,模型就只能靠猜。而猜,在真实业务里是要出事的。
这篇文章适合三类人看:一是刚入行AI应用开发、还在纠结“我到底该学什么”的新人;二是正在做企业级AI应用、被效果和成本两头夹击的工程师;三是想搞清楚大模型落地到底难在哪的产品和技术负责人。我会把三层架构拆开,重点讲清楚每一层的核心职责、常见坑、以及输入输出环节的具体操作手法。不堆术语,不画大饼,全是实操里能直接抄的东西。
2. 基础模型层:别把它当黑盒,它是有脾气的
2.1 基础模型到底提供了什么能力
基础模型层是整个架构的地基。你可以把它理解成一个极其博学但完全没有职场经验的实习生:知识面广,反应快,但你得把任务说清楚,还得检查它的产出。它提供的核心能力就一个——条件概率生成。给定输入序列,预测下一个token的概率分布,然后采样出结果。所有花里胡哨的能力,翻译、总结、推理、写代码,都是这个机制的涌现结果。
这意味着两件事。第一,模型本身没有“理解”你的业务,它只是在做概率匹配。第二,输出的质量高度依赖输入的表述方式。同一个问题,你换个问法,结果可能天差地别。我做过一个测试,让模型从一段合同文本里提取甲方乙方和金额。直接问“提取合同关键信息”,它给你一段散文式的总结。改成“请以JSON格式输出,字段为party_a、party_b、amount,不要输出任何其他内容”,准确率直接从六成跳到九成以上。模型没变,变的是输入。
2.2 选模型不是越大越好,要看场景匹配度
现在市面上模型多到眼花缭乱。国外的GPT-4、Claude、Gemini,国内的Qwen、DeepSeek、GLM、Baichuan、MiniMax,还有各种垂直领域微调版本。很多人上来就问“哪个模型最强”,这个问题本身就有问题。强不强要看任务。
我整理了一个简单的选型对照表,基于实际项目经验:
| 场景类型 | 推荐模型规模 | 理由 | 注意事项 |
|---|---|---|---|
| 简单分类、抽取 | 7B及以下 | 成本低、速度快,微调后足够 | 需要高质量标注数据 |
| 多轮对话、客服 | 7B-14B | 平衡效果与延迟 | 重点优化上下文管理 |
| 复杂推理、代码生成 | 32B以上或闭源API | 需要强推理能力 | 成本高,需做缓存和限流 |
| 私有化部署、数据敏感 | 开源模型本地部署 | 数据不出域 | 显存和运维成本要算清楚 |
| 多模态理解 | 专用多模态模型 | 图文音视频统一处理 | 输入预处理复杂度高 |
选型时还有一个容易被忽略的点:模型的上下文窗口。早期模型只有2K、4K,现在动辄128K甚至1M。但窗口大不代表你能随便塞。我实测下来,当输入超过模型训练时常见长度的两倍以上,中间部分的信息召回率会明显下降。这就是所谓的“迷失在中间”现象。所以别迷信大窗口,该做检索增强就做检索增强,该分段处理就分段处理。
2.3 微调不是万能药,先搞清楚什么时候该用
很多人一遇到效果不好就想微调。微调确实有用,但它解决的是“模型不知道你的领域知识”和“模型不遵守你的输出格式”这两类问题。如果问题是“模型推理能力不够”或者“输入信息本身就不足”,微调帮不了你。
我一般按这个顺序排查:先优化提示词,再考虑检索增强,最后才动微调。提示词优化成本最低,改几行字就能验证。检索增强解决知识时效性和私有知识问题,把相关文档塞进上下文就行。微调是最后手段,因为要准备数据、要算力、要调参、要评估,周期长且容易过拟合。
如果确定要微调,数据质量比数量重要得多。我做过一个实验,用500条精心构造的指令数据微调7B模型,在特定抽取任务上超过了用5000条噪声数据微调的14B模型。数据构造的核心是:输入要覆盖真实场景的各种表述方式,输出要严格符合业务格式,边界情况要明确标注。别拿网上随便下的数据集直接跑,那是在浪费算力。
3. 模型服务层:把模型变成可靠的生产力
3.1 服务层到底要解决什么问题
基础模型是个裸的推理引擎,直接拿来做业务会死得很惨。服务层要解决的是工程化问题:并发请求怎么排队、显存不够怎么调度、模型版本怎么管理、调用量怎么统计、异常怎么降级、成本怎么控制。这一层做不好,应用层再花哨也是空中楼阁。
我见过一个团队,应用层做得挺漂亮,结果上线第一天就被打挂了。原因很简单:没有做请求队列和限流,所有请求直接怼到模型上,显存瞬间爆掉。后来加了服务层,用队列做削峰填谷,用批处理提升吞吐,用缓存减少重复计算,才稳下来。服务层就是模型和应用之间的缓冲带和调度中心。
3.2 部署方式的选择与实操要点
部署大模型有几种常见方式,各有各的适用场景:
本地直接部署适合数据敏感、调用量稳定的场景。用vLLM、TGI、llama.cpp这些推理框架,把模型加载到GPU上,暴露一个HTTP接口。vLLM的PagedAttention对显存管理很友好,吞吐量比朴素实现高好几倍。llama.cpp适合CPU或低显存环境,量化后7B模型能在16G内存的机器上跑起来,虽然慢但能用。
云服务API调用适合快速验证和弹性需求。国内主流云厂商和模型厂商都提供API,按token计费。好处是不用管运维,坏处是数据要出域、成本随调用量线性增长、高峰期可能限流。我一般建议核心业务用本地部署保底,非核心或突发流量走API补充。
混合部署是很多企业的实际选择。敏感数据走本地,通用问答走API,用服务层的路由逻辑做分流。这样既满足合规要求,又控制了成本。
部署时几个关键参数要调好:max_model_len控制最大上下文长度,别设太大否则显存浪费;gpu_memory_utilization控制显存占用比例,一般0.9左右留点余量;max_num_seqs控制并发序列数,根据显存和延迟要求权衡。这些参数没有标准答案,得压测出来。
3.3 输入输出的服务层处理
服务层不只是转发请求,它还要对输入输出做预处理和后处理。输入侧要做的事情包括:敏感词过滤、长度截断、格式校验、多模态数据编码。输出侧要做的事情包括:流式返回、格式解析、异常兜底、日志记录。
流式返回是个典型例子。用户等一个长回答,如果等全部生成完再返回,体验很差。服务层要支持SSE或WebSocket,把token一个个推给前端。但流式返回带来一个新问题:如果生成到一半发现内容有问题,没法撤回。所以服务层要配合应用层做内容安全检测,可以在流式过程中做增量检测,发现违规立即中断。
还有一个容易忽略的点:超时和重试。模型推理可能因为各种原因变慢或卡住,服务层要设置合理的超时时间,超时后要么重试要么降级到备用模型。重试要注意幂等性,别把同一个请求重复执行导致副作用。降级策略要提前设计好,比如主模型不可用时切到小模型,或者返回缓存结果。
4. AI应用层:输入什么、输出怎么处理才是胜负手
4.1 应用层的核心职责与常见误区
应用层是离用户最近的一层,也是最能体现产品差异的一层。它的核心职责不是“调用模型”,而是定义输入、处理输出、管理上下文、编排流程。很多人把应用层做成了简单的“用户输入→拼提示词→调模型→返回结果”,这只能算Demo,不是产品。
真正的应用层要考虑:用户输入可能不完整、有歧义、有错别字,怎么清洗和补全?多轮对话中历史信息怎么压缩和检索?模型输出可能格式不对、内容不全、有幻觉,怎么校验和修复?业务流程可能需要多次模型调用和外部工具调用,怎么编排?这些问题,才是AI应用开发工程师日常真正在解的题。
4.2 输入侧:把话说清楚比什么都重要
输入处理是应用层的第一道关口。我把它拆成四个环节:清洗、补全、增强、约束。
清洗是基础。用户输入里可能有HTML标签、特殊字符、多余空格、乱码,这些都要处理掉。如果是语音输入,还要先做语音识别和标点恢复。如果是文档输入,要先做OCR和版面分析。这些预处理做不好,后面全白搭。
补全是把模糊输入变明确。用户说“帮我查一下那个东西”,你得结合上下文判断“那个东西”是什么。用户说“明天天气”,你得补上地点。补全的策略可以是规则匹配,也可以用小模型做意图识别和槽位填充。我一般用规则兜底加模型辅助,规则覆盖高频场景,模型处理长尾。
增强是给模型补充它不知道的信息。最常用的就是检索增强生成,把相关文档片段塞进上下文。检索的质量直接决定生成的质量。我踩过的坑是:早期用简单的向量相似度检索,结果经常召回不相关的内容。后来改成混合检索,向量加关键词再加业务规则过滤,召回准确率提升明显。还有一个细节:检索回来的文档要排序和截断,把最相关的放前面,总长度控制在模型有效窗口内。
约束是告诉模型“你必须按这个格式来”。可以用提示词约束,比如“只输出JSON,不要解释”;也可以用结构化输出功能,比如某些API支持的JSON mode;还可以用语法约束解码,强制模型只能生成符合语法的token。约束越明确,后处理越轻松。
4.3 输出侧:模型吐出来的东西不能直接给用户
模型输出处理是应用层的第二道关口,也是很多团队做得最粗糙的地方。模型返回一段文本,直接透传给前端,这是不负责任的。输出侧至少要做四件事:格式校验、内容审核、事实核查、体验优化。
格式校验是第一步。你要求模型输出JSON,它可能给你输出带Markdown代码块的JSON,或者字段名拼错,或者少了个括号。这些都要用解析器去校验和修复。我一般会写一个健壮的解析函数,先尝试直接解析,失败后尝试提取代码块,再失败就触发重试或降级。
内容审核是红线。模型可能生成不当内容,必须过一遍审核。审核可以在服务层做,也可以在应用层做。应用层做的好处是可以结合业务规则,比如医疗场景要特别关注用药建议,金融场景要特别关注收益承诺。审核不通过的输出要拦截并记录,同时给用户一个安全的兜底回复。
事实核查是进阶要求。模型有幻觉,可能编造不存在的信息。对于事实性要求高的场景,比如制度条例学习助手,输出必须能追溯到原文。做法可以是:要求模型输出引用来源,然后用规则或模型验证引用是否真实存在。如果无法验证,就标注“此回答仅供参考”或者直接不展示。
体验优化是加分项。模型输出可能啰嗦、重复、格式混乱,需要做后处理:去掉重复段落、统一标点、调整段落结构、补充格式化。流式输出时还要考虑打字机效果的节奏,别一股脑全推过去。
4.4 上下文管理:多轮对话的命门
多轮对话是AI应用的常见形态,但上下文管理是个技术活。模型的上下文窗口有限,不能把所有历史都塞进去。常见的策略有几种:
滑动窗口最简单,只保留最近N轮对话。缺点是可能丢失早期的重要信息。
摘要压缩是把历史对话用模型总结成一段话,保留关键信息。缺点是摘要本身可能丢失细节,而且增加一次模型调用。
向量检索是把历史对话存起来,每轮根据当前问题检索相关历史。适合长对话和知识密集型场景。
混合策略是我实际项目里用得最多的:最近几轮保留原文,更早的做摘要,同时用向量检索补充相关历史。这样兼顾了近期上下文完整性和远期信息召回。
还有一个细节:系统提示词和用户输入要分开管理。系统提示词定义角色和规则,一般固定不变;用户输入每轮变化。有些模型对系统提示词和用户输入的区分不敏感,这时候可以用特殊标记来强化区分,比如用XML标签包裹。
5. 三层架构的协作与常见问题排查
5.1 三层之间的数据流与责任边界
三层架构不是孤立的,它们之间有明确的数据流和责任边界。基础模型层只负责推理,不关心业务逻辑;模型服务层负责调度和工程化,不关心具体场景;AI应用层负责业务逻辑和用户体验,不关心模型怎么加载。边界清晰的好处是:每一层可以独立演进。换模型不影响应用层,改业务逻辑不影响服务层。
但实际项目中,边界容易模糊。比如有人把提示词模板放在服务层,有人把业务规则塞进模型微调数据。这些都会导致维护困难。我的经验是:提示词模板属于应用层,模型参数属于服务层,模型权重属于基础模型层。各归各的,别混。
5.2 常见问题速查与排查思路
下面这张表是我在实际项目中遇到的高频问题及排查方法,直接可以拿去用:
| 问题现象 | 可能原因 | 排查步骤 | 解决方案 |
|---|---|---|---|
| 输出格式不稳定 | 提示词约束不够强 | 检查提示词是否明确格式要求 | 加JSON mode或语法约束 |
| 回答内容空洞 | 输入信息不足 | 检查检索是否召回相关内容 | 优化检索策略,补充上下文 |
| 响应速度慢 | 模型太大或并发太高 | 查看GPU利用率和队列长度 | 换小模型或加批处理 |
| 多轮对话失忆 | 上下文被截断 | 检查历史消息长度 | 加摘要或向量检索 |
| 输出有幻觉 | 模型知识不足或提示词误导 | 对比输入和输出的事实依据 | 加事实核查或限制回答范围 |
| 服务频繁超时 | 显存不足或请求堆积 | 查看显存占用和请求队列 | 调低并发或升级硬件 |
| 成本居高不下 | 调用量太大或模型太大 | 统计token消耗和调用频次 | 加缓存、换小模型、做限流 |
5.3 实操心得:那些文档里不会写的东西
说几个我踩过的坑和总结的经验。
第一,别在提示词里写“请尽可能准确”。这种话对模型没用,它不知道什么叫“准确”。要写具体的、可验证的要求,比如“如果原文中没有相关信息,输出‘未找到相关内容’,不要编造”。
第二,输出解析要防御性编程。模型输出永远可能出乎意料。解析函数要能处理各种畸形输入,不能因为一个格式错误就让整个请求失败。我一般会写三层兜底:严格解析、宽松提取、降级返回。
第三,缓存能省大钱。很多请求是重复的,或者相似度很高。在服务层加一层语义缓存,把相似请求映射到缓存结果,能显著降低调用量和延迟。缓存key可以用输入文本的向量表示,相似度超过阈值就命中。
第四,监控要覆盖三层。基础模型层监控显存、温度、推理延迟;服务层监控QPS、队列长度、错误率;应用层监控用户满意度、任务完成率、输出合规率。三层监控打通,出问题才能快速定位。
第五,别忽视冷启动。模型第一次加载很慢,服务刚启动时响应时间会很长。解决办法是预热:服务启动后先跑几个典型请求,让模型和缓存都热起来。Kubernetes环境下还要配置好就绪探针,别让流量打到还没准备好的实例上。
6. 从三层架构看AI应用开发的演进方向
6.1 基础模型层的趋势:更小、更强、更专用
基础模型层正在经历一场静悄悄的革命。一方面,模型规模还在往上走,但边际收益在递减。另一方面,小模型的能力在快速提升,7B模型在很多任务上已经接近甚至超过一年前的70B模型。这意味着未来更多的应用会跑在小模型上,成本更低、延迟更小、部署更灵活。
同时,专用模型在崛起。通用模型什么都能做,但什么都不精。针对代码、医疗、法律、金融等领域的专用模型,在特定任务上的表现远超通用模型。对于企业来说,选择一个好的基座模型,用自己数据做微调,可能比直接调用最大的通用模型更划算。
6.2 服务层的趋势:标准化与云原生化
模型服务层正在快速标准化。推理框架的接口越来越统一,部署方式越来越云原生。未来服务层可能像数据库一样,成为基础设施的一部分,开发者不需要关心底层怎么跑,只需要调用标准接口。
这对应用层开发者是好消息:可以把更多精力放在业务逻辑和用户体验上。但也意味着服务层的技术门槛在降低,单纯会部署模型的价值在下降。真正的竞争力还是在应用层——你怎么定义输入、怎么处理输出、怎么编排流程。
6.3 应用层的趋势:从“调模型”到“做产品”
应用层是变化最快、机会最多的一层。早期大家比的是“谁先接上模型”,现在比的是“谁的产品体验好”。体验好的关键,就是标题里说的:输入什么、输出怎么处理。
我看到的一个明显趋势是,AI应用开发正在从“提示词工程”走向“上下文工程”。提示词只是上下文的一部分,完整的上下文还包括检索到的知识、工具调用的结果、用户的历史偏好、业务的规则约束。把这些上下文管理好,比单纯调提示词重要得多。
另一个趋势是AI Agent。Agent本质上是应用层的一种高级形态:它不仅能生成文本,还能调用工具、执行动作、根据反馈调整策略。Agent的输入输出处理更复杂,需要状态管理、工具编排、错误恢复。但核心逻辑没变:输入什么、输出怎么处理。
6.4 给不同阶段开发者的建议
如果你是刚入行的新人,我的建议是:先把应用层做熟。别一上来就啃模型微调和推理优化,那些有专门的人在搞。应用层的需求量大、上手快、反馈直接,适合积累经验。具体来说,把提示词设计、检索增强、输出解析、多轮对话这几个技能练扎实。
如果你是有经验的工程师,建议往服务层深入。推理优化、并发调度、成本控制这些能力,在企业里很稀缺。同时保持对应用层的敏感度,别脱离业务。
如果你是技术负责人,建议把三层架构的边界划清楚,让每层的人专注自己的事。同时建立跨层的监控和评估体系,确保整体效果可衡量、可优化。
7. 一个制度条例学习助手的完整拆解
7.1 场景需求与架构设计
拿一个具体场景来串一遍三层架构:制度条例学习助手。需求是让员工能通过对话查询公司制度,比如“年假怎么算”“报销流程是什么”。这个场景的特点是:知识范围明确(公司制度文档)、回答要求准确(不能编造)、需要引用来源(方便核实)。
架构设计上,基础模型层选一个7B到14B的模型,中文能力好、支持长上下文。服务层用vLLM部署,加一层语义缓存,因为制度查询的重复率很高。应用层做检索增强、输出格式约束、引用来源标注。
7.2 输入侧的具体处理
输入处理分三步。第一步,用户问题清洗和意图识别。判断是制度查询、闲聊还是其他。第二步,检索相关制度文档。把制度文档切分成段落,建立向量索引和关键词索引,混合检索取TopK。第三步,构造提示词。把检索到的段落、用户问题、输出格式要求拼在一起。
提示词模板大概长这样:
你是一个公司制度学习助手。请根据以下制度文档回答用户问题。 制度文档: {retrieved_documents} 用户问题:{user_question} 回答要求: 1. 只根据上述制度文档回答,不要编造。 2. 如果文档中没有相关信息,回答“未找到相关规定”。 3. 回答末尾标注引用的文档名称和段落编号。 4. 用简洁的中文回答,不要输出无关内容。7.3 输出侧的具体处理
输出处理分四步。第一步,解析回答和引用。用正则提取引用标注,验证引用的文档是否真实存在。第二步,内容审核。检查是否有不当内容,制度助手一般风险较低,但也要过一遍。第三步,格式化。把回答和引用来源整理成前端友好的结构。第四步,记录日志。把问题、检索结果、模型回答、用户反馈都存下来,用于后续优化。
7.4 效果评估与迭代
上线后要持续评估。我一般看几个指标:回答准确率(人工抽检)、引用正确率(引用是否真实)、用户满意度(点赞点踩)、未回答率(多少问题找不到相关规定)。根据这些指标迭代检索策略和提示词。
踩过的一个坑是:早期检索只用了向量相似度,结果用户问“年假”,检索出来的是“请假流程”,因为语义相近但主题不同。后来加了关键词过滤和业务标签,检索准确率明显提升。还有一个坑是:制度文档更新后,向量索引没有及时重建,导致检索到旧版本。解决办法是建立文档更新触发索引重建的流程。
8. 关于成本、性能与效果的平衡
8.1 成本构成与优化手段
大模型应用的成本主要有三块:算力成本、调用成本、人力成本。算力成本是GPU或云主机的费用,调用成本是API的token费用,人力成本是开发和运维的投入。优化成本要从这三块入手。
算力成本优化:用更小的模型、做量化、加批处理、提高GPU利用率。调用成本优化:加缓存、做限流、优化提示词减少token消耗。人力成本优化:标准化流程、自动化测试、建立可复用的组件库。
8.2 性能优化的关键手段
性能优化主要看延迟和吞吐。延迟优化:用流式输出、加缓存、减少检索轮次、用小模型做预处理。吞吐优化:加批处理、用连续批处理、优化显存管理。这些手段在服务层做,效果最明显。
8.3 效果评估的指标体系
效果评估不能只看“感觉好不好”。要建立量化指标:准确率、召回率、F1、用户满意度、任务完成率、平均对话轮次。评估方法可以人工抽检,也可以用模型自动评估。我一般两者结合,模型评估做初筛,人工评估做校准。
9. 写在最后的一些个人体会
做了这几年AI应用,最大的体会是:模型能力是天花板,但输入输出处理决定你离天花板有多近。很多人把精力花在追新模型上,却忽略了最基础的输入清洗和输出校验。结果就是模型换了一茬又一茬,效果提升却有限。
另一个体会是:别追求一步到位。先跑通最小闭环,再逐步优化。我见过太多项目,一开始就想做全能助手,结果什么都做不好。不如先聚焦一个具体场景,把输入输出打磨好,再扩展。
最后一个建议:保持对业务的敬畏。技术再花哨,最终要解决业务问题。多和业务方聊,多观察用户怎么用,比埋头调参有用得多。制度条例学习助手这个例子之所以能跑通,不是因为模型多强,而是因为把制度文档整理清楚了、把检索做准了、把输出格式约束好了。这些事不酷,但有用。