从零构建Agent(十三):快速搭建Agent应用的SDK

从码农到工匠 · 软件开发

原创 从码农到工匠 2026-11-05 19:22 上海 Agent SDK 的价值,并不是隐藏所有底层细节,而是提供一套稳定、简洁的接口,让开发者能够快速构建应用,并在复杂场景下保留扩展能力。 本文是「从零构建 Agent」系列的第 13 篇:快速搭建 Agent 应用的 SDK。 经历前 12 期的打磨,ZeroAgent 才初步具备可运行和可扩展的能力。由此可见,从零构建一个功能完备的 Agent 并非易事。 好在,市面上已经有不少 Agent SDK 和开发框架,例如 LangChain、CrewAI、Google ADK、OpenAI Agents SDK 等。它们将 Agent 的运行机制、工具调用、状态管理和多 Agent 协作等能力封装起来,让开发者可以更专注于应用本身。 本文将介绍什么是 Agent SDK,了解常见 SDK 的设计思路,并基于前 12 期构建的 ZeroAgent,实现一个轻量级 Agent SDK,支持快速创建 Agent 应用和 Multi-Agent 编排。 1. 什么是 Agent SDK? 前面 12 篇文章,我们一直在实现 Agent 的底层能力: Model 管理:如何连接和使用不同的模型。 Tool:如何让 Agent 调用外部工具。 Agent Loop:如何驱动模型和工具循环执行。 SubAgent:如何将任务委派给其他 Agent。 Extension:如何扩展 Agent 的生命周期。 Memory:如何实现跨 Session 的长期记忆。 这些能力构成了 Agent 的运行时核心。 但对于应用开发者来说,每次构建一个 Agent,都需要理解并组装这些组件,仍然有不少工作。 例如,创建一个能够查询天气的 Agent,应用开发者真正关心的可能只是: const agent = new Agent({ name: 'Weather Agent' , model: 'gpt-6' , instructions: '你是一个天气助手。' , tools: [weatherTool], }); const result = await agent.run( '东京今天天气怎么样?' ); 至于内部如何构造 Prompt、调用模型、执行工具,以及如何处理多轮交互,这些细节可以由 SDK 负责。 因此, Agent SDK 的核心价值,是将 Agent Runtime 封装成稳定、易用的编程接口。 一个实用的 Agent SDK,通常需要提供: 能力 作用 Agent 定义 配置模型、指令和工具 Agent 运行 提供统一的执行入口 Tool 集成 让 Agent 调用外部能力 Context / Session 管理对话上下文和状态 Multi-Agent 支持 Agent 之间的委派与协作 扩展机制 允许应用接入自定义逻辑 不同 SDK 的抽象方式有所区别,但核心目标相似:降低 Agent 应用的构建成本。 2. 常见的Agent SDK 2.1 LangChain 是目前较为成熟的 Agent 开发框架之一。 LangChain 提供模型、工具、消息和 Agent 等抽象,并通过统一的接口连接不同模型和工具。开发者可以使用预置的 Agent 模式快速构建应用,也可以通过 Middleware 扩展运行逻辑。 LangChain 生态中还有 LangGraph,主要用于构建更复杂的状态化工作流,例如持久化执行、人工介入、重试以及自定义流程控制。<Cite refs={["turn551982search7","turn551982search16"]}/> 它的特点是: 丰富的模型和工具集成。 提供相对成熟的 Agent 抽象。 支持从简单 Agent 扩展到复杂工作流。 如果希望快速构建 Agent 应用,同时保留较强的扩展能力,LangChain 是一个值得考虑的选择。 2.2 CrewAI 更强调多个 Agent 之间的协作。 CrewAI 的核心抽象包括: Agent :负责特定任务的智能体。 Crew :多个 Agent 组成的协作团队。 Flow :用于定义任务执行流程和状态管理。 例如,可以构建一个内容生产流程: from crewai import Agent, Task, Crew, Process from crewai_tools import SerperDevTool # 1. 定义两个角色 researcher = Agent( role= "资深技术研究员" , goal= "找到关于 {topic} 的最新、可信的信息" , backstory= "你是一位经验丰富的分析师,擅长从多个来源交叉验证事实。" , tools=[SerperDevT

查看原文