Skip to content

Latest commit

 

History

History
183 lines (117 loc) · 9.09 KB

File metadata and controls

183 lines (117 loc) · 9.09 KB

← 本周导航 · 模块首页 · 术语表

Week 2 导读:AI 辅助全栈开发

这周的目标是用 AI 帮你扩展一个已有的 Web 应用——一个"行动项提取器"(Action Item Extractor)。你会接触到 Web 开发的完整链路:前端界面、后端逻辑、数据库存储、API 设计。


应用架构概览

如果你没有 Web 开发经验,这部分会帮你建立基本的心智模型。

想象一家餐厅:

  • 前端(Frontend)= 餐厅大堂:顾客看到的界面、菜单、桌椅。用户在这里输入信息、点击按钮、查看结果。
  • 后端(Backend)= 厨房:接收订单、处理逻辑、准备数据。用户看不到这里发生了什么,但所有"真正的工作"都在这里完成。
  • 数据库(Database)= 仓库:存储所有原材料和历史记录。关掉应用再打开,数据还在,就是因为数据库在默默保存。
  • API = 服务员:在大堂和厨房之间传递信息的标准流程。前端说"我要一份宫保鸡丁",API 把这个请求翻译成厨房能理解的格式传过去,再把做好的菜端回来。

本周的应用就是这样一个"餐厅":用户在前端输入笔记,后端用 AI 提取出行动项(Action Items),数据库记录所有内容。

一个具体的例子:你输入一段会议记录 "下周三之前完成设计稿,周五前给客户发邮件",后端的 AI 会把它拆解成两个行动项——"完成设计稿(截止周三)"和"给客户发邮件(截止周五)"。


关键技术概念

概念 解释
FastAPI Python 的 Web 框架(Framework),帮你快速搭建后端 API。类似一个"厨房操作台模板"——基本的台面、水槽、灶台都帮你准备好了,你只需要关注做菜本身。
SQLite 轻量级数据库,一个文件就是一个完整的数据库。不需要安装额外的数据库软件,学习阶段的最佳选择。
Endpoint(端点) API 的一个访问地址。比如 /notes 就是一个端点,访问它可以获取所有笔记。类似餐厅的不同窗口——"取餐窗口""点餐窗口"各司其职。
Unit Test(单元测试) 对代码的某个小功能进行单独检验。类似生产线上的质检环节——每个零件出厂前都要单独测试,而不是等整台机器组装好了才发现某个零件有问题。
Refactor(重构) 在不改变功能的前提下改善代码结构。就像重新整理你的衣柜——衣服还是那些衣服,但归类更清楚、找起来更方便。

每个 TODO 的导读

assignment.md 中有 5 个 TODO,下面帮你理解每个任务的目标和思路。

TODO 1: LLM 驱动的提取

这是本周的核心任务。原来的应用用的是基于规则的文本提取(比如"找到包含'截止'这个词的句子"),你要把它改成用 AI 来做。

这其实就是 Week 1 学到的提示技术的实际应用——你需要设计一个好的提示,让 AI 理解"从这段文字里提取行动项"是什么意思。

提示:想想 Few-shot 在这里是不是比 Zero-shot 更靠谱?给 AI 几个"输入笔记 → 输出行动项"的例子,它是不是就更清楚你要什么格式了?

TODO 2: 单元测试

给你的代码写"质检规则",确保代码正确运行。

很多初学者觉得写测试是浪费时间。但你试试这个场景:你改了 TODO 1 的提取逻辑,改完觉得没问题,但其实它在某些边界情况下会出错。如果有测试,跑一下就知道哪里坏了。没有测试?那就得靠手动一条条试,费时费力。

提示:可以让 AI 帮你写测试。给 Cursor 一个提示:"帮我为这个函数写单元测试,覆盖正常情况和边界情况"。

TODO 3: 代码重构

让代码更清晰、更有条理。类似整理杂乱的厨房——锅碗瓢盆都放到该放的地方。

这个任务很适合观察 AI 的代码审美。让 Cursor 重构代码时,注意看它做了哪些改动:是把长函数拆成小函数?是改善了变量命名?还是调整了文件结构?然后想想:你同意这些改动吗?

提示:不要盲目接受 AI 的所有改动。它有时候会"过度重构"——改得确实更"优雅"了,但也更难读了。

TODO 4: Agentic Mode

这是本周最有意思的部分。前面的 TODO 你都是手动给 AI 指令,一步步引导它。TODO 4 要求你使用 Cursor 的 Agentic 模式——给它一个高层目标,让它自主决定怎么完成。

