纯 Python 手写 AI Agent 选型指南:框架还是自研?

作者:热心市民鹿先生2026.11.04 09:33浏览量:0

简介:本文将围绕“是否使用框架构建 AI Agent”这一技术选型问题展开,帮助开发者、架构师和技术负责人从业务目标、系统规模、团队能力、运维复杂度、成本结构等维度建立评估框架。文章不会简单给出“框架好还是自研好”的结论,而是拆解不同条件下应重点关注的指标,并提供决策路径、验证方法和落地注意事项,帮助读者判断哪种方案更适合当前项目阶段与长期规划。

一、选型背景:为什么“框架还是自研”会成为一个真问题

在 AI Agent 相关项目快速增加的环境下,团队面临一个非常现实的工程选型问题:是引入成熟的智能体编排框架,还是直接基于 Python 和 LLM API 进行自研实现。

这个选择并不是“哪个技术更先进”的问题,而是“哪个方案更适合当前业务阶段、团队结构、系统边界和长期演进目标”的问题。

从工程实践看,AI Agent 的核心逻辑通常包括:任务理解、工具调用、上下文管理、多步骤推理、状态维护、错误恢复和结果输出。围绕这些能力,市场上已经出现了多种框架化方案,它们在不同程度上封装了上述能力,并提供可视化编排、追踪调试、模板化管理等功能。

但框架并非没有代价。引入框架意味着接受其抽象方式、依赖关系、版本节奏和排障复杂度。某些场景下,团队的业务逻辑并不复杂,或者系统已经具备成熟的调度、消息和工具调用基础设施,此时自研反而更轻、更透明、更易维护。

因此,本文的选型目标是:帮助读者建立一套可执行的评估方法,在“使用框架”和“纯 Python 自研”之间做出有依据的决策,并为后续验证和落地提供可操作建议。


二、需求拆解:先明确要解决的工程问题

选型的第一步不是比较方案,而是把需求拆成可判断的维度。AI Agent 项目的需求差异很大,以下维度会直接影响后续选择。

2.1 业务目标

需要先回答:这个 Agent 是为谁服务、解决什么问题。

  • 如果是内部效率工具,如自动生成报告、辅助代码审查、批量处理文档,通常对稳定性、成本和开发速度更敏感。
  • 如果是面向客户的产品能力,如智能客服、业务流程助手,则更关注可观测性、权限控制、错误恢复和发布节奏。
  • 如果是实验性项目或原型验证,开发速度和调试透明度可能优先于长期架构优雅。

业务目标不同,对框架封装程度、灵活性和可控性的要求也不同。框架通常能加速原型开发,但在深度定制和业务逻辑耦合较重的场景中可能成为限制。

2.2 系统规模与增长预期

系统规模需要从几个方面看:请求量、并发量、任务复杂度、工具数量、状态规模和用户分布。

  • 如果 Agent 请求量低、任务链短、工具数量少,自研的复杂度可控。
  • 如果预计未来会扩展到多个业务线、多个工具集、多条执行路径,则框架提供的标准化能力可能更有价值。
  • 如果任务执行时间较长,需要持久化状态、断点恢复、人工介入,则需要重点评估方案在状态管理和任务追踪方面的能力。

系统的增长预期也会影响选型。如果当前是单团队试点,未来可能变成平台级能力,那么早期选择的技术方案必须考虑可迁移性和抽象边界。

2.3 技术架构与现有系统

AI Agent 通常不是孤立系统,它需要与现有业务系统交互,比如调用内部 API、查询数据库、触发消息、写入日志。因此必须评估:

  • 现有系统是否已经有消息队列、调度平台、配置中心、监控告警等基础设施;
  • Agent 的工具调用是否与现有服务治理体系兼容;
  • 是否需要与身份认证、权限系统对接;
  • 是否已有成熟的 Python 服务和部署链路。

如果团队已经拥有较完整的服务治理和编排基础,自研 Agent 可以更自然地融入现有体系;如果基础设施较弱,框架提供的集成能力可能降低接入成本。

2.4 团队能力与人力配置

这是最容易在选型初期被低估,但在落地后期影响最大的因素。

需要评估团队是否具备以下能力:

  • 对 LLM 的调用方式、消息结构、上下文窗口、温度、工具调用协议是否熟悉;
  • 是否有状态机、重试机制、幂等控制、超时处理等后端工程经验;
  • 是否能设计合理的日志、追踪和调试机制;
  • 是否能维护自研代码的长期演进,包括文档、测试和版本管理。

