W1 代码练习打卡清单
Python 工程化与 LLM API 调用 · 周一至周日
规则:每个练习文件先自己填完 TODO,再运行末尾自测,全部 PASS 才勾选对应任务。勾选状态自动保存在本浏览器,换浏览器不同步。
配套目录:agent-learning-w1/预计每日 5–7 小时周日复盘 2–3 小时
周一上午 · 前置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
验收标准
- 非法 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。