實作課程 07 — 總結¶
目標: 將你建置的內容整合起來,整理你的機器,選擇一個合理的下一步。
時間: 10分鐘
你覆蓋了什麼¶
| 實作課程 | 能力 |
|---|---|
| 01 | 安裝相依套件,執行FastAPI應用程式,並進行基本驗證SDK範例 |
| 02 | 跟蹤串流聊天回合並發現模型在執行時 |
| 03 | 替換靜態上下文為Python @define_tool 工具 |
| 04 | 觀察工作階段事件生命週期和完成訊號 |
| 05 | 永續保存並恢復SDK工作階段跨程序重啟 |
| 06 | 將MCP伺服器連線到擴充套件代理以外部工具 |
可選 extra-* 現在,實驗位於主SDK路徑之外。使用它們時
當您需要CLI自訂代理程式、治理掛鉤或FastAPI/SQLModel擴充套件
實踐,但它們不是SDK序列所需的。
值得保留的想法¶
-
嵌入勝過聊天。 SDK將代理變成您的應用程式的一部分,受您的身份驗證、記錄記錄和部署管道的影響 在Python中,這始於
CopilotClient(),通常為async with CopilotClient() as client:; 如果您手動建置它,呼叫await client.start()在建立工作階段之前 -
發現能力;不要硬編碼它們。 模型來自
await client.list_models(),因此讀者不需要所有模型的預覽模型。 -
工作階段建立是關鍵字驅動的。 您看到的呼叫形狀是
await client.create_session(model=..., streaming=..., system_message=..., tools=..., mcp_servers=..., on_permission_request=...). 這些關鍵字引數是聊天、工具、MCP和權限的設定表面。 -
工具勝過上下文填充。
@define_tool讓模型在需要時才獲取所需的內容,而不是在每次輪次前都預載入猜測,即使這些猜測是無效的。Python自訂工具 需要on_permission_request,否則呼叫會被拒絕;.NET 範例不需要此類處理程式。 -
事件僅採用推送方式。
session.on(handler)會註冊回呼並傳回一個用於取消訂閱的可呼叫物件。由於沒有非同步迭代器,因此範例共享IdleWaiter在sdk_labs/_common.py以等待空閒或錯誤狀態。 -
Python 使用單一的事件資料類別。 .NET 會對事件子類進行模式比對;Python 則提供一個
SessionEvent,並根據evt.type, aSessionEventType列舉進行分支處理。因此,範例會檢查evt.type is SessionEventType.SESSION_IDLE. -
傳送訊息和等待完成是兩個獨立的選擇。 使用
await session.send(prompt)以便自行觀察事件。僅需讓 SDK 等待完成時,請使用await session.send_and_wait(prompt, timeout=...)。 -
工作階段讓代理程式具備可遷移性。
resume_session加上get_session_metadata可在程序重啟後繼續存在。示範應用基於瀏覽器 localStorage 的歷史記錄雖然方便,卻無法跨裝置遷移。 -
MCP 擴充套件了代理程式的能力範圍。 Python 使用普通字典設定 MCP 伺服器,例如
mcp_servers={"microsoft.docs.mcp": {"type": "http", ...}},無需將每項整合都固化到應用中。與 .NET 不同,Python 不需要GHCP001來抑制權限 API。
清理¶
停止服務(Ctrl+C 在終端中按下),如果服務以分離模式執行,則執行:
刪除本地產物:
rm -f src/AgentOrchestrator-python/retail.db* # SQLite DB + WAL files
rm -f logs/* # if you ran the shared CLI extras
retail.db 首次執行時,它會在Python工作目錄中建立,並且會被git忽略。⚠️ 如果在macOS上仍然開啟的檔案,移除命令可能會成功,但服務會重新建立它。首先停止服務,然後移除 artefact。
預期:沒有輸出,或者只是你故意編輯的lab檔案。如果你想丟棄本地的lab工作並傳回到一個乾淨的檢查點,請參閱:
檢查你的理解¶
- 為什麼Python的track使用
async with CopilotClient()? - 為什麼樣品需要
IdleWaiter而不是async for evt in session? - 如果一個Python自訂工具被註冊了,但沒有使用上下文管理器,那麼應該呼叫`await client.start()`和`await client.stop()`自己。
on_permission_request? - 在Python中,你檢查的事件欄位是什麼?以及什麼SDK呼叫可以證明在重啟後可以恢復工作階段?
答案
1. 它可靠地啟動和停止使用者端。如果你不使用上下文管理器,呼叫`await client.start()`和`await client.stop()`自己。下一步去哪裡¶
| 方向 | 從這裡開始 |
|---|---|
| 重新執行一個聚焦的SDK範例 | sdk_labs |
| 深入理解深度程式碼 | 示範 |
| 參考疑難排解和架構 | 延伸主題 |
| 建置自己的代理應用程式 | Copilot SDK存放庫 |
| 將外部工具擴充套件Copilot | Model Context Protocol |
進一步的想法¶
- 將一個樣品推廣到應用中。 移動一個
sdk_labs命令新增到一個真實的API 端點,並新增使用者可見的進度。 - 在伺服器端儲存工作階段。 將瀏覽器的localStorage替換為 SQLite-backed session metadata,以便歷史記錄在裝置之間生存。
- 新增一個第二個MCP伺服器。 將憑證從源中移除,記錄所需的環境變數,並證明工具在執行時可用。
- 加強可觀測性。 記錄今天你忽略的事件型別,以便生產除錯有足夠的上下文,而無需儲存完整的提示。
✅ 最終檢查點¶
- [x] 七個 SDK 實驗全部完成
- [x] 服務停止,本地 artefacts 清理完畢
- [x]
git status --short是否乾淨,或者只有意因除外的實驗編輯殘留 - [x] 你可以回答上面的四個問題