如果团队规模小、工程经验集中在业务开发而非底层框架维护,引入框架可能更安全;如果团队有较强的平台工程能力,自研可以避免被框架抽象束缚。

2.5 成本结构

成本不只是调用 LLM 的费用,还包括:

  • 开发成本:从零写的初始开发时间;
  • 学习成本:团队成员熟悉框架或维护自研代码的时间;
  • 调试成本:定位问题、理解内部执行逻辑的难度;
  • 迁移成本:未来切换方案或升级底层模型时需要付出的代价;
  • 运行成本:额外组件、存储、日志、监控带来的资源消耗;
  • 维护成本:框架升级、API 变更、安全补丁、兼容性处理。

自研方案初期成本可能较高,但长期可控性更强;框架方案初期成本较低,但可能在深度定制和故障定位时产生隐性成本。


三、选型对象说明:两种路线的本质差异

agent">3.1 使用框架构建 AI Agent

框架通常提供以下一种或多种能力:

  • 声明式或图式定义 Agent 执行流程;
  • 工具调用的统一封装;
  • 状态管理与检查点;
  • 可视化调试与追踪;
  • 多模型适配;
  • 预设的记忆、规划、反思等模式。

框架的优势在于:统一抽象、快速搭建、社区经验和生态集成。适合需要快速验证、多团队协作、标准化治理的场景。

框架的局限在于:抽象泄漏、版本变化、内部逻辑不透明、深度定制困难。当业务逻辑突破框架预设模式时,可能需要绕过框架或大量阅读源码,反而增加复杂度。

3.2 纯 Python 自研

自研方案通常直接使用 Python 编写控制流程,并通过 LLM API 完成推理,自己实现工具调用、状态管理、重试和日志。常见做法包括:

  • 用普通 Python 函数和类组织 Agent 行为;
  • 用字典或数据类维护会话状态;
  • 用显式循环处理多步推理;
  • 用结构化日志记录每次模型调用和工具执行;
  • 用版本控制管理提示词和流程变更。

自研的优势在于:完全透明、灵活度高、无额外依赖、易于与现有系统集成。适合逻辑稳定、流程清晰、对可控性要求高的场景。

自研的局限在于:需要自行处理很多工程细节,长期看可能形成一套隐性的“内部框架”。如果团队没有沉淀这些能力,后续维护成本会上升。


四、核心评估维度

以下维度可以把“感觉合适”转化为可判断的标准。

4.1 功能覆盖度

评估方案是否具备当前及近期需要的核心能力:

  • 是否支持多步任务编排;
  • 是否支持工具调用和结果回传;
  • 是否支持条件分支、循环和并行执行;
  • 是否支持人工确认和中断恢复;
  • 是否支持多模型切换;
  • 是否支持结构化和非结构化输出。

自研方案功能覆盖度取决于团队投入;框架方案功能覆盖度取决于框架设计。需要确认框架的核心抽象是否与业务模型匹配,而不是只看功能列表。

4.2 性能与稳定性

需要关注:

  • 单次任务端到端延迟;
  • 并发执行时的资源占用;
  • 长时间运行的任务是否会丢失状态;
  • 网络异常或模型超时时的恢复机制;
  • 高负载下的排队和限流策略。

框架可能引入额外序列化、状态持久化和节点调度开销。自研可以针对业务做精简,但如果细节处理不到位,稳定性风险更高。

4.3 可观测性与排障效率

AI Agent 的排障比传统服务复杂,因为涉及模型推理、提示词、工具调用和状态变化。需要评估:

  • 是否记录每次模型调用的完整输入输出;
  • 是否记录工具调用参数和返回结果;
  • 是否追踪每一步的状态变化;
  • 是否支持按会话、按任务、按时间检索;
  • 是否能回放某次执行过程。

框架通常自带一定程度的追踪能力,但在某些深度定制场景下,追踪信息可能不够细。自研需要自行设计日志结构,但可以做到与业务字段完全对齐。

4.4 安全与合规

  • 工具调用是否需要权限校验;
  • 敏感数据是否进入模型上下文;
  • 日志中是否包含用户隐私内容;
  • 是否支持审计追踪;
  • 是否能限制某些工具的调用范围;
  • 是否支持环境隔离。

