生成式編排也支援多代理系統,其中一位代理呼叫其他代理。 當你將問題拆解成多個專門代理時,你的應用程式會更模組化、可擴展且易於管理。
嵌入式代理
內嵌代理,也稱為子代理,是同一代理內小型且可重複使用的工作流程。 它們通常只是主代理用作子程式的主題。 例如,主代理可以呼叫「翻譯文本」主題作為更大計畫中的一步。 內嵌代理會與主代理共享上下文,因此資料在兩者之間傳遞很簡單。
最佳實務:讓線上客服專注於單一責任,並好好測試他們。
連線代理程式
連結代理是獨立的代理,擁有自己的編排、工具和知識。 主要代理人會將部分請求委派給兒童代理人。 例如,IT 客服會打電話給銷售客服以獲取價格資訊。 連網代理實現模組化與領域分離,並可繞過計畫限制。 他們可能擁有不同的權限或知識,因此應應用治理與稽核控制。
然而,使用連網代理需要謹慎治理:
編排:母指揮者應有明確標準,決定何時交接給連接的代理。 協調器通常會在使用者的意圖符合已連接 Agent 的領域時轉接。 為協助此過程,請在父方配置中清楚描述已連接代理的用途。 從父 Agent 的角度來看,請將整個連線 Agent 視為附有描述的 Agentic「工具」。
資料交接:你必須管理資料交接。 決定要從父項傳送什麼上下文給連結的代理程式。 連線代理有一個上下文包含設定,可以控制是否接收對話紀錄,因此請確認該設定,而不是假設歷史會自動傳遞。 相較之下,子 Agent 一律會收到父 Agent 的內容。 你可能還需要通過特定的參數。 例如,如果主客服已經知道之前的使用者名字,可能會把這個資料傳給連接的客服,以避免再次詢問。
安全性:連接的代理人可能擁有母代理人無法存取的權限。 確保撥打接通的客服不會無意中繞過限制。 例如,如果父代理不能刪除紀錄,但連結代理可以,那麼在可能刪除的情況下,母代理不應該在未經適當批准的情況下呼叫連結代理。 將連線中的代理通話視為其他重要操作來處理。 如果執行敏感操作,請進行相應的檢查或獲得用戶同意。
審計與監控:記錄連線代理何時被呼叫及其執行的行為。 由於這是個別的 Agent,因此您會有個別的文字記錄。 將父 Agent 與連線 Agent 的工作階段相互對應,對偵錯而言很重要。 通常,遙測中的識別碼會將兩者連結起來。
何時分離代理人
不要為每個子任務建立獨立代理。 使用不同的代理來執行子任務:
- 複雜到需要擁有一套獨立的工具或知識(不同專業領域)
- 需要與主代理不同的治理規則或存取控制
- 可在許多不同的主要代理程式中重複使用(也就是類似服務代理程式)。
如果以上條件都不適用,簡單的線上代理可能能勝任工作,且比完整連接的代理更簡單。 個別的 Agent 會為系統帶來額外負荷。 由於上下文切換及維護多個代理的複雜性,執行時間稍長。 所以要謹慎使用它們。 實際操作的話,先從一位經紀人開始。 只有當你明顯看到模組化需求或單一代理人不該跨越的界線時,才拆分成多個代理人。
多代理協調的最佳實務
以下最佳實務適用於多代理設定中為父代理與子代理撰寫指令。
1. 單一反應原則
確保每回合只有一名代理人與使用者對話。 在多代理架構中,只有父代理應該提供最終回應。 次級代理人是研究者,不是回應者。
- 該做:在家長指示中加入:「你是唯一與使用者溝通的代理。 將所有兒童探員的調查結果整合成單一回應。」
- 不要:讓它語意含糊不清。 在沒有明確指引的情況下,子代理會直接回覆使用者,導致重複或部分訊息。
Note
將所有使用者通訊路由至父系統是一種合理設計,並非唯一。 當這是刻意選擇時,兒童或連線的代理也可以直接回答使用者。 無論採用哪種方式,應防範的風險都相同:父 Agent 回答了子 Agent 已經處理過的要求。 在 設計可避免重複訊息的子代理 一文中,了解可防止兩種設計中出現重複訊息的上下文契約。
2. 次代理指令必須聲明其角色
務必告知子 Agent 它們是子 Agent。 次級代理人並不一定知道自己是編排的一部分。 在沒有明確指引的情況下,它們會作為獨立代理直接向使用者發送訊息。
- 該做:在每位次級代理人的指示中補充:「你是次級代理人。 請勿直接回覆該用戶。 你的工作是搜尋資訊並將調查結果交還給母代理人。 父代理程式負責處理與使用者的所有通訊往來。
- 不要:假設子代理人會自己找出編排模式。
3. 在指示中使用清晰直接的語言
一定要用指示性語言。 避免用軟弱或禮貌的措辭。 該平台透過強力語言(MUST、DO NOT、NEVER)注入系統層級指令。 用柔和語言寫成的指令(「請試試看」、「你應該」、「那會很好」)在衝突時會失去優先權。
- 該做:「絕對不要直接回覆使用者。」 只回報你的發現。」
- Do:「每個用戶問題必須有一個最終答案。」
- 不要:「請盡量避免向使用者發送訊息,而是回覆你的發現。」
- 不要:「理想情況下,我們想要一個綜合答案。」
4. 每個子代理使用一個知識來源(無重疊)
為每個子代理人分配不同且不重疊的知識來源。 如果兩個子代理人搜尋相同的知識庫,其中一個子代理人會先找到答案。 第二個子代理要麼回傳重複結果,要麼完全跳過搜尋,沒有新增價值。
- 執行:CA-1 搜尋知識來源 A(例如人力資源政策)。 CA-2 搜尋知識來源 B(例如,IT 文件)。
- 不要:讓兩個子代理都存取相同的文件、Dataverse 資料表或 SharePoint 網站。
- 注意:如果你只有一個知識來源,建議只用一個有知識的代理人,而不是分成兩個子代理人。 只有在來源確實不同時,多 Agent 才具有附加價值。
5. 對次代理使用準確且明確的描述
為父系可見的每個子 Agent 撰寫清晰且明確的描述。 父代理使用子代理描述來決定路由。 如果描述模糊、相同或不準確,家長無法做出良好的路由決策。
- 做:CA-1:「搜尋人資政策文件以尋找與員工相關的問題。」CA-2:「搜尋IT知識庫以尋找技術支援問題。」
- 不要做:當兩位代理服務不同領域時,不要給他們相同的描述。
- 不要:使用像「這位代理人可以幫忙解答問題」這類通用的描述。
6. 父指令必須定義編排模式
告訴母公司代理人如何安排。 不要只說「用兒童代理人」。父體需要明確的模式指示:呼叫代理、等待結果、合併,然後回應。
- 做:「當使用者提出問題時:1. 召喚兩個兒童特工來蒐集情報。 2. 等兩位小探員回報結果。 3. 將所有發現整合成一個統一的回應。 4. 只向使用者提供一個回應。 兒童代理不得直接回覆使用者。」
- 不要:「當使用者提出問題時,啟動子代理,從兩個來源取得回應,並給出一個綜合答案。」(太模糊了。指令不會告訴副代理人保持沉默。)
7. 在任務委派中包含「禁止直接回應」指令
即使有清晰的子 Agent 指示,在委派工作中加入強化措施也能提供安全網。
- 該做的:在父系指示中加入:"在委派給子 Agent 時,務必在工作中包含:'只傳回您的調查結果。 不要回覆使用者。』」
- 不要:完全依賴分代理自己的指示。 任務情境給予子代理更多強化模式的訊號。
8. 使用領域不匹配查詢進行測試
務必使用不屬於任何子代理領域的問題進行測試。 此測試顯示子 Agent 是否能妥善傳回「找不到資訊」,而不是傳回可能不正確的資訊、卡住,或傳送混淆訊息。
- 建議:在所有子代理領域外進行查詢測試(例如,當代理處理人力資源和資訊科技時,詢問天氣問題)。
- 該做的:確認父系是否妥善處理「兩個 Agent 皆未找到任何結果」的情況。
- 不該做的:僅使用最簡單的案例查詢進行測試,這些查詢與某個子 Agent 的領域完全相符。
9. 期待後續時,寧願詢問而非告知
當期待使用者回應時,使用提問式互動。 僅將通知/傳送樣式用於最終的單向訊息。 如果客服用單向訊息(inform)向使用者提出問題,使用者的回覆會以全新查詢的形式回傳給父規劃器。 在這種情況下,繼續和次級代理人的對話會比較好。
- 該做:寫下指示,例如:「如果你需要釐清,請問使用者一個問題並等待他們的回應。」
- 不要:撰寫像這樣的指示:「告知使用者有哪些選項,並讓他們自行選擇。」「Inform」表示單向傳達訊息,而「ask」則表示雙向互動。
快速參考清單
| # | 支票 |
|---|---|
| 1 | 父層指令明確指出「只有我會回應使用者」 |
| 2 | 每個子代理的指示都說「不要直接回覆使用者」 |
| 3 | 這些指示會使用極具指令性的語句 (必須、絕不、僅限) |
| 4 | 每個子代理都有獨特且不重疊的知識來源 |
| 5 | 次級代理人的描述準確、明確且具體 |
| 6 | 父指令定義完整的編排模式(呼叫→等待→合併→回應) |
| 7 | 父系在委派工作內容中傳遞「不直接回覆」 |
| 8 | 以網域不匹配查詢測試 |
| 9 | 在子代理的指示中,對「詢問」與「告知」的區分是正確的 |