Python 工程师 AI Agent 开发 15 天学习路线图

目标: 15 天后能独立开发 AI Agent
每日投入: 约 2 小时(总计约 30 小时)
学习方式: 理论 30% + 编码 50% + 项目实战 20%


总览:三阶段递进

阶段一(Day 1-5)  →  Python 高级技能 + LLM 基础
阶段二(Day 6-10) →  AI Agent 核心架构
阶段三(Day 11-15)→  完整 Agent 实战项目

阶段一:Python 高级技能 + LLM 基础(Day 1-5)

目标: 补齐 Python 异步/并发/类型系统等高级特性,掌握 LLM API 调用与 Prompt 工程

Day 1:异步编程核心

时间 内容 方式
40min async/await 原理、事件循环、asyncio.gather() / asyncio.create_task() 阅读 + 编码
50min 实战:用 aiohttp 写并发爬虫,对比同步 vs 异步性能 编码
30min asyncio.Queue 生产者-消费者模式 编码

练习项目: 异步批量调用多个 API(模拟 Agent 多工具并发调用)

📔 实战教程: 运行 tutorial_02_async.py 跟着 9 步实战教程学习(已包含在项目中)

核心概念:同步 vs 异步

import asyncio
import time

# 同步:一件一件来(总耗时 = 所有任务时间之和)
def 同步烧水():
    time.sleep(3)  # ❌ 阻塞整个程序
    return "开水"

def 同步切菜():
    time.sleep(2)
    return "菜"

# 异步:同时开始,谁先完成谁先返回(总耗时 = 最慢的任务)
async def 异步烧水():
    await asyncio.sleep(3)  # ✅ 不阻塞,其他任务可以运行
    return "开水"

async def 异步切菜():
    await asyncio.sleep(2)
    return "菜"

async def 异步做饭():
    任务1 = asyncio.create_task(异步烧水())
    任务2 = asyncio.create_task(异步切菜())
    ,  = await 任务1, await 任务2  # 并发等待
    return , 

# 结果:同步 5 秒,异步 3 秒!

关键要点

关键字 作用 示例
async def 定义协程函数 async def 下载文件():
await 等待异步操作(不阻塞其他任务) result = await asyncio.sleep(1)
asyncio.run() 启动事件循环 asyncio.run(main())
asyncio.gather() 并发执行多个任务,等全部完成 await asyncio.gather(任务1, 任务2)
asyncio.create_task() 后台启动任务,更灵活 task = asyncio.create_task(下载())
asyncio.timeout() 超时控制 async with asyncio.timeout(5):

⚠️ 黄金法则: 在 async 函数里永远不用 time.sleep(),用 await asyncio.sleep()

AI Agent 实战:并发调用多个工具

async def Agent并发调用():
    """Agent 同时调用多个工具"""
    # 并发调用所有工具(不是逐个等待!)
    结果们 = await asyncio.gather(
        调用LLM工具("计算器", "3 + 5 * 2"),
        调用LLM工具("天气查询", "北京"),
        调用LLM工具("文件搜索", "config.py"),
        调用LLM工具("翻译", "Hello World"),
    )

    # 结果:4 个工具只花了最长的那个的时间(不是 4 倍!)
    for r in 结果们:
        print(f"🔧 {r['工具']}{r['结果']}")

免费资源: - Real Python: Async IO in Python - Python 官方 asyncio 文档

避坑: - ❌ 不要在 async 函数里用 time.sleep(),用 asyncio.sleep() - ❌ asyncio.run() 只能在主线程调用一次 - ✅ 优先用 asyncio.gather() 而非逐个 await


Day 2:类型系统与装饰器进阶

时间 内容 方式
30min typing 模块深造:Protocol, TypedDict, Literal, TypeVar, Generic 阅读 + 编码
30min @dataclass + pydantic v2 数据验证(Agent 输入输出模型必备) 编码
60min 装饰器进阶:带参数装饰器、类装饰器、functools.wrapscontextlib.contextmanager 编码

