EdgeAI 初学者工作坊 构建生产级边缘 AI 应用的实践学习路径 通过 Microsoft Foundry Local,从首次聊天生成到多代理编排,掌握本地 AI 部署的技能,分为六个渐进式课程。 简介 欢迎参加 EdgeAI 初学者工作坊——这是一个实用的、动手操作的指南,帮助您构建完全在本地硬件上运行的智能应用程序。通过使用 Microsoft Foundry Local 和小型语言模型(SLM)进行逐步挑战的练习,本次工作坊将理论性的边缘 AI 概念转化为实际技能。 为什么选择这个工作坊?
构建生产级边缘 AI 应用的实践学习路径
通过 Microsoft Foundry Local,从首次聊天生成到多代理编排,掌握本地 AI 部署的技能,分为六个渐进式课程。
欢迎参加 EdgeAI 初学者工作坊——这是一个实用的、动手操作的指南,帮助您构建完全在本地硬件上运行的智能应用程序。通过使用 Microsoft Foundry Local 和小型语言模型(SLM)进行逐步挑战的练习,本次工作坊将理论性的边缘 AI 概念转化为实际技能。
边缘 AI 革命已经到来
全球组织正在从依赖云的 AI 转向边缘计算,主要有以下三个关键原因:
但边缘 AI 与众不同
在本地运行 AI 需要新的技能:
本次工作坊将传授这些技能
通过 6 个重点课程(总时长约 3 小时),您将从“Hello World”进阶到部署生产级的多代理系统——所有内容均在您的机器上本地运行。
完成本次工作坊后,您将能够:
部署和管理本地 AI 服务
构建 AI 驱动的应用
创建 RAG(检索增强生成)系统
优化模型性能
编排多代理系统
部署生产级解决方案
到工作坊结束时,您将完成以下内容:
| 课程 | 交付成果 | 展示的技能 |
|---|---|---|
| 1 | 流式聊天应用 | 服务设置、基本生成、流式用户体验 |
| 2 | 带评估的 RAG 系统 | 嵌入、语义搜索、质量指标 |
| 3 | 多模型基准测试套件 | 性能测量、模型比较 |
| 4 | SLM 与 LLM 比较器 | 权衡分析、优化策略 |
| 5 | 多代理编排器 | 代理设计、记忆管理、协调 |
| 6 | 智能路由系统 | 意图检测、模型选择、可扩展性 |
| 技能水平 | 课程 1-2 | 课程 3-4 | 课程 5-6 |
|---|---|---|---|
| 初学者 | ✅ 设置与基础 | ⚠️ 有挑战性 | ❌ 太高级 |
| 中级 | ✅ 快速回顾 | ✅ 核心学习 | ⚠️ 拉伸目标 |
| 高级 | ✅ 轻松完成 | ✅ 精炼 | ✅ 生产模式 |
完成工作坊后,您将能够:
✅ 构建隐私优先的应用
✅ 优化边缘环境
✅ 设计智能架构
✅ 领导边缘 AI 项目
| 课程 | 主题 | 重点 | 时长 |
|---|---|---|---|
| 1 | 开始使用 Foundry Local | 安装、验证、首次生成 | 30 分钟 |
| 2 | 使用 RAG 构建 AI 解决方案 | 提示工程、嵌入、评估 | 30 分钟 |
| 3 | 开源模型 | 模型发现、基准测试、选择 | 30 分钟 |
| 4 | 前沿模型 | SLM 与 LLM、优化、框架 | 30 分钟 |
| 5 | AI 驱动的代理 | 代理设计、编排、记忆 | 30 分钟 |
| 6 | 模型作为工具 | 路由、链式调用、扩展策略 | 30 分钟 |
系统要求:
软件要求:
Windows:
winget install Microsoft.FoundryLocal
macOS:
brew tap microsoft/foundrylocal brew install foundrylocal
验证安装:
foundry --version foundry service status
确保 Azure AI Foundry Local 在固定端口运行
# Set FoundryLocal to use port 58123 (default) foundry service set --port 58123 --show # Or use a different port foundry service set --port 58000 --show
验证是否正常工作:
# Check service status foundry service status # Test the endpoint curl http://127.0.0.1:58123/v1/models
查找可用模型
要查看 Foundry Local 实例中可用的模型,可以查询模型端点:
# cmd/bash/powershell foundry model list
使用 Web 端点
# Windows PowerShell powershell -Command "Invoke-RestMethod -Uri 'http://127.0.0.1:58123/v1/models' -Method Get" # Or using curl (if available) curl http://127.0.0.1:58123/v1/models
# Clone repository git clone https://github.com/microsoft/edgeai-for-beginners.git cd edgeai-for-beginners/Workshop # Create virtual environment python -m venv .venv # Activate virtual environment # Windows: .\.venv\Scripts\activate # macOS/Linux: source .venv/bin/activate # Install dependencies pip install -r requirements.txt
# Start Foundry Local and load a model foundry model run phi-4-mini # Run the chat bootstrap sample cd samples python -m session01.chat_bootstrap "What is edge AI?"
✅ 成功! 您应该看到关于边缘 AI 的流式响应。
逐步动手示例,展示每个概念:
| 课程 | 示例 | 描述 | 运行时间 |
|---|---|---|---|
| 1 | chat_bootstrap.py |
基础与流式聊天 | ~30秒 |
| 2 | rag_pipeline.py |
带嵌入的 RAG | ~45秒 |
| 2 | rag_eval_ragas.py |
RAG 质量评估 | ~60秒 |
| 3 | benchmark_oss_models.py |
多模型基准测试 | ~2-3分钟 |
| 4 | model_compare.py |
SLM 与 LLM 比较 | ~45秒 |
| 5 | agents_orchestrator.py |
多代理系统 | ~60秒 |
| 6 | models_router.py |
基于意图的路由 | ~45秒 |
| 6 | models_pipeline.py |
多步骤管道 | ~60秒 |
带有解释和可视化的交互式探索:
| 课程 | Notebook | 描述 | 难度 |
|---|---|---|---|
| 1 | session01_chat_bootstrap.ipynb |
聊天基础与流式 | ⭐ 初学者 |
| 2 | session02_rag_pipeline.ipynb |
构建 RAG 系统 | ⭐⭐ 中级 |
| 2 | session02_rag_eval_ragas.ipynb |
评估 RAG 质量 | ⭐⭐ 中级 |
| 3 | session03_benchmark_oss_models.ipynb |
模型基准测试 | ⭐⭐ 中级 |
| 4 | session04_model_compare.ipynb |
模型比较 | ⭐⭐ 中级 |
| 5 | session05_agents_orchestrator.ipynb |
代理编排 | ⭐⭐⭐ 高级 |
| 6 | session06_models_router.ipynb |
意图路由 | ⭐⭐⭐ 高级 |
| 6 | session06_models_pipeline.ipynb |
管道编排 | ⭐⭐⭐ 高级 |
全面的指南和参考:
| 文档 | 描述 | 使用场景 |
|---|---|---|
| QUICK_START.md | 快速设置指南 | 从零开始 |
| QUICK_REFERENCE.md | 命令与 API 速查表 | 需要快速答案时 |
| FOUNDRY_SDK_QUICKREF.md | SDK 模式与示例 | 编写代码时 |
| ENV_CONFIGURATION.md | 环境变量指南 | 配置示例时 |
| notebooks/TROUBLESHOOTING.md | 常见问题与解决方法 | 调试问题时 |
如果您正在遵循浓缩的 6 节课程工作坊格式,请使用这些专用指南(每个指南与更广泛的模块文档相辅相成):
| 工作坊课程 | 指南 | 核心重点 |
|---|---|---|
| 1 | Session01-GettingStartedFoundryLocal | 安装、验证、运行 phi & GPT-OSS-20B、加速 |
| 2 | Session02-BuildAISolutionsRAG | 提示工程、RAG 模式、CSV 与文档支持、迁移 |
| 3 | Session03-OpenSourceModels | Hugging Face 集成、基准测试、模型选择 |
| 4 | Session04-CuttingEdgeModels | SLM 与 LLM、WebGPU、Chainlit RAG、ONNX 加速 |
| 5 | Session05-AIPoweredAgents | 代理角色、记忆、工具、编排 |
| 6 | Session06-ModelsAsTools | 路由、链式处理、扩展到 Azure 的路径 |
每个课程文件包括:摘要、学习目标、30分钟演示流程、起始项目、验证检查表、故障排除以及对官方 Foundry Local Python SDK 的参考。
安装工作坊依赖项(Windows):
cd Workshop py -m venv .venv .\.venv\Scripts\activate pip install -r requirements.txt
macOS / Linux:
cd Workshop python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt
如果在不同的(Windows)机器或虚拟机上运行 Foundry Local 服务,而不是 macOS,请导出端点:
export FOUNDRY_LOCAL_ENDPOINT=http://<windows-host>:5273/v1
| 课程 | 脚本 | 描述 |
|---|---|---|
| 1 | samples/session01/chat_bootstrap.py |
启动服务 & 流式聊天 |
| 2 | samples/session02/rag_pipeline.py |
最小化 RAG(内存嵌入) |
samples/session02/rag_eval_ragas.py |
使用 ragas 指标进行 RAG 评估 | |
| 3 | samples/session03/benchmark_oss_models.py |
多模型延迟 & 吞吐量基准测试 |
| 4 | samples/session04/model_compare.py |
SLM 与 LLM 比较(延迟 & 样本输出) |
| 5 | samples/session05/agents_orchestrator.py |
双代理研究 → 编辑管道 |
| 6 | samples/session06/models_router.py |
基于意图的路由演示 |
samples/session06/models_pipeline.py |
多步骤计划/执行/优化链 |
| 变量 | 用途 | 示例 |
|---|---|---|
FOUNDRY_LOCAL_ALIAS |
基本样本的默认单模型别名 | phi-4-mini |
SLM_ALIAS / LLM_ALIAS |
明确的 SLM 与较大模型比较 | phi-4-mini / gpt-oss-20b |
BENCH_MODELS |
要基准测试的别名列表(逗号分隔) | qwen2.5-0.5b,mistral-7b |
BENCH_ROUNDS |
每个模型的基准测试重复次数 | 3 |
BENCH_PROMPT |
基准测试中使用的提示 | 简要解释检索增强生成。 |
EMBED_MODEL |
Sentence-transformers 嵌入模型 | sentence-transformers/all-MiniLM-L6-v2 |
RAG_QUESTION |
覆盖 RAG 管道的测试查询 | 为什么使用 RAG 进行本地推理? |
AGENT_QUESTION |
覆盖代理管道查询 | 解释为什么边缘 AI 对合规性很重要。 |
AGENT_MODEL_PRIMARY |
研究代理的模型别名 | phi-4-mini |
AGENT_MODEL_EDITOR |
编辑代理的模型别名(可以不同) | gpt-oss-20b |
SHOW_USAGE |
当设置为 1 时,打印每次完成的令牌使用情况 |
1 |
RETRY_ON_FAIL |
当设置为 1 时,在临时聊天错误时重试一次 |
1 |
RETRY_BACKOFF |
重试前等待的秒数 | 1.0 |
如果变量未设置,脚本会回退到合理的默认值。对于单模型演示,通常只需要设置 FOUNDRY_LOCAL_ALIAS。
所有样本现在共享一个辅助模块 samples/workshop_utils.py,提供:
FoundryLocalManager + OpenAI 客户端创建chat_once() 辅助函数SHOW_USAGE=1 启用)这减少了重复,并突出了高效本地模型编排的最佳实践。
| 主题 | 增强功能 | 课程 | 环境变量 / 开关 |
|---|---|---|---|
| 确定性 | 固定温度 + 稳定的提示集 | 1–6 | 设置 temperature=0, top_p=1 |
| 令牌使用可见性 | 一致的成本/效率教学 | 1–6 | SHOW_USAGE=1 |
| 流式首令牌 | 感知延迟指标 | 1,3,4,6 | BENCH_STREAM=1(基准测试) |
| 重试弹性 | 处理临时冷启动 | 全部 | RETRY_ON_FAIL=1 + RETRY_BACKOFF |
| 多模型代理 | 异构角色专门化 | 5 | AGENT_MODEL_PRIMARY, AGENT_MODEL_EDITOR |
| 自适应路由 | 意图 + 成本启发式 | 6 | 使用升级逻辑扩展路由器 |
| 向量记忆 | 长期语义回忆 | 2,5,6 | 集成 FAISS/Chroma 嵌入索引 |
| 跟踪导出 | 审计 & 评估 | 2,5,6 | 每步追加 JSON 行 |
| 质量标准 | 定性跟踪 | 3–6 | 次级评分提示 |
| 冒烟测试 | 快速工作坊前验证 | 全部 | python Workshop/tests/smoke.py |
set FOUNDRY_LOCAL_ALIAS=phi-4-mini set SHOW_USAGE=1 python Workshop\tests\smoke.py
期望在重复的相同输入中保持稳定的令牌计数。
使用 rag_eval_ragas.py 计算答案的相关性、真实性和上下文精度,基于一个小型合成数据集:
cd Workshop/samples python -m session02.rag_eval_ragas
通过提供更大的 JSONL 问题、上下文和真实值扩展,然后转换为 Hugging Face Dataset。
工作坊仅使用当前记录的 / 稳定的 Foundry Local CLI 命令。
| 类别 | 命令 | 用途 |
|---|---|---|
| 核心 | foundry --version |
显示已安装版本 |
| 服务 | foundry service start |
启动本地服务(如果未自动启动) |
| 服务 | foundry service status |
显示服务状态 |
| 模型 | foundry model list |
列出目录 / 可用模型 |
| 模型 | foundry model download <alias> |
下载模型权重到缓存 |
| 模型 | foundry model run <alias> |
在本地启动(加载)模型;结合 --prompt 进行一次性运行 |
| 模型 | foundry model unload <alias> / foundry model stop <alias> |
从内存中卸载模型(如果支持) |
| 缓存 | foundry cache list |
列出已缓存(下载)的模型 |
替代已弃用的 model chat 子命令,使用:
foundry model run <alias> --prompt "Your question here"
这将执行单次提示/响应循环,然后退出。
| 已弃用 / 未记录 | 替代 / 指导 |
|---|---|
foundry model chat <model> "..." |
foundry model run <model> --prompt "..." |
foundry model list --running |
使用普通的 foundry model list + 最近活动 / 日志 |
foundry model list --cached |
foundry cache list |
foundry model stats <model> |
使用基准测试 Python 脚本 + 操作系统工具(任务管理器 / nvidia-smi) |
foundry model benchmark ... |
samples/session03/benchmark_oss_models.py |
samples/session03/benchmark_oss_models.pyBENCH_STREAM=1nvidia-smi)。随着新的 CLI 遥测命令在上游稳定,它们可以通过最小的编辑集成到课程 markdown 文件中。
一个自动化代码检查工具可以防止在 markdown 文件的代码块中重新引入已弃用的 CLI 模式:
脚本:Workshop/scripts/lint_markdown_cli.py
代码块中的已弃用模式将被阻止。
推荐替代:
| 已弃用 | 替代 |
|---|---|
foundry model chat <a> "..." |
foundry model run <a> --prompt "..." |
model list --running |
model list |
model list --cached |
cache list |
model stats |
基准测试脚本 + 系统工具 |
model benchmark |
samples/session03/benchmark_oss_models.py |
model list --available |
model list |
本地运行:
python Workshop\scripts\lint_markdown_cli.py --verbose
GitHub Action:.github/workflows/markdown-cli-lint.yml 在每次推送 & PR 时运行。
可选的 pre-commit 钩子:
echo "python Workshop/scripts/lint_markdown_cli.py" > .git/hooks/pre-commit chmod +x .git/hooks/pre-commit
| 任务 | CLI 单行命令 | SDK(Python)等效 | 备注 |
|---|---|---|---|
| 运行一次模型(提示) | foundry model run phi-4-mini --prompt "Hello" |
manager=FoundryLocalManager("phi-4-mini"); client=OpenAI(base_url=manager.endpoint, api_key=manager.api_key or "not-needed"); client.chat.completions.create(model=manager.get_model_info("phi-4-mini").id, messages=[{"role":"user","content":"Hello"}]) |
SDK 自动启动服务 & 缓存 |
| 下载(缓存)模型 | foundry model download qwen2.5-0.5b |
FoundryLocalManager("qwen2.5-0.5b") # 触发下载/加载 |
如果别名映射到多个版本,管理器会选择最佳版本 |
| 列出目录 | foundry model list |
# 使用管理器处理每个别名或维护已知列表 |
CLI 汇总;SDK 当前为每个别名实例化 |
| 列出已缓存模型 | foundry cache list |
manager.list_cached_models() |
在管理器初始化后(任何别名) |
| 获取端点 URL | (隐式) | manager.endpoint |
用于创建 OpenAI 兼容客户端 |
| 预热模型 | foundry model run <alias> 然后首次提示 |
chat_once(alias, messages=[...])(工具) |
工具处理初始冷启动延迟预热 |
| 测量延迟 | python -m session03.benchmark_oss_models |
import benchmark_oss_models(或新的导出脚本) |
优先使用脚本以获得一致的指标 |
| 停止 / 卸载模型 | foundry model unload <alias> |
(未暴露 – 重启服务 / 进程) | 通常不需要用于工作坊流程 |
| 检索令牌使用情况 | (查看输出) | resp.usage.total_tokens |
如果后端返回使用情况对象则提供 |
使用脚本 Workshop/scripts/export_benchmark_markdown.py 运行最新的基准测试(与 samples/session03/benchmark_oss_models.py 逻辑相同),并生成一个适合 GitHub 的 Markdown 表格以及原始 JSON。
python Workshop\scripts\export_benchmark_markdown.py --models "qwen2.5-0.5b,mistral-7b" --prompt "Explain retrieval augmented generation briefly." --rounds 3 --output benchmark_report.md
生成的文件:
| 文件 | 内容 |
|---|---|
benchmark_report.md |
Markdown 表格 + 解释提示 |
benchmark_report.json |
原始指标数组(用于差异 / 趋势跟踪) |
在环境中设置 BENCH_STREAM=1 以包含首令牌延迟(如果支持)。
免责声明:
本文档使用AI翻译服务Co-op Translator进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。