Challenges — 走完 capstone 之后的”自由练习”
Tutorial 是脚手架,挑战是真本事。这页给走完 4 周的人 7 个真实小项目 idea,每个都给你”约束 + 给 AI 的开题 prompt”,你自己拼出来。
不给参考答案。这是 capstone 之后的”出师作业”——目标是你能独立跟 AI 协作做出可工作的 Agent。
怎么挑
按”你最想用它的真实场景”挑一个就行,不用每个都做。每个挑战预计 4-12 小时(含跟 AI 反复对话)。
| 难度 | 挑战 | 用到的核心 |
|---|---|---|
| ⭐⭐ | 1. 自动写 Git Commit Message | LCEL + Tool |
| ⭐⭐ | 2. 网页内容摘要小工具 | Tool + RAG-lite |
| ⭐⭐⭐ | 3. PR 描述自动生成器 | Agent + 多 Tool |
| ⭐⭐⭐ | 4. 个人收藏夹整理 Agent | RAG + Agent |
| ⭐⭐⭐⭐ | 5. 微信群 Bot(FAQ 自动答) | RAG + HITL |
| ⭐⭐⭐⭐ | 6. 论文阅读助手 | RAG + 多步 Graph |
| ⭐⭐⭐⭐⭐ | 7. 简单的 SQL 自然语言查询 | Agent + Tool + 安全约束 |
1. 自动写 Git Commit Message ⭐⭐
做什么:写一个命令行工具:跑 python autocommit.py,它读 git diff --staged 输出,让 LLM 生成 commit message,给你确认 → 写入 commit。
约束:
- 必须用
@tool而不是直接subprocess.run(练 Tool 的工程化) - 必须支持
--style chinese / english切换语言 - 生成后让用户确认才真 commit(HITL!)
给 AI 的开题 prompt:
我要做一个自动写 commit message 的小工具。
需要参考 final/01_langchain/06_tools_agent.py 里的 @tool 装饰器,
以及 final/02_langgraph/03_human_in_the_loop.py 里的 interrupt 用法。
请先帮我做技术拆解(不直接给代码):
1. 这个工具应该有哪几个 @tool?分工是什么?
2. 用 LCEL 链还是 LangGraph?为什么?
3. HITL 用 interrupt_before 还是 interrupt()?哪种适合 CLI 场景?
每问独立段落,从日常类比开始。
自检:
- 跑 5 次不同改动,看生成的 message 质量
- 故意做一个坏改动(比如删了一堆代码注释),看工具会不会”洞察”出动机
2. 网页内容摘要小工具 ⭐⭐
做什么:CLI 工具 summarize.py URL,下载网页 → 提取正文 → LLM 摘要 → 输出 200 字摘要 + 3 个关键 takeaway。
约束:
- HTTP 请求用任何库(requests / httpx / urllib),但必须封装成
@tool - 摘要分两段:100 字”是什么”+ 100 字”为什么重要”
- 跑 LangSmith trace,把每次 URL 摘要做成一条 trace
给 AI 的开题 prompt:
我要做一个网页摘要 CLI。
核心问题:网页 HTML 又大又乱,怎么"切"成 LLM 能消化的格式?
请帮我对比 3 种方案:
1. 全 HTML 直接喂 LLM
2. 用 BeautifulSoup 提取所有可见文本
3. 用 readability-lxml / trafilatura 提取"正文"
哪种适合摘要场景?哪种适合"问答"场景?为什么?
每方案 2-3 句话。从日常类比开始(比如"剪报纸 vs 拍照")。
自检:
- 给一个长文(5000 字)和短文(500 字),看摘要质量差异
- 故意给一个 404 页面,看错误处理
3. PR 描述自动生成器 ⭐⭐⭐
做什么:跑 python pr_helper.py,它读 git log main..HEAD --stat + 当前 branch 名,生成 PR 标题 + 描述 + Test plan 的 markdown。
约束:
- 多 Tool:read_diff / read_log / read_files(按需读改动文件)
- Agent 决定调哪些工具——比如有些 PR 要看具体文件,有些不用
- 输出符合 GitHub PR 模板格式
给 AI 的开题 prompt:
我要做 PR 描述自动生成器。
核心权衡:让 Agent 自己决定调多少 Tool(ReAct)vs 我固定流程(Linear LCEL)。
请帮我对比:
1. 方案 A(固定流程):每次都跑 read_log → read_diff → read_files → llm_generate
2. 方案 B(Agent 决定):让 LLM 看了 log 后再决定要不要看 diff 和文件
A 的优点是稳定可预测;B 的优点是省 token(小 PR 不用读所有改动)。
什么场景适合哪个?
回答 200 字内。从日常类比开始。
进阶:用 evaluate() 评估生成质量——拿 3 个真实 PR 当数据集,让 evaluator 检查”是否提到了所有改动文件”+”Test plan 是否可执行”。
4. 个人收藏夹整理 Agent ⭐⭐⭐
做什么:你有个文件夹存了 100+ 篇 markdown 笔记。写一个 Agent:
- 读所有笔记
- 按主题聚类
- 给每个主题起名 + 列入组的笔记
- 生成一份
INDEX.md
约束:
- 必须用 RAG(向量检索找”近邻”笔记)
- 必须用 Agent(不是单次链)——因为聚类 → 起名 → 复审 是多步
给 AI 的开题 prompt:
我要做收藏夹整理 Agent。100 篇 markdown 笔记按主题聚类。
请引导我做技术决策(不直接给代码):
1. 聚类用什么方法?
a) 让 LLM 看摘要决定每篇属于哪个组
b) 用 embedding + KMeans 经典聚类
c) 用 embedding + 层次聚类
各自的复杂度 / 准确度 / token 成本?
2. "主题名"由谁起?LLM 看一组笔记起名,还是从笔记标题里挑?
3. INDEX.md 写多详细?只列标题 vs 标题 + 一句摘要 vs 标题 + 摘要 + 原始路径?
每问 2-3 句话,从日常类比(图书馆分类)开始。
自检:
- 你 1 周后回来看 INDEX.md,能不能 5 秒内找到任意一篇笔记
- 故意加 5 篇”主题模糊”的笔记,看 Agent 怎么处理
5. 微信群 Bot(FAQ 自动答) ⭐⭐⭐⭐
做什么:你管理一个技术群,常被问重复问题。写一个 Bot:
- 维护一个 FAQ 库(10-30 条常见问答)
- 收到问题,先 RAG 匹配 FAQ
- 匹配度 > 阈值 → 直接答;< 阈值 → 让人介入(HITL)
约束:
- 不需要真接微信——CLI 模拟即可(输入用户问题 → 输出 bot 答案 / “需要人介入”)
- 必须有匹配度阈值机制
- 必须支持”管理员补充新 FAQ”动作
给 AI 的开题 prompt:
我要做 FAQ 自动答 Bot。核心问题:
匹配度阈值怎么设?太低 → bot 瞎答;太高 → 啥都不敢答。
请帮我思考:
1. 用 cosine similarity(向量相似度)还是 LLM-as-Judge 判匹配?
2. 阈值是固定的还是动态的(按 question 长度调整)?
3. 不匹配时,怎么"优雅地"转给人?是直接说"我不知道",
还是先说"我猜可能是 X,对吗?"再升级?
每问 100 字内。从客服热线"按 0 转人工"的日常类比开始。
进阶:用 LangSmith Dataset 把”用户真问题 + bot 答 + 用户反馈”持续收集,每周复评一次。
6. 论文阅读助手 ⭐⭐⭐⭐
做什么:给一篇 PDF 论文,它能:
- 一句话标题摘要
- 三段式摘要(背景 / 方法 / 结论)
- 你提任意问题它能基于论文内容答
- 标记”论文里没明说但作者似乎假设了”的暗含前提
约束:
- PDF 解析任意库(pypdf / pymupdf / unstructured)
- RAG 检索(论文长,不能全塞 LLM)
- 多步 Graph:parse → chunk → embed → 用户问题 → 检索 → 答
给 AI 的开题 prompt:
我要做论文阅读助手。
最难的子问题是"暗含前提"——论文不会写"我们假设 X",
但你看不到 X 就理解不了为什么作者那么做。
请引导我(不直接给方案):
1. "暗含前提"怎么定义?跟"作者跳过的步骤"是同一个吗?
2. 怎么让 LLM 主动找"暗含前提"?什么样的 prompt 能引导出来?
3. 怎么验证 LLM 找的暗含前提是真实的(不是它自己脑补的)?
每问 2-3 句话。引用论文阅读时的真实痛点。
自检:拿一篇你觉得”有点难懂”的论文(比如 Attention Is All You Need),看助手能不能讲清。
7. 简单的 SQL 自然语言查询 ⭐⭐⭐⭐⭐
做什么:给一个 SQLite 数据库 + schema 描述,用户用中文问”上周销售额最高的 5 个产品”,Agent 生成 SQL → 跑 → 返回结果。
约束(这个挑战的精髓在这里):
- 必须只读——SELECT 才能跑,UPDATE / DELETE / DROP 必须拒绝
- 必须有审批环节(HITL):复杂 query(join 多表 / 数据量大)要让人确认才执行
- 错误恢复——SQL 跑失败时,让 LLM 看错误重写 SQL,但限重试次数
给 AI 的开题 prompt:
我要做"自然语言转 SQL"Agent,但只读 + 安全约束严格。
最大风险:
- LLM 生成 DROP TABLE(哪怕 prompt 里禁了也可能漏)
- LLM 生成无意义的全表扫描,跑挂数据库
- LLM 误解用户意图("删除最旧记录" 不该执行任何 DELETE)
请帮我设计 4 层防护:
1. SQL 解析层:拒绝非 SELECT
2. 复杂度层:估计 cost,太大需 HITL
3. 意图层:让另一个 LLM 看用户问题 + 生成的 SQL,判断"意图是否真的是只读"
4. ?(你建议第 4 层是什么?)
每层 2-3 句话讲怎么做。
自检:故意输入危险问题(”清空 sales 表”/”看看用户的密码”),看 4 层防护能不能挡住。
通用建议
怎么开始任何一个挑战
我决定做挑战 N,目标是 [挑战目标]。
约束:
- [复制约束清单]
请你扮演一个**严格但耐心**的代码审稿人,跟我用 30 分钟做架构对齐:
1. 我先说我的初步思路(3-5 行)
2. 你只许问"为什么",不能给方案——
每个"为什么"等我答完再问下一个
3. 5-10 个问题后,你帮我总结一份"待回答的关键决策清单"
4. 我自己回答完决策清单,再开始写代码
确认这个流程,让我开始说思路。
卡 1 小时以上
- 别硬撑 → 关掉对话 → 用 prompts-cheatsheet 7.1 模板 让 AI 出”再小一号”练习
- 通过小练习恢复信心 → 回头攻原挑战
完成后
写一篇博客 / 笔记记录:
- 设计取舍(你纠结过什么,最后选了什么)
- 踩的坑(是 LLM 的坑还是工程的坑)
- 如果重做会变更什么
提 PR 到本仓库 _scratch/journal/challenge-N-<日期>.md——别人能从你的踩坑中受益。
版本
- v1(2026-05):初版 7 个挑战,覆盖 Tool / RAG / Agent / Graph / HITL 全栈