ChatGPT 只能「说」,Agent 能「做」。给它目标、工具和记忆,它自己规划步骤、调用工具、反思纠错——像一个真正的数字员工。这学期小强要从「用 AI」进化到「造 AI 产品」:Flask 搭网站、API 做服务、Docker 部署上线,让全世界都能用上他做的 AI。
让 AI 真正「动手干活」:ReAct 框架、工具调用、多步推理、多智能体协作、长期记忆,最后把应用做成网站并部署上线。
用故事和生活类比打开这学期的大门,先「知其所以然」再学语法。
ChatGPT 只能「说」,Agent 能「做」。给它目标、工具和记忆,它自己规划步骤、调用工具、反思纠错——像一个真正的数字员工。这学期小强要从「用 AI」进化到「造 AI 产品」:Flask 搭网站、API 做服务、Docker 部署上线,让全世界都能用上他做的 AI。
给目标、给工具、给权限,它自己拆任务自己干。
自主执行想(Thought)→ 做(Action)→ 看(Observation)→ 循环。
推理+行动产品经理 + 程序员 + 测试员,各司其职靠消息协作。
角色分工菜做好(模型)只是开始,开店(部署)全世界才吃得到。
产品上线AI Agent与应用开发 —— 共 12 课时,全部知识点一网打尽。
# Agent 的思考轨迹(示意):
# Thought: 我需要先查明天的天气
# Action: search_weather("北京 明天")
# Observation: 多云转晴,最高 26℃
# Thought: 天气不错,可以回答用户了
# Final Answer: 明天北京多云转晴,最高 26 度,适合出游。
print("Thought → Action → Observation 循环,直到 Final Answer")Thought → Action → Observation 循环,直到 Final Answer# Function Calling:给模型一份「工具说明书」
tools = [{
"name": "calculator",
"description": "计算数学表达式",
"parameters": {"expr": "算式字符串,如 12*(3+4)"},
}]
# 模型不自己算,而是输出:
model_reply = {"tool": "calculator",
"arguments": {"expr": "12*(3+4)"}}
print("模型说:我要调工具 →", model_reply)
# 你的程序执行后把结果喂回去:
print("程序算得 84 → 模型据此回答用户")模型说:我要调工具 → {'tool': 'calculator', 'arguments': {'expr': '12*(3+4)'}}
程序算得 84 → 模型据此回答用户# ReAct 循环:思考 → 行动 → 观察 → 再思考……
steps = [
("Thought", "用户要比价 3 家书店,我需要先查每家价格"),
("Action", "search('书店A Python书 价格')"),
("Observation", "书店A:79 元"),
("Thought", "还差两家,继续查"),
("Action", "search('书店B Python书 价格') → 85 元"),
("Final", "最便宜:书店A 79 元"),
]
for tag, text in steps:
print(f"[{tag}] {text}")
print("拆解 = 把大问题变成一串能一次解决的小问题")[Thought] 用户要比价 3 家书店,我需要先查每家价格
[Action] search('书店A Python书 价格')
[Observation] 书店A:79 元
[Thought] 还差两家,继续查
[Action] search('书店B Python书 价格') → 85 元
[Final] 最便宜:书店A 79 元
拆解 = 把大问题变成一串能一次解决的小问题# 像剧组一样分工:每个 Agent 一个角色
team = {
"产品经理": "把需求写成清晰的任务卡",
"程序员": "写代码,只管实现",
"测试员": "专挑毛病,写测试用例",
"评审": "汇总各方意见做决定",
}
msg = [("用户", "做一个倒计时程序"), ("产品", "任务卡:输入分钟数,倒计时结束提醒"),
("程序员", "已交付 countdown.py v1"), ("测试", "发现:输入 0 会立即崩溃!"),
("评审", "程序员修复后交付 v2 ✓")]
for who, text in msg:
print(f"{who}:{text}")用户:做一个倒计时程序
产品:任务卡:输入分钟数,倒计时结束提醒
程序员:已交付 countdown.py v1
测试:发现:输入 0 会立即崩溃!
评审:程序员修复后交付 v2 ✓# 短期记忆 vs 长期记忆:
# 短期 = 对话历史(context 内,关窗就忘)
# 长期 = 存数据库,跨会话记得你
memory = {} # 演示:长期记忆库
def remember(user, fact):
memory.setdefault(user, []).append(fact)
remember("小明", "喜欢科幻小说")
remember("小明", "Python 学到函数那章")
print("两周后小明回来……")
print("AI:欢迎回来!上次聊到函数,"
"要不要用你喜欢的科幻题材练一练?")
print("记忆库:", memory)两周后小明回来……
AI:欢迎回来!上次聊到函数,要不要用你喜欢的科幻题材练一练?
记忆库: {'小明': ['喜欢科幻小说', 'Python 学到函数那章']}# 工作流 = 触发器 + 条件分支 + 动作节点
workflow = {
"触发": "新邮件到达",
"节点1": "LLM 分类:重要/广告/垃圾",
"分支": {"重要": "→ 摘要 + 发微信提醒",
"广告": "→ 归档不通知",
"垃圾": "→ 直接删除"},
"兜底": "不确定 → 标记人工处理",
}
for k, v in workflow.items():
print(f"{k}:{v}")
print("关键词:触发器 / 节点 / 条件 / 人工兜底")触发: 新邮件到达
节点1: LLM 分类:重要/广告/垃圾
分支: {'重要': '→ 摘要 + 发微信提醒', '广告': '→ 归档不通知', '垃圾': '→ 直接删除'}
兜底: 不确定 → 标记人工处理
关键词:触发器 / 节点 / 条件 / 人工兜底from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/api/chat", methods=["POST"])
def chat():
data = request.get_json()
answer = my_ai(data["message"]) # 调用你的AI
return jsonify({"reply": answer})
app.run(port=5000) # 别人访问 /api/chat 就能对话POST /api/chat {"message": "你好"}
→ {"reply": "你好!我是你的AI助手~"}# 资源 + 动词 = 清晰的接口
GET /api/notes # 查列表
GET /api/notes/42 # 查一条
POST /api/notes # 新建
PUT /api/notes/42 # 更新
DELETE /api/notes/42 # 删除
# 状态码:200 成功 / 400 参数错 / 404 没找到(接口像图书馆索引:找什么、怎么找,一目了然)# Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
# 构建 → 运行:
# docker build -t my-ai .
# docker run -p 5000:5000 my-ai(在任何装了 Docker 的机器上,一条命令跑起来)# 好产品三问:
questions = [
("谁在痛?", "目标用户 + 具体场景:谁、什么时候、多烦"),
("凭什么是你?", "差异点:更快/更便宜/更贴心/更垂直"),
("怎么留住人?", "首次体验 10 秒见效 + 越用越懂你"),
]
for q, a in questions:
print(f"{q}\n → {a}")
print("反面教材:『AI 版万物』——没有场景的炫技")
print("正面案例:错题拍立得——拍一拍、讲一讲、推三题")谁在痛?
→ 目标用户 + 具体场景:谁、什么时候、多烦
凭什么是你?
→ 差异点:更快/更便宜/更贴心/更垂直
怎么留住人?
→ 首次体验 10 秒见效 + 越用越懂你
反面教材:『AI 版万物』——没有场景的炫技
正面案例:错题拍立得——拍一拍、讲一讲、推三题# 复赛上机 2 小时典型节奏(分秒必争):
plan = [
("0-10min", "读题 + 跑通官方 baseline"),
("10-40min", "数据清洗与分块调优(最容易拿分)"),
("40-70min", "检索优化:混合检索 + Rerank"),
("70-100min", "Prompt 精修:加引用、限定只用资料"),
("100-120min", "自测 + 提交(留足上传时间!)"),
]
for t, task in plan:
print(f"{t}:{task}")
print("军规:每次只改一个变量,改动前先备份")0-10min:读题 + 跑通官方 baseline
10-40min:数据清洗与分块调优(最容易拿分)
40-70min:检索优化:混合检索 + Rerank
70-100min:Prompt 精修:加引用、限定只用资料
100-120min:自测 + 提交(留足上传时间!)
军规:每次只改一个变量,改动前先备份# 六年课程的终点作品:你的专属 AI
skills = {
"记忆": "记得你的偏好与学习进度",
"工具": "查天气、算数、定闹钟(Function Calling)",
"知识": "你的笔记和课件建成 RAG 知识库",
"人格": "可定制说话风格(系统提示词)",
}
for k, v in skills.items():
print(f"{k}:{v}")
print("架构:LLM + 记忆库 + 工具集 + RAG + 前端界面")
print("毕业标准:现场演示连续完成 3 个真实任务")记忆: 记得你的偏好与学习进度
工具: 查天气、算数、定闹钟(Function Calling)
知识: 你的笔记和课件建成 RAG 知识库
人格: 可定制说话风格(系统提示词)
架构:LLM + 记忆库 + 工具集 + RAG + 前端界面
毕业标准:现场演示连续完成 3 个真实任务每个知识点都要落到能跑、能玩、能演示的作品上。
期末项目是整学期知识点的综合检验场:综合运用。学生将独立完成需求拆解 → 功能实现 → 调试打磨 → 上台演示的完整闭环。
| 课次 | 主题 | 趣味项目 | 知识点 |
|---|---|---|---|
| 1 | Agent是什么 | AI自主完成任务 | Agent概念、ReAct框架 |
| 2 | 工具调用 | AI用计算器 | 工具定义、工具选择 |
| 3 | 多步推理 | 复杂任务拆解 | 规划、执行、反思 |
| 4 | 多Agent协作 | AI团队开会 | 角色分工、消息传递 |
| 5 | 记忆系统 | 有长期记忆的AI | 短期记忆、长期记忆 |
| 6 | 自动化工作流 | AI帮你处理邮件 | 工作流编排、触发器 |
| 7 | Web应用开发 | 把AI做成网站 | Flask/FastAPI、前端基础 |
| 8 | API开发 | 提供AI服务 | RESTful API、接口设计 |
| 9 | 部署上线 | 让全世界都能用 | 云服务器、Docker入门 |
| 10 | 产品思维 | 做一个有用的AI产品 | 用户需求、产品设计 |
| 11 | LMCC复赛精讲 | 上机实战 | RAG系统搭建、Prompt优化 |
| 12 | 期末项目 | 个人AI助手 | 综合运用 |
把一学期的知识点串成体系,看清来路与去向。
◀ 上一章:六年级 下学期 · RAG与知识库应用
下一章 ▶:七年级 下学期 · 模型微调与毕业项目
让 AI 真正「动手干活」:ReAct 框架、工具调用、多步推理、多智能体协作、长期记忆,最后把应用做成网站并部署上线。
结业时你将带走:1 个完整大模型产品 + LMCC 认证 + 从想法到上线的全栈能力。
避开高频易错点,再用速查表把语法焊进肌肉记忆。
tool: "计算器"
# 没写能算什么description: "四则运算计算器,
输入算式字符串返回结果"while 没完成:
继续尝试
# 烧钱狂转max_steps = 10
超限强制停止+汇报resp = requests.get(url)
data = resp.json()
# 断网=崩溃try/except + 重试
+ 超时 + 降级方案API_KEY = "sk-xxx"
# 传GitHub全裸奔环境变量 / .env 文件
(并加入 .gitignore)| 功能 | 写法 | 一句话理解 |
|---|---|---|
| ReAct 范式 | Thought→Action→Observation 循环 | Agent 的心跳 |
| 定义工具 | @tool 装饰器 + 清晰描述 | 工具就是 Agent 的手 |
| Flask 路由 | @app.route('/api/chat') | 一个地址一个功能 |
| 返回JSON | return jsonify({"reply": …}) | 前后端通话标准格式 |
| Docker 构建 | docker build -t myai . | 把环境+代码装进箱子 |
| 运行容器 | docker run -p 5000:5000 myai | 一台服务器跑起来 |
| 密钥管理 | os.environ.get("API_KEY") | 密钥放环境变量 |
| 日志排查 | print / logging 两层日志 | 线上全靠日志破案 |
按 A / B / C 三档难度自主选择:保底完成 A 组,学有余力挑战 B、C 组。