用 Agent SDK 简化开发

实现编程 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 的设计思路会在下一篇横向对比。