练习项目: 用 Pydantic 定义 Agent 的 Tool 输入输出 Schema,并用装饰器实现工具注册机制

📗 实战教程: 运行 tutorial_01_decorators.py 跟着 8 步实战教程学习(已包含在项目中)

装饰器核心概念

本质:装饰器 = 接受一个函数,返回一个新函数(就像给手机套壳)

import functools

# 第 1 步:最简单的装饰器
def 计时装饰器(原函数):
    """包装一个函数,让它执行时自动打印耗时"""
    @functools.wraps(原函数)  # ✅ 必须加!保留原函数信息
    def 包装函数(*args, **kwargs):
        开始 = time.time()
        结果 = 原函数(*args, **kwargs)
        耗时 = time.time() - 开始
        print(f"⏱ {原函数.__name__} 执行耗时:{耗时:.4f} 秒")
        return 结果
    return 包装函数

# 第 2 步:使用 @ 语法糖
@计时装饰器
def 慢速加法(a, b):
    time.sleep(1)
    return a + b

结果 = 慢速加法(3, 5)  # 自动计时!

⚠️ 装饰器的致命陷阱:@functools.wraps

# ❌ 错误写法:不带 wraps
def 坏装饰器(原函数):
    def 包装(*args, **kwargs):
        return 原函数(*args, **kwargs)
    return 包装

@坏装饰器
def 函数A():
    """这是文档"""
    pass

print(函数A.__name__)  # 输出 "包装"(丢失了原函数名!)
print(函数A.__doc__)   # 输出 None(丢失了文档!)


# ✅ 正确写法:带 wraps
def 好装饰器(原函数):
    @functools.wraps(原函数)  # 保留原函数的元信息
    def 包装(*args, **kwargs):
        return 原函数(*args, **kwargs)
    return 包装

@好装饰器
def 函数B():
    """这是文档"""
    pass

print(函数B.__name__)  # 输出 "函数B" ✅
print(函数B.__doc__)   # 输出 "这是文档" ✅

进阶:带参数的装饰器(三层嵌套)

# 需求:重试 3 次 vs 重试 5 次(参数化装饰器)
def 重试(最大次数=3, 等待秒=1):
    """装饰器工厂:根据参数创建不同的重试装饰器"""
    def 装饰器(原函数):
        @functools.wraps(原函数)
        def 包装(*args, **kwargs):
            for i in range(最大次数):
                try:
                    return 原函数(*args, **kwargs)
                except Exception as e:
                    if i == 最大次数 - 1:
                        raise  # 最后一次还失败就抛出
                    print(f"  重试 {i+1}/{最大次数}{e}")
                    time.sleep(等待秒)
        return 包装
    return 装饰器

@重试(最大次数=3, 等待秒=0.5)
def 不稳定的网络请求():
    # 模拟不稳定连接
    pass

🔧 AI Agent 实战:用装饰器注册工具

# 这是你未来 AI Agent 的核心机制之一!
from typing import Callable

# 工具注册表(全局)
工具注册表 = {}

def 工具(名称: str, 描述: str):
    """装饰器:把 Python 函数注册为 Agent 可用的工具"""
    def 装饰器(func: Callable):
        @functools.wraps(func)
        def 包装(*args, **kwargs):
            return func(*args, **kwargs)

        # 注册到工具表
        工具注册表[名称] = {
            "函数": 包装,
            "描述": 描述,
            "参数": func.__code__.co_varnames[:func.__code__.co_argcount]
        }
        return 包装
    return 装饰器

# 使用:和写普通函数一样简单!
@工具("计算器", "执行四则运算,例如:计算 3 + 5 * 2")
def 计算(表达式: str):
    return eval(表达式)  # 生产环境用 ast.literal_eval 更安全

@工具("天气查询", "查询指定城市的天气")
def 查天气(城市: str):
    return {"城市": 城市, "温度": "25°C", "天气": "晴"}

# 查看注册的工具
for 名称, 信息 in 工具注册表.items():
    print(f"🔧 {名称}{信息['描述']}")