这是从"手动指挥 AI"到"AI 自主执行"的跨越。你会发现 AI 有时候做得出乎意料的好,有时候又会跑偏。观察它什么时候靠谱、什么时候需要你介入修正,这个观察本身就是最重要的学习。

提示:先从小任务开始试。不要一上来就给一个巨大的目标,看看它能自主处理多大范围的任务。

TODO 5: 自动生成文档

让 AI 阅读代码并生成说明文档。这个任务相对轻松,但也很实用——因为写文档是大多数开发者最不想做的事情。

提示:生成文档后,认真读一遍。AI 写的文档有时候会有事实错误(比如描述的功能和实际代码不一致),这时候你的审查就很重要了。


与主题线的连接

从 Week 1 的"学会说话"到 Week 2 的"开始做事"。这周你会发现:给 AI 好的指令(Prompt)直接决定了它写出的代码质量。这就是为什么 Week 1 的基础如此重要。

同时注意 TODO 4 中的"Agentic Mode"——这是 Week 4 深入探讨的主题的预览。Week 4 会讲 AI Agent 的完整架构,到时候你再回头看 TODO 4 的体验,会有全新的理解。

另外,TODO 2(测试)和 TODO 3(重构)看起来是"软件工程基本功",但在 AI 辅助开发的时代它们变得更重要了:AI 写的代码你敢不测试就上线吗?AI 重构的代码你看都不看就接受吗?学会审查 AI 的工作,是这一周隐含的核心技能。


环境准备

1. 安装 Cursor 编辑器

Cursor 是一个内置 AI 功能的代码编辑器,本周的主要工具。

  1. 下载 Cursor: cursor.com/download
  2. 安装命令行工具:打开 Cursor,按 Command + Shift + P(Mac)或 Ctrl + Shift + P(Windows/Linux),输入 Shell Command: Install 'cursor' command,回车。
  3. 在终端中打开项目:
    cd 项目根目录
    cursor .

2. 启动应用

  1. 激活 conda 环境:
    conda activate cs146s
  2. 从项目根目录启动服务器:
    poetry run uvicorn week2.app.main:app --reload
    注意:由于目录重组,实际路径可能是 modules.agentic-coding.week2.app.main:app,请根据项目结构调整。
  3. 打开浏览器访问 http://127.0.0.1:8000/
  4. 熟悉应用的当前功能:输入笔记,查看提取的行动项

3. 确认 Ollama 可用

确保 Ollama 已安装并运行(参见 Week 1 环境准备)。


练习任务

本周有 5 个任务,逐步扩展一个"行动项提取器"(Action Item Extractor)应用。使用 Cursor 的 AI 功能来帮助你完成。

重要:在 Cursor 中完成每个任务时,记录你使用的提示词(Prompt)和 AI 生成的代码。

任务 1:用 LLM 实现智能提取

分析 week2/app/services/extract.py 中的 extract_action_items() 函数(基于规则的提取),然后实现一个新函数 extract_action_items_llm(),使用 Ollama 通过大语言模型来提取行动项。

提示:

任务 2:编写单元测试

week2/tests/test_extract.py 中为 extract_action_items_llm() 编写单元测试。测试应覆盖多种输入:

  • 项目列表格式
  • 带关键词前缀的行
  • 空输入

任务 3:重构代码

对后端代码进行重构,重点关注:

  • API 契约/Schema 的清晰定义
  • 数据库层的整理
  • 应用生命周期/配置
  • 错误处理

任务 4:使用 Agentic Mode 自动化

  1. 将 LLM 提取功能集成为新的 API 端点。更新前端,添加"Extract LLM"按钮,点击后通过新端点触发提取。
  2. 新增一个端点用于获取所有笔记。更新前端,添加"List Notes"按钮,点击后显示所有笔记。

任务 5:自动生成 README

使用 Cursor 分析代码库,自动生成一个结构清晰的 README.md,至少包含:

  • 项目简介
  • 安装和运行说明
  • API 端点和功能说明
  • 测试运行方式

自检清单

  • 理解前端、后端、数据库的分工
  • 成功运行了 starter application
  • 用 AI 实现了至少一个新功能
  • 理解"让 AI 写代码"和"自己写代码"的协作模式
  • 写了至少一个测试来验证功能
  • 体验了 Agentic Mode 并记录了观察
  • 能说出 AI 辅助开发中人类的核心角色是什么

开始 Week 3 →