01-Python AI Agent 大纲

课程内容

  • 每日主题
  • 教学目标,Agent组件理论
  • 可运行的 Python 代码
  • 代码分析
  • 代码功能单元模仿拓展(课堂练习 + 课后作业)

✅ 操作系统:Ubuntu24.04(推荐)、Windows、MAC
✅ 所有代码基于 Python 3.9+
✅ 默认使用 OpenAI API(若无,可用 Ollama + ollama 包本地替代,文末附说明)
✅ 确保代码能理解、能改、能跑

图片

组件 说明 关键特性/示例
Agent(智能体) 核心决策单元,负责协调记忆、工具、规划与行动 可执行复杂任务,支持多种代理类型(>15种)
Memory(记忆) 存储上下文信息,分为短期和长期记忆 - 短期:缓冲区(Buffers),如对话历史- 长期:向量数据库(>40种),用于知识检索
Tools(工具) 外部功能接口,供Agent调用执行任务 >60个工具和工具包,如:Pandas、Google Search、Gmail等
Plan(规划) 决定下一步行动的策略模块 支持多步推理与任务分解
Action(行动) 执行具体操作,包括调用工具或LLM 可能是模拟环境中的动作,也可能是真实世界交互
LLMs(大语言模型) 提供语言理解和生成能力 >60种集成,如GPT、Claude、Llama等
Agents 类型 不同行为模式的智能体 包括:自主型(Autonomous)、模拟型(Simulation)、如AutoGPT等

LangChain Agent Ecosystem 是一个模块化框架,
通过 Agent + Memory + Tools + Plan + Action + LLMs 的协同工作,
实现 AI 智能体的自主决策与任务执行。


📦 前置准备

1. 创建项目目录方法

agent-course/
├── .env
├── day01/
├── day02/
...
└── utils.py  # 可选工具函数


# 创建工作目录
mkdir day4 && cd day4

# 创建虚拟环境
python3 -m venv day4-robust

# 激活虚拟环境
source day4-robust/bin/activate

# 关闭虚拟环境,使用时去掉“#”
# deactivate

# 升级 pip
pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/

2. .env 文件(填自己的 key)

# 填自己的 key
echo 'DASHSCOPE_API_KEY=sk-6adfyyyyyy4374b32c720xxxxxxce5' > .env

3. 安装依赖(统一命令)

# 示例
pip install langchain openai python-dotenv requests beautifulsoup4 faiss-cpu 

🗓️ 每日教学包


Day 1:Hello Agent! —— 你的第一个智能体

目标:让学生看到“智能体”能做事,建立信心
技能:调用 LLM、理解 Agent = LLM + 工具

📄 代码模板 day01/hello_agent.py

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

load_dotenv()

llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个乐于助人的AI助手。"),
    ("human", "{input}")
])

chain = prompt | llm

response = chain.invoke({"input": "今天北京天气怎么样?"})
print(response.content)

✅ 实验任务

  • [课后] 尝试问一个需要查外部信息的问题(如“现在美元兑人民币汇率?”),观察 AI 是否会编造答案 → 引出“工具”的必要性

Day 2:给智能体装上“手”——Tool 工具开发

目标:学会定义和调用工具函数
技能:编写 Tool、理解函数即能力

📄 代码模板 day02/tool_example.py

import requests
from datetime import datetime

def get_current_time() -> str:
    """获取当前时间"""
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

def get_weather(city: str) -> str:
    """模拟天气查询(实际项目可用 API)"""
    return f"{city}今天晴,25°C"

# 测试
print(get_current_time())
print(get_weather("上海"))

✅ 实验任务

  • [课后] 思考:如果 AI 要自动选择调用哪个工具,怎么办?

Day 3:让 AI 自己决定用哪个工具(ReAct Agent)

目标:构建第一个自主决策的智能体
技能:使用 LangChain 的 ReAct Agent

📄 代码模板 day03/react_agent.py

from langchain.agents import tool, AgentExecutor, create_react_agent
from langchain_openai import ChatOpenAI
from langchain import hub

@tool
def get_time():
    """获取当前时间"""
    from datetime import datetime
    return datetime.now().strftime("%Y-%m-%d %H:%M")

llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
tools = [get_time]
prompt = hub.pull("hwchase17/react")  # 官方 ReAct 提示词
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

result = agent_executor.invoke({"input": "现在几点了?"})
print(result["output"])

✅ 实验任务

  • [课后] 尝试问一个无法回答的问题,看 Agent 如何处理

Day 4:多工具协作 + 错误处理

目标:构建更鲁棒的智能体
技能:工具组合、异常捕获

📄 代码模板 day04/robust_agent.py

@tool
def search_web(query: str) -> str:
    """简单网页抓取(演示用)"""
    try:
        import requests
        from bs4 import BeautifulSoup
        url = f"https://www.google.com/search?q={query}"
        # 注意:真实项目需用合法 API,此处仅为演示结构
        return "搜索结果摘要(模拟)"
    except Exception as e:
        return f"搜索失败: {str(e)}"

