拓冰建站拓冰建站
首页 / 资讯中心 / 正文

一张图看懂自研 Agent 分层

上一篇为什么我要自己做 Agent把能力阶梯立住了能聊 → 能干活 → 干得稳 → 可复用。今天把它落成一张图用户从哪进来请求要过哪几层活最终在哪干。站点打不开的时候第一反应通常是去查模型刷供应商的状态页、调参数、换个模型试试。但如果页面上一张图片 404页面压根没能渲染出来对话请求一次都没发出去——你在 Agent 路径上做的所有排查都不会有任何结果。先花一分钟对齐几个词下面这些词本篇会反复用。它们不是黑话只是每家公司叫法不一样先统一一下后面就不再解释了。词说人话是什么意思分身一个配好的 Agent人设、知识、能用的工具三样打包在一起工作区这个分身能读能改的那一块文件目录相当于它的工位发布把配好的分身连同工作区文件推到线上让它能对外服务容器分身真正跑起来的那个小环境跟别的分身隔开相当于给它单开的一台虚拟主机编排层负责准备容器、更新文件、拉起和回收容器的那一层相当于调度中心运行时容器里真正跟模型说话、调工具的那个程序也就是「干活的那双手」宿主用户待的外壳网页、企微、命令行、IDE 都算展示层同一个回答在网页、企微、命令行里分别长什么样素材可以被反复复用的能力件技能、知识库、工具配置容器池一批预先备好的空容器来了请求直接分配不用现场现开对外能力平台开放出去给别人用的那一层OpenAPI、MCP、凭证都在这网关请求进来时的第一道门负责查身份、指路MCP / OpenAPI两套标准接口MCP 是分身调外部工具用的OpenAPI 是别的系统反过来调分身用的BFF、SSE、sidecar、Token、fail-closed这类通用技术名词就不解释了直接用。01 | 三次误判都栽在同一件事上架构图是压力下的导航仪。图上的层切错了人在压力下一定跑错方向。回放三个现场症状全都「像模型和前端的锅」真相都在别的层。现场一站点打不开却去调模型参数症状用户反馈「AI 挂了」。第一反应是看模型供应商状态页、调参数、换模型。实际上页面白屏或者有图片、脚本加载不出来对话请求根本没发出来。误判模型挂了 / 前端发版坏了 / 「整站 Agent 不可用」。真相卡在流量网关页面、图片这些静态文件以及站点入口的转发规则或门户本身。这层管的是「站打不打得开」和「进哪个容器对话」是两件事。在 Agent 路径上拧螺丝等于给没通电的灯换灯泡。现场二对话没首字却怪前端 SSE症状站点能开点开聊天空白转圈。前端同学被拉进群开始查 SSE、查重试、查超时。误判「流式又抖了」「浏览器不兼容」。真相常见卡点是容器池没货了没有空闲容器 / 容器还没就绪或者卡在前置网关到容器运行时这一段——查身份、选容器、首次建立连接。前端只是把「一个字都没收到」诚实地画成转圈。怪展示层之前先问干活的那一层有没有活。现场三工具调不通却重启对话服务症状能聊两句一调企业内部的工具就失败。有人重启容器里的运行时有人清会话缓存。误判运行时坏了 / 会话数据脏了。真相多半卡在对外能力这一层——MCP 网关、Token、授权页。权限和身份不会在模型里「自觉」也不在你能靠重启修好的那一层。三次误判的共同点是图上有服务名没有职责层。分层是让你在压力下仍知道该拧哪颗螺丝混层的代价不是图难看是黄金一小时花在错误层还会把整条排障链一起带偏。02 | 分层怎么切四种画法的取舍怎么切图决定了你会不会混层。行业里至少四种切法各有各偷的东西也各有各的坑。切法常见于优点风险按部署服务切微服务清单和运维对齐容易漏掉「逻辑层」服务一拆再拆图就失真按团队归属切大厂矩阵问责清晰用户路径被切碎跨团队的症状没人认领按请求路径切网关 / BFF好排障图容易画成面条入口一多就糊按职责层切本篇自研 Agent 平台好讲清「能聊 / 能干活」得坚持不该说的别说、命名要稳定这样比是因为「和运维对齐」跟「和用户路径对齐」压根不是一回事。Agent 系统的痛多半长在跨部署的职责缝上开站对进容器、更新工作区对开聊、发 Token 对跑工具循环。我们偷什么偷「按请求路径切」的排障直觉——症状跟着路径走。偷「按团队归属切」的问责清晰——但问责挂在层上不挂在内部绰号上。偷公开云产品的常识流量入口与真正干活的地方要分离。我们拒什么拒把内部部署名当对外架构课——读者学不会还可能泄露不该公开的拓扑。拒一张图里又画服务又画团队又画域名——看着信息量很大导航价值却是零。拒「逻辑层消失」只剩容器实例名没有「对外能力 / 编排 / 运行时」这类职责名。对外讲架构用职责层对内排障再映射到具体服务。公众号只讲前者后者留在你们自己的代码地图里。03 | 七层和两个必须分开的框把自研 Agent 收成七层名字固定后面全季复用① 接入层 浏览器 / 企微 / IDE / 命令行 / 外部系统② 流量网关 页面图片等静态文件以及站点入口的转发管「站打不打得开」③ 主平台 门户 BFF分身、素材、权限、会话入口④ 对外能力 OpenAPI · MCP 网关 · Token/授权⑤ 编排层 调度中心 / 容器池发布、沙箱、预先备好的空容器⑥ Agent 路径 前置网关查身份·选容器→ 容器里的对话运行时 按需要加挂文件分发 / 工作区同步 / Web IDE⑦ 客户端工具 平台命令行工具 · IDE 插件第 ④ 层值得多说一句它是双向的分身要调外部工具走 MCP 出去外部系统要调分身走 OpenAPI 进来。两个方向都得先过凭证这一关。叫它「对外能力」是因为它不管对话本身只管平台有哪些能力开放出去、给谁用、凭什么能用。这张图上有两个判断值得单独钉住。第一「打开站点」跟「进入某个容器对话」出问题时的表现完全不同所以流量网关和 Agent 前置网关必须拆成两框——合框是混层之母。第二门户负责身份、素材、会话入口而模型反复调工具、看结果、再决定下一步的工具循环tool loop大多跑在容器运行时里。把 BFF 当成了干活的地方就会在错误的一层上堆状态。顺着往下推一层能干活依赖工具治理、工作区更新、沙箱隔离所以 ④⑤⑥ 才是「能干」的主战场。只通 ①→③→⑥ 的最小聊天路径只能证明能聊。框合在一起脑子也会跟着合在一起。你会得到那种经典剧本对话失败 → 查流量网关超时 → 把 body 上限调大 → 毫无帮助或者页面 404 → 去重启容器运行时 → 时间就这么没了。04 | 给每个请求打一张层标签不变量先说清楚每个请求在追踪里要带上「经过哪一层」和「想干什么」不许只打服务昵称。昵称会变层相对稳。// 示意 · TypeScript// 要保住的规矩每条请求在日志里都写清「哪一层」「想干什么」type Layer | ingress // 接入用户从哪进来 | edge_gateway // 流量网关管站点打不打得开 | platform // 主平台门户与后台接口 | capability // 对外能力OpenAPI 与 MCP | orchestrator // 编排准备容器、更新文件 | agent_gateway // Agent 前置网关查身份、选容器 | runtime // 运行时容器里真正干活的 | client; // 客户端命令行、IDE 插件interface RequestTag { layer: Layer; entry: web | im | ide | cli | openapi; intent: open_site | chat | publish | tool | admin;}function routeHint(tag: RequestTag): string { if (tag.intent open_site) return edge_gateway → platform; if (tag.intent chat) return platform → agent_gateway → runtime; if (tag.intent tool) return capability → runtime; if (tag.intent publish) return platform → orchestrator → runtime workspace; return platform;} hljs # 示意 · Python# 要保住的规矩网页和命令行进来的对话最终必须汇到同一个运行时# 差异只在展示层。这张路径表可以写成单测天天跑。CHAT_PATH [platform, agent_gateway, runtime]OPENAPI_CHAT_PATH [capability, agent_gateway, runtime]PUBLISH_PATH [platform, orchestrator, runtime]OPEN_SITE_PATH [edge_gateway, platform]def assert_converge(chat_from_web: list[str], chat_from_cli: list[str]) - None: assert chat_from_web[-2:] [agent_gateway, runtime] assert chat_from_cli[-2:] [agent_gateway, runtime]入口不同内核应该汇合。所以图上要画「汇合点」前置网关之后是共享的容器运行时。反过来如果网页、企微、命令行各跑一套自己的内核改一个逻辑要改三遍三套一致性问题等着你。失败边界标签丢了默认按「想干什么」重新标注不要靠猜服务名补洞。从 OpenAPI 进来的对话可以先经过对外能力这一层但仍应汇入前置网关 → 运行时。抄近路直连运行时等于把统一鉴权和路由废掉。发布这类请求走编排层去更新工作区。如果发布成功了但开聊失败两边日志的关联字段得事先约好会话号 / 分身号 / 时间窗否则你会以为这是两件无关的事。05 | 同一个运行时三种形态编排层拉起来的容器不止一种。对外我按用途分成三种使用态、开发态、进化态。名字不重要重要的是同一个对话引擎外面额外挂的东西不一样。形态谁在用它容器里额外挂着什么使用态真实用户在网页 / 企微 / 对外接口里对话只有对话引擎精简版开发态开发者打开在线 IDE手动改这个分身对话引擎 工作区同步 Web IDE进化态进化流程自动拉起让分身照着反馈改自己对话引擎 工作区同步 Web IDE开发态和进化态的进程组成一模一样差别只在谁触发、改完交给谁前者是人开着 IDE 改改完自己点发布后者是流程拉起来让 Agent 自己改自己改完把结果推回编排层。所以排障时别只看容器里跑了什么还要看是谁把它拉起来的。使用态要的是容器密度和首字速度开发态和进化态要的是完整 IDE 体验两拨在「容器池预先备多少台」「用什么镜像」上自然会分叉。这是后面几篇讲容器池水位和首响预算的伏笔跟运维洁癖没关系。还有个特殊场景访客和共享对话走的是容器池——一批事先备好的公共容器谁来都先塞进池子里已有的那台不单独给你开一台。文件分发多半发生在发布那一刻——编排层调文件代理把打包好的文件塞进工作区。别把它理解成「每台容器里都常驻一个 sidecar」图上把它单独摆一个角就是在提醒这件事它按次触发不按容器常驻。// 示意 · TypeScript// 要保住的规矩形态只决定额外挂哪些 sidecar不改动对话引擎本身type Shape usage | develop | evolution;interface ContainerSetup { runtime: true; // 对话引擎永远有 workspaceSync: boolean; // 是否带工作区同步 webIde: boolean; // 是否带 Web IDE}function setupFor(shape: Shape): ContainerSetup { // 使用态最精简只有对话引擎 if (shape usage) { return { runtime: true, workspaceSync: false, webIde: false }; } // 开发态与进化态组件相同差别在谁拉起它、改完交给谁 return { runtime: true, workspaceSync: true, webIde: true };} hljs # 示意 · Python# 要保住的规矩发布时更新工作区失败开聊必须给出明确的失败态。# 宁可报错也不能拿旧文件装新人设静默放行。def publish_then_chat(publish_ok: bool) - str: if not publish_ok: return fail_closed:workspace_stale # fail-closed 出问题就停不硬撑 return ready_to_chat失败边界开发态挂的东西多不代表使用态可以没有「中途取消」和「复用连接」。精简的是进程纪律不能精简。工作区同步失败要 fail-closed或者给一个明确的降级提示。静默拿旧工作区开聊是「能聊的假能干」。容器池策略按形态分叉之后监控也要跟着分叉。混用一套指标高峰时你根本不知道是哪类容器被抽干了。06 | 走一遍打开 → 发布 → 开聊用一条故事串起七层。每一步都带决策点——走 A 还是 B谁可以失败。打开站点接入 → 流量网关 → 门户。决策点失败时先查流量网关和静态文件还是直接查对话运行时答案永远是前者。谁可失败静态文件偶发失败可以重试身份校验失败就应该直接拦下别搞「游客也能瞎聊」。发布分身门户 BFF → 调度中心 → 文件分发更新工作区 → 容器就绪。决策点工作区更新失败还让不让用户开聊默认不让除非产品明确接受「用旧文件先聊着」。谁可失败文件分发可以重试发布流程的状态必须能查不能只靠人工盯容器。用户开聊门户 BFF → 前置网关查身份、选容器、指路→ 容器里的运行时 → 结果事件回流到用户所在的宿主展示出来。决策点这个用户该进独占容器还是容器池访客和共享场景走容器池有身份的走独占。选错成本和隔离一起错。谁可失败预热提前把容器准备好可以失败失败就退化成现开现用身份和权限检查不能偷懒放行。若走 OpenAPI / 命令行外部调用方或命令行 → 对外能力这一层 → 仍然汇入前置网关 → 运行时。决策点要不要允许 OpenAPI 抄近路直连运行时默认不允许——统一鉴权和路由比「少跳一跳」值钱。若要调企业内部工具运行时按配置走 MCPToken / 授权落在对外能力这一层不在模型里「自觉」。决策点命令行、企微这种没有界面的宿主权限该怎么问可以简化问法但「必须问」这件事不能省。这条走完你应该能对外复述一句站点入口、对话入口、工具入口三件事三层责任。复述不出来图就还没进脑子。07 | 选型你的图缺哪一层维度只有一个对话页加本机 IDE加一层编排框架上云端容器池站点入口层有有有有且常分区域部署Agent 前置网关通常没有弱弱或自建建议有调度中心 / 容器池没有没有弱硬需求容器运行时没有或是个假的本机进程常见是进程内硬需求工具接口 / 对外接口少中中强多宿主的展示层弱IDE 这块强看你怎么接网页/企微命令行都要不需要真正动手改东西、也没有多租户——只有一个对话页就够。云端容器池不是你的题团队就在本机改代码——加本机 IDE就够。你要整张图可控且愿意自己补网关和容器池——加一层编排框架合适。多个入口 要隔离 要治理——上云端容器池。这时候缺调度中心或缺 Agent 路径都还只是增强版对话页。自检口诀若你宣称「我们做了 Agent 平台」却画不出调度中心和运行时那你多半还在做增强版对话页。这句话得罪人但省人年。08 | 四个坑坑 1两层网关画成一个框诱因都叫「网关」运维图上也喜欢把各种转发合并到一起。错解药统一加大超时、统一扩容「网关集群」指望开站和开聊一起变好。正解药页面打不开和对话进错容器拆成两框、两套排障说法。流量网关管开站Agent 前置网关管进哪个容器。坑 2把内部服务名当成对外架构课把内部服务名搬进对外分享几乎必然冷场你讲的是自己平台的模块划分台下没有上下文听完跟没听一样。诱因很简单——内部排障手册顺手就复制过来了。真要对外就固定用本篇这套七层中文名对内再做映射。该保密的保密这是边界不是心虚。坑 3把命令行和 IDE 画在运行时外面当旁路玩具诱因客户端团队自己发版画图时图省事。错解药允许命令行和对外接口永久绕开鉴权与路由最后长出第二套 Agent。正解药它们是正式入口。能力要汇合到 Agent 路径上只有展示方式可以分叉。坑 4发布链路从架构图里失踪开聊的演示几乎不依赖「刚刚发布过」于是发布被当成了运维附录图上只剩对话箭头工作区怎么更新留给「大家懂的」。等线上出现「改了人设没生效」所有人的第一反应还是去查模型。能干活本来就包含「工作区怎么更新」——图上没有发布就没有可信的能干。总结自研 Agent 用七层职责图说话接入、流量网关、主平台、对外能力、编排、Agent 路径、客户端。流量网关管开站Agent 前置网关管进哪个容器——混为一谈必误判。多个入口应在 Agent 路径汇合而不是复制多套内核。使用态只有对话引擎开发态与进化态额外挂工作区同步和 Web IDE——容器池与镜像策略因此分叉。画得出调度中心与运行时才配叫 Agent 平台而不是对话页套壳。请求要打层标签意图决定路径昵称不能代替导航。讨论架构时禁止只甩产品名——用七层职责图说话流量网关与 Agent 前置网关必须拆开。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门