本週完成成果
你會把一件複雜工作拆成不同角色與任務,例如資料整理員、分析員與文案編輯,並在關鍵交接點加入來源檢查與人工核准。
完成標準|個人程式能說明 Agent、Task、Crew;小組工作流有固定輸入、結構化輸出、來源限制、最大步數與人工核准,不允許 Agent 自動發布。
課前準備
步驟 1|確認第三小時邊界:本篇只延伸課綱指定 CrewAI 實作,不重製前兩小時 DLI 單元。
預期結果|Repo 只保存自己的工作流與公開安全測試資料。
步驟 2|小組:選一件兩人以上才有合理分工的事,例如整理三則公開活動、比較後寫一段摘要。
預期結果|若一個函式就能完成,不為了多 Agent 而硬拆。
步驟 3|Codespaces:安裝本週鎖定依賴並安全確認 GEMINI_API_KEY;工具不得讀取整個 Repo 或私人檔案。
python -m pip install -r courseware/gs3073-b/requirements-week13.txt
python - <<'PY'
import os
print('key configured:', bool(os.getenv('GEMINI_API_KEY')))
PY預期結果|CrewAI 可 import,且只顯示 key 是否存在,不輸出內容。
第三小時|個人技術實作
故事開始|辦校園市集時,一個人找攤位、一個人排流程、一個人寫公告。若三個人都以為別人會確認日期,最後公告可能寫錯。多 Agent 也需要清楚角色、交接格式和最後負責的人。
老師先問|Agent 越多是不是越聰明?不一定。每多一個 Agent,就多一次成本、誤解與錯誤傳遞;只有角色真的不同、交接能驗證時才值得拆分。
生活比喻|Crew 像一個編輯部,Agent 是不同職務,Task 是寫清楚的工作單,Process 是交件順序;總編輯的人工核准不能因為自動化而消失。
先看全程地圖|先看懂資料與決策怎麼移動,再開始操作。圖中的箭頭代表下一步,不代表可以跳過人工確認。
┌──────────┐ → ┌──────────┐ → ┌──────────┐
│ 公開安全輸入│ │ 整理 Agent│ │ 分析 Agent│
└──────────┘ └──────────┘ └────┬─────┘
↓
┌──────────┐ ← ┌──────────┐ ← ┌──────────┐
│ 人工核准 │ │ 草稿輸出 │ │ 編輯 Agent│
└──────────┘ └──────────┘ └──────────┘步驟 4|個人:先用紙上角色卡寫清楚 role、goal、input、output、不能做什麼。
| Agent | Goal | Input | Output | 禁止事項 |
|---|---|---|---|---|
| 整理員 | 擷取原文重點 | 公開公告 | 含來源的 JSON | 不新增事實 |
| 編輯員 | 改寫成短文 | 已核對 JSON | 草稿 | 不發布 |預期結果|每個角色有不同責任,禁止事項可被檢查。
步驟 5|個人:建立最小 CrewAI 骨架,先以 dry-run/教師指定模型測試。
from crewai import Agent, Crew, Process, Task
organizer = Agent(role='公告整理員', goal='只整理提供的公開文字', backstory='不新增原文沒有的事實')
task = Task(description='整理活動日期、地點與待確認事項:{announcement}', expected_output='含來源欄位的 JSON', agent=organizer)
crew = Crew(agents=[organizer], tasks=[task], process=Process.sequential)
print('agents:', len(crew.agents), 'tasks:', len(crew.tasks))預期結果|week13_crew_basic.py 至少能建立一個 Agent 與 Task;若未呼叫模型也能檢查結構。
步驟 6|小組:加入第二角色,但用 JSON/Markdown 明確交接,不直接分享不受控的長對話。
預期結果|第二 Agent 的 input 只來自第一任務輸出與核准來源。
步驟 7|小組:加入人工核准點與最大重試次數,產出只寫到草稿檔。
if result_needs_review:
save_draft(result)
print("WAITING_FOR_HUMAN_REVIEW")
else:
print("REJECTED: missing source")預期結果|工作流不會寄信、發文、改 Repo main 或操作正式資料。
課堂收束|每組拿掉一個 Agent 再問:「結果會不會一樣?」如果會,代表角色可能多餘;如果不會,要能說清楚它提供的不同判斷與交接證據。
指定閱讀與課後作業
指定閱讀|依課綱完成個人 CrewAI 基礎腳本;Agent、Task、Crew、Process 與 Flows 的現行用法以 CrewAI 官方文件為準。
課後作業方向|個人提交 week13_crew_basic.py;小組在 feat-agent 分支完成市場分析與文案草稿工作流,附一分鐘 GIF 或文字執行證據及 README。
步驟 8|個人:加入第二個 Task,讓輸出格式包含 sources 與 needs_human_review。
預期結果|缺少來源時不生成可發布文字。
步驟 9|小組:提交 codes/agent 與 README,列出角色、成本、失敗與人工核准。
git add week13_crew_basic.py codes/agent README.md
git commit -m 'W13: add bounded multi-agent draft workflow'
git push -u origin HEAD預期結果|Repo 無 secrets;工作流只產生草稿,不執行外部發布。
驗收方式
python week13_crew_basic.py
rg -n "human|人工|source|來源|禁止|draft" codes/agent README.md
git diff --check通過條件|角色與任務不重複;交接格式固定;來源與最大重試可見;人工核准保留;沒有自動發布或秘密外洩。
應提交的 Repo 檔案
必交|week13_crew_basic.py、codes/agent/。只提交課綱指定成果與重現所需說明;不得提交 API key、個資、私人對話、未授權資料或大型模型檔。
常見問題與排除
問題 1|Agent 無限來回:限制 sequential 任務、最大步數與停止條件。
問題 2|輸出互相矛盾:保留每一階段原始輸出,讓人工判斷,不讓最後 Agent 靜默覆蓋。
問題 3|費用快速增加:先以一筆短輸入測試,記錄 token/呼叫數,再擴大。
引用資料
國立中央大學授課課綱/劉書銘老師,《劉書銘老師課程大綱_基礎模型與生成式人工智慧-更新版.pdf》;教師提供附件。用途:W1–W16 時段、實作主題、評量與交付物。
CrewAI,《CrewAI Documentation》;https://docs.crewai.com/;查閱日期:2026-08-04。用途:W13 Agent、Task、Crew、Process 與多 Agent 工作流。
Google AI for Developers,《Using Gemini API keys》;https://ai.google.dev/gemini-api/docs/api-key;查閱日期:2026-08-04。用途:Gemini Auth key、環境變數與金鑰安全規則。