这部分无论选择哪种方案,都必须单独设计。框架不能替代安全策略。自研方案可以更直接地控制数据流和权限边界。

4.5 生态兼容与扩展性

评估:

  • 是否容易接入内部工具和 API;
  • 是否支持自定义工具注册;
  • 是否支持不同模型提供方;
  • 是否支持与现有日志、监控、告警系统对接;
  • 未来是否可能扩展到多 Agent 协作、多租户隔离、多环境部署。

框架的生态兼容性通常较好,但可能要求按框架规范实现。自研则可以完全按内部规范设计,但需要自行维护一致性。

4.6 运维复杂度

  • 部署形态:是否需要额外服务;
  • 升级策略:框架版本升级是否影响现有任务;
  • 配置管理:提示词、流程、工具定义如何管理;
  • 监控告警:如何设置指标和告警规则;
  • 容量规划:资源消耗如何预估和调整。

自研方案运维复杂度取决于代码质量和工程规范;框架方案运维复杂度取决于框架部署形态和版本策略。


五、方案适配分析

5.1 优先考虑自研的条件

以下条件满足越多,自研越值得优先考虑:

  • Agent 流程相对稳定,不需要频繁重构;
  • 团队已有成熟的 Python 服务开发经验;
  • 系统已有消息、日志、监控、调度等基础设施;
  • 需要深度控制提示词、状态和工具调用;
  • 对引入第三方抽象层有明确顾虑;
  • 任务类型集中,不需要覆盖大量异构场景;
  • 对框架升级、API 变化带来的维护成本敏感。

在这些条件下,自研可以用较少代码实现清晰、透明、可维护的 Agent,并避免框架抽象带来的理解成本和运行限制。

5.2 优先考虑框架的条件

以下条件满足越多,框架越值得优先考虑:

  • 需要快速搭建原型并验证业务价值;
  • 团队对 LLM 工程化经验较少;
  • 需要支持多团队、多项目共享统一规范;
  • 任务流程复杂且变化频繁;
  • 需要可视化和回放能力辅助调试;
  • 业务希望借助社区经验和成熟模式降低试错成本;
  • 没有专门的人力维护底层 Agent 基础设施。

在这些条件下,框架可以缩短初期开发周期,并提供经过实践检验的编排、状态和追踪能力。

5.3 需要进一步验证的条件

有些场景无法直接判断,需要通过小范围验证:

  • 业务逻辑是否会频繁突破框架预设;
  • 框架的追踪信息是否足够支持复杂排障;
  • 高并发下的框架性能是否满足要求;
  • 自研状态管理在长任务中是否可靠;
  • 团队能否在框架升级时保持业务稳定。

这些点建议通过一个或两个具体业务场景进行试验性实现,对比开发效率、运行表现和排障体验后再做判断。


六、选型对比表

评估维度 纯 Python 自研 框架方案
初期开发速度 较慢,需自行实现基础能力 较快,有现成抽象
灵活性 高,可按业务自由设计 中,受框架抽象约束
可控性 高,代码透明 中,内部逻辑可能不透明
可观测性 需自行设计 通常自带追踪,但深度有限
学习成本 低,普通 Python 工程 中高,需理解框架概念和版本
排障难度 取决于日志设计 框架层面问题较难定位
社区支持 无直接社区依赖 可借鉴社区经验
与现有系统集成 直接集成 可能需要适配层
长期维护成本 取决于内部规范 框架升级可能带来适配成本
多团队复用 需自行沉淀规范 较易统一
安全控制 需自行实现 仍需自行配合框架实现
适合场景 流程稳定、工程能力强、可控性优先 快速验证、多团队、流程复杂多变

七、决策路径

可以按以下顺序判断:

  1. 确认业务目标和系统边界:是内部工具还是对外产品?Agent 是否需要与大量内部系统交互?
  2. 梳理任务复杂度:执行步骤是否稳定?工具数量和类型是否集中?是否需要复杂分支和人工介入?
  3. 评估团队工程能力:是否有能力实现可靠的状态管理、重试、日志和追踪?
  4. 盘点现有基础设施:是否已有调度、消息、监控、日志等组件可以复用?
  5. 预测演进方向:未来是否可能平台化?是否需要支持多团队标准化?
  6. 进行小范围试验:选择一个有代表性的业务场景,分别用自研和框架实现最小可用版本,关注开发时间、调试体验、运行稳定性。
  7. 形成结论并设置复盘点:即使选定方案,也应设定阶段性评估节点,避免技术路线锁定。