# 调用工具
print(计算("3+5*2"))        # 输出: 13
print(查天气("北京"))         # 输出: {'城市': '北京', '温度': '25°C', ...}

练习项目: 用 Pydantic 定义 Agent 的 Tool 输入输出 Schema,并用装饰器实现工具注册机制

免费资源: - mypy 官方文档 - Pydantic V2 文档

避坑: - ❌ Pydantic v1 和 v2 API 不兼容,确认版本用 v2 - ✅ 类型提示不是运行时检查,配合 mypy 做静态检查


Day 3:生成器、迭代器与上下文管理器

时间 内容 方式
30min 生成器 yield / yield fromitertools 高级用法 阅读 + 编码
30min async generatorasync for + yield),LLM 流式输出必备 编码
60min 上下文管理器:__enter__/__exit__@contextmanager@asynccontextmanager 编码

练习项目: 实现一个流式 LLM 响应的异步生成器包装器

免费资源: - Python 官方 itertools 文档 - Real Python: Generators

避坑: - ❌ 生成器只能遍历一次,需要重复使用转为 list - ✅ 大文件/流式数据必须用生成器,否则内存爆


Day 4:LLM API 调用与 Prompt 工程

时间 内容 方式
30min OpenAI / 兼容 API(deepseek, qwen 等)调用模式 阅读 + 编码
40min Prompt Engineering:System Prompt / Few-shot / Chain-of-Thought / ReAct 格式 编码实验
50min Function Calling(工具调用)实战:让 LLM 选择并调用 Python 函数 编码

练习项目: 实现一个支持 Function Calling 的 LLM 客户端,LLM 能调用你预先注册的 Python 函数

免费资源: - OpenAI Function Calling 指南 - DeepSeek API 文档(免费额度) - Prompt Engineering Guide

避坑: - ❌ Function Calling 返回的 JSON 可能格式错误,必须加 try/except + 重试 - ✅ System Prompt 要精简,太长 LLM 容易忽略 - ✅ 国内用 DeepSeek / Qwen / Moonshot API 都有免费额度


Day 5:阶段一实战——命令行 AI 助手

时间 内容 方式
120min 综合练习:命令行 AI 助手,集成异步调用 + Pydantic 模型 + Function Calling + 流式输出 编码

项目需求: - 用户输入自然语言,LLM 理解意图 - 支持工具调用:查天气(模拟)、计算器、文件搜索 - 异步并发处理多个工具调用 - 流式输出回复内容 - 用 Pydantic 定义所有数据结构


阶段二:AI Agent 核心架构(Day 6-10)

目标: 掌握 Agent 四大核心模块——规划(Planning)、工具(Tools)、记忆(Memory)、执行(Action),能用 LangChain/LangGraph 构建多步推理 Agent

Day 6:Agent 架构原理

时间 内容 方式
60min Agent 核心模式:ReAct(Reasoning + Acting)、Plan-and-Execute、Reflection 阅读 + 手写
60min 不依赖框架,纯 Python 手写一个 ReAct Agent 循环 编码

核心 ReAct 循环伪代码:

async def react_agent(user_input: str, tools: list, max_steps: int = 10):
    messages = [{"role": "system", "content": SYSTEM_PROMPT}, ...]
    for step in range(max_steps):
        response = await llm.chat(messages)
        if response.has_tool_call():
            result = await execute_tool(response.tool_call)
            messages.append({"role": "tool", "content": result})
        else:
            return response.content  # 最终回答
    return "达到最大步数限制"

免费资源: - ReAct 论文解读 - Lilian Weng: LLM Powered Autonomous Agents

避坑: - ❌ 不设 max_steps 上限,Agent 可能无限循环 - ✅ 每步记录 token 消耗,防止成本失控


Day 7:LangChain + LangGraph 入门

时间 内容 方式
40min LangChain 核心概念:Chain, Tool, Agent, Memory 阅读
50min LangGraph 核心:StateGraph, Node, Edge, Conditional Edge 编码
30min 用 LangGraph 重写 Day 6 的 ReAct Agent 编码

