-
使用 Instruments 调试和分析智能体 App 体验
探索 Xcode 中增强的 Foundation Models Instrument,以便检查相关行为表现,并优化智能体流程的性能。了解如何在涉及多个 LanguageModelSession 和配置的高级用例中,检查提示词、分析延迟并追踪控制流。
章节
- 0:00 - Introduction
- 1:57 - LLM app development mindset
- 3:59 - Inspect and diagnose an agentic experience
- 5:02 - Recording a trace with Instruments
- 6:04 - Navigating the Instruments UI
- 12:07 - Performance metrics
- 13:04 - Next steps
资源
相关视频
WWDC26
-
搜索此视频…
你好 我是Erik 一名AI工具工程师 在本节中 我将向你展示 如何使用Instruments调试 并开发基于 Foundation Models框架构建的功能
Foundation Models API 让你的App直接访问 设备端 和基于服务器的生成式AI 借助这些API 你可以构建 能够理解自然语言的功能 生成内容 并响应 用户正在进行的操作
能带来最佳体验的功能 并非一成不变 它们会根据上下文进行自适应调整 这正是Foundation Models API 的设计初衷 DynamicInstructions允许你 精确指定模型可以访问 哪些指令和工具 它会在每次请求前重新评估 确保模型始终拥有 当前任务所需的正确上下文 这种灵活性正是 这些功能响应迅速的原因 也使它们的调试更具挑战性 使用大型语言模型 即LLM进行构建 与传统开发方式不同 传统代码具有可预测性 LLM是非确定性的—— 相同的输入可以 产生不同的输出 当功能丢失上下文 或响应过慢时 追溯问题根源 并不直接 好的工具能带来显著差异 完成本节内容后 你将学会如何使用 Instruments来识别 并解决这些问题 从而自信地发布 快速、可靠的体验 首先 我们将比较 传统与LLM App 开发的概念 让我们建立正确的思维框架 然后 我们将使用Instruments 检查并调试一个智能体体验 这是我在Craft App中 正在开发的功能 在开始之前 我们建议你查看 "Foundation Models框架的新功能" 以及"使用Foundation Models框架 构建智能体App体验" 以深入了解最新功能 使用LLM构建App 会带来三个挑战 这些挑战在传统 软件开发中并不存在
第一个是概率性输出 给传统函数 相同的输入两次 你会得到相同的输出 LLM的工作方式并非如此 相同的提示可以产生 两种完全不同的响应 这意味着标准的 单元测试方式会失效 你无法断言输出 与硬编码字符串匹配 你必须评估响应的 质量和意图 第二个是 模型间通信 强大的功能通常依赖 多个模型协同工作 例如 在一个食谱App中 一个模型可能识别 照片中的食材 而第二个模型则根据 该结果生成食谱 使数据在这些模型之间 可靠流转 并在出现问题时 优雅地恢复 这才是真正复杂性所在 第三个是可观测性 当多模型管道 出现问题时 很难确定 问题出在哪里 你需要了解每个步骤的详情: 模型收到了什么 它做了什么决定 以及原因 这正是本节的主题 从核心来说 一个LLM应用 做三件事: 用户发送提示 模型对其进行推理 用户收到响应 简单、快速 适用于许多功能 (摘要工具 写作助手 问答界面) 正是你所需要的 许多实用功能需要 的不仅仅是文本生成 有时模型需要 它没有的信息: 当前时间 数据库记录 或搜索结果 这正是工具调用的用武之地 循环的工作方式如下: 用户发送提示 模型对其推理 并调用工具 工具执行操作 模型获取结果 并生成最终响应 这可以再次触发循环 每个额外步骤都会增加延迟 每个步骤都是新的故障点 理解这个循环 是理解一切的基础 Foundation Models Instrument向你展示的内容 现在我已经介绍了 LLM App开发所需的思维方式 我将使用Instruments调试 并检查头脑风暴功能 这是我为Craft App开发的功能 我正在开发一个手工创作伴侣App 你可以在其中记录 手工项目的日志
该App可以记录手工进度 提问关于特定手工的问题 并生成教程 最近 我有了一个 交互式头脑风暴功能的想法 为用户提供手工创作的建议 用户可以与模型对话 来精炼其想法 当他们准备好确定方向时 App会为该手工 生成详细教程 此功能使用 两组指令: 一组用于头脑风暴想法 另一组 用于教程生成 头脑风暴指令 包含两个工具: GenerateCraftIdeaTool 和SwitchToTutorialModeTool 两组指令都使用 Private Cloud Compute上的服务器模型 一个用于快速想法生成 另一个用于生成 更详细的教程 让我们通过Instruments 来实际操作一下
项目已经在Xcode中打开 开始性能分析 我将打开 Product菜单并选择Profile Xcode将在本地构建App 在模板选择器中 我将选择Foundation Models模板 并点击Record 此Instrument会捕获 来自设备的提示和响应数据 其中可能包含敏感信息 日志记录在生产环境中关闭 但在跟踪期间会开启 请将跟踪文件保存在安全的地方 选择"Record Anyway"以开始
App已启动 让我们来试一试 我们一打开这里 模型就建议了几个项目创意: 毛线绒球 布艺小袋 和纸蝴蝶 纸蝴蝶听起来很有趣—— 就选这个吧
嗯 这不对 模型本应开始一个教程 但它却提供了更多创意 有些地方不对劲 让我们结束录制并深入研究 跟踪数据 找出发生了什么 Instruments一次展示很多内容 让我们一起逐步了解 顶部区域是轨道 轨道在时间轴上显示活动 每个轨道可以包含多个通道 包含显示级别或区域的图表 时间轴下方是详细视图 它显示当前正在检查的 范围的摘要信息
如果你点击时间轴中的条形 或详细视图中的行 检查器会在右侧打开 让你更详细地查看 所选内容
Foundation Models Instrument 在时间轴中有6个通道 这些通道让你快速了解 会话结构和延迟 在时间轴旁边 有一个树形详细视图 在那里你可以真正深入了解 模型的推理链
Instructions通道 显示给定一组指令和工具 活跃的时间 一组指令可以覆盖多个请求 查看此通道 很明显整个会话期间 只有一组指令处于活跃状态 但该功能本应使用两组指令 说明切换过程中 出现了问题
Model Inference通道 有两种类型的条形: 黄色和橙色 黄色条形表示系统花费的时间 用于处理输入提示 橙色条形表示 生成响应所花费的时间
时间轴给你一个快速概览 但真正的强大之处在于树形视图 它获取这次录制期间 记录的所有内容 并将其整理成层级结构: 会话、请求、模型推理、 指令、提示和响应 让我们用它来追踪 为何指令集从未改变
会话1有两个请求 第一个请求由 以下提示触发 "请生成3个手工创意"
该请求由两次模型推理 和几次工具调用组成 每次模型推理 都应该有指令 提示 以及响应或错误 点击树中的任意节点 可在检查器中查看它
模型推理详情显示了 指令摘要 构成此次调用的 提示和响应
向下滚动可以找到 时长可视化和Token用量指标 我们稍后会回到这些 当我们谈到针对 可靠性和性能进行优化时
回到这个失败问题 时间轴已经告诉我们 指令集从未改变 在这个模型推理节点的 检查器中 我可以看到 绑定到这些指令的提示 让我们选择Instructions节点 来查看它们的设置方式
检查器显示此指令 只关联了一个工具 提示引用了 switchToTutorialMode工具
但该工具实际上并未 在此指令中配置
没有它 App无法从 头脑风暴模式切换到教程模式 导致用户陷入循环
查看树中的后续节点 这是一个静默失败 模型持续接受输入 并进行工具调用 但从未抛出错误 没有任何明确的信号 表明出了问题 这使它成为一个难以发现的Bug 现在根本原因已经明确 我将进入Xcode来修复它 基于我在Instruments中发现的内容 我将查看 BrainstormDynamicInstructions 的定义 在Instructions块中 SwitchToTutorialMode工具 在提示中被提及 但工具集中只列出了 GenerateCraftIdeasTool
所以让我们添加它
现在 我将重新编译 并用Instruments重新运行 确认修复实际有效
回到App中 我将 前往Ideas标签 与之前一样 模型建议了一些新的手工创意 我来选择…… 项链
就是这样 UI已切换到教程模式 模型完成了切换 并为这个手工 生成了完整的教程 现在让我们跳回Instruments 来看看 这次新的录制 确保一切运行高效
Instructions通道现在显示 两组不同的指令 在此体验中处于活跃状态
第一组是头脑风暴指令 第二组是 教程生成指令
这与我们之前介绍的 头脑风暴体验设计完全吻合 让我们深入树形视图 了解该切换是如何实际发生的
第一组指令现在 同时包含generateCraftIdea 和switchToTutorialMode工具 这确认了模型拥有 完成切换所需的一切 修复成功了 指令变更发生在 请求2的第二次模型推理之后
该推理导致对 switchToTutorialMode的工具调用 将所选手工作为参数传递
在后续请求中 指令正确切换到 教程生成器 所选手工作为上下文 一并传递
信息栏是快速标记 值得仔细查看的节点的好方法: 包括错误、较长的持续时间 和大量的Token数 请求1的第一次模型推理 比我预期的花费时间稍长 让我们来看看
指标和持续时间部分 详细列出了此次推理的Token用量 这些数字是你了解 和提升体验效率的起点
你可以使用三个关键指标 来衡量性能 首Token时间衡量模型 在收到提示后 开始生成响应所需的时间 首Token时间过长意味着 用户面对空白屏幕等待 缩短提示可以减少这个时间 每秒Token数衡量 响应的整体生成速度 用它来对比不同提示配置的性能 并在更改后发现性能回退
总延迟是从 发送请求开始 到收到最终响应的完整时间 这是用户感受 最直接的数字 要降低感知总延迟 可以使用流式传输 更早呈现部分结果
运行跟踪 是优化的起点 这些指标准确告诉你 时间和资源流向哪里 并指引你找到正确的修复方法 使用模型推理节点 清晰了解你的Token用量 在本节中 我向你展示了 如何使用Instruments 调试使用Foundation Models框架 开发的智能体体验 一旦解决了Bug 接下来要探索的是评估 观看"了解Evaluations框架" 了解如何衡量 并提升提示的质量 通过使用结构化评估
要开始使用改进后的 Foundation Models Instrument 请安装Xcode 27 然后 在你想要 运行和分析App的设备上 更新到最新的OS版本 值得注意的是 此Instrument支持 你在Foundation Models框架中使用的 任何模型 Foundation Models API 是你的起点 实验、构建 看看什么是可能的 当某些功能未按预期工作时 Foundation Models Instrument 可以帮助你调试 让你直接了解 框架在上下文中的行为 深入探索相关节关于 智能体App体验 和Evaluations框架的内容 并探索完整文档 释放框架的全部能力 感谢你的参与! 我们期待看到你开发 并调试你的智能体体验 借助改进后的 Foundation Models Instrument
-
-
- 0:00 - Introduction
Overview of how the Foundation Models Instruments template helps debug and profile agentic app experiences built with the Foundation Models framework, including Dynamic Instructions and tool call loops.
- 1:57 - LLM app development mindset
The three challenges unique to LLM app development: probabilistic output (non-deterministic responses that break standard unit testing), model-to-model communication (coordinating data flow across multiple models), and observability (knowing where things went wrong in a multi-model pipeline).
- 3:59 - Inspect and diagnose an agentic experience
Introduction to the craft companion demo app — a journaling app with an interactive brainstorming feature that uses two sets of Dynamic Instructions: one for idea generation and one for tutorial creation, both backed by the server model on Private Cloud Compute.
- 5:02 - Recording a trace with Instruments
How to start profiling with the Foundation Models template in Instruments — selecting the template, recording a session, and an important note about sensitive prompt data in trace files.
- 6:04 - Navigating the Instruments UI
A walkthrough of the Foundation Models instrument layout: tracks and lanes on the timeline (including the instructions lane and model inference lane with yellow/orange bars), the detail view, and the inspector — and how to use the tree view to inspect sessions, requests, inferences, and tool calls.
- 12:07 - Performance metrics
How to measure and optimize LLM experience performance using three key metrics: time-to-first-token (reduce by shortening prompts), tokens-per-second (benchmark across configurations), and total latency (reduce perceived wait with streaming).
- 13:04 - Next steps
Summary of what was covered, requirements to get started (Xcode 27 and latest OS), and pointers to related sessions on the Evaluations Framework and Agentic App Experiences.