1. 项目概述
最近AI Agent(智能体)的概念越来越火,但很多讨论都停留在理论层面,让人看得云里雾里。作为一个喜欢动手实践的开发者,我更倾向于通过代码来理解事物的本质。今天我们就用不到200行的Python代码,从零开始实现一个具备核心功能的极简AI Agent。
这个项目最大的特点就是"极简"——不依赖任何重型框架(如LangChain、LlamaIndex等),直接基于最底层的逻辑实现。通过这个项目,你将彻底理解:
- AI Agent是如何工作的
- 大模型如何保持对话记忆
- 如何让大模型调用外部工具
- 如何管理对话上下文
- 如何实现长期记忆
最终完成的Agent将具备四大核心能力:
- 短期记忆对话
- Function Calling工具调用
- 智能上下文管理
- 长期记忆+RAG检索
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心LLM与短期记忆
2.1 大模型的记忆本质
很多人误以为大模型本身具有记忆能力,实际上所有大模型天生都是无状态的。它们之所以能在对话中保持连贯,是因为我们在代码中维护了一个messages列表,将每一轮的对话历史完整地传给大模型。
python复制from openai import OpenAI
client = OpenAI(base_url='http://localhost:11434/v1/', api_key='ollama-local')
MODEL = "qwen3.5:4b"
def chat_loop():
messages = [] # 这就是Agent的"记忆"
print("=== 极简Agent启动成功,输入/quit退出 ===")
while True:
user_input = input("\n你:").strip()
if user_input == "/quit":
print("Agent:再见!")
break
messages.append({"role": "user", "content": user_input})
response = client.chat.completions.create(model=MODEL, messages=messages)
reply = response.choices[0].message.content
messages.append({"role": "assistant", "content": reply})
print(f"Agent:{reply}")
2.2 实现原理详解
这段代码实现了一个最简单的对话循环:
- 初始化一个空列表messages作为记忆存储
- 进入无限循环等待用户输入
- 将用户输入添加到messages中
- 将整个messages传给大模型获取回复
- 将模型回复也添加到messages中
- 打印回复并继续循环
注意:这里使用的是本地部署的Ollama服务,你也可以替换为其他API端点。关键是要保持messages列表的结构一致。
3. Function Calling工具调用
3.1 为什么需要工具调用
大模型虽然能理解用户意图,但无法直接操作外部系统。Function Calling就是给大模型装上"手脚",让它能够执行实际任务。
3.2 实现步骤
3.2.1 定义工具函数
我们先实现两个基础工具:读文件和写文件。
python复制def read_file(file_path: str) -> str:
"""读取本地文件"""
try:
with open(file_path, "r", encoding="utf-8") as f:
return f.rea
