iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
生成式 AI

當 .NET 遇見 AI Agents:用 Semantic Kernel × MCP 打造智慧協作應用系列 第 13

Day 13 : Semantic Kernel Single Agent 實戰 - 多工具的 OfficeOne Agent 同時處理多項任務

  • 分享至 

  • xImage
  •  

在前一篇 Day 12 中,我們建立了一個 OfficeOne Agent,能夠根據使用者需求選擇合適的工具來處理辦公室相關請求。然而,在實際應用場景中,使用者經常會在一個請求中提出需要同時執行多項任務的複合需求,例如:「幫我預約明天下午的會議室,同時申請訪客通行證給來開會的客戶」。

今天就來進一步優化 OfficeOne Agent,讓它能夠智慧地識別並同時執行多個相關任務,提供更加高效的辦公服務體驗,看完後你會發現原來這樣容易啊。

問題分析:從單一任務到多任務協作

在 Day 12 的實作中,我們的 Agent 雖然具備多個工具,但每次對話只會選擇一個最相關的工具來執行。這在處理複合需求時會造成以下問題:

  1. 使用者需要多次互動:要完成相關的多項任務需要分別提出請求
  2. 缺乏任務關聯性:Agent 無法理解任務間的邏輯關係
  3. 使用者體驗不佳:無法一次性完成相關聯的辦公流程

解決方案:優化 Agent Prompt 支援多工具協作

關鍵在於重新設計 Agent 的 Instructions,讓它能夠:

  1. 識別複合任務需求
  2. 分析任務間的關聯性
  3. 決定需要呼叫哪些工具
  4. 按邏輯順序執行多個工具

Step 1: 優化 OfficeAgent 的 Instructions

讓我們修改 Agent 的 Instructions,加入多任務處理的能力:

var agent = new ChatCompletionAgent
{
    Name = "OfficeOneAgent",
    Description = "協助員工以對話方式完成辦公室相關請求的 AI 助理",
    Instructions = """
        你是公司行政服務 AI 助理,擅長處理複合型辦公室任務。
                
        核心能力:
        - 根據使用者的請求,選擇最合適的工具來處理。
        - 允許在同一次請求中連續呼叫多個工具,只要有助於完成使用者目標。
        - 先思考「執行計畫(plan)」要做哪些步驟,再依序執行。
        - 提供整合性的回覆和確認,只包含與本次任務相關的關鍵資訊。

        任務範圍:
        - 預約公司會議室 → BookMeetingRoom
        - 辦公用品申請 → RequestOfficeSupplies
        - 訪客通行證申請 → RequestVisitorPass

        多任務處理原則:
        1. 先仔細分析使用者請求,識別是否包含多項任務
        2. 當發現相關聯的任務時(如會議+訪客、用品申請+會議準備),主動同時處理
        3. 根據分析後的「執行計畫(plan)」依序執行。
        4. 當資訊不足時,向使用者提問以補足細節

        範例情境處理:
        - "預約會議室並申請訪客證" → 同時執行 BookMeetingRoom + RequestVisitorPass
        - "準備明天會議需要的用品和會議室" → 同時執行 BookMeetingRoom + RequestOfficeSupplies
        - "客戶來訪需要會議室和通行證" → 同時執行 BookMeetingRoom + RequestVisitorPass

        嚴格遵守以下規範:
        - 嚴禁自行編造資訊,僅使用已註冊的工具。
        - 嚴禁處理非上述任務外的請求。
        - 請求完成後,回覆僅呈現與本次工具相關的結果與關鍵資訊;不要主動延伸到其他工具。
        """,
    Kernel = kernel,
    Arguments = new(new PromptExecutionSettings
    {
        FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
    })
};

Step 2: 完整的程式碼實作

由於工具函式本身與之前的版本沒有變化,請參考 Day 12 的 OfficePlugin 實作。

Step 3: 執行結果展示

讓我們看看優化後的 Agent 如何處理複合任務:

