CourseDesignTemplate/README.md

366 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Python程序设计课程设计
## 🎯 课程概述
**课程主题**:基于 DeepSeek API + Streamlit 的 AI 应用开发
**课程理念**
> 在 AI 时代代码可以生成Bug 可以修复,文档可以自动撰写——
>
> **但判断什么值得做、为结果负责、理解用户真实需求、在约束中做取舍,这些能力永远属于你。**
本课程通过 AI 代码编辑器(如 Cursor、Windsurf进行 **Vibe Coding**,让学生体验"用自然语言编程"的全新开发方式。但更重要的是,在这个过程中**思考人与 AI 的协作边界**,培养 AI 时代真正不可替代的能力。
**技术栈**
- 🐍 **Python 3.10+**
- 🤖 **DeepSeek API**(大语言模型)
- 🎨 **Streamlit**Web 界面框架)
- 🛠️ **Cursor / Windsurf**AI 代码编辑器)
---
## 📅 课程安排
| 日期 | 内容 | 形式 |
|:---:|:---:|:---:|
| **第1天** | 课程讲解与演示 | 教师授课 |
| **第2天** | 自主开发 | 学生自学 |
| **第3天** | 中期答疑 | 集中答疑 |
| **第4天** | 自主开发 | 学生自学 |
| **第5天** | 项目展示与评审 | 成果展示 |
---
## 📚 第1天课程讲解与演示3学时
### 1.1 课程导入30分钟
#### 什么是 Vibe Coding
- **定义**:一种"以人为本、AI 为器"的编程范式。开发者专注于**意图描述**和**结果验收**,而将代码实现、调试细节交由 AI 辅助完成。
- **核心逻辑**"描述你想要什么,而不是告诉计算机怎么做"。
- **演示**:用自然语言在 3 分钟内创建一个完整应用。
#### AI 时代,什么能力真正属于你?
> **AI 能做的事越来越多:** 语法查询、代码生成、Bug 修复、文档撰写、测试创建、架构建议、代码重构...
>
> **但这些能力永远属于你:**
> - 🎯 **判断什么值得做** —— 选题的眼光和价值判断
> - 📋 **为结果负责** —— 代码能跑不等于问题解决
> - 👥 **理解真实需求** —— 用户要的不是功能,是解决方案
> - ⚖️ **在约束中取舍** —— 时间、资源、技术的平衡
> - 🤝 **与人协作** —— 包括与 AI 协作
本课程不只是教你用 AI 写代码,更是让你**体验和思考这些不可替代的能力**。
#### AI 代码编辑器介绍
- **Cursor**[https://cursor.com](https://cursor.com)
- **Windsurf**[https://codeium.com/windsurf](https://codeium.com/windsurf)
- **核心模式**
- **Approve/Reject**:人是最终的决策者。
- **Context Awareness**:如何让 AI "看见"你的整个项目。
### 1.2 技术栈讲解60分钟
#### DeepSeek API 快速入门
```python
from openai import OpenAI
# 初始化客户端
client = OpenAI(
api_key="your-api-key", # 建议使用环境变量
base_url="https://api.deepseek.com"
)
# 发送请求
response = client.chat.completions.create(
model="deepseek-chat", # 使用 V3 模型
messages=[
{"role": "system", "content": "你是一个有帮助的助手"},
{"role": "user", "content": "你好!"}
],
stream=False
)
print(response.choices[0].message.content)
```
> [!WARNING]
> **API Key 安全**
> 绝对不要按将 API Key 直接提交到 GitHub 等公共仓库!请使用 `.env` 文件配合 `.gitignore` 管理。
**关键概念**
- **API Key**:你的"通行证",注意保密。
- **Messages**:对话历史的列表,包含 system人设、user用户、assistantAI
- **Stream**:流式输出,提升用户体验(像打字机一样显示)。
#### Streamlit 快速入门
```python
import streamlit as st
st.title("我的第一个 Streamlit 应用")
# 侧边栏
with st.sidebar:
st.write("这是侧边栏")
# 输入框
user_input = st.text_input("请输入你的问题:")
# 按钮与交互
if st.button("提交"):
if user_input:
st.write(f"你输入了:{user_input}")
else:
st.warning("请输入内容!")
```
**常用组件**
- 🛠️ **输入**`st.text_input`, `st.text_area`, `st.slider`
- 📄 **输出**`st.write`, `st.markdown`, `st.chat_message`
- 🎒 **状态**`st.session_state` (用于记住对话历史)
### 1.3 完整示例演示45分钟
#### 现场演示:用 Vibe Coding 构建一个 AI 聊天应用
**演示步骤**
1. **Init**:新建文件夹,用自然语言让 AI 初始化环境。
2. **Draft**:描述核心需求,生成 1.0 版本代码。
3. **Refine**
- 添加对话历史记忆Session State
- 开启流式输出Streaming
- 优化 UI添加侧边栏设置
4. **Deploy**:运行并测试。
**示例 Prompt**
> "帮我创建一个基于 DeepSeek API 的聊天应用,使用 Streamlit 构建界面。要求:
> 1. 支持多轮对话,保留对话历史
> 2. 使用流式输出,打字机效果显示回复
> 3. 左侧边栏可以设置系统提示词
> 4. 界面美观,有清空对话的按钮"
### 1.4 项目要求说明15分钟
#### 项目选题(任选其一或自拟)
| 难度 | 项目名称 | 服务对象/场景 | 解决的真实问题/价值 |
|:---:|:---|:---|:---|
| ⭐⭐ | AI 写作助手 | 学生/自媒体 | 写作与润色提效,输出更顺畅 |
| ⭐⭐ | 智能单词本 | 英语学习者 | 释义+例句,降低背词与造句门槛 |
| ⭐⭐ | AI 任务拆解教练 | 学习/入职 | 把目标拆成可执行步骤与提醒 |
| ⭐⭐⭐ | 会议纪要助手 | 团队会议 | 自动要点/待办提炼,减少遗漏 |
| ⭐⭐⭐ | 代码解释与修复 | 编程学习者 | 逐行讲解+修复建议,缩短排错时间 |
| ⭐⭐⭐ | 产品需求澄清助手 | PM/开发 | 拆解模糊需求→可执行条目 |
| ⭐⭐⭐ | 学习笔记整理 | 学生/职场 | 将笔记结构化,生成概要/测验题 |
| ⭐⭐⭐⭐ | 智能知识库问答 | 企业/课程 | 自有文档精准问答,减少人工答疑 |
| ⭐⭐⭐⭐ | AI 数据洞察仪表盘 | 中小团队 | 上传表格自动生成洞察与可视化 |
| ⭐⭐⭐⭐ | AI 面试官 | 求职者 | 简历定制问答,练习反馈与改进建议 |
| ⭐⭐⭐⭐⭐ | 多 Agent 决策工作坊 | 方案评审 | 多角色视角辩论,生成决策要点 |
> 💡 **选题思考**:不只是"我能做什么",更要思考"这个项目**对谁有价值**?解决什么**真实问题**"
---
## 🔧 第2天自主开发
### 建议学习路线
```
上午:环境搭建 + 熟悉工具
├── 安装 Python、Cursor/Windsurf
├── 申请 DeepSeek API Key
├── 运行第一天的示例代码
└── 熟悉 AI 编辑器的操作Composer/Chat 模式)
下午:开始项目开发
├── 确定项目选题
├── 用自然语言描述项目需求Project Requirements
├── 让 AI 生成初始代码框架
└── 运行调试,迭代优化
```
### Vibe Coding 技巧
#### 1. 上下文管理Context
AI 不是神,它需要知道你的代码、你的报错、你的意图。
- **@Files**:在 Cursor 中使用 `@` 引用相关文件。
- **Paste Error**:直接粘贴报错信息,不要只说"报错了"。
#### 2. 有效的 Prompt 模板
```markdown
角色:你是一个 Python 专家。
任务:创建一个 [项目类型],使用 [技术栈]。
功能需求:
1. [功能1]
2. [功能2]
约束条件:
- 代码简洁,有注释
- 使用 Streamlit 的 sidebar 布局
```
#### 3. 常见问题排查
- **Streamlit 页面频繁刷新?** -> 检查是否把初始化代码放在了循环里,或者没用 `st.session_state`
- **API 报错 401** -> 检查 API Key 是否正确,环境变量是否生效。
### 学习资源
- 📚 **Streamlit 文档**[docs.streamlit.io](https://docs.streamlit.io)
- 🤖 **DeepSeek API**[platform.deepseek.com](https://platform.deepseek.com)
- 📺 **教程**B站搜索 "Streamlit 入门" 或 "Cursor 教程"
---
## ❓ 第3天中期答疑
### 答疑内容
- ✅ 项目选题确认
- 🐛 疑难 Bug 攻关
- 🏗️ 架构设计与优化建议
### 常见问题解决方案表
| 问题分类 | 现象描述 | 解决方案核心 |
|:---|:---|:---|
| **环境** | `ModuleNotFoundError` | 运行 `pip install <库名>` |
| **API** | `402 Payment Required` | 账户余额不足,需充值 |
| **API** | 回复中断/不完整 | 检查 `max_tokens` 设置,或上下文超长 |
| **Streamlit** | 变量一点按钮就重置 | **必须**使用 `st.session_state` 存储变量 |
| **Streamlit** | 运行无反应 | 确保命令是 `streamlit run app.py` 而不是 `python app.py` |
### 中期检查清单
- [ ] 选题已定,核心功能跑通
- [ ] 理解核心代码逻辑(能给别人讲清楚)
- [ ] 无论是 Git 还是手动备份,确保代码有存档
- [ ] 能清晰回答:**我的项目为谁解决了什么问题?**
---
## 🔧 第4天自主开发
### 建议工作重点
- **完善功能**处理边界情况如用户输入为空、API 请求失败)。
- **美化界面**:使用 `st.columns` 排版,添加 Emoji优化提示语。
- **准备展示**:开始思考演示流程,准备 README。
> [!TIP]
> **加分项**
> - 💾 **数据持久化**:对话不丢失(存本地 JSON 或 SQLite
> - 📱 **响应式**:手机端打开也好看。
> - 📊 **可视化**:用图表直观展示数据。
---
## 🎤 第5天项目展示与评审
### 展示形式
- **时间**:每组 (2-3人) **5分钟**
- **内容**PPT/文档介绍 (1min) + 实机演示 (4min) + 心得分享 (2min)。
### 评分标准(总分 100
| 维度 | 分值 | 核心考量 |
|:---|:---:|:---|
| **功能完成度** | 25 | 核心功能由无 Bug流程跑通 |
| **创意与体验** | 20 | 界面美观,交互顺滑,解决痛点 |
| **技术实现** | 20 | 代码结构清晰,错误处理完善 |
| **展示表现** | 10 | 表达清晰,演示流畅 |
| **开发心得** | 15 | **(重要)** 对 AI 协作的真实思考与反思 |
| **学习态度** | 10 | 课堂与答疑的参与度 |
> **难度系数**
> 基础项目 (⭐⭐) 系数 ×1.0;挑战项目 (⭐⭐⭐⭐) 系数 ×1.1。
> *鼓励挑战,但也尊重将简单事情做到极致。*
---
## 📦 提交要求
### 1. 提交材料
1. **源代码**:完整项目文件夹。
2. **README.md**:项目说明文档。
3. **requirements.txt**`pip freeze > requirements.txt` 生成。
4. **开发心得**Markdown 格式,**不少于 500 字**。
### 2. README.md 模板
```markdown
# [项目名称]
## 简介
这句话介绍你的项目是做什么的,解决了什么问题。
## 如何运行
1. 安装依赖:`pip install -r requirements.txt`
2. 配置 Key复制 `.env.example``.env` 并填入 Key。
3. 运行:`streamlit run app.py`
## 功能列表
- [x] 功能 A
- [ ] 功能 B (待开发)
```
### 3. 📝 开发心得(必填,>500字
**请围绕以下核心问题撰写:**
1. **选题思考**:为什么做这个?解决了谁的痛苦?
2. **AI 协作体验**
- 第一次用 AI 写代码的感觉?
- 哪个 Prompt 让你直呼"牛逼"?哪个让你想砸键盘?
- AI 生成的 Bug 你是怎么解的?
3. **自我反思**
- 离开 AI我还能写出这个吗
- AI 时代,我作为程序员的核心竞争力到底是什么?
> 💡 **真情实感最重要**。我们不想看套话,想看你的真实挣扎与顿悟。
---
## 🔗 附录:环境配置指南
### 1. 基础环境
- **Python**:推荐 3.10+ ([官网下载](https://www.python.org/downloads/))
- **编辑器**:推荐 Cursor 或 VS Code + Windsurf 插件。
### 2. 项目初始化命令
```bash
# 1. 创建虚拟环境 (Windows)
python -m venv venv
.\venv\Scripts\activate
# 1. 创建虚拟环境 (Mac/Linux)
python3 -m venv venv
source venv/bin/activate
# 2. 安装核心库
pip install streamlit openai python-dotenv
```
### 3. API Key 管理示例 (`.env`)
不要把 Key 写死在代码里!
```python
# .env 文件
DEEPSEEK_API_KEY=sk-xxxxxxx
```
```python
# app.py
import os
from dotenv import load_dotenv
load_dotenv() # 加载 .env
api_key = os.getenv("DEEPSEEK_API_KEY")
```
---
## 🌟 结语
> **代码是 AI 写的没关系,**
>
> **但选题是你定的,需求是你理解的,取舍是你做的,结果是你交付的,成长是你自己的。**
祝大家在 **Vibe Coding** 中找到属于自己的价值!🚀