M5 AI 应用开发

MODULE 5 · L19–L30 · 课程核心模块 AI 应用开发
12 课时

本模块在课程中的定位

旧版 Python 课没有这部分内容。12 节课覆盖从「会调 API」到「能做一个 AI 应用」的完整能力链, 也是期末项目(M6)全部五个选题的技术基础。每节课的成果都是下一节课的零件: L19 的可配置调用函数 → L20 的 Prompt 模板 → L21 的结构化输出 → L22-23 的 RAG → L25-26 的 Agent → L27-28 的 FastAPI 前后端 → L29 的对话记忆 → L30 的方法论总结。

L19大模型 API 深入
OpenAI 兼容接口、消息角色、核心参数(temperature/top_p/max_tokens/stop)、流式输出 stream;多模型对比。成果:可配置的 LLM 调用函数——后续一切的基础设施。前置语法补丁:装饰器(V034)、yield 生成器(V035)。
V036 · API核心参数V037 · 流式输出V034 · 装饰器V035 · yield
L20Prompt 工程实战作业④发布
Prompt 结构(角色/任务/约束/示例/输出格式)、Few-shot、思维链 CoT、Prompt 调试方法论(变量化、A/B 对比、边界测试)。
V038 · Prompt结构化设计V039 · Few-shot与思维链
L21结构化输出与 Function Calling
JSON Mode 让 AI 输出可解析;Function Calling / Tool Use。课堂:AI 意图识别器——「帮我查北京天气」→ {"action":"weather","city":"北京"} → 程序调真实 API。
V040 · JSON ModeV041 · Function Calling入门
L22–L23RAG:让 AI 读你的文档作业⑤发布
幻觉问题与知识截止、Embedding 与语义检索、chunking 策略;L23 用 numpy 搭完整链路,做出「课程 FAQ 问答机器人」(不引入重型框架)。
V042 · RAG原理V043 · 切分与EmbeddingV044 · 完整链路
L24多模态 AI 应用
Vision(图片理解/OCR)、TTS、STT、文生图。课堂:图片描述生成器——上传 → AI 描述 → TTS 朗读,一条链路串三种模态。
V045 · 多模态API调用
L25–L26AI Agent 基础与实战
感知→决策→行动循环、ReAct 框架(Reasoning + Acting)、工具调用循环的实现;Agent 的局限与风险(无限循环、错误传播)。课堂:带搜索 + 计算器工具的 AI 助手。
V046 · Agent原理与ReActV047 · 构建有工具的Agent
L27–L28FastAPI 后端 + 前端速成
FastAPI 路由、Pydantic 请求体、异步基础(V048 前置补丁);HTML/CSS/JS 最小集 + fetch/async-await(V050-051)。课堂:把 L19 的调用函数包装成 POST /chat 服务,再配一个流式聊天页面。
V049 · FastAPI路由V050 · 前端最小集V051 · fetch与async
L29对话记忆与状态管理
消息历史维护、Token 预算控制、会话隔离、长对话摘要策略。
V052 · 对话记忆与Token管理
L30AI 结对开发项目方法论
需求拆解 → 架构设计 → 增量生成 → 每步验证 → 调试修复;AI 结对最佳实践(prompt 拆解、一次一个模块、大改前先 commit);协作日志规范。M6 的前导课。
V053 · vibe coding方法论

L22-23 核心架构:RAG

RAG 是当前 AI 应用最主流的架构模式,也是期末项目的核心能力之一。进入交互模拟—— 提问、调整 top-k、关闭 RAG 对比无检索的回答,全部可以亲手操作:

流程模拟 · 可交互 RAG 检索增强生成

文档切分 → 向量化 → 语义检索 → Prompt 组装 → 生成回答,每个阶段逐步演示;内置课程 FAQ 语料,支持自定义提问与有无检索的对比实验。

进入演示 →
L23 目标代码 课程 FAQ 机器人骨架

chunks = split(docs) → vecs = [embed(c) for c in chunks] → top = knn(embed(q), vecs, k=3) → answer = llm(prompt(top, q))
仅用 numpy 实现,不依赖框架——与作业⑤要求一致。

实现一个「迷你语义检索」

还没申请 embedding 接口?词集合重叠度(Jaccard)就是最朴素的「语义」近似。L23 课堂正是从这里出发, 再升级到向量检索。浏览器里直接运行:

思考:Jaccard 检索「能组队吗」为什么会失败?(词面没有重叠)——这正是 embedding 要解决的问题: 把「意思」变成空间中的距离。详见 。

L20 精要:结构化 Prompt 五件套

角色你是谁

「你是课程助教」——对应 API 的 system 消息,设定角色与边界。

任务做什么

动词开头、一句话可复述。「审查这段代码的安全问题」优于「看看这个」。

约束边界条件

「只用中文」「不超过 100 字」「仅依据资料回答,没有就说不知道」。

示例Few-shot

给 1-3 个输入→输出样例,示例对输出格式的约束力远强于文字描述。

输出格式给谁看

要被程序解析就明确 JSON Schema(L21 的 JSON Mode 是它的工程化版本)。

随堂小测