程序要解析 AI 的回复时,「说得像人」不够,要「说得让程序能读」——JSON Mode 与 Function Calling; 然后解决大模型的两大顽疾:幻觉与知识截止——RAG(检索增强生成)。
| 时间 | 环节 | 要点 |
|---|---|---|
| 0–8 | 开场翻车 | json.loads 被 AI 的客套话搞崩——「说得像人」不够,要「程序能读」 |
| 8–20 | JSON Mode | response_format 强制合法 JSON;prompt 必须含 json 字样 |
| 20–34 | Function Calling | AI 当调度员:返回「调什么+参数」,执行永远是你的代码 |
| 34–46 | 动手练习 | 运行场:解析工具调用意图 + 统计 + 抽参 |
| 46–58 | 两大顽疾 | 幻觉现场演示(问它课程细节,自信编造);知识截止 |
| 58–72 | RAG 原理 | 开卷考试类比;切分→向量化→检索→拼接→生成;语义 vs 关键词 |
| 72–86 | RAG 交互演示 | 流程模拟页:提问 / 调 top-k / 关掉 RAG 看幻觉对比(iframe) |
| 86–96 | 动手练习 | 运行场:Jaccard 迷你检索——体会「词面零重叠」的失败 |
| 96–100 | 小测 | 随堂小测 3 题 |
RAG 交互演示嵌入在本课件第 7 页——学生可自己操作 top-k 与幻觉对比。
# 让 AI 返回 JSON:
resp = "好的,以下是您要的结果:{\"action\": \"weather\", \"city\": \"北京\"}"
json.loads(resp)
# → json.decoder.JSONDecodeError: Extra data!
response_format={"type": "json_object"} 强制输出合法 JSON。
注意:prompt 里必须出现 "json" 字样,否则 API 直接报错。
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市的实时天气", # 写给 AI 看的说明书!
"parameters": {"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]}
}
}]
核心观念:AI 不亲自干活——它决定「调什么、用什么参数」,执行永远是你的代码的事。
交互演示:RAG 检索增强生成流程模拟(提问、调 top-k、关掉 RAG 看幻觉对比)
输入问题、拖动 top-k、关掉右上角 RAG 开关——直接对比「纯大模型幻觉回答」与「有据回答」的差别。 新窗口打开 →
还没申请 embedding 接口?词集合重叠度就是最朴素的「语义」近似:
深入阅读:M5 模块页 · 经典笔记 13.5 数据接口(JSON 结构训练)