modern-software-dev-assignments week1全解:6种核心LLM提示技术一网打尽
modern-software-dev-assignments 是斯坦福大学 CS146S《The Modern Software Developer》课程的官方作业仓库,其中 Week 1 用 6 个独立的小任务带你亲手实践 6 种核心 LLM 提示技术:K-shot 提示、思维链(CoT)、工具调用、自一致性、RAG 检索增强生成与 Reflexion 自我反思。本文带你快速完成环境搭建,并逐一拆解每种技术的任务目标、文件位置与通关技巧 🎯
📚 本周任务一览:6 种技术对应 6 个文件
Week 1 全部代码位于 week1/ 目录,每种技术都是一个独立脚本,任务说明写在各自源码文件头部,你只需补全标注为 TODO 的提示词(prompt),即可通过内置测试脚本。
| 技术 | 对应文件 | 本地模型 | 任务目标 |
|---|---|---|---|
| K-shot 提示 | k_shot_prompting.py | mistral-nemo:12b | 让模型反转单词字母顺序 |
| 思维链 CoT | chain_of_thought.py | llama3.1:8b | 计算 3¹²³⁴⁵ mod 100 |
| 工具调用 | tool_calling.py | llama3.1:8b | 生成合法的 JSON 工具调用 |
| 自一致性 | self_consistency_prompting.py | llama3.1:8b | 解一道小学数学应用题 |
| RAG 检索增强 | rag.py | llama3.1:8b | 基于 API 文档写代码 |
| Reflexion 反思 | reflexion.py | llama3.1:8b | 根据测试失败信息迭代改代码 |
完整的任务说明见 week1/README.md 与 week1/assignment.md。
🛠️ 快速搭建环境:4 步跑通本地 LLM
所有任务都通过 Ollama 在本地运行大模型,不需要 API 密钥。按照 README.md 的说明,标准流程如下(要求 Python 3.12):
1️⃣ 创建并激活 Conda 环境:
conda create -n cs146s python=3.12 -y
conda activate cs146s
2️⃣ 安装 Poetry 并安装项目依赖(在仓库根目录执行):
poetry install --no-interaction
3️⃣ 安装 Ollama 并启动服务(ollama serve),用 ollama -v 验证安装成功。
4️⃣ 拉取本周所需的两个模型(只需执行一次):
ollama run mistral-nemo:12b
ollama run llama3.1:8b
💡 如果仓库不在本地,可先克隆:
git clone https://gitcode.com/GitHub_Trending/mo/modern-software-dev-assignments,再进入week1/目录开始实验。
🎯 技术一:K-shot 提示——用示例教会模型
打开 k_shot_prompting.py,任务很简单:让模型把 httpstatus 反转成 sutatsptth,且只输出反转结果。难点在于模型有时会"话多"——加上说明文字导致判题失败。
通关技巧:在 YOUR_SYSTEM_PROMPT(第 9-10 行)中给出若干同格式的任务-答案示例(即 few-shot 样本),并在示例中强化"只输出结果、不加任何文字"的约束。测试脚本会运行 5 次,只要有一次输出完全匹配就打印 SUCCESS。
🧠 技术二:思维链(Chain-of-Thought)——先推理再作答
chain_of_thought.py 要求模型计算 3^12345 mod 100,并把最终答案写在最后一行 Answer: <数字>(正确答案是 43)。
通关技巧:在系统提示中明确要求模型"先逐步推理,再给出最终答案",并规定答案格式。脚本内置了 extract_final_answer 函数(第 25-40 行),会从冗长的推理过程里正则提取最后一行 Answer:,所以格式务必严格。
🔧 技术三:工具调用——让模型输出可执行的 JSON
tool_calling.py 是本周最有"工程味"的任务:模型不能直接干活,必须输出一个 JSON 对象来"调用工具"。代码中已实现了一个真实的工具函数 output_every_func_return_type(第 43-52 行),它会用 AST 解析源文件、列出所有顶层函数的返回类型。
执行链路很清晰:模型输出 JSON → extract_tool_call 解析 → 从 TOOL_REGISTRY 查表执行 → 比对输出(第 115-133 行)。
通关技巧:在系统提示中给出工具的完整说明和 JSON 输出模板(工具名、参数、示例),并强调"只输出 JSON,不要多余文字"。
🎲 技术四:自一致性——多次采样投票选答案
self_consistency_prompting.py 是一道小学应用题:Henry 骑 60 英里,中途停两次,两次停靠之间骑了多少?(答案:25 英里)
脚本会把同一个提示运行 5 次(temperature=1,故意放大随机性),然后用 Counter 对提取出的答案做多数投票(第 67-69 行)。
通关技巧:结合思维链引导逐步计算,压低单次出错概率;即使个别采样跑偏,投票机制也能帮你"翻盘"。
📄 技术五:RAG 检索增强——把文档喂给模型
rag.py 的任务是:基于 API 文档写一个 fetch_user_name 函数,要求使用 requests.get、/users/ 端点和 X-API-Key 认证头。文档语料放在 week1/data/api_docs.txt。
RAG 的核心是你需要实现 YOUR_CONTEXT_PROVIDER(第 54-59 行):从语料中挑选相关文档放进上下文。脚本会用 REQUIRED_SNIPPETS 校验生成代码是否包含关键片段(第 45-51 行)。
对比实验彩蛋:把 YOUR_CONTEXT_PROVIDER 改成返回 [](不注入任何文档),再对比两种情况下的成功率——这是理解 RAG 价值的最直接方式。
🔄 技术六:Reflexion 反思——用测试失败驱动自我修正
reflexion.py 模拟了 AI 编程 Agent 的完整闭环:
- 让模型生成
is_valid_password函数(密码需 ≥8 位、含大小写、数字和特殊字符); - 用 4 组测试用例(第 23-28 行)真实运行并收集失败详情;
- 你实现的
your_build_reflexion_context(第 94-99 行)要把上一版代码 + 失败信息组装成反思消息; - 模型据此输出改进版代码,再次测试。
通关技巧:反思消息里要同时包含"你之前写的代码"和"哪些用例失败了、错在哪",并明确指令"修复问题后重新输出完整函数"。
✅ 交付要求与评分标准
- 只修改每个文件中标注
TODO的提示词,不要改动模型与测试逻辑; - 每个脚本独立运行,迭代提示词直到输出
SUCCESS; - 保存每种技术的最终提示词与运行输出,随代码一起提交;
- 评分 60 分 = 6 种技术 × 每种 10 分(详见 week1/assignment.md 第 51-53 行)。
🗺️ 小结:6 种技术什么时候用?
| 场景 | 推荐技术 |
|---|---|
| 输出格式不稳定 | K-shot 示例约束 |
| 复杂推理、数学计算 | 思维链 CoT |
| 需要查数据库、执行操作 | 工具调用 |
| 单次准确率不达标 | 自一致性投票 |
| 依赖私有/最新文档 | RAG 检索增强 |
| 生成的代码有 Bug | Reflexion 迭代修正 |
Week 1 的价值在于让你亲手感受提示词如何影响模型行为——这些技巧在后续 week2~week7 构建 AI 笔记应用时会反复用到,建议先花一个下午把 6 个脚本全部跑通 💪
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



