大模型通识 / 大模型技术演进
20. 应用变复杂之后,开发框架怎样演进
原文备份 · 第 21 / 26 篇 · 查看极客时间原知识库 ↗
本篇目录 · 8 节
来源:大模型技术演进
2023 年 7 月 18 日,LangChain 团队发布 LangSmith 的封闭测试公告。它没有宣布一个更强的新模型,而是指出了开发者正在遭遇的落差:几行代码可以搭出原型,真正把应用交到用户手里,却远没有那么容易。开发者需要看清模型究竟收到了什么、哪一步出了错,以及一次修改有没有改善结果。LangSmith 最初公告
这个节点很能说明当时的变化。ChatGPT 已经让人们看见了大模型的潜力,模型 API 又让个人开发者有机会把这种能力放进自己的产品。接下来,问题从“我能不能调用 AI”,迅速变成了“我怎样让整个应用正常工作”。
前面的文章已经遇到过这些问题:知识库要读取和检索资料,工作流要组织多个步骤,Agent 要运行工具、接受反馈,持续任务还要保存状态。模型每扩展一步能力,应用往往就多出一批需要连接和管理的环节。
本篇回看从 2022 年末到 2026 年 10 月 3 日的开发框架演进。读完后,你不必记住每个库的接口,但应该能够判断:一个框架替你解决了哪类问题,它与模型、Agent 产品和部署平台有什么区别。
第一批框架,让模型接上应用的其他部分
LangChain 的 Python 包最初发布于 2022 年 10 月 24 日,比 ChatGPT 上线还早。团队后来回顾其初衷时,强调的就是把语言模型与其他组件组合起来。LangChain 早期回顾
这件事为什么值得专门做一个框架?因为真实应用很少只有“发送一句话,打印一句回答”。你可能需要读取文件,把问题填进提示词,调用模型,再把输出转成程序能够继续处理的数据。换一个模型或数据来源,接口和返回格式又可能不同。
把反复出现的连接工作做成可复用组件,就能减少重复代码。一个“链”,可以先理解为按照一定关系组合起来的一组处理步骤。例如,先取出相关笔记,再组织问题,最后让模型依据笔记作答。
框架在这里提供的是程序结构,并没有凭空增加模型知识,也没有训练出一个新的模型。相同的模型,放进不同的应用结构里,可能因为获得了不同资料和工具而表现不同。
这里也顺便分清 SDK 和 框架。SDK 是软件开发工具包,常见的模型 SDK 帮你发送请求、处理认证、读取返回结果。框架通常还会约定怎样组织组件与执行流程。不过名称没有严格分界:一个叫 SDK 的工具包,也可能已经包含完整的 Agent 循环。判断它管理什么,比看名字更可靠。
RAG 热潮,把数据处理推到了中心
2023 年,围绕个人文件和内部资料提问,成为很有代表性的应用方向。模型会回答一般知识,却不知道你的课程笔记、产品文档和项目记录,开发者需要先把这些资料送到它能使用的位置。
LlamaIndex 的侧重点正是在这里。2023 年 6 月,创始团队将它描述为连接私有数据与大模型的数据框架:不只是发起模型请求,还要处理资料的接入、组织与查询。LlamaIndex 的数据框架定位
回想第 5 篇的知识库问答:文档要被读取和切分,片段要进入索引,用户提问后要找出相关内容,最后才能生成带依据的回答。这些步骤可以由自己编写的程序完成,也可以借助框架的组件。
因此,选择数据框架时,问题不是“它会不会让模型更聪明”,而是“它是否帮我把正确资料送进了正确步骤”。如果 PDF 表格一开始就解析错了,后面换一个更强的生成模型,未必能还原缺失的信息。
Haystack 提供了另一条有前史的路线。它在 2020 年就已发布,早期服务于搜索、检索和抽取式问答。2024 年 3 月 11 日的 Haystack 2.0 稳定版,重做了组件与流水线结构,以适应生成式模型及更灵活的流程。Haystack 2.0 公告
“流水线”听起来像只能从头走到尾,但不能据此判断一个框架的能力。Haystack 2.0 已允许循环和条件路由。检索不到足够资料时,可以改写查询再找一次;输出格式不合格时,可以带着错误反馈重试。这里只是在说明当年的关键版本,并非说 2.0 是观察截止时的最新版本。
RAG 因而推动了一批共同组件发展起来:数据读取、检索、排序、生成和评估。它们后来也能被 Agent 调用。应用形态发生变化,并不意味着这些数据基础工作可以省略。
从链到图与事件:流程需要回来再走一次
当模型开始使用工具,单向流程就不再覆盖所有需要。模型可能先检索,发现资料冲突后重新检索;也可能运行代码,读到报错后修改,再运行一次。
2024 年 1 月 17 日,LangChain 团队专门介绍 LangGraph,重点就是用可以形成循环的图来构建 Agent 运行流程,同时让开发者保留对执行路径的控制。LangGraph 最初公告
这里的“图”不是统计图表。可以把它理解为流程结构:节点代表处理步骤,连线表示下一步可以去哪里。与此同时,系统保存一份状态,记录已获得的资料、当前结果和下一步需要的条件。
以下是一个教学构造,沿用本系列的复习助手。它不是某个框架的直接运行结果:
flowchart LR
A[接收笔记] --> B[检索相关资料]
B --> C[生成卡片草稿]
C --> D{来源和字段合格吗}
D -->|不合格且仍可重试| B
D -->|合格| E[用户查看草稿]
D -->|不合格且达到重试上限| G[保留草稿并说明问题]
E -->|确认| F[写入卡片库]
这个结构里,有的判断交给普通代码,例如字段是否齐全;有的判断可能使用模型,例如卡片是否准确概括了来源。框架负责组织执行,并不要求每个节点都调用 AI。
图也不是唯一方式。LlamaIndex 在 2024 年 8 月 1 日推出 Workflows 测试版,采用事件驱动的组织方式:某一步完成后发出事件,接收这种事件的步骤继续处理,也可以发出重试事件。LlamaIndex Workflows 公告
用上面的例子解释,生成步骤发出“草稿已完成”,校验步骤发现问题后发出“需要补充资料”。开发者可以围绕这些事件安排处理函数,而不必用同一种方式显式列出所有连线。
图和事件的差别,主要在于怎样表达程序结构。二者都可能支持状态、循环与分支;也都需要停止条件。不要把“能循环”理解为“应该一直让模型尝试下去”。
随着这些经验积累,LangChain 与 LangGraph 的关系也发生了变化。2025 年 10 月 22 日,两者发布 1.0:LangChain 更集中于常见 Agent 模式,LangGraph 提供更底层的流程控制与运行能力;LangChain 的 Agent 建立在 LangGraph 之上。当前 LangGraph 文档也明确,它可以不依赖 LangChain 使用。1.0 发布说明、LangGraph 定位
所以,旧教程里的“LangChain 组件库”和新教程里的“LangChain Agent”,不一定在讲相同版本的设计。理解演变关系,比机械复制旧代码更重要。
多 Agent:把协作方式也写进程序
除了安排步骤,开发者还尝试另一种组织方式:让多个 Agent 分工,通过消息交换完成任务。
微软研究院在 2023 年 9 月 25 日介绍 AutoGen,将多 Agent 对话作为组织复杂应用的方式。参与者可以结合模型、工具和人,并不要求每个角色都是一个独立训练的模型。AutoGen 最初介绍
一个教学例子是,让资料整理者收集证据,写作者生成草稿,检查者核对引用。它们可以使用同一个模型,却分别得到不同的任务说明、上下文和工具。应用需要决定谁先工作、把哪些结果传给谁,以及何时结束。
这种分工有时能减少单个 Agent 面对的上下文,让独立任务并行推进。但它也增加了沟通成本:资料可能在交接中丢失,多个角色可能重复搜索,检查者也可能接受写作者的错误说法。“三个 Agent 都同意”不能代替对原始证据的核查。
CrewAI 将角色、目标、任务和协作组织成 Crews。到本篇观察时,它的文档同时强调 Flows:由流程管理状态和执行顺序,再把需要自主协作的工作交给一个 Crew。CrewAI 架构说明
这说明多 Agent 与明确工作流并不互斥。你可以把一个研究小组放在某个步骤里,外层仍然用程序决定什么时候保存文件、什么时候等用户查看、什么时候终止任务。角色分工是一种组织手段,不是所有项目都要达到的升级目标。
微软这条路线后来又出现了整合。Semantic Kernel 注重把模型与现有应用功能结合,AutoGen 积累了多 Agent 协作经验;Microsoft Agent Framework 汇集两者的设计,并在 2026 年 4 月 3 日发布面向 .NET 和 Python 的 1.0 版本。Microsoft Agent Framework 1.0 公告
截至观察日期,微软文档把 Agent Framework 定位为两者的下一代框架,并提供迁移路径。阅读历史资料时仍然需要认识 AutoGen 和 Semantic Kernel;开始新项目时,则应重新核对当前维护与迁移建议,不能因为旧教程很多,就假定生态从未改变。微软框架关系说明
框架也要进入开发者原有的语言和产品
大模型应用开发并不只发生在 Python 脚本里。一些人熟悉网页前端,另一些人已有 Java 后端。让他们在原有项目中接入模型,同样会推动框架发展。
2023 年 6 月 15 日,Vercel 发布 AI SDK,最初强调 JavaScript、TypeScript 应用中的流式响应与聊天界面。AI SDK 首发公告
“流式”就是结果生成一点,界面就显示一点,不必等全部完成。这看似只是体验细节,实际需要协调服务端响应、前端消息状态、错误和取消操作。模型回答再好,如果页面一直卡在加载中,用户也很难使用。
随着应用从对话走向行动,这条路线也向 Agent 扩展。2026 年 6 月 25 日的 AI SDK 7 公告,介绍了实验性的 HarnessAgent:通过统一接口运行 Claude Code、Codex 等已有 Agent 执行系统。AI SDK 7 公告
这里的 Harness 可以暂时理解为围绕模型组织工具调用、上下文和执行循环的配套系统。此时接入的已经不只是一份模型回答,而是一段能够继续工作的任务。实验性接口仍可能变化,不能把它当作从 2023 年首版就存在的能力。
Java 生态中的 Spring AI,则让熟悉 Spring 的开发者用相近的开发习惯接入模型、检索和工具。2025 年 5 月 20 日发布的 1.0 正式版,包含模型交互的 ChatClient、向量存储等接口。Spring AI 1.0 公告
它的意义不在于要求大家转向 Java,而在于大模型能力开始进入已有的软件体系。个人项目如果本来就是网页应用,不必为了“做 AI”先重写所有后端;已有 Java 服务,也不必默认额外搭一整套 Python 系统。
模型厂商也开始提供 Agent 开发工具
当工具使用、长任务和编程成为模型的重要能力,厂商自然也会提供更靠近这些能力的开发工具。
Google 在 2025 年 4 月 9 日发布开源 Agent Development Kit,简称 ADK,面向 Agent 和多 Agent 应用,强调编排、工具集成、评估与部署路径。它与 Google 生态紧密结合,但设计上也支持不同模型与部署环境。Google ADK 公告
OpenAI Agents SDK 则让开发者在自己的应用中组织 Agent、工具与任务交接,由运行器处理循环。它与直接调用模型的 API、由服务端管理的 Agent 运行服务,是不同层次的选择。OpenAI Agent 开发方式说明
Anthropic 在 2025 年 9 月 29 日介绍 Claude Agent SDK,将 Claude Code SDK 更名,表达的方向是:支撑编程助手的执行系统,也可以用于其他类型的工作。Claude Agent SDK 说明
这几条路线又把“SDK”的含义拉宽了。有的主要封装模型请求,有的已经管理完整行动循环,还有的提供较现成的工具与执行能力。选用之前,应先问清楚:循环在哪里运行,文件存在哪里,工具由谁执行,哪些状态需要自己保存。
厂商提供工具,并不意味着第三方框架失去价值。跨模型连接、已有数据组件、程序结构和部署方式,仍然可能影响选择。反过来,也不必因为项目叫“Agent”,就先套入一个庞大的通用框架。
从代码库到调试和部署,生态逐步补齐
我们现在可以回到开头的 LangSmith。编写流程解决“让哪些步骤运行”,观察工具解决“它刚才究竟怎样运行”。两件事相关,却不是同一件事。
以知识库回答错误为例,最终答案只告诉你结果不对。逐步记录可以帮助判断:文件没有读入,检索拿错了片段,提示词漏掉了限制,还是模型没有遵循已经提供的证据。这就是可观测性在这里的实际含义。评估则进一步用一组固定任务检查修改有没有改善效果,详细方法留到第 22 篇。
任务变长以后,部署也不能只理解为“给函数加一个网址”。用户关闭页面以后任务是否继续,服务重启以后怎样恢复,用户晚些时候确认草稿后怎样接着执行,都需要运行基础设施。
LangGraph Platform 在 2025 年 5 月 14 日正式可用,面向长时间、有状态的 Agent 部署;官方公告后来注明,它在同年 10 月更名为 LangSmith Deployment。部署产品的演进
由此可以把容易混在一起的几个名称分开:LangChain、LangGraph 是应用开发和执行框架;LangSmith 提供观察、评估等平台能力,其 Deployment 产品承担部署服务。它们可以配合,但安装一个开源库,不等于已经购买、配置或使用了云端平台。
同理,第 6 篇介绍的 Dify、Coze 等可视化平台,与这里的代码框架也有交集:都在组织模型、资料和步骤,只是提供的使用入口和产品配套不同。能够在画布上连接节点,不代表底层没有代码;能够用代码定义图,也不代表必须拥有一套可视化平台。
对个人项目,先找出真正缺少的那一层
看过这些演变以后,容易产生一种新的负担:是不是必须把所有框架都学会,才算会开发大模型应用?
可以回到一个很小的需求。如果复习助手目前只需要“输入笔记,生成三张卡片”,模型 SDK 加上普通程序可能就足够。你应当先看清请求、返回结果和保存的数据,再决定需要什么帮助。
随着需求增长,可以按下面的方式定位问题。这不是互斥选型表,同一产品可能覆盖多层,也不要求把列出的工具全部安装。
| 项目遇到的问题 | 需要理解的能力 | 本篇对应的代表路线 |
|---|---|---|
| 不同资料难以接入和检索 | 数据处理、索引、检索组件 | LlamaIndex、Haystack,以及 LangChain 的相关集成 |
| 任务有分支、重试和人工查看 | 流程编排、状态与恢复 | LangGraph、Workflows、CrewAI Flows、Agent Framework |
| 希望按职责分工完成复杂任务 | Agent 协作和结果交接 | AutoGen 的历史路线、CrewAI、厂商 Agent SDK |
| 需要接入已有网页或 Java 项目 | 界面、语言与后端集成 | Vercel AI SDK、Spring AI |
| 任务能运行,却难以定位错误或长期提供服务 | 观察、评估与部署 | LangSmith 等配套工具与运行平台 |
继续用刚才的卡片流程做一次设计检查:草稿放在哪里,用户确认之前会不会写入正式卡片库,重试后是否会重复保存,关闭程序再打开是否还能找到待处理任务?这些问题的答案,比“我用了几个 Agent”更能说明架构是否清楚。
框架可以减少重复工作,但它也会带来需要理解的结构、版本和默认行为。真正有价值的选择,是引入之后你更容易解释程序怎样运行,也更容易检查它有没有做对。
从早期组件连接,到数据框架、循环编排、多 Agent,再到语言生态和运行平台,框架的发展一直追随应用的问题变化。更强的模型让更多任务成为可能,框架则帮助开发者把这些能力组织成可以使用的程序。
接下来还有一个问题:即使流程写好了,模型怎样认识外部工具,不同系统怎样交换任务,可复用的能力又怎样交给 Agent?下一篇将把 Function Calling、MCP、A2A、Skills、插件与连接器放在一起,分清它们各自连接的是什么。
上一篇:19|截至 2026 年 10 月:模型能力与应用边界推进到了哪里
返回:第 0 部分大纲