1. 为什么我觉得AI技术栈越来越像一套操作系统
先讲个我最近的亲身感受。有次我在调试一个基于大语言模型的多Agent协作项目,其中一个Agent负责调用工具订会议室,另一个Agent负责整理会议纪要,结果两个Agent因为共享了一个上下文窗口,纪要Agent把订会议室的工具调用记录也当成了会议内容,直接生成了一份"会议地点在某会议室、参会人包括会议室系统"的荒谬总结。排查了半天,最终发现根因在于:我没有给这两个Agent划分清晰的"内存边界"和"权限边界"。
这件事让我突然意识到一个问题——当AI应用复杂到一定程度之后,你在做的事情本质上和操作系统的设计者在做的事情没有区别:管理资源、调度任务、隔离故障、提供统一的交互接口。今天这篇文章,我想从"操作系统"这个成熟了六十多年的概念框架出发,系统拆解AI技术栈的分层结构、核心组件和演进方向,顺便把当下AI Agent开发、RAG架构、模型选型这些热点问题放到一个更大的坐标系里重新审视。无论你是刚入门AI开发的新手,还是已经在做Agent落地的工程师,这篇文章都能帮你建立一张更清晰的技术地图。
为什么说"像操作系统"而不是"就是一个操作系统"?因为AI技术栈目前还缺了操作系统最核心的几块拼图——稳定内核、硬件抽象层、标准化的进程管理机制。但恰恰是这种"缺",让我们更清楚地看到这个领域正在补什么、还要补什么。这种对比不只是概念游戏,它能直接指导你的技术选型和架构设计。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 把AI技术栈拆成"操作系统分层结构"来理解
2.1 经典操作系统的四层抽象
操作系统经历了六十多年演进,核心设计思想其实非常稳定。我习惯把它理解为四层抽象:
最底层是硬件抽象层(HAL),负责屏蔽CPU、内存、磁盘这些硬件的差异,你写代码时不用关心硬盘是机械式还是固态,不用关心网卡是哪个厂家——操作系统帮你兜底了。往上一层是内核层,负责任务调度、内存管理、文件系统、进程间通信,这是操作系统的"心脏"。再往上是系统服务层,提供API、Shell、编译器、设备驱动这些开发者直接打交道的界面。最顶层是应用层,就是我们每天都在用的各种软件。
这个分层结构最厉害的地方在于:每一层只依赖下一层提供的接口,层与层之间解耦。应用开发者不需要懂内核,内核开发者不需要关心每个应用的具体业务逻辑。正是这种清晰的分层,让计算机生态能够爆炸式发展。
2.2 AI技术栈的五层类比映射
现在把同样的视角套到AI技术栈上。我见过很多AI技术栈的划分方式,有按"基础设施-模型-应用"分三层的,有按"数据-AI-业务"分三层的,但站在"操作系统对比"这个框架下,我倾向于分五层:
| 操作系统分层 | AI技术栈对应层 | 核心组件举例 | 类比定位 |
|---|---|---|---|
| 硬件抽象层 | 算力/资源层 | GPU/TPU、向量数据库、对象存储、模型推理引擎(vLLM、TensorRT-LLM) | 类似的"裸机"能力,AI的CPU和内存 |
| 内核层 | 模型层 | 大语言模型(GPT、Claude、Llama)、Embedding模型、多模态模型 | 类似"计算核心",决定智能上限 |
| 系统服务层 | 框架/编排层 | LangChain、LlamaIndex、Dify、Coze、Semantic Kernel | 类似"系统调用",提供标准开发接口 |
| 应用运行层 | Agent应用层 | Autonomous Agent、RAG系统、工作流引擎 | 类似"进程管理",负责任务生命周期 |
| 用户交互层 | 交互/体验层 | Prompt工程、流式输出、UI界面、语音/多模态交互 | 类似"Shell和GUI",决定用户体验 |
看这张表,你可能会觉得"这不是硬套吗"?其实不是。关键在于每一层解决的核心矛盾和操作系统那一层是高度同构的。算力层解决"物理资源怎么抽象"的问题,模型层解决"智能怎么计算"的问题,编排层解决"开发者怎么调用智能"的问题,Agent层解决"复杂任务怎么拆解执行"的问题,交互层解决"人和系统怎么对话"的问题。每一层都在做"向上提供接口、向下屏蔽复杂度"这件事。
2.3 一个重要但常被忽略的差异:进程与Token
不过这个类比有个关键差异值得单独拎出来说。操作系统管理的核心资源是CPU时间片和内存地址空间,单位是进程和线程;AI技术栈管理的核心资源是上下文窗口(Context Window)和Token生成配额,单位是Prompt和Completion。
进程在操作系统里是充分隔离的——进程A崩溃不会拖垮进程B,进程A的内存进程B想访问也访问不到。但Token在多个Agent之间是以"共享上下文"的方式存在的,隔离性天然就差。这就是为什么我在文章开头那个例子里,两个Agent会互相污染输出——因为我用的是"共享内存"模式,而不是"独立进程"模式。
这个差异决定了AI技术栈不能完全照搬操作系统的进程管理模型。你需要自己设计"上下文隔离"和"上下文共享"的边界。这正好是当前Agent开发里最容易被忽视、也最值得深入的地方。后文我还会专门展开。
2.4 从"能跑起来"到"跑得稳":操作系统视角下的AI成熟度
如果拿操作系统的进化史来对照AI技术栈,我们能清晰看到当前处在哪个阶段。早期的操作系统(比如1950年代的批处理系统)是什么呢?一次只跑一个作业,中间不切换,效率很低但至少能跑。今天的很多AI应用就是这种状态——一个Prompt进去,LLM从头生成到尾,中间不介入、不反馈、不感知外部工具。这叫"单道批处理"。
稍微进步一点的,是现在比较常见的RAG应用,先检索再增强再生成,流程是固定的,但已经有了"数据准备-检索-生成"的流水线概念。这对应操作系统的"多道批处理"阶段,多个程序按顺序载入但还谈不上真正的并发。
再往上,就是现在最热门的Agent应用了——模型自己决定调用什么工具、按什么顺序做事、遇到错误怎么办。这个阶段已经有"任务调度"和"系统调用"的雏形了。对应的操作系统阶段,就是60年代的分时系统,多个用户通过终端共享一台主机,系统按时间片轮流服务每个用户,每个用户都感觉自己在独占整台机器。
有意思的是,分时系统的诞生恰恰是为了解决"人机交互"问题。现在的Agent开发其实也在走类似的路:从离线批处理(一次性Prompt)走向交互式会话(多轮对话),再走向自主执行(Agent循环)。这个演进路径,和操作系统从批处理到分时、再到实时系统的路径,几乎一一对应。理解了这条历史脉络,你会对AI技术栈"下一步往哪走"有一个更清醒的判断。
3. 这套"操作系统"目前缺了什么——内核、调度、还有可观测性
3.1 缺一个真正意义上的"内核":上下文管理机制
操作系统最核心的组件是什么?答案毫无疑问是内核。内核做的事情归纳起来就三件:内存管理、进程调度、进程间通信。你用任何编程语言写的任何程序,最终都要通过系统调用陷入内核,让内核替你分配内存、创建进程、读写文件。
今天的AI技术栈里,最接近"内核"的组件是什么?我觉得是上下文窗口和围绕它的管理机制。但问题是,操作系统在1960年代就解决了内存隔离和虚拟内存映射的问题,而大模型的上下文机制至今仍然非常原始:
- 上下文窗口大小是被模型结构锁死的(比如有些模型是128K Token,有些是1M Token),你没法像扩展虚拟内存那样动态扩展它;
- 多Agent之间共享上下文时,没有"页表"或"权限位"这样的隔离机制;
- 当上下文超出窗口时,模型只会悄悄遗忘早期内容,不会给你一个"内存不足"的明确报错。
我在做一个复杂Agent项目的过程中,踩过最深的坑就是这种"静默遗忘"。一个长对话跑了几十轮之后,Agent突然不再遵循你最开始设定的规则了——不是模型变笨了,而是最开始的指令被挤出了注意力窗口。如果你没意识到这个问题,你会觉得模型行为不可控、像玄学。但用操作系统的视角看,这明明就是"内存溢出"后的诡异行为,解决方案也不是什么玄学——要么主动压缩历史,要么把关键指令持久化到"外部存储"(比如每次调用时重新注入),要么给Agent配一个"辅助记忆"模块。
3.2 缺"统一调度器":多Agent协作没有标准调度算法
操作系统里的调度器负责决定"下一个该运行哪个进程、运行多久"。现代操作系统用的调度算法,从简单的先来先服务,到时间片轮转,再到多级反馈队列,都是经过了数十年工程验证的。
AI Agent领域目前的"调度"处在什么水平呢?基本是"手写工作流"的水平。你用一个循环让Agent自己规划(Plan)->调用工具(Act)->观察结果(Observe)->再规划,这本质上是给Agent发了一个无限的时间片,让它独占"CPU"。这种模式应付单个Agent绰绰有余,但一旦面对多Agent协作,问题就全冒出来了:
- 谁来决定哪个Agent先跑?
- 一个Agent跑太久了,要不要抢占?
- Agent之间通信,是共享上下文(类似共享内存)还是消息传递(类似IPC)?
- 某个Agent死了(比如调用链断裂、返回格式错误),是重启它还是降级处理?
每次遇到这些问题,我都有一种"穿越回1960年代给操作系统设计调度算法"的既视感。好消息是,框架层已经开始提供一些基础能力,比如LangGraph里的节点状态机、AutoGen里的对话模式、CrewAI里的顺序/层级执行流程。坏消息是,这些调度策略目前基本靠开发者的经验硬编码,没有一个通用的、经过充分验证的"AI任务调度器"。
从实操角度,我给三个阶段性的建议:
- 小项目固定流程:别上多Agent,用单Agent+预设工作流就够;
- 中项目有分支:用状态机或图编排(比如LangGraph),把调度逻辑显式写出来,别让Agent自由发挥;
- 大项目多角色:参考操作系统原理,先定义好角色优先级、任务队列、超时回收机制,再让Agent在规则边界内自主决策。
3.3 缺"可观测性":AI系统的Debug比传统系统难一个量级
做过后端开发的同学都知道,传统软件出问题,你有日志、有trace、有metrics,顺着调用链一步步查总能找到根因。但AI应用出问题,你拿到手的可能只有一段看起来"不太对"的文本输出。为什么不对?因为Prompt写得不清楚?因为检索到的上下文不对?因为模型今天状态变差了?因为上游工具返回的字段比预期多了一个嵌套?面对这种状况,传统排查手段基本抓瞎。
我用操作系统的视角来分析这个问题,本质上是:AI技术栈缺少了操作系统内核里的日志子系统和跟踪机制。调试一个进程,你可以看syscall日志;调试一个Agent,你有标准化的"系统调用记录"吗?目前基本没有。
不过这两年可观测性工具已经开始补位了:LangSmith、Langfuse、Traceloop(OpenTelemetry GenAI扩展)、Arize Phoenix这些工具,做的事情本质上就是在给AI应用装"埋点"和"追踪器",把每一次Prompt输入、模型输出、工具调用的参数和结果都记录下来,最终在界面上可视化出整个Agent的决策链路。我自己的经验是,在项目第一天就接上这类工具,哪怕只是最基础的日志记录,后面排查问题的效率能提升十倍。否则等你上线了再补,就会发现Agent的行为根本无据可查。
3.4 缺"兼容层":模型切换成本仍然很高
操作系统的硬件抽象层(HAL)有一个伟大之处:它让操作系统可以跑在不同硬件上。微软的Windows可以装在不同品牌的电脑上,Linux内核可以跑在手机、路由器、服务器上——硬件变了,上层应用不用变。这就是抽象层的价值。
AI技术栈现在最缺的抽象层,是跨模型抽象。你的公司今天用GPT-4效果很好,明天因为成本考虑想换成开源模型,或者想接入一个更便宜的国产模型——这件事现在的成本依然不小。原因在于:
- 不同模型的Prompt格式有差异(有些模型用特殊的指令标签区分系统指令和用户指令);
- 模型能力边界不同,你以为在这个模型上能完成的工具调用,换一个模型可能输出格式直接崩了;
- 不同模型的输出概率分布差异,会导致同样的Prompt产生完全不同的行为习惯;
- Embedding模型和LLM之间是配套的,混着用检索质量常常下降。
虽然LangChain这类框架做了一层"模型抽象"(比如用统一的ChatModel接口包装不同提供商),但这层抽象非常薄。它帮你解决的是"API调用格式"层面的差异,解决不了"模型行为差异"层面的问题。
我建议团队在架构上做好这种心理准备:为"换模型"预留一个开关和一套评估集。每次换模型,不是改一行代码那么简单,而是要重新跑一遍评测集,看关键场景的响应格式、拒绝率、幻觉率是否还在可接受范围内。这套方法论,就相当于给AI技术栈做一个"硬件兼容性测试",虽然烦,但它是系统走向成熟必须支付的工程成本。
4. Agent开发技术栈的实操梳理:从"裸模型"到"一个像样应用"
4.1 Agent到底需要哪几类技术组件?
热搜词里有"agent开发需要哪些技术栈",这确实是个高频问题。从操作系统分层的视角去看,Agent应用的技术栈其实有非常清晰的脉络,我把它拆成五类组件:
第一类,模型侧。 灵魂不用多说,你需要选一个基座模型。这里要决策的是:用闭源API还是开源模型私有化部署?闭源API(OpenAI、Anthropic、Google,还有国内的Kimi、DeepSeek、通义千问)胜在省心、效果有保障;开源模型(Llama 3、Qwen2.5、DeepSeek-V3、GLM-4)胜在可控、成本灵活、数据不出域。我现在的倾向是:原型阶段用闭源API快速验证,生产化阶段再结合实际需求评估是否切到私有化部署。
第二类,记忆侧。 相当于操作系统的"内存+外存"。短期记忆就是上下文窗口里的对话历史;长期记忆就需要向量数据库(Milvus、Qdrant、pgvector)或键值存储(Redis)来保存和检索。这是RAG和Agent的核心基础设施。操作系统的内存管理解决了"数据放哪里、怎么快速访问"的问题,向量数据库解决的是"语义上相关的信息怎么快速找到"的问题。
第三类,工具侧。 Agent之所以能"做事",靠的是工具调用能力,也就是Function Calling。你需要把外部能力(查天气、订票、查数据库、调公司内部API)包装成模型能理解的函数描述,让模型在生成过程中自主决定"要不要调、调哪个、传什么参数"。这对应操作系统里的"系统调用"——模型是用户态,工具是内核态,模型通过"调用"来完成它自己做不到的事情。
第四类,执行侧。 编排与执行引擎,负责把"模型+工具+记忆"串成一条可执行的链路。这就是LangChain、LangGraph、AutoGen、Dify、Coze这一票框架干的活。它们帮你处理循环控制、条件分支、错误重试、Agent间通信这些"脏活累活"。
第五类,可观测侧。 前面已经强调了,从第一天就要接入。LangSmith、Langfuse、Phoenix,至少选一个。给Agent跑的过程做日志、跟踪和评估。
4.2 必选与可选:一个最小可用Agent技术栈
如果是中小型项目,我建议技术栈可以收得非常干净:
| 组件类别 | 必选工具/方案 | 可选进阶方案 | 我的评价 |
|---|---|---|---|
| 模型 | 一个主流闭源API 或 一个开源模型 | 本地部署用vLLM加速 | 必选,先跑通再优化 |
| 编排 | LangChain(轻量) 或 Dify(快速) | LangGraph(重逻辑编排) | LangChain最通用,Dify最快 |
| 记忆 | Redis + 简单缓存 | Qdrant/Milvus做向量检索 | 初期别上一堆向量库,很重 |
| 工具 | 3-5个关键Function Calling | MCP(Model Context Protocol) | MCP是趋势,建议提前了解 |
| 可观测 | Langfuse(自托管友好) | LangSmith(闭源SaaS) | 从第一天就接 |
| 评估 | 一组手工构造的评测样例 | PromptFoo / DeepEval | 没有评测就没有优化依据 |
这里多说一句,很多新手一开始就想上最重的架构——多Agent + 向量库 + 流式编排。以我踩坑的经验,这绝对是个错误的起手式。大多数场景,从一个单Agent加上二三十行工具调用代码起步,就已经能解决80%的问题了。额外的复杂度是真实的成本,而不是资产。架构应该跟着问题复杂度走,而不是跟着新技术热度走。
4.3 MCP:AI世界的"系统调用标准"正在浮现
在工具侧,最近这一两年最值得关注的进展就是MCP(Model Context Protocol,模型上下文协议)。如果你理解了操作系统的发展史,你会立刻意识到MCP的意义有多重大。
早期的软件程序调用硬件,是没有统一接口的——每接一个新设备,就得写一套新的驱动代码。为了解决这个问题,操作系统引入了统一的设备接口标准(比如POSIX),应用程序通过标准API请求设备服务,操作系统在内部翻译成具体设备的指令。这就是"抽象"的力量。
MCP做的事情是一样的逻辑:它定义了AI模型/Agent如何发现工具、如何请求调用工具、工具结果如何回传的一套标准协议。一旦生态成熟,你的Agent就能像访问本地文件一样自然地调用任何遵循MCP的远程服务,而不用针对每个API手写适配器。这可能是AI技术栈里最接近"内核系统调用"层的标准化尝试。
我的建议是,不管你现在用不用MCP,都要花时间看看它。这不是某个框架的附加功能,而是整个行业在往"标准化"方向走的一个强烈信号。提前理解MCP的接口设计和资源模型,你会更容易理解未来1-2年AI应用架构的演进方向。
5. 一个值得借鉴的工程演进路径:从RAG到多Agent的"操作系统化"
5.1 RAG应用:相当于"单道批处理系统"
简化来看,RAG应用的运行逻辑是一条笔直的流水线:用户提问 -> 向量检索 -> 拼接上下文 -> 调用LLM -> 返回答案。整条链路上没有分支、没有循环、没有自主决策。从操作系统视角来看,这就是典型的"单道批处理"——一个作业从头跑到尾,跑完释放资源,再来一个作业。
我在初学阶段做了不少RAG应用。刚开始会觉得这事很简单,就是"检索+生成"而已。但做着做着就发现,真正决定效果的远不止这一步:文档怎么切分?元数据怎么设计才能支撑精确过滤?检索结果怎么排序和去重?上下文塞多少内容既不会溢出又能保证回答质量?用户问题太开放时要不要做意图改写?这些细节每一样都需要认真打磨。RAG不是"看起来简单",而是"看起来简单、做起来复杂"。
但如果要用一句话总结RAG的核心价值,我会说:它用工程手段给模型补充了"实时知识"。模型本身的知识截止日期到了,你没法实时重训,但你可以通过检索把最新信息喂给它。这和操作系统里的"外存管理"特别像——内存小怎么办?把不常用的数据放到磁盘上,用的时候换入内存。RAG就是这个"换页入内存"的过程。
5.2 单Agent工具调用:相当于"分时系统"雏形
RAG解决的是"知识怎么给模型"的问题,但Agent解决的是"模型怎么动起来"的问题。单Agent工具调用,是这一步的起点。
典型的流程是:用户给一个任务 -> 模型规划一下需要几步 -> 第一步调用搜索工具 -> 拿到结果后继续规划 -> 第二步调用代码工具 -> 如此往复直到任务完成。
这个"Plan-Act-Observe"循环,从操作系统视角看已经具备了一个极简调度器的雏形:Agent是调度器,"规划"是决定下一步做什么,"Act"是执行一个具体的"系统调用","Observe"是读取调用的返回值。整个过程是有状态、有上下文、有外部交互的。
实现这套循环,框架层的帮助已经相当成熟了。用LangChain的大概写法是:定义一组Tool,用某种Prompt模板包装成Agent的"技能列表",然后用AgentExecutor跑循环。核心点在于:
- 工具描述要写得足够精确(模型是靠描述来理解工具能干什么的);
- 要给循环设置最大步数上限(防止模型陷入死循环烧token);
- 要做工具调用异常的兜底(模型返回的JSON偶尔就是不合法的,你得能解析失败后重试一次或友好报错)。
5.3 多Agent协作:真正的"现代操作系统"战场
当业务复杂到一定程度,单Agent就应付不过来了。不是因为单个模型能力不行,而是职责太混杂时,上下文会互相污染、工具权限边界变模糊、可维护性急剧下降。
这时候自然就会想到拆分成多个Agent,每个Agent各司其职,再通过某种机制协作。这就是多Agent系统。从操作系统视角看,多Agent协作的解法其实已经有了清晰的工具箱:
- 共享上下文(共享内存模型):多个Agent共用一个上下文池。优点是实现简单、所有信息互通;缺点是缺乏隔离,一个Agent写了一句多余的话,另一个Agent可能就当成事实拿去了。我在开头提到的会议纪要Agent被污染的案例,正是这种模式的典型翻车现场。
- 消息传递(消息通信模型):Agent之间通过显式的消息通信,比如Agent A把它的输出作为消息发给Agent B。这里的核心在于消息的格式要有约束、有明确的语义边界,避免互相理解对方的"输入输出"时产生歧义。
- 主从协作(层级调度模型):一个"主管Agent"负责任务分解和结果汇总,多个"执行Agent"各自领活。这在工程上更容易控制节奏,但主管Agent的策略设计会是决定性的,它一旦理解错任务,下面全部白干。
这些模式怎么选?我的建议很简单:能用单Agent就别上多Agent;如果必须多Agent,优先主从协作和消息传递;少用共享上下文这种"无边界"的模式。多Agent不是越复杂越好,它是工程复杂度的解法之一,但本身也是极其高昂的复杂度来源。
5.4 从"操作系统化"看AI应用架构的未来
最后我想做一点大胆一点的推演。操作系统在解决了"单机管理"这个基础问题之后,走向了"分布式系统"和"云原生"——通过集群把多台机器变成一个统一的计算池,用户完全感知不到底层的物理边界。
AI Agent领域很可能也会走同样的路。未来的应用架构会是什么样?我猜是:
- 底层是统一的"模型服务池"(各种模型按需调度,类似容器编排平台);
- 中间是标准的"工具总线"(MCP协议统一管理海量外部能力);
- 上层是"Agent集群"(各种专职Agent通过网络协议协作,而不是共享内存式耦合)。
也就是说,今天的多Agent系统可能只是"单机版",未来真正的Agent操作系统,会像分布式操作系统那样,把多模型、多工具、多Agent组织成一个对用户高度统一的服务整体。到时候"开发者写Agent"可能就不像今天这样从底层开始搭了,而是像写一个普通后端服务一样,把自己的业务逻辑注册到庞大的Agent生态里。
这个未来可能还需要几年,但它指向的方向是明确的。理解了操作系统走过的那条路,你就知道AI技术栈的下一站大概率在哪里。
6. 如果你要从零开始学习这套"AI操作系统",我的建议路线
6.1 先建立大模型工作原理的心智模型
学习AI技术栈,最容易犯的错误是一头扎进框架的API文档里,结果框架换了一茬又一茬,底层的东西还是没搞懂。框架更新换代的速度远快于模型,模型的迭代速度又远快于底层的原理。所以真正值得先投入时间的,是先建立关于大模型工作方式的心智模型。
我推荐顺着这个顺序理解:
- Transformer和自注意力机制:理解为什么模型能"注意"到输入里的不同位置和词语。这部分不需要推导数学公式,看几篇好文章、动图就够。
- Token与上下文窗口:这是使用大模型时最重要的概念。理解Token化如何影响成本、上下文窗口如何影响你能输入多少信息,能帮你规避很多使用层的问题。
- 预训练与微调的关系:理解预训练提供了语言知识与推理基础,微调让模型适配特定格式或风格。你会发现很多"技巧"其实都建立在"对模型能力的正确预期"之上。
- 温度、Top-p等采样参数:理解调整这些参数相当于调整模型输出行为的"保守/激进"程度。
这个阶段不需要写代码,看资料加动手试几个Prompt就行。目标不是成为模型专家,而是建立足够准确的直觉——当你踩坑时能大致判断"问题在模型层、数据层、还是编排层",而不是把所有问题都归因到"模型不行"。
6.2 从一个最小RAG开始动手
建立了模型层面的直觉之后,就可以开始动手了。我强烈建议的第一个动手项目是一个最小RAG应用,因为它在复杂度上非常克制,却覆盖了AI应用的基本面:调用模型、处理数据、检索、生成。
自己实现一遍大概需要这几步:
- 选一个小型文档集(几篇文章或者几十个产品FAQ就行);
- 用Embedding模型把文档切成块并向量化;
- 把它们存入一个简单的向量存储(刚开始用内存的FAISS或者SQLite加向量扩展都行);
- 写一个检索函数,接收用户问题,返回最相关的N个文档块;
- 最后把它们塞进Prompt,调用LLM生成回答。
做完这个最小闭环,你对"上下文从哪里来、如何影响模型输出"就有了切身体感。接下来再逐步加复杂度:加元数据过滤、加HyDE查询改写、加重新排序、加评估集。每加一层,你都会对"系统为何要这么设计"有更深的体会。
6.3 在Agent开发中刻意练习"用类比思维拆架构"
最后是Agent阶段。记住这个核心思想:Agent架构设计,本质上是任务调度与资源管理设计。
拿到一个新任务时,先别急着写代码。花十分钟画一张图:
- 这个任务需要几步?(任务拆解)
- 每一步需要哪些信息?(数据依赖)
- 哪些步骤可能出错?出错后能否恢复?(容错设计)
- 哪些信息需要在整个流程中共享,哪些需要隔离?(上下文边界)
- 整个流程需要与哪些外部系统交互?(工具集合)
画完这张图,你对系统的理解会比直接看任何一个Agent框架的文档都更深刻。框架只是把这些环节用代码帮你加快实现而已。
我在这个阶段还会刻意练习一个习惯:每次看到一个新的Agent框架(这半年基本每个月都有新东西),先不去看它的API,而是先问三个问题:它解决的是哪一层的问题?它默认的"资源模型"是什么(共享上下文还是消息传递)?它把决策权交给了开发者还是Agent自己?用这三个问题一滤,绝大多数新框架的定位就清楚了,也不会再被营销文带着跑了。
学习AI技术栈最忌讳的是一上来就追新工具。扎实的基本功加清晰的架构判断力,才是这个领域真正稀缺的能力。而操作系统这个概念框架,恰好是训练这种判断力的一个极好坐标系。
