W1 代码练习打卡清单
Python 工程化与 LLM API 调用 · 周一至周日

规则:每个练习文件先自己填完 TODO,再运行末尾自测,全部 PASS 才勾选对应任务。勾选状态自动保存在本浏览器,换浏览器不同步。

配套目录:agent-learning-w1/预计每日 5–7 小时周日复盘 2–3 小时
本周进度
0 / 0
周一上午 · 前置D0 环境与账号准备不联网也能做大半

打卡任务

命令速查(PowerShell)

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env
git init; git add .; git commit -m "chore: w1 scaffold"

常见坑

  • 激活脚本被拦截:按 PowerShell 提示临时放开执行策略
  • 装包慢:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
周一Day1 · 类型注解 + Pydantic 校验纯本地自测day1_pydantic_basics.py

打卡任务(PASS 后勾选)

验收标准

  • 非法 age / email / price / 空订单均抛 ValidationError
  • 正常订单 total 自动算为 398.5
  • 会用 model_dump() 与 model_dump_json()

常见坑

  • 装成 Pydantic v1:v2 才是 field_validator,pip show pydantic 确认 ≥2.6
  • 可变默认值不能写 tags=[],要用 Field(default_factory=list)
周二Day2 · Chat Completions:同步与流式调用真实 APIday2_sync_and_stream.py

打卡任务

验收标准

  • 能读到 resp.usage 的 token 数
  • 流式收到 ≥2 个文本块且实时打印

常见坑

  • 401:.env 位置不对或 Key 含空格
  • 连接失败:DeepSeek/千问必须填各自 base_url
  • delta.content 首块可能为 None,判空再拼接
周三Day3 · 四段式 Prompt + 结构化输出调用真实 APIday3_structured_output.py

打卡任务

验收标准

  • 输出能被 Pydantic 成功解析,不编造日期
  • 通知类语句没有被误抽成待办

常见坑

  • JSON 模式要求 prompt 中必须出现「JSON」字样
  • 解析失败时务必打印/记录原始字符串,否则无法排查
周四Day4 · 超时与指数退避重试纯本地故障注入day4_retry_playground.py

打卡任务

验收标准

  • 前 2 次失败第 3 次成功:尝试次数=3,耗时≈0.15s
  • bad_param 只调用 1 次
  • max_retries=2 时共尝试 3 次后抛原异常

参考答案多出的细节(自己找完再看)

  • 随机抖动防惊群、等待封顶 20s、Retry-After 优先、异步版实现
周五Day5 · asyncio 并发 + 信号量 + 成本汇总调用真实 APIday5_async_concurrency.py

打卡任务

验收标准

  • 8 条全部返回、无空结果、token 汇总 > 0
  • 并发相对串行加速比 > 1.3x

常见坑

  • 出现 429:并发降到 2,稍后重试
  • 忘了 async with sem,信号量形同虚设
  • PowerShell 设置环境变量:$env:SKIP_SEQ="1"
周六Day6 · 综合项目:文档总结/翻译 CLI调用真实 APIday6_cli_assistant.py

打卡任务

验收命令

Set-Content notes.txt "粘贴 300 字以上文档..."
python day6_cli_assistant.py summarize notes.txt
python day6_cli_assistant.py translate notes.txt --lang 英文 --stream
python day6_cli_assistant.py summarize notes.txt --json

本周产出(W1 deliverable)

  • llm-client 仓库:流式/重试/结构化/并发/费用统计
  • 可日常自用的总结翻译 CLI
周日Day7 · 复盘与自测(2–3 小时)

固定动作

进入 W2 的准入自测(全是 Yes 才开始)

  • 能脱稿写出同步 + 流式调用?
  • 能说清重试哪些错、退避怎么算?
  • 能用 Pydantic 把模型 JSON 变成可信对象?
  • 能并发一批请求并报出总 token/成本?

有任一项 No

  • 周一上午先补对应 Day 的 TODO,再进入 W2 的 Function Calling。