从零构建 AI Agent:手写实现最小可用智能体
这是《从零构建 AI Agent》系列指南的开篇之作,推荐循序渐进地学习。
智能体(Agent)已成为人工智能领域最受瞩目的方向。然而初学者往往一上来就使用 LangChain、AutoGPT 等现成框架,跑通示例后一旦遇到错误便束手无策。
根源何在?这些框架将底层机制过度封装。工具调用逻辑、错误信息处理等细节都被隐藏,排障时不得不深入源码追踪。
因此,亲手实现 Agent 的目的并非"重复造轮",而在于掌握轮子运转的内在原理。
作为该系列的首篇文章,它将带你实现一个可运行的极简 Agent 类,核心代码仅约 60 行。
Agent 的核心机制可归纳为:
换言之,构建基础 Agent 仅需四个要素:
状态与行为的封装——状态即消息记录,行为指对话交互。
与语言模型的持续交互——接收用户输入、生成回复、循环往复。
上下文记忆能力——缺失此功能,Agent 将无法延续对话历史。
语言模型接入——主流服务商如 OpenAI、Anthropic、DeepSeek 均采用统一的消息结构。
以下示例演示了标准的消息格式:
三种角色定义:
消息历史充当 Agent 的"短期记忆库",持续追加新内容以维持上下文连贯性。
完整代码实现如下,存入 agent.py 文件即可执行:
代码逻辑清晰,可分解为三个步骤:
实例化 Agent 类时需指定系统提示和模型名称。构造过程包括:初始化 OpenAI 客户端,创建以 system 消息为首的消息队列。
执行前请注意以下事项:
程序通过环境变量获取 OPENAI_API_KEY,请预先配置:
若无 OpenAI 密钥,可改用 Ollama 本地部署,调整客户端初始化方式如下:
需安装 openai 依赖库:
频繁请求可能触发速率限制错误,建议暂停数分钟后重试,或核实 API 套餐配额。
若每次执行都新建 Agent() 实例,历史记录将清空,这属于正常现象。如需保持对话连续性,请在同一实例上反复调用 chat() 方法。
本文核心要点归纳如下:
当前实现已具备基础对话能力,但功能受限:无法读写文件或执行系统指令。后续文章将引入工具调用机制以扩展其能力。
(本文结束)
本篇为《从零构建 AI Agent》系列指南的第一部分。
关注公众号并回复"Agent1",即可下载完整源代码及配套练习题。
下篇文章将探讨工具调用机制,为 Agent 赋予实际行动能力。