跳至内容

实验 07 — 总结

目标: 整合您构建的成果、整理电脑环境,并选择合理的下一步。

时间: 约 10 分钟

本课程涵盖的内容

实验 能力
01 已构建应用,并完成 SDK 示例项目的基本验证
02 已跟踪流式聊天轮次,并在运行时探索模型
03 已将静态内容替换为 CopilotTool.DefineTool 工具
04 已观察会话事件生命周期与完成信号
05 已跨处理程序重新启动持久保存并继续 SDK 会话
06 已连接 MCP 服务器,通过外部工具扩展代理程序

选择性的 extra-* 实验现在位于主要 SDK 路径之外。若您想练习 CLI 自订代理程序、治理钩子或 ASP.NET/EF Core 扩充,可使用这些课程;但 SDK 学习顺序并不要求完成它们。

值得保留的重点

  1. 嵌入整合胜过单纯对话。 SDK 会将代理程序作为应用程序的组件纳入您的验证、记录与部署管线管理。

  2. 探索能力;不要将其硬编码。 模型来自 ListModelsAsync()。此演示曾内置六个模型标识符,后来悄悄退化到只剩一个可用选项。

  3. 工具优于将大量内容塞入提示中。 CopilotTool.DefineTool 可以让模型提取所需的内容,而无需在每个轮次预先加载各种猜测,无论是否有用都浪费令牌。

  4. 事件流比您想象的更丰富。 测试中观察到的单轮次打印了 33 个事件。大多数应用程序只会处理四个,这并没有问题;但在舍弃其他事件前,应先了解可以获取哪些事件。

  5. 会话使代理具备可移植性。 SessionId 加上 ResumeSessionAsync 处理程序重新启动后可以保留。演示应用程序的浏览器 localStorage 历史记录虽然方便,却无法跨设备移动。

  6. MCP 可扩展触达范围。 MCP 通过标准通信协议为代理提供非自定义的工具,无需将每项整合都编写到应用程序中。

  7. 请在您的环境中验证权限控制。 OnPermissionRequest 虽然存在,但测试时从未调用,因为主机 CLI 已预先授予批准。即使处理常式拒绝所有要求,命令仍会通过。将其作为控制措施前,请先证明它会在您的设置中触发。请重新参阅 实验 03 获取工具权限示例。

清理环境

停止服务(Ctrl+C 于各终端中),若服务已中断连接,则执行:

lsof -ti:5050        # prints a PID if still listening
kill <PID>
lsof -ti:5051
kill <PID>

删除本地生成的文件:

rm -f src/AgentOrchestrator/AgentHQDemo.Api/retail.db*   # SQLite DB + WAL files
rm -f logs/*                                             # sample and audit logs

⚠️ 如果 macOS 上仍有文件处于打开状态,删除命令可能看似成功,但服务随后会再次创建这些文件。请先停止服务,再删除生成的文件。

git status --short

预期结果:没有输出,或只显示您有意修改的实验文件。若要放弃本地实现并恢复为干净的签出状态:

git status
git checkout -- .        # discards uncommitted changes — irreversible

检查您的理解程度

  1. 为什么 session.On(...) 会因为未提供类型参数而无法编译?
  2. 为什么 ResumeSessionAsync 需要第二个参数?
  3. 为什么 [Description] 工具参数上的属性很重要?
  4. 哪个信号表示轮次已完成?
答案
  1. CS0411 表示无法推断类型参数。SDK v1.x 要求使用 On<SessionEvent>(...);此外,v1.0.0 中的命名空间也从 GitHub.Copilot.SDK 移至 GitHub.Copilot
  2. 恢复会话时,除了会话 ID 之外还需要配置。请传入 ResumeSessionConfig,而不是 SessionConfig;省略该参数会生成 CS7036
  3. 这些描述是模型了解工具 API 的唯一文档。描述不清时,模型只能猜测参数的含义以及使用时机。
  4. SessionIdleEvent 表示当前轮次已经完成。SessionErrorEvent 还必须设置异常路径,否则调用方可能会无限期等待。

后续方向

方向 从这里开始
重新运行特定的 SDK 示例 SdkLabs
深入理解示例代码 演示
参考故障排除与架构内容 深入解析
构建您自己的代理程序应用 Copilot SDK 仓库
使用外部工具扩展 Copilot Model Context Protocol

可以进一步扩展的想法

  • 将示例升级为应用程序功能。 把一个 SdkLabs 命令改造为真正的 API 端点,并添加面向用户的进度信息。
  • 在服务器端持久保存对话。 使用 SQLite 支持的会话元数据替换浏览器 localStorage,使对话记录能够跨设备保留。
  • 添加第二个 MCP 服务器。 不要将凭据写入源代码;请记录所需的环境变量,并验证工具会在运行时出现。
  • 加强可观测性。 记录当前忽略的事件类型,以便生产环境调试保留足够的内容,同时避免存储完整提示。

✅ 最终检查点

  • [x] 已完成全部七个 SDK 实验
  • [x] 服务已停止,且本地生成的文件已清理
  • [x] git status --short 是干净状态,或只保留刻意的实验编辑
  • [x] 您能回答上述四个问题