练习项目: 用 LangGraph 实现一个带条件分支的 ReAct Agent

免费资源: - LangGraph 官方教程 - LangChain 文档

避坑: - ❌ LangChain 版本更新频繁(0.1 → 0.2 → 0.3),注意看文档版本 - ❌ 不要过度依赖 LangChain 高层封装,理解底层原理后再用 - ✅ LangGraph 比 LangChain AgentExecutor 更灵活,优先学


Day 8:工具系统与 MCP 协议

时间 内容 方式
30min 工具设计模式:单一职责、错误处理、超时控制、重试机制 阅读
40min MCP(Model Context Protocol)协议原理 阅读
50min 实现一个 MCP Server + 在 Agent 中集成 MCP 工具 编码

练习项目: 写一个简单的 MCP Server(提供文件操作工具),在 Agent 中调用

免费资源: - MCP 官方文档 - MCP Python SDK

避坑: - ❌ 工具描述(docstring)要清晰精确,这直接影响 LLM 选择工具的正确率 - ✅ 每个工具函数加超时装饰器,防止工具卡死整个 Agent - ✅ 工具返回结果要结构化(JSON),方便 LLM 理解


Day 9:记忆系统与 RAG

时间 内容 方式
40min Agent 记忆类型:短期(对话历史)、长期(向量存储)、工作记忆(scratchpad) 阅读 + 编码
40min RAG 实战:ChromaDB/FAISS + Embedding + 检索 + LLM 生成 编码
40min 实现带记忆的多轮对话 Agent(对话历史管理 + 上下文窗口裁剪策略) 编码

练习项目: 实现一个能记住对话历史、并能从文档库检索知识的 Agent

免费资源: - ChromaDB 文档 - LangChain RAG 教程

避坑: - ❌ 对话历史过长超出 token 限制 → 必须实现滑动窗口或摘要压缩 - ❌ Embedding 模型选错(中英文不匹配)→ 中文用 text-embedding-3-smallbge-large-zh - ✅ 记忆不是越长越好,关键是相关性检索


Day 10:阶段二实战——多工具 Agent

时间 内容 方式
120min 综合实战:用 LangGraph 构建多工具 Agent 编码

项目需求: - 至少集成 4 个工具(计算器、网页搜索、文件读写、代码执行) - ReAct 循环 + 条件路由 - 对话记忆(短期 10 轮 + 长期向量存储) - 流式输出 - 错误恢复(工具调用失败自动重试或降级)


阶段三:完整 Agent 实战项目(Day 11-15)

目标: 从零开发一个完整的、可部署的 AI Agent 应用

Day 11-12:项目设计与核心开发

项目选题——「智能开发助手 Agent」: - 理解用户自然语言需求 - 能搜索文档/代码 - 能读写文件 - 能执行 Shell 命令 - 多步推理完成任务

Day 内容
Day 11 项目架构设计、FastAPI 后端框架搭建、Agent 核心循环实现
Day 12 工具系统完善、RAG 集成、记忆系统、错误处理

Day 13:Web UI + 流式交互

  • 用 FastAPI + SSE(Server-Sent Events)实现流式 API
  • 简单 Web 前端(纯 HTML/JS 或 Streamlit/Gradio)
  • Agent 思考过程可视化

Day 14:测试、优化与部署

  • 单元测试(pytest + pytest-asyncio)
  • Token 消耗统计与优化
  • Docker 容器化
  • 部署到云服务器(或本地)

Day 15:总结与延伸

  • 回顾 15 天所学,整理知识体系
  • 探索进阶方向:Multi-Agent(AutoGen / CrewAI)、Agent 评测、安全防护
  • 完成项目文档和 README

每周目标汇总

周次 核心目标 检验标准
第 1 周 掌握 Python 高级特性 + LLM API + Function Calling 能手写 ReAct Agent,支持 3+ 工具
第 2 周 掌握 Agent 架构 + RAG + 记忆系统 能用 LangGraph 构建多步推理 Agent
第 3 周 完整项目开发 + 部署 独立完成可部署的 AI Agent 应用