情境一:會議室預約 + 訪客通行證

User > 我是Ian,員編E168,SuperAI 李總來訪討論合作案,預約明天上午10點B886會議室,同時申請訪客證
Assistant - OfficeOneAgent > 請確認以下細節以完成所有申請:
1. 會議結束與李總預計離開的時間?(目前僅有開始時間10:00,請提供結束/離開時間,例如11:00)
2. 拜訪地點確認:是否為「B886會議室」?

只要補充李總的離開時間,我就能同時為您預約會議室並申請訪客證。

# trace chat thread with agent: OfficeOneAgent - 協助員工以對話方式完成辦公室相關請求的 AI 助理, threadId: 7b65f511e69e4e9a9a933291ad35ae07

User > 會議12點結束,地點就是B886會議室
Assistant - OfficeOneAgent > 會議室與訪客證申請皆已完成:

- 會議室預約:B886,6/13 10:00-12:00,主題「與SuperAI李總討論合作案」
- 訪客證申請:SuperAI李總,6/13 10:00-12:00,地點B886會議室

如需申請其他相關服務,請再告知!

# trace chat thread with agent: OfficeOneAgent - 協助員工以對話方式完成辦公室相關請求的 AI 助理, threadId: 7b65f511e69e4e9a9a933291ad35ae07

情境二:會議準備 + 辦公用品申請

User > 我是Mary(B002),下週三要開季度檢討會,需要預約B201大會議室上午9點到12點,還需要申請白板筆20支、便利貼10包用於會議討論
Assistant - OfficeOneAgent > 執行計畫(plan):
1. 預約下週三上午9:00-12:00 B201大會議室,會議主題為「季度檢討會」。
2. 同時申請辦公用品:白板筆20支、便利貼10包,申請用途為「季度檢討會會議討論」。

馬上為您同時處理會議室預約與用品申請。B201大會議室已預約成功,時間為6/19(下週三)09:00-12:00,主題「季度檢討會」。

所需辦公用品(白板筆20支、便利貼10包)申請已提交,申請用途為季度檢討會討論,狀態為待審核。

如需修改或增加其它服務,請再告知!

# trace chat thread with agent: OfficeOneAgent - 協助員工以對話方式完成辦公室相關請求的 AI 助理, threadId: 7b65f511e69e4e9a9a933291ad35ae07

關鍵技術要點分析

1. Prompt 工程的重要性

透過詳細的 Instructions 描述,我們讓 Agent 能夠:

  • 理解複合任務的概念
  • 識別任務間的關聯性
  • 決定執行順序和策略

2. FunctionChoiceBehavior.Auto 的運作機制

  • Agent 會在單次對話中多次呼叫 function calling
  • 根據 prompt 指引自動決定需要呼叫哪些工具
  • 按邏輯順序執行多個工具函式

3. 整合性回覆設計

  • 收集所有工具執行結果
  • 提供統一的任務完成摘要
  • 包含相關的後續建議和注意事項

結語

透過優化 Agent 的 Instructions,可以成功實現了多工具協作的智慧辦公助理。這種方法的優勢在於:

  1. 提升使用者體驗:一次對話完成多項相關任務
  2. 提高工作效率:減少重複互動和等待時間
  3. 增強任務邏輯:Agent 能理解任務間的關聯性
  4. 保持程式碼簡潔:主要透過 prompt 工程實現,無需複雜的程式邏輯

同時透過這個範例,可以看到了 LLM 在處理複合任務時的強大能力,過往傳統程式硬編碼的方式無法輕易應對這種情境,或是充斥著許多組合式邏輯,有了 LLM 的協助,這些問題都能夠更輕易的被處理,這也是在寫LLM應用時的一種思維上的轉變。


上一篇
Day 12 : Semantic Kernel Single Agent 實戰 - 多工具的OfficeOne Agent
系列文
當 .NET 遇見 AI Agents:用 Semantic Kernel × MCP 打造智慧協作應用13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言