第 30 章练习与答案

🌈 关于《AI 零基础 36 讲》课后训练
📚 与正式讲解配套学习
本篇是《AI 零基础 36 讲》的配套课后训练,与对应章节的正式讲解一起使用。整个系列面向初学者,从日常 AI
使用逐步进入编程、模型训练和大模型应用开发。
✍️ 先独立作答,再核对答案
训练围绕本章知识安排概念判断、结果分析或动手任务,并提供参考答案与解释。建议先读完对应的正式文章,再独立作答;遇到困难时回看相关例子,最后核对答案。
💻 代码题请亲手运行
观察程序输出,确认自己能解释结果、发现错误并完成修复。做完一道题,也要弄清答案为什么成立。
先做练习
- 一次多轮请求中,系统要求、历史消息和最新用户需求按什么顺序排列?本章历史从哪里来?
- 原计划为20分钟,改为10分钟后,三个任务仍为8、12、5分钟,能否通过业务校验?
- 对象只有 goal 和 daily_minutes,JSON 解析成功之后,为什么还不能使用?
- 写一段代码检查分钟值为 True 的任务,并捕获错误。
- 连续两份回答都是无效 JSON,最多发出几次请求?原会话会不会被部分更新?
- 默认三对历史、2000字符,是否意味着可以准确保证模型上下文为2000 Token?裁剪时为什么按完整消息对删除?
对照答案
1. 先系统要求,再历史,再最新需求
历史保存在本地会话 JSON 中,加载后按用户和助手消息对加入请求。程序没有更新模型参数,也不依赖模型自行保留上次调用。
2. 25分钟超过10分钟预算
业务校验要求任务分钟之和等于当前显式预算。8 加 12 加 5 为25,不能通过。返回的 daily_minutes 也必须等于10。
3. 缺少 tasks
JSON 解析只完成文本到对象的转换。随后还需检查必需字段、类型、任务项和分钟总和。程序把缺字段原因加入修复请求。
4. 排除布尔分钟
python
from plan_core import PlanError, validate_plan
plan = {"goal": "Python", "daily_minutes": 1,
"tasks": [{"title": "看变量", "minutes": True}]}
try:
validate_plan(plan, 1)
except PlanError as error:
print(error)
输出为"minutes 必须是正整数,不能使用布尔值"。
5. 两次失败后停止
python
from plan_core import PlanError, empty_session, make_plan
from run_cases import TeachingReplay
state = empty_session()
client = TeachingReplay(["第一份坏JSON", "第二份坏JSON"])
try:
make_plan(state, "学Python", 20, client)
except PlanError:
print(len(client.requests), len(state["history"]))
输出为 2 0。原始一次加最多一次修复,两次都失败便停止,原会话没有加入半个消息对。
6. 字符数与 Token 数分别计算
本章2000字符只是教学用裁剪预算,不能等同于模型 Token 计数。成对删除会保留对话角色顺序,避免旧需求被删后还留下对应回答。系统要求和当前需求始终保留,二者本身超预算时报告错误。