# 把 search_web 加入 tools 列表,重复 Day3 流程

✅ 实验任务

  • [课后] 讨论:为什么不能直接让 LLM 算?→ 强调“确定性计算交给工具”

Day 5:记忆!让 Agent 记住你说过的话

目标:添加对话记忆能力
技能:使用 Memory 组件

📄 代码模板 day05/memory_agent.py

from langchain.memory import ConversationBufferMemory
from langchain.agents import initialize_agent

memory = ConversationBufferMemory(memory_key="chat_history")
llm = ChatOpenAI(temperature=0)
agent = initialize_agent(
    tools=[get_time],
    llm=llm,
    agent="conversational-react-description",
    memory=memory,
    verbose=True
)

agent.run("我叫小明")
agent.run("我叫什么名字?")  # 应该回答“小明”

✅ 实验任务

  • [课后] 思考:如何记住长期信息?→ 引出向量数据库(Day6)

Day 6:长期记忆 —— 向量数据库入门

目标:实现“记住用户偏好”
技能:FAISS + 文本嵌入

📄 代码模板 day06/vector_memory.py

from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
texts = ["用户喜欢喝美式咖啡", "用户住在杭州"]
vectorstore = FAISS.from_texts(texts, embeddings)

retriever = vectorstore.as_retriever()
docs = retriever.get_relevant_documents("用户喜欢什么饮料?")
print(docs[0].page_content)

✅ 实验任务

  • [课后] 尝试将检索结果注入到 Agent 的 prompt 中(为 Day7 铺垫)

Day 7:任务分解 —— 让 Agent 做复杂事

目标:处理多步骤任务
技能:Plan-and-Execute 思想

📄 代码模板 day07/planner.py

# 简化版:手动拆解任务
def plan_and_execute(task: str):
    steps = [
        "1. 查今天日期",
        "2. 查杭州天气",
        "3. 生成出行建议"
    ]
    print("计划:", steps)
    # 模拟执行
    for step in steps:
        if "查今天日期" in step:
            print("执行:", get_time())
        elif "查杭州天气" in step:
            print("执行:", get_weather("杭州"))
    return "建议:今天晴,适合出门!"

print(plan_and_execute("给我今天的出行建议"))

✅ 实验任务

  • [课后] (挑战)尝试用 LLM 自动生成步骤列表(提示词:“把以下任务拆成3步:...”)

Day 8:多智能体初探 —— 两个 AI 协作

目标:理解多 Agent 架构
技能:角色扮演 + 消息传递

📄 代码模板 day08/multi_agent.py

def run_conversation(user_input: str):
    researcher = ChatOpenAI(temperature=0.7)
    editor = ChatOpenAI(temperature=0.2)

    research = researcher.invoke(f"研究主题: {user_input}。用3句话总结。").content
    article = editor.invoke(f"润色以下内容,使其专业简洁:\n{research}").content
    return article

print(run_conversation("人工智能对教育的影响"))

✅ 实验任务

  • [课后] 讨论:多 Agent vs 单 Agent 的优劣

Day 9:项目开发日(选题 + 编码)

提供 3 个可选项目模板(任选其一):

  1. 智能客服:能查订单、回答 FAQ、记录投诉
  2. 学习助手:解释代码、生成练习题、总结知识点
  3. 旅行规划师:查天气、推荐景点、估算预算

📄 项目骨架 project_template.py

# 学生在此基础上扩展
from your_tools import *
from langchain.agents import ...

# 定义专属工具
# 构建 Agent
# 添加记忆
# 实现主循环

✅ 任务


Day 10:展示 + 复盘

  • 每组 5 分钟演示
  • 教师点评:亮点 + 改进建议
  • 发放“结业证书”(可自制)

💡 无 OpenAI API?用 Ollama 本地替代!

如果学生没有 API Key,全部代码可改用 Ollama + Llama 3

  1. 安装 Ollama
  2. 运行:ollama pull llama3
  3. 替换 LLM 初始化代码:
# 原来
# llm = ChatOpenAI(model="gpt-3.5-turbo")

# 改为
from langchain_community.chat_models import ChatOllama
llm = ChatOllama(model="llama3", temperature=0)

⚠️ 注意:部分高级功能(如精确工具调用)在开源模型上效果较弱,但教学足够


📎 最后建议

  • 每天课前 10 分钟:发 ZIP 包(含当日代码 + 任务说明)
  • 强调“能跑就行”:不要求完美,只要求动手
  • 你作为讲师:重点讲“为什么这样设计”,而不是 API 细节

如果你需要,我可以打包所有代码为 GitHub 仓库结构,或生成 PDF 讲义。是否需要?这对你找工作展示教学能力也很有帮助。

posted @ 2026-01-25 19:54  船山薪火  阅读(54)  评论(0)    收藏  举报
![image](https://img2024.cnblogs.com/blog/3174785/202601/3174785-20260125205854513-941832118.jpg)