M5 AI 应用开发
本模块在课程中的定位
旧版 Python 课没有这部分内容。12 节课覆盖从「会调 API」到「能做一个 AI 应用」的完整能力链, 也是期末项目(M6)全部五个选题的技术基础。每节课的成果都是下一节课的零件: L19 的可配置调用函数 → L20 的 Prompt 模板 → L21 的结构化输出 → L22-23 的 RAG → L25-26 的 Agent → L27-28 的 FastAPI 前后端 → L29 的对话记忆 → L30 的方法论总结。
{"action":"weather","city":"北京"} → 程序调真实 API。POST /chat 服务,再配一个流式聊天页面。L22-23 核心架构:RAG
RAG 是当前 AI 应用最主流的架构模式,也是期末项目的核心能力之一。进入交互模拟—— 提问、调整 top-k、关闭 RAG 对比无检索的回答,全部可以亲手操作:
文档切分 → 向量化 → 语义检索 → Prompt 组装 → 生成回答,每个阶段逐步演示;内置课程 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 字」「仅依据资料回答,没有就说不知道」。
给 1-3 个输入→输出样例,示例对输出格式的约束力远强于文字描述。
要被程序解析就明确 JSON Schema(L21 的 JSON Mode 是它的工程化版本)。
随堂小测
延伸阅读
经典笔记(相关基础):12.5 装饰器与路由 · 11.3 生成器与迭代器 · FastAPI 实战 · FastAPI 实战续(async/CORS)
📽️ 授课课件:W9–W13 课件 →