实验 07 — 总结¶
目标: 整合您构建的成果、整理电脑环境,并选择合理的下一步。
时间: 约 10 分钟
本课程涵盖的内容¶
| 实验 | 能力 |
|---|---|
| 01 | 已构建应用,并完成 SDK 示例项目的基本验证 |
| 02 | 已跟踪流式聊天轮次,并在运行时探索模型 |
| 03 | 已将静态内容替换为 CopilotTool.DefineTool 工具 |
| 04 | 已观察会话事件生命周期与完成信号 |
| 05 | 已跨处理程序重新启动持久保存并继续 SDK 会话 |
| 06 | 已连接 MCP 服务器,通过外部工具扩展代理程序 |
选择性的 extra-* 实验现在位于主要 SDK 路径之外。若您想练习 CLI 自订代理程序、治理钩子或 ASP.NET/EF Core 扩充,可使用这些课程;但 SDK 学习顺序并不要求完成它们。
值得保留的重点¶
-
嵌入整合胜过单纯对话。 SDK 会将代理程序作为应用程序的组件纳入您的验证、记录与部署管线管理。
-
探索能力;不要将其硬编码。 模型来自
ListModelsAsync()。此演示曾内置六个模型标识符,后来悄悄退化到只剩一个可用选项。 -
工具优于将大量内容塞入提示中。
CopilotTool.DefineTool可以让模型提取所需的内容,而无需在每个轮次预先加载各种猜测,无论是否有用都浪费令牌。 -
事件流比您想象的更丰富。 测试中观察到的单轮次打印了 33 个事件。大多数应用程序只会处理四个,这并没有问题;但在舍弃其他事件前,应先了解可以获取哪些事件。
-
会话使代理具备可移植性。
SessionId加上ResumeSessionAsync处理程序重新启动后可以保留。演示应用程序的浏览器 localStorage 历史记录虽然方便,却无法跨设备移动。 -
MCP 可扩展触达范围。 MCP 通过标准通信协议为代理提供非自定义的工具,无需将每项整合都编写到应用程序中。
-
请在您的环境中验证权限控制。
OnPermissionRequest虽然存在,但测试时从未调用,因为主机 CLI 已预先授予批准。即使处理常式拒绝所有要求,命令仍会通过。将其作为控制措施前,请先证明它会在您的设置中触发。请重新参阅 实验 03 获取工具权限示例。
清理环境¶
停止服务(Ctrl+C 于各终端中),若服务已中断连接,则执行:
删除本地生成的文件:
rm -f src/AgentOrchestrator/AgentHQDemo.Api/retail.db* # SQLite DB + WAL files
rm -f logs/* # sample and audit logs
⚠️ 如果 macOS 上仍有文件处于打开状态,删除命令可能看似成功,但服务随后会再次创建这些文件。请先停止服务,再删除生成的文件。
预期结果:没有输出,或只显示您有意修改的实验文件。若要放弃本地实现并恢复为干净的签出状态:
检查您的理解程度¶
- 为什么
session.On(...)会因为未提供类型参数而无法编译? - 为什么
ResumeSessionAsync需要第二个参数? - 为什么
[Description]工具参数上的属性很重要? - 哪个信号表示轮次已完成?
答案
CS0411表示无法推断类型参数。SDK v1.x 要求使用On<SessionEvent>(...);此外,v1.0.0 中的命名空间也从GitHub.Copilot.SDK移至GitHub.Copilot。- 恢复会话时,除了会话 ID 之外还需要配置。请传入
ResumeSessionConfig,而不是SessionConfig;省略该参数会生成CS7036。 - 这些描述是模型了解工具 API 的唯一文档。描述不清时,模型只能猜测参数的含义以及使用时机。
SessionIdleEvent表示当前轮次已经完成。SessionErrorEvent还必须设置异常路径,否则调用方可能会无限期等待。
后续方向¶
| 方向 | 从这里开始 |
|---|---|
| 重新运行特定的 SDK 示例 | SdkLabs |
| 深入理解示例代码 | 演示 |
| 参考故障排除与架构内容 | 深入解析 |
| 构建您自己的代理程序应用 | Copilot SDK 仓库 |
| 使用外部工具扩展 Copilot | Model Context Protocol |
可以进一步扩展的想法¶
- 将示例升级为应用程序功能。 把一个
SdkLabs命令改造为真正的 API 端点,并添加面向用户的进度信息。 - 在服务器端持久保存对话。 使用 SQLite 支持的会话元数据替换浏览器 localStorage,使对话记录能够跨设备保留。
- 添加第二个 MCP 服务器。 不要将凭据写入源代码;请记录所需的环境变量,并验证工具会在运行时出现。
- 加强可观测性。 记录当前忽略的事件类型,以便生产环境调试保留足够的内容,同时避免存储完整提示。
✅ 最终检查点¶
- [x] 已完成全部七个 SDK 实验
- [x] 服务已停止,且本地生成的文件已清理
- [x]
git status --short是干净状态,或只保留刻意的实验编辑 - [x] 您能回答上述四个问题