简介:本文系统解析“纯 Python 手搓 AI Agent”这一开发方式:不依赖第三方 Agent 框架,直接以 Python 调用大模型 API,自行实现工具调用、循环控制与状态管理。文章阐明其定义、核心组成、运行原理与典型场景,并对比框架方案的差异与选型注意事项,帮助开发者判断何时值得手搓、如何手搓。
一、概念定义:什么是“纯 Python 手搓 AI Agent”
所谓“纯 Python 手搓 AI Agent”,指的是一种不依赖任何专门的 Agent 开发框架,仅使用 Python 语言本身及其标准库,直接调用大模型服务的 API,由开发者自行实现智能体核心逻辑的开发方式。这里的“手搓”并不是指从零实现模型推理或网络通信——这些底层能力依然由大模型服务和通用库提供——而是指编排层与控制层的所有代码,包括提示词组织、工具调用、循环控制、状态管理等,都由开发者亲手编写。
可以从三个视角来理解这个定义:
一个容易产生的误解是“手搓等于重复造轮子”。实际上,被复用的部分(模型推理、HTTP 协议、JSON 解析)是稳定且标准化的,而被框架封装的部分(编排逻辑)恰恰是每个业务各不相同、最需要灵活定制的部分。手搓的做法是:复用标准化的,自己写个性化的。
二、背景与价值:为什么“不用框架”会成为被认真讨论的选择
近年来,大量 Agent 开发框架涌现,它们提供记忆管理、多角色编排、工具注册等开箱即用的能力,显著降低了原型搭建门槛。但随着框架进入真实生产环境,一些共性问题逐渐显现:
行业中也出现了一些值得注意的信号:某头部大模型服务商在官方工程指南中明确建议开发者“从直接调用模型 API 开始”,在此基础上再评估是否引入框架(当然,这与其自身立场有关);另有工程团队公开分享,在生产环境使用某主流框架约 12 个月后选择将其完全移除,并反馈“移除后团队更快乐、更高效”。
这些信号背后的核心判断是:LLM 应用的技术本质并不复杂——把字符串发给模型、接收结构化返回、决定下一步动作——这套“字符串处理 + API 调用 + 循环”的组合,Python 原生能力就能很好完成。当底层能力足够简单时,中间抽象层的价值就需要被重新审视。
三、核心组成:一个最小可用 Agent 的五个模块
不依赖框架,不等于不需要设计。一个结构清晰的手搓 Agent 通常包含以下五个模块:
四、工作原理:Agent 循环如何运行
手搓 Agent 的运行逻辑可以概括为“感知—决策—执行—反馈”的循环:
下面是一段示意性伪代码(不依赖任何特定框架):
import jsondef run_agent(goal: str, tools: dict, max_steps: int = 10):messages = [{"role": "user", "content": goal}]for _ in range(max_steps):# 调用任意大模型服务的对话接口,传入消息与工具定义msg = call_llm_api(messages, tool_schemas=format_tools(tools))messages.append(msg)if not msg.get("tool_calls"):return msg["content"] # 模型给出最终答案,循环结束for call in msg["tool_calls"]: # 模型请求调用工具result = execute_tool(tools, call["name"], call["arguments"])messages.append({"role": "tool","name": call["name"],"content": json.dumps(result, ensure_ascii=False),})raise TimeoutError("Agent 达到最大步数仍未收敛")
整个核心逻辑不到三十行。需要说明的是,“模型返回结构化工具调用请求”(即通常所说的函数调用能力)是主流大模型服务普遍支持的通用能力,并非某一框架的专属特性——框架在这一层做的事情,主要是把上述循环和映射关系替你写好而已。
五、典型适用场景
手搓方式并非万能,但在以下场景中它往往是更优选择:
反之,以下情况引入框架更合理:需要快速验证想法的原型阶段;需要多智能体协作、复杂状态机等复杂编排且团队不愿自行维护这类基础设施;团队希望用统一范式约束多人协作风格。框架的价值在于提供起步速度和协作规范,而非不可替代的技术能力。
六、与相关概念的区别
七、使用注意事项
八、总结
回到最初的问题:不用框架,纯 Python 手搓 AI Agent 真的可行吗?答案不仅是可行,而且在工具数量有限、流程清晰、需要深度定制和强可观测性的场景中,它往往是更优选择。其定义可以浓缩为一句话:以 Python 原生能力直接构造“大模型 API + 工具调用 + 循环控制”的最小智能体系统,用自己写的、看得见的代码替代框架的黑盒抽象。
它的适用边界同样清晰:当任务需要复杂多角色编排、团队需要统一协作范式或追求极致起步速度时,框架仍有其价值。真正的工程判断标准不是“用不用框架”,而是“当前抽象层的复杂度是否与问题复杂度匹配”。理解了 Agent 的本质只是一个循环,开发者就拥有了选择的自由——这正是手搓实践最大的价值。