366 lines
12 KiB
Markdown
366 lines
12 KiB
Markdown
|
|
# 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(用户)、assistant(AI)。
|
|||
|
|
- **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** 中找到属于自己的价值!🚀
|
|||
|
|
|