八、验证方法

选型不能只靠文档和讨论,必须通过验证降低风险。

8.1 最小可行验证

选择一个真实但不复杂的业务任务,实现以下能力:

  • 能调用一个或两个内部工具;
  • 能进行多步推理;
  • 能记录完整执行过程;
  • 能在失败时给出可定位的错误信息。

比较两种方案在开发时间、代码可读性、调试效率和运行表现上的差异。

8.2 稳定性验证

针对自研方案,重点测试:

  • 模型超时后的重试行为;
  • 工具返回异常时的处理;
  • 长任务中途失败后的恢复;
  • 并发请求下的状态隔离。

针对框架方案,重点测试:

  • 框架升级是否影响现有任务定义;
  • 高负载下框架组件是否成为瓶颈;
  • 追踪信息是否足以定位业务层错误;
  • 框架抽象是否能覆盖业务需要的特殊分支逻辑。

8.3 可观测性验证

检查以下问题是否容易回答:

  • 某次任务在第几步失败?
  • 当时模型输入是什么?
  • 工具返回了什么?
  • 状态机处于什么位置?
  • 能否在不修改业务代码的情况下回放执行过程?

如果这些问题的定位成本很高,即使开发阶段顺利,后续维护也会付出较大代价。

8.4 团队验证

让至少两名未参与初始开发的成员尝试修改任务流程或新增工具,观察他们需要多少时间理解代码结构、定位关键逻辑并完成变更。这可以验证方案的可持续性。


九、落地注意事项

9.1 自研方案的落地要点

  • 建立统一的会话状态结构,避免散落在多处字典中;
  • 为每次模型调用和工具调用生成唯一标识,便于关联追踪;
  • 设置清晰的目录结构,区分提示词、工具、流程、状态和日志;
  • 对提示词变更走版本管理流程;
  • 为多步任务设计显式的状态机或流程描述,避免隐式逻辑;
  • 实现幂等和超时控制,特别是工具调用环节;
  • 将日志设计为结构化格式,便于后续检索和统计;
  • 定期评估是否在无意中发展出一套内部框架,如果复杂度持续上升,需要重新审视自研边界。

9.2 框架方案的落地要点

  • 明确框架版本和升级策略;
  • 理解框架核心抽象,避免在业务代码中深度绑定框架特定接口;
  • 对框架的默认行为保持警惕,例如默认重试次数、默认超时、默认状态持久化策略;
  • 在框架外围建立统一的服务接口,降低未来替换成本;
  • 保留原始模型调用和工具调用日志,不完全依赖框架追踪;
  • 对敏感配置和提示词进行访问控制;
  • 定期评估框架能力与业务需求之间的差距,避免为迁就框架而牺牲业务合理性。

9.3 共同注意事项

无论选择哪种方案,都需要关注以下方面:

  • 数据与权限:明确哪些数据可以进入模型上下文,哪些工具调用需要鉴权;
  • 成本监控:追踪 token 消耗、工具调用次数和任务失败率,避免成本失控;
  • 安全边界:防止提示词注入导致工具被滥用;
  • 版本管理:提示词、流程定义、工具配置都应纳入版本管理;
  • 回滚机制:关键 Agent 流程变更应支持快速回退;
  • 文档与规范:沉淀关键设计决策和排障手册,降低人员变动风险。

十、总结

“纯 Python 手写 AI Agent 是否可行”不是一个是非题,而是一个需要结合具体条件判断的工程选型问题。

如果团队工程能力较强、现有基础设施完善、业务逻辑相对稳定且对可控性要求高,自研方案不仅可行,而且可能更有利于长期维护和深度定制。它的核心挑战在于可靠地实现状态管理、错误恢复、日志追踪和工具调用规范。

如果团队需要快速验证、任务流程多变、多团队协作或缺乏底层平台工程经验,框架方案可以显著降低初期门槛,提供经过实践检验的编排与追踪能力,但需要接受其抽象约束和升级成本。

最稳妥的方式不是一次选对,而是建立清晰的评估维度,通过小范围验证获取真实反馈,并设置阶段性复盘机制。技术选型的最终目标不是证明哪种路线更优,而是让当前团队在当前约束下,以更低的长期成本交付更可靠的 AI Agent 能力。