generative-ai-for-beginners 增强特性与改进路线图:安全加固、API 现代化与工程质量实践
【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners
本路线图基于对 generative-ai-for-beginners 仓库的全面代码评审与业界最佳实践分析,系统梳理了课程在安全、代码质量、教学效果、API 现代化与基础设施五个维度的改进计划。读者读完本文后将掌握该 21 课生成式 AI 课程的技术架构现状、已落地的安全与工程化改造(如共享工具模块、CI/CD 工作流、Responses API 迁移),以及面向未来的课程演进方向(安全课程、生产部署、高级 RAG 等)。
路线图概览与执行摘要
本仓库是一套面向初学者的 21 课生成式 AI 课程(见 README.md),覆盖提示工程、文本生成、聊天应用、搜索应用、图像生成、函数调用、RAG、AI Agent、微调、小型语言模型(SLM)等主题。在交付教学价值的同时,仓库本身也持续经历工程化治理:安全评审、代码质量规范、共享组件抽取、API 模式现代化以及 CI/CD 基础设施的建设。
本文档对应的完整英文源文档位于 docs/ENHANCED_FEATURES_ROADMAP.md,其多语言译本(含克罗地亚语版本)统一维护在 translations/hr/docs/ENHANCED_FEATURES_ROADMAP.md。以下是整份路线图的核心脉络:
- 安全增强(优先级:最高):紧急修复已完成,后续补充限流、密钥轮换与内容安全能力;
- 代码质量改进:引入 Black/Ruff/mypy 配置、ESLint/Prettier 规范与共享 Python 工具模块;
- 教学增强:新增安全、生产部署、高级 RAG 等课程主题,并改进既有课程;
- API 现代化:从 Chat Completions 迁移至 Responses API,演示结构化输出、视觉能力与内置工具;
- 基础设施改进:CI/CD 质量门禁与 CodeQL 安全扫描已落地;
- 开发者体验:DevContainer 开箱即用的 Python/Node 开发环境;
- 多语言支持:Python 全覆盖,TypeScript/JavaScript/.NET 部分覆盖;
- 性能与成本优化:异步模式、缓存策略、Token 优化;
- 可访问性与国际化:50+ 语言自动翻译同步机制;
- 实施优先级:四阶段推进计划。
一、安全增强:从紧急修复到纵深防御
1.1 已完成的紧急修复
代码评审首先聚焦于课程示例中常见的安全隐患,以下问题已修复完毕:
| 问题 | 涉及文件 | 状态 |
|---|---|---|
| 硬编码的 SECRET_KEY | 05-advanced-prompts/python/aoai-solution.py | 已修复 |
| 缺少环境变量校验 | 多处 JS/TS 文件 | 已修复 |
| 不安全的函数调用 | 11-integrating-with-function-calling/js-githubmodels/app.js | 已修复 |
| 文件句柄泄漏 | 08-building-search-applications/scripts/ | 已修复 |
| 请求缺少超时设置 | 09-building-image-applications/python/ | 已修复 |
这些修复的共同思路是:教学示例也应遵循生产级安全习惯。例如请求超时问题,在共享模块中通过统一的make_safe_request包装器(默认 30 秒超时、3 次重试)从机制上杜绝了无超时请求的产生(见下文 2.2 节源码分析)。
1.2 建议追加的安全能力
除已完成修复外,路线图建议课程补充以下安全内容:
- 限流示例(Rate Limiting)
- 提供 API 调用限流的示例代码;
- 演示指数退避(exponential backoff)模式。
- API 密钥轮换
- 补充 API 密钥轮换最佳实践文档;
- 加入 Azure Key Vault 或同类服务的使用示例。
- 内容安全集成
- 加入 Azure Content Safety API 示例;
- 演示输入/输出内容审核模式。
配套的 docs/SECURITY_GUIDELINES.md 已系统梳理了生成式 AI 应用的安全最佳实践,涵盖环境变量管理、输入校验与净化、API 安全、提示注入防护、HTTP 请求安全、错误处理、文件操作与代码质量工具八个主题,可作为上述追加内容的教学蓝本。
二、代码质量改进:工具链、共享组件与规范
2.1 已落地的配置文件
路线图引入了三份核心配置文件,为 Python 与 JavaScript/TypeScript 代码确立了统一的工程基线:
| 文件 | 用途 |
|---|---|
.eslintrc.json | JavaScript/TypeScript 的 Lint 规则 |
.prettierrc | 代码格式化标准 |
| pyproject.toml | Python 工具链配置(Black、Ruff、mypy) |
以 pyproject.toml 为例,它集中定义了本仓库的 Python 工程质量基线:
- Black:
line-length = 100,目标版本py310/py311/py312,并排除了.git、node_modules、dist等目录; - Ruff:
target-version = "py310",启用了E(pycodestyle)、W(pycodestyle 警告)、F(Pyflakes)、I(isort)、B(flake8-bugbear)、C4(flake8-comprehensions)、UP(pyupgrade)、S(flake8-bandit 安全规则)等规则集,同时忽略E501(行长交给 Black 处理)与S101(教育代码中允许使用 assert); - mypy:
python_version = "3.10",开启check_untyped_defs与warn_return_any; - pytest:
testpaths = ["tests"],默认参数-v --tb=short; - 开发依赖统一收口在
[project.optional-dependencies] dev中:black>=24.0.0、isort>=5.13.0、mypy>=1.8.0、ruff>=0.2.0、pytest>=8.0.0、pytest-cov>=4.1.0。
2.2 共享 Python 工具模块
路线图的核心工程举措之一,是抽取了shared/python/模块,将分散在各课程示例中的重复、易错逻辑集中管理:
- shared/python/env_utils.py:环境变量安全处理
- shared/python/input_validation.py:输入校验与净化
- shared/python/api_utils.py:安全的 API 请求包装器
下面结合源码逐一展开其设计要点。
环境变量处理(env_utils.py)
def get_required_env(var_name: str, description: str | None = None) -> str: value = os.getenv(var_name) if not value: desc_part = f" ({description})" if description else "" raise ValueError( f"Missing required environment variable: {var_name}{desc_part}. " f"Please set it in your .env file or environment." ) return valueget_required_env在变量缺失或为空时抛出带提示信息的ValueError,description参数可附加用途说明,帮助开发者快速定位配置缺失点。配套的validate_env_vars(*var_names)支持批量校验多个变量并一次性报告全部缺失项,而get_env_with_default(var_name, default)则为可选配置提供默认值兜底。
输入校验与净化(input_validation.py)
def sanitize_prompt_input(value: str, max_length: int = 1000, strict: bool = False) -> str: # 去除空字节与控制字符 sanitized = re.sub(r"[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]", "", sanitized) # 去除潜在危险的模板/注入模式 dangerous_patterns = [ r"\{\{.*?\}\}", # 模板注入 r"\${.*?}", # 变量替换 r"<script.*?>.*?</script>", # 脚本标签 r"javascript:", # JavaScript URL ] for pattern in dangerous_patterns: sanitized = re.sub(pattern, "", sanitized, flags=re.IGNORECASE | re.DOTALL)sanitize_prompt_input是专门面向 LLM 提示词的安全净化函数:它删除控制字符、模板注入模式({{...}})、变量替换(${...})、<script>标签与javascript:URL,strict模式还会进一步只保留安全字符集。这一设计与路线图中「防护提示注入攻击」的教学目标完全对应。模块还提供validate_number_input(数值区间校验)、validate_text_input(文本长度校验)、validate_email(邮箱格式)与validate_url(HTTPS 强制校验)等通用工具。
API 请求包装器(api_utils.py)
def make_safe_request( url: str, method: str = "GET", timeout: int = 30, retries: int = 3, **kwargs: Any ) -> requests.Response: for attempt in range(retries): try: response = requests.request(method=method, url=url, timeout=timeout, **kwargs) response.raise_for_status() return response except RequestException as e: last_exception = e if attempt < retries - 1: # Exponential backoff could be added here continue raisemake_safe_request统一为 HTTP 请求施加超时(默认 30 秒)与重试(默认 3 次)策略——这正是对 1.1 节「请求缺少超时」修复的机制化保障。同模块的create_openai_client与create_azure_openai_client则封装了 OpenAI/Azure OpenAI 客户端的创建逻辑:后者将 endpoint 规范化为<endpoint>/openai/v1/的 v1 端点形态,无需再传api_version,与下文第四节介绍的 Responses API 迁移直接配套。download_image则复用make_safe_request实现带超时的图片下载。
2.3 建议的代码改进方向
路线图还提出了三项代码质量建议:
- 类型覆盖:为全部 Python 文件补充类型注解,并在所有 TypeScript 项目中启用 strict 模式;
- 文档规范:为所有 Python 函数补充 docstring,为 JavaScript/TypeScript 函数补充 JSDoc 注释(上述共享模块已完整践行该规范);
- 测试框架:pytest 配置已写入 pyproject.toml,并为共享工具模块提供了示例测试(见下文 5.1 节);JavaScript/TypeScript 侧可进一步引入 Jest。
2.4 测试用例佐证
共享模块的测试位于 tests/ 目录,由 tests/conftest.py、tests/test_env_utils.py、tests/test_input_validation.py 与 tests/test_api_utils.py 组成,并在 CI 中随 pytest 运行。
以 tests/test_input_validation.py 为例,测试覆盖了净化函数的关键行为:
sanitize_prompt_input("Hello {{system}} world")会移除{{/}},验证模板注入防护;sanitize_prompt_input("value ${danger} here")会移除${,验证变量替换防护;sanitize_prompt_input("hi <script>alert(1)</script> there")会移除<script,验证脚本标签防护;sanitize_prompt_input("click javascript:alert(1)")会移除javascript:,验证危险 URL 防护;- 超出
max_length与仅含非法字符(如"{{a}}")的输入都会抛出ValueError。
tests/test_env_utils.py 则验证了get_required_env对缺失变量、空值、描述信息透传,以及validate_env_vars批量报告缺失、get_env_with_default默认值兜底等行为。这些测试是「共享工具模块可被 CI 强制保障」的直接证据。
三、教学增强:新课程主题与既有课程改进
3.1 拟新增的课程主题
路线图规划了三门候选新课程,分别对应生成式 AI 应用开发中最常被初学者忽略的三个工程环节:
课程 22:AI 应用安全
- 提示注入攻击与防御
- API 密钥管理
- 内容审核
- 限流与滥用预防
课程 23:生产部署
- Docker 容器化
- CI/CD 流水线
- 监控与日志
- 成本管理
课程 24:高级 RAG 技术
- 混合检索(关键词 + 语义)
- 重排序策略
- 多模态 RAG
- 评估方法论
这三门课程的规划与仓库现状高度呼应:安全主题可直接依托 docs/SECURITY_GUIDELINES.md 与共享工具模块的教学素材;生产部署主题与第五节已落地的 CI/CD 基础设施一脉相承;高级 RAG 则可基于 15-rag-and-vector-databases/ 的基础 RAG 课程自然延伸。
3.2 既有课程改进建议
| 课程 | 建议改进 |
|---|---|
| 06 - 文本生成 | 增加流式响应(streaming)示例 |
| 07 - 聊天应用 | 增加对话记忆模式 |
| 08 - 搜索应用 | 增加向量数据库对比 |
| 09 - 图像生成 | 增加图像编辑/变体示例 |
| 11 - 函数调用 | 增加并行函数调用 |
| 15 - RAG | 增加分块(chunking)策略对比 |
| 17 - AI 智能体 | 增加多智能体编排 |
其中课程 09 的图像编辑/变体建议,仓库中已有对应素材:09-building-image-applications/python/ 目录下的aoai-app-variation.py与oai-app-variation.py正是图像变体生成的示例实现。
四、API 现代化:迁移至 Responses API
4.1 已完成的废弃模式迁移
路线图最重要的技术决策之一,是将课程示例全面从 Chat Completions API 迁移至 OpenAIResponses API(client.responses.create(...)→response.output_text)。Python 与 TypeScript 的聊天类示例均已迁移完毕:
| 旧模式 | 新模式 | 状态 |
|---|---|---|
openai.api_type = "azure"/AzureOpenAI()(聊天类) | OpenAI(base_url="<endpoint>/openai/v1/")(Responses API) | 已完成 |
openai.ChatCompletion.create()/client.chat.completions.create() | client.responses.create(input=...)→response.output_text | 已完成 |
@azure/openai的OpenAIClient.getChatCompletions()(TypeScript) | openai包的client.responses.create()→response.output_text | 已完成 |
df.append()(pandas) | pd.concat() | 已完成 |
仓库源码可以印证这一迁移事实,例如 06-text-generation-apps/python/aoai-app.py 中的调用方式:
response = client.responses.create(model=deployment, input=prompt, store=False)而 06-text-generation-apps/python/aoai-app-recipe.py 则展示了带生成参数与多轮对话的用法:
response = client.responses.create(model=deployment, input=prompt, max_output_tokens=600, temperature=0.1, store=False) response = client.responses.create(model=deployment, input=new_prompt, max_output_tokens=600, temperature=0, store=False)迁移边界说明:使用 Microsoft Foundry 模型且基于azure-ai-inference/@azure-rest/ai-inferenceSDK(client.complete())的示例仍保留 Model Inference API——该 API 不支持 Responses API。同时,AzureOpenAI()在仍然有效的场景(如 embeddings 嵌入与图像生成)中有意保留。从源码结构看,这一点在 shared/python/api_utils.py 的create_azure_openai_client中亦有体现:它通过 v1 端点(<endpoint>/openai/v1/)接入 Responses API,而非直接使用AzureOpenAI()的 api_version 机制。
4.2 建议演示的新 API 能力
路线图建议课程进一步覆盖以下新能力:
- 结构化输出(OpenAI)
- JSON 模式
- 使用严格定义 schema 的函数调用
- 视觉能力
- 使用 GPT-4o(vision)进行图像分析
- 多模态提示词
- Responses API 内置工具(取代旧版 Assistants API)
- 代码解释器
- 文件搜索
- 网页搜索与自定义工具
仓库在 .github/skills/azure-openai-to-responses/ 目录下还提供了配套的迁移技能包(含 .github/skills/azure-openai-to-responses/SKILL.md 与 .github/skills/azure-openai-to-responses/references/cheat-sheet.md),可作为迁移对照速查表。
五、基础设施改进:CI/CD 与安全扫描
5.1 CI/CD 质量门禁(已落地)
路线图 5.1 节给出的 CI/CD 基线示意被进一步落地为真实的 .github/workflows/code-quality.yml,其设计要点如下:
- 触发条件:仅对
main分支的 push 与 pull_request 生效,且路径过滤限定在**.py、**.ts、**.js、pyproject.toml、.eslintrc.json及工作流自身,避免无关提交空跑流水线; - Python Lint & Format(强制):对受维护的
shared/共享模块执行ruff check shared/与black --check shared/,不通过即失败; - 全仓库 Ruff 检查(advisory):
ruff check .带continue-on-error: true,仅提示问题但不阻塞构建——教学示例刻意保持简单,不设严格门槛; - Python 测试(强制):安装
pytest openai requests python-dotenv后执行pytest tests/,对共享工具模块做回归保障; - JS/TS Lint(advisory):安装 ESLint 8 及 TypeScript 解析插件后执行
npx eslint . --ext .js,.ts,同样continue-on-error: true。
路线图原始基线示意如下,读者可对照实际工作流理解「从提案到落地」的差异:
# .github/workflows/code-quality.yml name: Code Quality on: [push, pull_request] jobs: python-lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.10' - run: pip install ruff black mypy - run: ruff check . - run: black --check . js-lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm ci - run: npx eslint .5.2 安全扫描(已落地)
真实落地的 .github/workflows/security.yml 包含两个任务:
- CodeQL 分析:使用
github/codeql-action/init@v4与analyze@v4,通过 matrix 策略对javascript-typescript与python两种语言并行扫描;触发条件为 push、pull_request 以及每周一 06:00 UTC 的定时扫描(cron: '0 6 * * 1'),并对security-events授予写权限以写入扫描结果; - 依赖审查(Dependency Review):仅对 pull_request 生效,使用
actions/dependency-review-action@v5,当依赖变更存在风险时在 PR 中输出失败评论(comment-summary-in-pr: on-failure)。
工作流统一声明permissions: contents: read,遵循最小权限原则。路线图原始基线示例如下:
# .github/workflows/security.yml name: Security Scan on: [push, pull_request] jobs: codeql: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: github/codeql-action/init@v3 with: languages: javascript, python - uses: github/codeql-action/analyze@v3 dependency-review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/dependency-review-action@v4此外仓库还配置了依赖机器人 .github/dependabot.yml 以及 .github/workflows/validate-markdown.yml(Markdown 语法校验,对应路线图 5.1 中「当前 workflow 覆盖 Markdown 语法检查」的现状描述)。
六、开发者体验改进:开箱即用的 DevContainer
6.1 DevContainer 增强(已落地)
路线图规划的 DevContainer 已落实为 .devcontainer/devcontainer.json 与 .devcontainer/post-create.sh。容器方案的关键点:
- 基于
mcr.microsoft.com/devcontainers/universal通用基础镜像,该镜像已内置 Python 与 Node,无需额外添加 features; - 预装 Pylance、Black 格式化器、Ruff、ESLint、Prettier 与 Copilot 扩展;
- 开启「保存即格式化」(format-on-save),并与仓库的 Black/Prettier 配置对接;
- 安装开发工具链(
ruff、black、mypy、pytest),使开发者能够在本地复现 CI 中的 code-quality 工作流——这是工程一致性的重要设计。
路线图原始基线示例如下:
{ "name": "Generative AI for Beginners", "image": "mcr.microsoft.com/devcontainers/universal:2", "features": { "ghcr.io/devcontainers/features/python:1": { "version": "3.11" }, "ghcr.io/devcontainers/features/node:1": { "version": "20" } }, "customizations": { "vscode": { "extensions": [ "ms-python.python", "ms-python.vscode-pylance", "ms-toolsai.jupyter", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "github.copilot" ], "settings": { "python.formatting.provider": "black", "editor.formatOnSave": true } } }, "postCreateCommand": "pip install -e .[dev] && npm install" }6.2 交互式环境建议
路线图建议进一步考虑:
- 预填 API 密钥(通过环境变量注入)的 Jupyter 笔记本;
- 面向视觉学习者的 Gradio/Streamlit 演示示例;
- 用于知识评估的交互式测验。
七、多语言支持现状
7.1 当前语言技术覆盖
| 技术 | 覆盖课程 | 状态 |
|---|---|---|
| Python | 全部课程 | 完整 |
| TypeScript | 06-09, 11 | 部分 |
| JavaScript | 06-08, 11 | 部分 |
| .NET/C# | 部分课程 | 部分 |
从仓库目录结构看,Python 示例几乎贯穿每课(各python/目录),TypeScript 示例出现在 06-text-generation-apps/typescript/、07-building-chat-applications/typescript/、08-building-search-applications/typescript/、09-building-image-applications/typescript/ 与 11-integrating-with-function-calling/typescript/,JavaScript(GitHub Models 变体)则分布在 06-text-generation-apps/js-githubmodels/ 等目录,与路线图的覆盖矩阵一致。
7.2 建议新增语言
- Go:AI/ML 工具链生态增长中;
- Rust:面向性能敏感型应用;
- Java/Kotlin:面向企业级应用。
八、性能优化方向
8.1 代码级优化建议
- Async/Await 模式
- 增加批量处理的 async 示例;
- 演示并发 API 调用。
- 缓存策略
- 增加 embedding 缓存示例;
- 演示响应缓存模式。
- Token 优化
- 增加 tiktoken 使用示例;
- 演示提示词压缩技术。
其中 tiktoken 已作为正式依赖列入 pyproject.toml(tiktoken>=0.5.0),说明 Token 计数优化在课程示例中已有应用基础。
8.2 成本优化示例
路线图建议补充三类成本优化演示:
- 根据任务复杂度选择模型;
- 面向 Token 效率的提示工程;
- 批量操作使用批处理。
九、可访问性与国际化
9.1 翻译覆盖现状
英文源文档 docs/ENHANCED_FEATURES_ROADMAP.md 指出:课程的全部翻译均已完成,由 Azure Co-op Translator 自动生成并持续同步,产出并维护 50+ 语言版本:
| 维度 | 状态 |
|---|---|
| 翻译覆盖 | 完整——50+ 语言,覆盖全部课程 |
| 翻译方式 | 通过 Azure Co-op Translator 自动生成 |
| 与英文源同步 | 是——自动重新生成 |
从仓库结构可以直接验证这一点:translations/ 目录下每个语言子目录均包含 40 份 Markdown 文档与 28 份 Jupyter 笔记本(共 68 个文件),本路线图的克罗地亚语版本即位于 translations/hr/docs/;对应的本地化图片则统一存放在 translated_images/ 下的各语言子目录(每语言 145 张 webp 图片),可用语言全列表发布在仓库根 README.md 顶部。
9.2 可访问性改进建议
- 为所有图片补充 alt 文本;
- 确保代码示例具有正确的语法高亮;
- 为所有视频内容补充字幕脚本;
- 确保颜色对比度符合 WCAG 指南。
十、实施优先级:四阶段推进
路线图将全部改进项按风险与收益划分为四个阶段,其中带[x]的条目已在英文源文档中标注完成:
阶段一:紧急(第 1-2 周)
- 修复关键安全问题
- 添加代码质量配置
- 创建共享工具模块
- 编写安全指南文档(即 docs/SECURITY_GUIDELINES.md)
阶段二:短期(第 3-4 周)
- 更新废弃 API 模式(Chat Completions → Responses API,Python + TypeScript)
- 为所有 Python 文件补充类型注解(受维护的
shared/模块已完成,课程示例刻意保持简洁) - 添加代码质量 CI/CD 工作流(.github/workflows/code-quality.yml)
- 创建安全扫描工作流(.github/workflows/security.yml)
阶段三:中期(第 2-3 个月)
- 新增安全课程
- 新增生产部署课程
- 改进 DevContainer 设置(.devcontainer/devcontainer.json)
- 添加交互式演示
阶段四:长期(第 4 个月以上)
- 新增高级 RAG 课程
- 扩展语言覆盖
- 添加全面测试套件
- 创建认证项目
结语
这份路线图的价值在于它为课程演进提供了结构化、可验证、按风险分级的推进路径:安全层面从紧急修复走向限流、密钥轮换与内容安全的纵深防御;工程层面通过共享工具模块、代码质量配置与 CI/CD 门禁建立了可复制的质量基线;API 层面完成了从 Chat Completions 到 Responses API 的现代化迁移;教学层面规划了安全、生产部署与高级 RAG 三门新课程。
最值得开发者借鉴的是其「教学示例同样遵循生产级实践」的工程哲学——DevContainer 让本地开发与 CI 完全一致,共享模块将安全习惯机制化而非停留在文档说教。对于希望系统学习生成式 AI 应用工程化的读者,建议沿着本路线图的四阶段顺序,结合各课程目录(如 06-text-generation-apps/python/、08-building-search-applications/、15-rag-and-vector-databases/)中的实际示例逐一对照学习。
【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考