在 实现编程 Agent 里我们用 80 行代码手写了一个编程 Agent。回顾一下,它的骨架就是一个双层 while 嵌套:
# 外层对话循环,每收到一条用户消息就交给内层处理
while True:
user_input = input("你: ")
messages.append({"role": "user", "content": user_input})
# 内层 Agent 循环
# 模型反复调用工具,直到它认为任务完成、不再请求工具调用
while True:
response = client.chat.completions.create(
model="deepseek-v4-flash", messages=messages, tools=tools, ...
)
assistant_message = response.choices[0].message
messages.append(assistant_message)
if assistant_message.content:
print(f"AI: {assistant_message.content}")
# 模型不再请求工具,说明本轮任务结束,退出内层循环
if not assistant_message.tool_calls:
break
for tool_call in assistant_message.tool_calls:
# 解析参数、调用对应工具函数、把调用结果塞回上下文
...外层是普通的对话循环,每个聊天程序都长这样,因为要随时等待用户的输入。
真正的核心是内层那个 Agent 循环:调用大模型、检查有没有工具调用、执行工具、把结果塞回上下文,循环往复,直到模型给出最终回答。
Agent SDK 做的事情,其实就是把这个内层循环替你封装好。
我们手写的那个内层循环虽然能跑通,但相当简陋,很多边界情况根本没考虑。
比如模型第一次的回答不符合约束怎么办、怎么提示它重试、重试几次还不行该怎么收场?这些状况在我们的手写版都没处理。
而 Agent SDK 会提供一套现成的框架,简单几行配置就能实现一个比较可靠的 Agent 循环,具体怎么做我们后面慢慢讲。
目前主流的 Agent SDK 有这么几个:
- Pydantic AI:模型提供商无关,换一个字符串就能切换模型提供商,API 设计最简洁
- OpenAI Agents SDK:OpenAI 官方出品,特色是 Handoff 机制,支持多个 Agent 之间自动流转
- LangGraph:LangChain 生态的框架,用有向图定义执行流程,对复杂工作流的控制力最强
- CrewAI:角色扮演式的多 Agent 协作框架,给每个 Agent 设定角色和目标,像组建团队一样开发多 Agent 的协作场景
它们的上层设计各有侧重,但底层做的事情是一样的:替你跑那个内层的 Agent 循环,再把常见的使用场景封装好。
这篇文章先用 Pydantic AI 重写我们的编程 Agent,因为它是这几个里面最简洁的,很适合帮你理解 SDK 到底帮你做了什么。其余三个 SDK 的设计思路会在下一篇横向对比。