WEEK 10 / 16 AI 应用 · 结构化输出 / RAG 基础
PYTHON 程序设计 · V2 · 第 10 周(100 分钟 · L21–L22)

让 AI 说「机器话」
再让它读你的文档

程序要解析 AI 的回复时,「说得像人」不够,要「说得让程序能读」——JSON Mode 与 Function Calling; 然后解决大模型的两大顽疾:幻觉与知识截止——RAG(检索增强生成)。

所属模块 M5 AI 应用开发← → 翻页 · F 全屏

今日课表(100 分钟)

时间环节要点
0–8开场翻车json.loads 被 AI 的客套话搞崩——「说得像人」不够,要「程序能读」
8–20JSON Moderesponse_format 强制合法 JSON;prompt 必须含 json 字样
20–34Function CallingAI 当调度员:返回「调什么+参数」,执行永远是你的代码
34–46动手练习运行场:解析工具调用意图 + 统计 + 抽参
46–58两大顽疾幻觉现场演示(问它课程细节,自信编造);知识截止
58–72RAG 原理开卷考试类比;切分→向量化→检索→拼接→生成;语义 vs 关键词
72–86RAG 交互演示流程模拟页:提问 / 调 top-k / 关掉 RAG 看幻觉对比(iframe)
86–96动手练习运行场:Jaccard 迷你检索——体会「词面零重叠」的失败
96–100小测随堂小测 3 题

RAG 交互演示嵌入在本课件第 7 页——学生可自己操作 top-k 与幻觉对比。

开场翻车:AI 的「废话」

# 让 AI 返回 JSON:
resp = "好的,以下是您要的结果:{\"action\": \"weather\", \"city\": \"北京\"}"
json.loads(resp)
# → json.decoder.JSONDecodeError: Extra data!
问题:AI 在 JSON 前后加了自然语言客套——人看得懂,程序崩给你看。
解法一(JSON Mode):response_format={"type": "json_object"} 强制输出合法 JSON。 注意:prompt 里必须出现 "json" 字样,否则 API 直接报错。

Function Calling:AI 当调度员

用户:「查北京天气」
→
AI 决定:调 get_weather(city="北京")
→
你的代码执行函数
→
结果喂回 AI → 自然语言回复
tools = [{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "查询指定城市的实时天气",   # 写给 AI 看的说明书!
    "parameters": {"type": "object",
      "properties": {"city": {"type": "string"}},
      "required": ["city"]}
  }
}]

核心观念:AI 不亲自干活——它决定「调什么、用什么参数」,执行永远是你的代码的事。

动手:意图识别器(模拟版)

交互 · 浏览器内运行(体会「结构化意图」)

大模型的两大顽疾

幻觉 问它「这门课期末项目占多少分」——它自信地编一个 40%。
不是它撒谎,是它不知道也不说不知道——生成机制决定了它会「合理地编」。
知识截止 训练数据有截止日期——上周的新闻、你的私有文档,它一概不知。 微调能解决但太贵太难;RAG 是轻量解法。
RAG = 开卷考试。闭卷的大模型背了很多但不一定准;RAG 把相关资料递到它手边:「基于以下资料回答,没有依据就说不知道」。

RAG 全链路一图

文档切分
chunking
→
向量化
Embedding
→
语义检索
找最相关的 chunk
→
拼接 Prompt
资料+问题
→
生成回答
有据可依

交互演示:RAG 检索增强生成流程模拟(提问、调 top-k、关掉 RAG 看幻觉对比)

交互模拟:RAG 检索增强生成

可交互演示 · 页内直接操作

输入问题、拖动 top-k、关掉右上角 RAG 开关——直接对比「纯大模型幻觉回答」与「有据回答」的差别。 新窗口打开 →

动手:迷你语义检索

交互 · 浏览器内运行(Jaccard 版 RAG 检索环节)

还没申请 embedding 接口?词集合重叠度就是最朴素的「语义」近似:

随堂小测(3 题)

交互 · 点击选项作答

课后与下周预告

本周课后
下周:W11 RAG 实战与多模态 亲手搭完整的 numpy 版 RAG 问答系统;再让 AI 看图(Vision)与说话(TTS)。 提前看下周课件 →

深入阅读:M5 模块页 · 经典笔记 13.5 数据接口(JSON 结构训练)