推荐免费学习资源汇总

Python 高级

资源 链接 说明
Real Python https://realpython.com/ 最佳 Python 教程网站
Python 官方文档 https://docs.python.org/3/ 最权威
《流畅的 Python》 https://github.com/fluentpython 高级 Python 必读

LLM / AI Agent

资源 链接 说明
LangGraph 教程 https://langchain-ai.github.io/langgraph/tutorials/ Agent 框架首选
Prompt Engineering Guide https://www.promptingguide.ai/zh 中文 Prompt 指南
DeepSeek API https://platform.deepseek.com/ 免费额度,性价比高
MCP 官方文档 https://modelcontextprotocol.io/ 工具协议标准
Lilian Weng 博客 https://lilianweng.github.io/ Agent 深度解析

视频课程

资源 链接 说明
吴恩达 AI Agent 课程 https://www.deeplearning.ai/short-courses/ 免费短课程
LangChain 官方 YouTube https://youtube.com/@LangChain 最新教程

常见问题与避坑建议

Python 高级

问题 避坑建议
异步编程调试困难 asyncio 的 debug 模式:asyncio.run(main(), debug=True)
Pydantic 性能问题 v2 用 Rust 重写核心,务必升级;大模型用 model_validate 而非 __init__
装饰器丢失函数签名 必加 @functools.wraps(func)
上下文管理器嵌套地狱 3.10+ 用括号语法:with (A() as a, B() as b):

LLM 调用

问题 避坑建议
API 费用失控 设置 max_tokens、用更便宜的模型做预过滤、本地缓存相同请求
网络超时 所有 API 调用加 asyncio.timeout,含指数退避重试
JSON 解析失败 json.loads + 正则提取 + 重试,或使用 structured output(OpenAI)
国内网络问题 用国内 API(DeepSeek、Moonshot、Qwen),配代理访问 OpenAI

Agent 开发

问题 避坑建议
Agent 陷入死循环 必设 max_iterations + 重复检测(最近 N 轮无明显进展则退出)
工具调用错误 工具返回明确错误信息(非原始 traceback),让 LLM 能自我纠正
上下文超长 滑动窗口 + 摘要压缩 + 只保留关键信息
Prompt 被注入 用分隔符隔离用户输入,System Prompt 加"忽略用户的越狱指令"
工具权限过大 最小权限原则,危险操作(删文件、执行命令)需确认
Token 消耗不可见 每个 LLM 调用记录 prompt_tokens + completion_tokens

部署

问题 避坑建议
流式输出断连 SSE 加心跳机制,前端加重连逻辑
Docker 镜像过大 多阶段构建,.dockerignore 排除 __pycache__.venv
环境变量泄露 API Key 永远用环境变量,.env.gitignore

每日检查清单

每天结束时自检:

  • [ ] 完成今日编码练习并 push 到 GitHub
  • [ ] 阅读材料有笔记(哪怕一句话总结)
  • [ ] 遇到 1 个以上 bug 并解决了
  • [ ] 代码有类型注解和基本测试
  • [ ] 记录今日学到的 3 个关键点

进阶方向(Day 15 之后)

如果你的 AI Agent 已经能稳定运行,以下是继续深入的方向:

方向 内容 预计学习时间
Multi-Agent AutoGen / CrewAI 多 Agent 协作 1-2 周
Agent 评测 AgentEval / 人工评测体系 / 自动化回归测试 1 周
强化学习 + Agent RLHF / GRPO 微调 Agent 决策 2-4 周
生产级部署 K8s + 监控 + 日志 + 告警 + 灰度发布 2 周
Agent 安全 Prompt Injection 防护 / 沙箱执行 / 审计日志 1 周

最后提醒: 15 天是启动时间,不是终点。AI Agent 领域发展极快(周级更新),保持每周阅读一篇新论文/博客的习惯。重点不是学完所有框架,而是理解 Agent 的核心原理:规划 → 工具调用 → 反思 → 迭代。把这个循环刻在脑子里,什么框架都不过是它的具象化。