Skip to the content.
LANGCHAIN_TUTORIAL 回 Jason 主站

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。

约束

给 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 场景?

每问独立段落,从日常类比开始。

自检


2. 网页内容摘要小工具 ⭐⭐

做什么:CLI 工具 summarize.py URL,下载网页 → 提取正文 → LLM 摘要 → 输出 200 字摘要 + 3 个关键 takeaway。

约束

给 AI 的开题 prompt

我要做一个网页摘要 CLI。

核心问题:网页 HTML 又大又乱,怎么"切"成 LLM 能消化的格式?
请帮我对比 3 种方案:
1. 全 HTML 直接喂 LLM
2. 用 BeautifulSoup 提取所有可见文本
3. 用 readability-lxml / trafilatura 提取"正文"

哪种适合摘要场景?哪种适合"问答"场景?为什么?

每方案 2-3 句话。从日常类比开始(比如"剪报纸 vs 拍照")。

自检


3. PR 描述自动生成器 ⭐⭐⭐

做什么:跑 python pr_helper.py,它读 git log main..HEAD --stat + 当前 branch 名,生成 PR 标题 + 描述 + Test plan 的 markdown。

约束

给 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:

约束

给 AI 的开题 prompt

我要做收藏夹整理 Agent。100 篇 markdown 笔记按主题聚类。

请引导我做技术决策(不直接给代码):

1. 聚类用什么方法?
   a) 让 LLM 看摘要决定每篇属于哪个组
   b) 用 embedding + KMeans 经典聚类
   c) 用 embedding + 层次聚类
   各自的复杂度 / 准确度 / token 成本?
2. "主题名"由谁起?LLM 看一组笔记起名,还是从笔记标题里挑?
3. INDEX.md 写多详细?只列标题 vs 标题 + 一句摘要 vs 标题 + 摘要 + 原始路径?

每问 2-3 句话,从日常类比(图书馆分类)开始。

自检


5. 微信群 Bot(FAQ 自动答) ⭐⭐⭐⭐

做什么:你管理一个技术群,常被问重复问题。写一个 Bot:

约束

给 AI 的开题 prompt

我要做 FAQ 自动答 Bot。核心问题:

匹配度阈值怎么设?太低 → bot 瞎答;太高 → 啥都不敢答。

请帮我思考:
1. 用 cosine similarity(向量相似度)还是 LLM-as-Judge 判匹配?
2. 阈值是固定的还是动态的(按 question 长度调整)?
3. 不匹配时,怎么"优雅地"转给人?是直接说"我不知道",
   还是先说"我猜可能是 X,对吗?"再升级?

每问 100 字内。从客服热线"按 0 转人工"的日常类比开始。

进阶:用 LangSmith Dataset 把”用户真问题 + bot 答 + 用户反馈”持续收集,每周复评一次。


6. 论文阅读助手 ⭐⭐⭐⭐

做什么:给一篇 PDF 论文,它能:

  1. 一句话标题摘要
  2. 三段式摘要(背景 / 方法 / 结论)
  3. 你提任意问题它能基于论文内容答
  4. 标记”论文里没明说但作者似乎假设了”的暗含前提

约束

给 AI 的开题 prompt

我要做论文阅读助手。

最难的子问题是"暗含前提"——论文不会写"我们假设 X",
但你看不到 X 就理解不了为什么作者那么做。

请引导我(不直接给方案):
1. "暗含前提"怎么定义?跟"作者跳过的步骤"是同一个吗?
2. 怎么让 LLM 主动找"暗含前提"?什么样的 prompt 能引导出来?
3. 怎么验证 LLM 找的暗含前提是真实的(不是它自己脑补的)?

每问 2-3 句话。引用论文阅读时的真实痛点。

自检:拿一篇你觉得”有点难懂”的论文(比如 Attention Is All You Need),看助手能不能讲清。


7. 简单的 SQL 自然语言查询 ⭐⭐⭐⭐⭐

做什么:给一个 SQLite 数据库 + schema 描述,用户用中文问”上周销售额最高的 5 个产品”,Agent 生成 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 小时以上

完成后

写一篇博客 / 笔记记录:

提 PR 到本仓库 _scratch/journal/challenge-N-<日期>.md——别人能从你的踩坑中受益。


版本