2026 年绝对是 AI Agent(智能体) 的元年。自从 Claude Code 横空出世,AI 智能体的威力已经无法忽视。Claude Code、Codex、GitHub Copilot 成了无数开发者的标配工具,OpenClaw 和 Hermes 也在成为越来越多人的 AI 助手。就连知识工作者也开始用 Cowork 这类工具整活。
但对于大多数人来说能接触到AI Agent(智能体) 并利用Agent 解决工作和生活中的问题还是比较少,其实AI Agent(智能体) 并不神秘,如果你愿意跟着这个系列走,我们就一起 从零手写一个最基础的 AI Agent,彻底搞懂它到底是怎么工作的。为了真正看清引擎盖底下是啥,我们不搞框架、不依赖库,纯 Python 手撸。这当然不是上线的产品,但这才是 真正能学会 的方式,读万卷书不如行万里路,让我们开始吧。
🤔 什么是 AI Agent?
AI Agent 就是一个 用 AI 来自主完成目标 的程序。跟别的 Agent 一样,它能感知环境、动脑思考、上手干活。通常它会跑在一个循环里,直到目标达成。
打个比方:你跟它说「帮我查一下今天的天气怎么样」,它就去查了告诉你。但真正的 Agent 不光是聊天,它还能自己调用工具、读文件、跑命令——那是后面的事儿,咱一步一步来。
🧱 最基本的 Agent 需要啥?
就四样东西:
1. 循环 —— 让 Agent 一直活着,别聊一句就挂了
2. LLM 连接 —— 得有个聪明的 AI 模型撑腰
3. 用户输入 —— 总得有人告诉它想干啥吧
4. 上下文/记忆 —— 聊过的不能转头就忘,得记着
当然这只是最丐版,后面我们会往里加更刺激的功能。
🔨 开整
先搞个能跑的模型。我的方案是用本地的 Ollama,跑的是 llama3.1:8b — 一个只有 8B 有效参数的小模型,免费、本地、随便玩。当然你也可以配置自己和API Key, 比如:Deepseek(注册官网并生成API key即可)
代码长这样
import httpxfrom openai import OpenAI# ========================================# 配置区域 - 按需修改即可# ========================================# 云端模式:设置 API Key 后将自动使用云端模式,否则使用本地 Ollama# OPENAI_API_KEY = "sk-xxx"# API 基础地址(本地 Ollama 默认 http://localhost:11434/v1)# OPENAI_BASE_URL = "http://localhost:11434/v1"# 模型名称(本地默认 llama3.1:8b,云端默认 gpt-4o)# LLM_MODEL = "llama3.1:8b"# 温度参数(0.0 - 2.0,默认 0.7)# LLM_TEMPERATURE = 0.7# ========================================# 以下代码无需修改# ========================================def get_llm_client():"""创建并返回 LLM 客户端。"""api_key = OPENAI_API_KEYbase_url = OPENAI_BASE_URLif api_key:print(f"[配置] 云端模式 - API: {base_url}")return OpenAI(base_url=base_url, api_key=api_key)else:print(f"[配置] 本地模式 - Ollama: {base_url}")http_client = httpx.Client(timeout=60,mounts={"http://localhost": httpx.HTTPTransport(proxy=None),"http://127.0.0.1": httpx.HTTPTransport(proxy=None),},)return OpenAI(base_url=base_url,api_key="ollama",http_client=http_client,)def agent_loop(client):"""运行 Agent 对话循环。"""messages = [{"role": "system", "content": "You are a helpful assistant."}]print("\n💬 对话已开始(输入 \\exit 退出)\n")while True:try:user_input = input("You: ")except (EOFError, KeyboardInterrupt):print("\n👋 再见!")breakif user_input.lower() == "\\exit":print("👋 再见!")breakif not user_input.strip():continuemessages.append({"role": "user", "content": user_input})try:response = client.chat.completions.create(model=LLM_MODEL,messages=messages,temperature=LLM_TEMPERATURE,)reply = response.choices[0].message.contentprint(f"Assistant: {reply}")messages.append({"role": "assistant", "content": reply})except Exception as e:print(f"❌ 请求失败:{e}")if __name__ == "__main__":# 读取配置:用户取消注释后,变量的值会被 globals() 读取到api_key = globals().get("OPENAI_API_KEY") or ""base_url = globals().get("OPENAI_BASE_URL") or "http://localhost:11434/v1"temperature = globals().get("LLM_TEMPERATURE") or 0.7model = globals().get("LLM_MODEL") or ("llama3.1:8b" if not api_key else "gpt-4o")# 注入到全局供 get_llm_client 和 agent_loop 使用globals()["OPENAI_API_KEY"] = api_keyglobals()["OPENAI_BASE_URL"] = base_urlglobals()["LLM_MODEL"] = modelglobals()["LLM_TEMPERATURE"] = temperaturemode = "云端" if api_key else "本地(Ollama)"print("=" * 40)print(f" Agent 模式:{mode}")print(f" 模型:{model}")print("=" * 40)client = get_llm_client()agent_loop(client)
🧠 这段代码在干嘛?
拆开来看:
get_llm_client() 搞了个通往本地 Ollama 的 LLM 连接或配置API key
建了一个聊天历史数组 messages,先塞一句系统提示词当基本功
拿到用户输入,塞进消息队列
把完整的对话记录(包括刚说的那句)发给 AI 模型,等它回话
AI 的回话接着塞进消息队列
循环往复,直到你说 \exit 跑路
跑起来效果是这样:

✅ 你造了个啥?
这是 理论上最简的 AI Agent(智能体) 了,但说老实话,它还很鸡肋。目前它就是个聊天机器人——模型知识库里有的它能答,没有的就抓瞎。它没法读文件、写文件、跑命令、上网搜,跟外界环境是彻底隔开的。
🔜 下一步呢?
给 Agent 装工具 🛠️。让它能在真实环境里动手干活——读文件、跑搜索、执行命令。这才是 AI Agent 真正牛起来的地方。
下一期,我们给 Agent 循环加上 工具调用(tool calling)。到时候见。
代码在 Github仓库(https://github.com/aicorp-cn/basic-agent)里可以 clone,欢迎来玩。或扫下方二维码,同时点击原文链接也可以抵达

夜雨聆风