M4 工程化
MODULE 4 · L16–L18
工程化
3 课时
课时安排
L16虚拟环境与依赖管理
虚拟环境概念与必要性、pipenv 工作流(Pipfile / Pipfile.lock)、conda 基础、镜像源配置。为什么 AI 项目更需要虚拟环境——不同项目的 torch / transformers 版本经常互相冲突。
V029 · 虚拟环境与pipenv工作流V030 · conda与依赖管理
L17代码质量与测试入门
命名/注释/函数拆分规范;AI 生成代码的常见问题与审查方法(命名不一致、超纲语法、边界缺失);assert 与简单测试;重构意识。课堂:现场审查并重构一段质量不高的 AI 生成代码。
V031 · AI生成代码的审查方法V032 · 代码规范与基础测试
L18模块化项目结构作业③发布
多文件项目组织、包结构设计、配置管理(.env 存 API Key、config.py 存配置);把前面的单文件脚本重构成模块化项目。
V033 · Python项目结构与模块化
L17 现场:审查一段 AI 生成的代码
这是课堂用的真实案例。左边是学生让 AI「写个函数统计词频」得到的第一版,右边是审查重构后——你能先自己找出几处问题?
问题① 密钥硬编码: api_key="sk-abc123" → os.getenv("DEEPSEEK_KEY")
问题② 命名含糊: def process(d): → def count_words(text: str) -> dict
问题③ 无边界处理: text.split() 空串也照跑 → if not text: return {}
问题④ 全局变量: results 写在函数外 → 收进函数,返回值交付
问题⑤ 零测试: 无 → assert count_words("a a b")=={"a":2,"b":1}
审查三步法:① 密钥与敏感信息有没有进代码?② 名字能不能自解释、函数是否只做一件事? ③ 空输入 / 超长输入 / 非法类型会怎样?过完三问再运行验证。这套流程在 M6 项目冲刺里每天都要用。
AI 时代为什么更需要虚拟环境
核心论证——传统课程常把虚拟环境讲成可有可无的整洁习惯,在 AI 时代它已是必需:
依赖冲突项目 A 要 torch 2.1
项目 B 要 torch 2.5 + transformers 4.40。装在同一个全局环境里必然有一个无法工作——虚拟环境为每个项目提供独立的依赖空间。
AI 引入的版本漂移AI 推荐的版本各不相同
每次问 AI 安装命令,它推荐的版本可能不一致。requirements.txt / Pipfile.lock 锁定精确版本,才能保证「我电脑上能跑」可复现。
作业硬要求从 L16 起必查项
期末项目与作业检查第一件事:有没有独立虚拟环境。pipenv install / pipenv shell 两步进入,Pipfile.lock 随项目提交。
换机 / 协作一条命令复现
队友 clone 你的项目后 pipenv install,所有依赖原样到位——协作开发的地基(配合 L5 的 Git)。
L18 目标结构:单文件脚本 → 模块化项目
my_ai_app/
├── .env # API Key(已加入 .gitignore,不进入版本库)
├── .gitignore
├── Pipfile # 直接依赖
├── Pipfile.lock # 精确版本锁定,协作复现
├── README.md # 安装/运行/功能说明
└── app/
├── __init__.py
├── config.py # 读环境变量、常量集中管理
├── client.py # 大模型 API 封装(L19 的成果放这)
├── stats.py # 数据处理函数
└── main.py # 入口:python -m app.main
随堂小测
延伸阅读
经典笔记:10.5 虚拟环境管理 · 10.2 包管理系统 · 9.3 包 · 2023-07 Conda 虚拟环境
下一模块:M5 AI 应用开发 → ← M3 数据获取与处理
📽️ 授课课件:W7–W8 课件 →