你與團隊的第一個由AI驅動的工作流程

流程化 × 去識別 × Skills 化:把 AI 變成可重複、可稽核的行政工作法

你的交付物不是「漂亮輸出」,而是「可重複的流程」

把 Opal 當成行政 SOP 的可執行版本(可分享、可追溯)。

可重複 可追溯 可稽核
  • 能把 5 個行政題目各做成 1 個 Opal mini-app,並能交付給同仁直接使用。
  • 能用「PII Gate + 去識別化管線」把個資風險留在校內端處理。
  • 能把自訂 GPT / Gem / Claude Skills 的核心 instructions 變成可管理的資產(assets),並建立版本治理。

Opal 對行政的價值,來自「流程化」,不是聊天

你要設計的是「輸入—處理—輸出—交付」,而不是一次性對話。

Flow Mini-app Human-in-the-loop
適合的行政場景
  • 固定欄位抽取:公文/會議/稽核資料。
  • 規則檢核:缺件清單、初審勾稽。
  • 追蹤管理:每次輸出寫入試算表形成紀錄。
  • 對外文件:需求書、Q&A、通知草稿。
容易踩雷的地方
  • 把真實個資貼進去,寄望「不會拿去訓練」就安全。
  • 把所有任務塞在同一個 Generate,導致除錯困難、輸出漂移。
  • 沒有「人工覆核點」,把輸出當成最終稿。
  • 沒有把格式/紅線做成 assets,靠人記憶,最後一定走樣。

「不拿去訓練」不等於「可以外送個資」

預設:外送就是風險,因此預設去識別,再送入模型。

預設去識別 最小必要 可稽核
  • Opal 的輸入/輸出不會用於訓練生成式模型,但仍可能有人為檢視少量內容做除錯或理解用例。
  • 行政資料常包含「直接識別」與「可再識別」資訊;後者最容易被忽略(小單位+特定事件+精準時間地點)。
  • 應對策略:Opal 只處理去識別資料;需要回填真實資訊時,在校內端回填。

三層防線:條款/設定是「外圈」,去識別化才是「核心」

把風險從「個人習慣」轉成「流程預設」。

服務層級 設定 本地端去識別
防線 你要做的事 行政實踐提示
第 1 層
選對方案
優先用具資料保護承諾的企業/教育版;釐清資料使用條款。 但不要把「條款」當成免死金牌;仍須第 3 層。
第 2 層
關閉/控管設定
混用個人帳號時,關閉活動紀錄/改進;避免把敏感內容留在聊天歷史。 這層容易因人而異,因此需要第 3 層「制度化」補強。
第 3 層
去識別化+對照檔
本地端移除/替換個資,產出去識別版本;mapping 加密留校內。 Opal 只看代碼(S0001…);需要回填真實值時,本地端回填。

Opal 四個元件:把「不確定」改成可管理的步驟

每個元件都對應一種治理手段:輸入、處理、輸出、制度化資產。

User Input Generate Output Add Assets
User Input
  • 定義輸入型態與必填欄位。
  • 把「禁輸入清單」寫進提示文字。
  • 要求代碼化(S0001、A主管)。
Generate
  • 先抽取再生成(結構化→交付物)。
  • 加入 PII Gate 與品質檢查。
  • 標示不確定與人工覆核點。
Output
  • Webpage:閱讀/快速修正。
  • Spreadsheet:沉澱成追蹤紀錄。
  • 一個 mini-app 可有多個輸出。
Add Assets
  • 把格式範本、紅線清單、語氣規範做成資產。
  • 用資產控輸出一致性,降低 prompt 變長。
  • 資產要版本化,才能團隊協作。

User Input 的重點,是把風險寫成「預設值」

同仁不需要背法條;他只要照著輸入提示做就不會出事。

禁輸入清單 代碼化 最小必要
  • 標題就寫「去識別版」:讓使用者心理預期先對齊。
  • 禁輸入:姓名、學號、身分證/居留證、電話、email、地址、出生年月日、銀行帳號。
  • 高敏感:成績、獎懲、弱勢/財務、申訴/性平、心理/醫療資訊。
  • 可再識別資訊:小單位+特定事件+精準時間地點(要改寫成抽象描述)。

建議固定代碼規則:學生 S0001、教師 T0001、承辦角色 A主管/B同仁、文件 DOC01。

Generate 的最佳實務:先抽取,再生成;先把「可驗證」視為最優先事項

抽取層輸出結構化資料,生成層才寫成文件;錯了也比較好回查。

Extract Write PII Gate
層 1:抽取(可驗證)
  • 把輸入轉成表格/JSON,欄位不足就填「未提供」。
  • 保留「依據句位置」或段落位置,方便人工回查。
  • 先做 PII Gate:疑似個資就拒絕處理並提示移除類型。
層 2:生成(可交付)
  • 套用資產中的格式範本、語氣規範與紅線。
  • 輸出「待辦/風險/不確定點」三件套。
  • 最後加品質檢查:列出最需要人工覆核的 3–5 點。

Output 的選擇,其實是在決定「要閱讀」還是「要追蹤」

行政流程要能持續運作,就要留下可追溯的紀錄。

Webpage Spreadsheet 雙輸出
Webpage(給人看)
  • 適合快速閱讀、現場修稿、複製貼上。
  • 適合「本次處理」的單次交付。
  • 建議加上「人工覆核提醒」區塊。
Spreadsheet(形成制度)
  • 每次輸出寫入一列:累積成追蹤資料表。
  • 可配合稽核:誰何時處理、有哪些風險點。
  • 適合公文、待辦、證據鏈、Q&A 清單。

Add Assets 的本質:把「人腦記憶」改成「可管理規格」

格式範本、紅線清單、用語/語氣規範,都應該變成資產。

格式範本 紅線清單 語氣規範
  • 格式範本:公文欄位、會議紀錄章節、需求書章節、證據鏈索引表欄位。
  • 紅線清單:不可對外揭露資訊、不可輸出個資欄位、不得承諾超出範圍的條款。
  • 語氣規範:缺件通知信、對外 Q&A、內部稽核寫作方式。
  • 版本資訊:每份資產加版本號+更新摘要+生效日(讓同仁知道自己在用哪一版)。

Opal 的 Function Call:用「Tools」讓模型做事,但要把邊界寫死

工具一旦可用,就等於把權限交出去;因此要先定義可用範圍。

Search Web Search Map Get Weather
  • 在 prompt 中用 @ 插入工具,或用工具名稱明確要求「只查公開資料」。
  • 行政常用的「安全句型」:要求多來源、附連結、禁止搜尋校內敏感內容。
請使用 [Search Web] 只查「公開資料」,蒐集 3 個彼此獨立的來源。
輸出時每點都要附上來源連結(URL),並標註你引用的關鍵句位置。
不要把任何校內內規、內部文件內容、或可識別資訊拿去搜尋。

提醒:工具呼叫會在 Console 留下痕跡;把 Console 當成稽核視窗。

不要硬背「字數上限」,改用拆解策略把風險降到最低

長內容用資產(Add Assets),長任務拆步驟(Generate 分層)。

拆步驟 用資產 保留覆核點
  • 每個 Generate 只做一件事:抽取/檢核/生成/品質檢查。
  • 任何固定規格(格式/語氣/紅線)放到 Add Assets,不要塞在 prompt 裡。
  • 長文件先做「去識別摘要」再送入,避免一次貼上大量敏感內容。
  • 預設保留一個「人工覆核提醒」步驟,讓團隊知道模型最不確定哪裡。

五個行政題目,拆成「可交付的 mini-app」

每題都有:輸入邊界、資產、PII Gate、雙輸出(Webpage+Sheet)。

題目 Prompt 可貼上 去識別版
1 公文摘要+分派
  • 欄位抽取
  • 承辦建議
  • 風險提醒

跳到內容

2 獎助學金初審
  • 規則拆解
  • 缺件清單
  • 通知草稿

跳到內容

3 會議逐字稿→待辦
  • 決議/依據句
  • Action Items
  • 追蹤表

跳到內容

4 評鑑證據鏈索引
  • 指標對應
  • 缺口標示
  • 版本風險

跳到內容

第 5 題:採購/委外需求書+廠商 Q&A,是最需要「紅線資產」的一題

避免把資安細節/內部架構寫進對外文件,先把抽象化規則做成資產。

需求書 Q&A 對外紅線
  • 輸入:需求摘要+可公開片段(禁放報價與敏感條款)。
  • 資產:需求書章節範本+對外資訊紅線清單。
  • Generate:草稿→Q&A→可驗收性檢查。
  • 跳到第 5 題內容

題目 1:公文摘要與分派建議,要先有「分派規則」才不會亂猜

結構:去識別公文 → PII Gate → 摘要/待辦/分派 → Webpage+Sheet。

分派規則 欄位範本 PII Gate
  • User Input:公文內容(去識別)、單位清單+職掌關鍵字+分派規則。
  • Add Assets:公文欄位範本(收文/發文者/主旨/說明/期程/承辦建議/風險)。
  • Generate:先判斷是否疑似含個資,通過才產出摘要與分派。
  • Output:Webpage(閱讀)+ Drive Sheet(一列一公文)。

下一頁提供可直接貼到 Opal 的「建置 Prompt」。

題目 1|可貼上建置 Prompt(公文摘要+分派)

貼到 Opal 底部輸入區(自然語言編輯器),讓 Opal 產生流程。

Copy & Paste Step-by-step Dual Output
請建立一個 Opal mini-app,名稱為「公文摘要與分派建議(去識別版)」。

流程請包含 6 個步驟(steps)與 1 個資產(asset):

[Step 1 | User Input | 公文內容輸入]
- 讓使用者提供「已去識別化」的公文文字(若 UI 支援檔案上傳/Drive 選檔,則允許上傳 PDF,並要求系統先把文字擷取後再處理)。
- 在輸入提示文字中明確提醒:不可包含姓名、學號、身分證號、電話、email、地址、出生年月日、個案描述可識別資訊。

[Step 2 | User Input | 分派規則與單位清單]
- 讓使用者貼上「單位清單+每個單位的職掌關鍵字(最多 10 個)」與「分派規則」(例如:若涉及採購→總務;若涉及課程/學籍→教務;若涉及計畫/補助→研發;若涉及學生獎助→學務等)。
- 提示:這些規則屬於校內資訊,不要包含特定人的姓名。

[Step 3 | Add Assets | 公文欄位範本]
- 要求使用者上傳一份「公文欄位範本」文字檔或 Google 文件(範例欄位:收文日期、發文者、主旨、說明、期程、承辦建議、需回覆事項、可能風險)。
- 這份 asset 會當作輸出格式的約束。

[Step 4 | Generate | PII Gate(個資防線)]
- 目的:先掃描 Step 1 的內容是否疑似含個資或可識別描述。
- 若偵測到疑似個資,請直接輸出「拒絕處理」並列出需要移除的片段類型(不要回傳原文)。
- 若通過,輸出「OK」並給一個簡短提醒:仍需人工覆核。

[Step 5 | Generate | 摘要與分派建議]
- 依 asset 的欄位範本,生成:
  1) 150–250 字摘要(含期限/時程)
  2) 三項「需要承辦立即處理」的待辦
  3) 建議承辦單位(從 Step 2 的單位清單中選 1–2 個)
  4) 兩個風險提醒(例如:期限不明、權責不清、可能涉及對外回覆)
- 禁止輸出任何個資;如內容不足,標示「原文未提供」。

[Step 6 | Output | 匯出]
- 同時提供兩種輸出:
  A. Webpage(auto-layout):給使用者快速閱讀
  B. 匯出到 Google Drive spreadsheet:一列代表一份公文,欄位依 asset 範本
- 若同一次只處理 1 份公文,仍以 1 列寫入試算表。

請確保每個 Generate step 的 prompt 會引用對應的 User Input 與 asset(使用 @ 參照),並在 Console 可追溯每一步輸入與輸出。

題目 2:獎助學金初審,關鍵是把條文拆成「可檢核清單」

先規則拆解,再逐條檢核;輸出缺件、灰色地帶、通知草稿。

規則拆解 缺件清單 不得回填真實個資
  • User Input:申請資料(用代碼)+規定條文(或文字擷取)。
  • Add Assets:檢核表範本+缺件通知信模板(承辦窗口用「單位」)。
  • Generate:條款→檢核項目(8–15 條)→個案檢核(缺件/不確定/風險)。
  • Output:Webpage(含通知草稿)+ Sheet(每列一申請者代碼)。

下一頁:可直接貼上建置 Prompt。

題目 2|可貼上建置 Prompt(獎助學金初審)

提示:申請資料請先去識別;Opal 不做真實資料回填。

Copy & Paste Rule Checklist Notice Draft
請建立一個 Opal mini-app,名稱為「獎助學金初審檢核(去識別版)」。

流程包含 7 個步驟與 2 個資產:

[Step 1 | User Input | 申請資料(去識別)]
- 讓使用者貼上申請資料(可用表格文字或 JSON),並要求把姓名/學號改為代碼(例如 S0001)。
- 明確提醒:不得包含身分證/居留證號、地址、電話、email、銀行帳號、家庭財務細節。

[Step 2 | User Input | 獎助規定條文(可貼上)]
- 讓使用者貼上規定條文(或重點條款摘要)。
- 若 UI 支援檔案上傳,可上傳規定 PDF 後再擷取文字。

[Step 3 | Add Assets | 初審檢核表格式(範本)]
- 上傳一份檢核表格式範本(欄位至少包含:條款編號、檢核項目、符合/不符合/不確定、需要的佐證、缺件說明、需人工判斷原因)。

[Step 4 | Add Assets | 通知信模板(範本)]
- 上傳校內常用的缺件通知信格式(含稱謂、語氣、回覆期限、承辦窗口「單位」而非「個人」)。

[Step 5 | Generate | 規則拆解(轉成可檢核清單)]
- 把 Step 2 的規定條文拆成 8–15 條可操作的檢核項目,並對應到 Step 3 範本欄位輸出。

[Step 6 | Generate | 個案初審(缺件/風險/需人工判斷)]
- 逐條檢核 Step 1 的申請資料:
  1) 產出缺件清單(以「需要什麼證明」描述)
  2) 產出 3 個「需人工判斷」點(例如:條款灰色地帶、資料不完整)
  3) 產出一段給承辦的風險提醒(不要寫個資)
- 若資料不足,填「不確定」並說明原因。

[Step 7 | Output | 匯出]
- Webpage(auto-layout):顯示「檢核結果摘要+缺件清單+需人工判斷清單」
- Google Drive spreadsheet:每一列代表一位申請者代碼(S0001),欄位包含:符合度概覽、缺件項目數、需人工判斷項目數、建議處理優先順序
- 同時在 Webpage 顯示「缺件通知信草稿」,草稿必須套用 Step 4 的語氣與格式,且不可包含個資。

請確保所有 Generate prompts 都使用 @ 參照前一步輸入與 assets,並在 Console 可追溯每一步輸入/輸出。

題目 3:會議逐字稿轉待辦,輸出要能「對回去」才可追責

抽取層要留依據句(但去識別),生成層才做成會議紀錄與追蹤表。

依據句 Action Items 角色代碼
  • User Input:逐字稿(人名改代碼)+會議基本資料(會議名/日期/出席角色)。
  • Add Assets:會議紀錄格式範本(章節固定)。
  • Generate:先抽取 JSON/表格(決議/待辦/爭議/補資料),再生成會議紀錄。
  • Output:Webpage(紀錄+待辦)+ Sheet(每列一個 Action Item)。

下一頁:可直接貼上建置 Prompt。

題目 3|可貼上建置 Prompt(會議紀錄+待辦追蹤)

要點:抽取→生成分兩個 Generate;最後輸出「不確定清單」。

Copy & Paste Extract then Write Tracking Sheet
請建立一個 Opal mini-app,名稱為「會議紀錄與待辦追蹤(去識別版)」。

流程包含 6 個步驟與 2 個資產:

[Step 1 | User Input | 逐字稿(去識別)]
- 讓使用者貼上逐字稿文字。
- 明確提醒:把人名改為角色代碼(A主管、B同仁、學生X),不得包含可識別個案描述。

[Step 2 | User Input | 會議基本資料]
- 讓使用者提供:會議名稱、日期、出席角色(用代碼)、主持/紀錄者代碼、會議目的(1–2 句)。

[Step 3 | Add Assets | 會議紀錄格式範本]
- 上傳校內常用會議紀錄格式(至少包含:決議事項、討論重點、待辦事項、責任歸屬、期限、追蹤方式)。

[Step 4 | Generate | 先抽取再寫(結構化抽取)]
- 先把逐字稿抽取成結構化資料(JSON 或表格),欄位至少包含:
  1) 決議事項(含依據句:引用逐字稿的原句片段,但要把可識別資訊遮掉)
  2) 待辦事項(Action Items):內容、負責角色代碼、期限(若未提到期限,標示「未提」)
  3) 爭議/未決事項(需要誰決策)
  4) 需要補資料清單

[Step 5 | Generate | 生成會議紀錄+追蹤表]
- 依 Step 3 範本輸出完整會議紀錄(繁體中文、行政語氣、不要口語贅詞)。
- 另外產出一份「待辦追蹤表」:每列 1 個 Action Item(欄位:編號、內容、負責角色、期限、狀態預設為 Open、依據句位置)。

[Step 6 | Output | 匯出]
- Webpage(manual layout):請用清楚區塊呈現「會議紀錄」與「待辦追蹤表」兩部分。
- Google Drive spreadsheet:寫入待辦追蹤表(每列 1 個 Action Item)。
- 額外要求:在 Webpage 最後加一段「人工覆核提醒」:列出本次模型最不確定的 3 個判斷點。

請確保使用 @ 參照 steps 與 assets,並可在 Console 看到每一步輸入/輸出與 tool calls(若有)。

題目 4:評鑑證據鏈索引,重點是「只留位置,不貼原文」

索引表要回答:哪個指標→哪份文件→哪個位置→證據摘要→缺口與下一步。

Evidence Chain 版本風險 不貼含個資原文
  • User Input:指標清單+佐證資料摘要(以文件代碼 DOC01…描述)。
  • Add Assets:證據鏈索引表範本+版本與命名規則。
  • Generate:指標—證據對應+版本一致性檢查(避免新版指標引用舊版佐證)。
  • Output:Webpage(索引+風險提示)+ Sheet(每列=指標×文件)。

下一頁:可直接貼上建置 Prompt。

題目 4|可貼上建置 Prompt(評鑑證據鏈索引)

要點:索引只存「文件代碼+位置+摘要」,不要貼含個資原文。

Copy & Paste Index Table Version Check
請建立一個 Opal mini-app,名稱為「評鑑佐證證據鏈索引(去識別版)」。

流程包含 7 個步驟與 2 個資產:

[Step 1 | User Input | 指標清單]
- 讓使用者貼上評鑑指標清單(每條包含:指標代號、指標敘述、要提供的佐證類型)。

[Step 2 | User Input | 佐證資料摘要(去識別)]
- 讓使用者以「文件清單」方式提供佐證內容:
  每份文件用一段文字描述(文件代碼 DOC01、文件名稱、版本日期、摘要、關鍵段落文字)。
- 明確提醒:不要貼含個資的原文;若必要,先遮罩後再貼。

[Step 3 | Add Assets | 證據鏈索引表範本]
- 上傳索引表格式(欄位至少包含:指標代號、對應文件代碼、頁碼/段落位置、證據摘要、缺口、下一步補件)。

[Step 4 | Add Assets | 版本與命名規則(範本)]
- 上傳你們單位的檔案命名規則(例如:YYYYMMDD_主題_v1.2),以及版本更新原則。

[Step 5 | Generate | 指標—證據對應(建立索引)]
- 依 Step 3 範本,把 Step 1 的每個指標對應到 Step 2 的文件代碼。
- 每個指標至少要有 1 個證據;若沒有,標示缺口並寫出要補什麼。

[Step 6 | Generate | 版本風險提示與一致性檢查]
- 檢查 Step 2 的文件版本日期是否互相矛盾(例如新版指標卻引用舊版佐證)。
- 產出「版本風險提示」:列出 3–5 個最可能造成評鑑被追問的版本/證據鏈問題。

[Step 7 | Output | 匯出]
- Webpage(auto-layout):顯示索引表+版本風險提示
- Google Drive spreadsheet:匯出索引表(每列=一個指標對應一個文件)
- 額外要求:輸出最後加上「哪些內容必須人工回查原文」清單(只列文件代碼與位置,不貼原文)

請確保 prompts 使用 @ 參照 steps 與 assets,並在 Console 可追溯每一步輸入/輸出。

題目 5:採購/委外需求書+Q&A,要把「對外紅線」做成資產

確保內容的正確性

對外紅線 可驗收 避免灰色地帶
  • User Input:需求摘要+「可公開」片段(禁帳密/金鑰/完整拓樸/敏感條款)。
  • Add Assets:需求書格式範本+對外資訊紅線清單。
  • Generate:需求書草稿→供應商 Q&A→可交付性/可驗收性檢查(補齊指標)。
  • Output:Webpage(草稿+Q&A+檢查清單)+ Sheet(Q&A 一列一題)。

下一頁:可直接貼上建置 Prompt。

題目 5|可貼上建置 Prompt(採購/委外需求書+Q&A)

要點:遇到踩紅線的輸入要自動抽象化,並標記「已抽象化」。

Copy & Paste Redline Asset Quality Check
請建立一個 Opal mini-app,名稱為「採購/委外需求書與問答(去識別版)」。

流程包含 8 個步驟與 2 個資產:

[Step 1 | User Input | 需求摘要(去識別)]
- 讓使用者描述需求背景、目的、範圍、交付項目、預計時程。
- 明確提醒:不得包含內部帳密、金鑰、完整網路拓樸、可用來攻擊的資安細節;不得包含特定人姓名與聯絡方式。

[Step 2 | User Input | 既有標案/合約的「可公開」片段]
- 讓使用者貼上過去文件中「可以對外公開」的片段(例如:交付物格式、服務等級指標),不要貼價格、廠商敏感條款。

[Step 3 | Add Assets | 需求書格式範本]
- 上傳你們單位常用需求書格式(章節:背景、目標、範圍、交付物、驗收方式、時程、投標須知、保密條款摘要等)。

[Step 4 | Add Assets | 對外資訊紅線清單]
- 上傳一份「不可對外揭露」清單(例如:內網 IP、系統弱點、未公開政策、個資欄位明細、資安設定等)。

[Step 5 | Generate | 需求書草稿(第一版)]
- 依 Step 3 範本產出需求書草稿。
- 強制遵守 Step 4 紅線:若使用者輸入疑似踩線,改寫成抽象描述,並標記「已抽象化」。

[Step 6 | Generate | 供應商問答(Q&A)]
- 先生成 10 個供應商最可能會問的問題(範圍/介面/驗收/時程/保固/罰則/資料處理)。
- 再針對每個問題生成「答覆原則」:避免承諾超出 Step 1 範圍;避免揭露紅線。

[Step 7 | Generate | 品質檢查(可交付性)]
- 以採購承辦角度檢查:需求是否可驗收、是否有可量化指標、是否有灰色地帶會引發追加費用。
- 產出 5 個你建議承辦在送件前補齊的項目。

[Step 8 | Output | 匯出]
- Webpage(manual layout):上半部需求書、下半部 Q&A、最後品質檢查清單。
- Google Drive spreadsheet:輸出 Q&A(每列 1 題:問題、答覆原則、是否需法務/資安覆核)。

請確保所有 Generate prompts 都以 @ 參照 steps 與 assets,並可在 Console 追溯每一步輸入/輸出與 tool calls(若有)。

本地端去識別化+對照檔(mapping),是最能「制度化」的做法

把 AI 當外部加工廠:外送只送代碼;真實資料只在校內回填。

不外送個資 mapping 加密 可追溯
管線(外送前)
  • 原始資料(含個資)
  • 本地端擷取/匯出(PDF→text、Excel→CSV)
  • 去識別/假名化(姓名/學號/身分證/電話/email/地址)
  • 輸出 sanitized 檔(可外送)
管線(交付後)
  • Opal 只處理 sanitized 檔
  • 產出只含代碼(S0001…)
  • 需要回填真實值 → 本地端回填
  • 對照檔 mapping:校內加密保存、最小權限、到期刪除

最小可用版本:CSV/Excel → sanitized.csv + mapping.csv(本地端)

這段程式只示範假名化與遮罩;上線前要再加加密、稽核與保存期限。

Python mapping 是高風險資料 先假資料測試
import re
import uuid
import pandas as pd

RE_TW_ID = re.compile(r"\b[A-Z][12]\d{8}\b")
RE_EMAIL = re.compile(r"\b[\w\.-]+@[\w\.-]+\.\w+\b")
RE_PHONE = re.compile(r"\b(?:\+?886[- ]?)?0?\d{1,2}[- ]?\d{6,8}\b")
RE_STUDENT_NO = re.compile(r"\b\d{8,10}\b")

PII_COLUMNS_HINT = {"姓名", "學號", "身分證", "電話", "email", "地址", "出生"}

def pseudo_id(prefix: str) -> str:
    return f"{prefix}{uuid.uuid4().hex[:8].upper()}"

def pseudonymize_value(v, mapping, prefix="P_"):
    if pd.isna(v) or str(v).strip() == "":
        return v
    raw = str(v).strip()
    if raw not in mapping:
        mapping[raw] = pseudo_id(prefix)
    return mapping[raw]

def redact_text(s, mapping):
    if pd.isna(s):
        return s
    t = str(s)
    t = RE_TW_ID.sub("[TW_ID]", t)
    t = RE_EMAIL.sub("[EMAIL]", t)
    t = RE_PHONE.sub("[PHONE]", t)

    def repl_student(m):
        return pseudonymize_value(m.group(0), mapping, prefix="SNO_")
    t = RE_STUDENT_NO.sub(repl_student, t)
    return t

def sanitize_table(input_path, out_sanitized, out_mapping):
    df = pd.read_excel(input_path) if input_path.endswith((".xlsx", ".xls")) else pd.read_csv(input_path)
    mapping = {}

    for col in df.columns:
        col_name = str(col)
        if any(h in col_name for h in PII_COLUMNS_HINT):
            df[col] = df[col].apply(lambda v: pseudonymize_value(v, mapping, prefix="PII_"))
        else:
            df[col] = df[col].apply(lambda v: redact_text(v, mapping))

    df.to_csv(out_sanitized, index=False, encoding="utf-8-sig")
    pd.DataFrame(mapping.items(), columns=["original_value", "pseudonym"]).to_csv(
        out_mapping, index=False, encoding="utf-8-sig"
    )

sanitize_table("input.xlsx", "sanitized.csv", "mapping.csv")

對照檔(mapping)的治理:它本身就是敏感資料,要比原始檔更嚴格

如果 mapping 外流,你的去識別就等於白做,因此要用制度保護它。

加密保存 最小權限 到期刪除
  • 保存位置:校內受控環境(加密磁碟、限制下載、記錄存取)。
  • 權限:只有需要回填的人可讀;承辦同仁日常只用代碼版本。
  • 保存期限:對應行政流程(例如審查結案後 X 天刪除);不要永久留存。
  • 稽核:誰在何時用過 mapping、回填了哪份輸出、是否有二次輸出。
  • 抽樣檢查:每批資料抽樣確認「仍可再識別」的描述已被抽象化。

Skills 化:把「會做的人」的做法,變成「大家都做得出來」

概念上:Skill = instructions(規則)+ resources(範本/紅線)+(可選)scripts(本地端處理)。

Claude Skills GPT / Gem 移植到 Opal
Claude Skills 的精神
  • 把可重複任務封裝成可載入的技能資料夾。
  • 按需載入(避免 context 被塞爆)。
  • 強調一致性與安全:只使用可信來源。
把 GPT/Gem 加到 Opal 的做法
  • 最穩:把 instructions 存成文字檔 → Add Assets → 在 Generate 用 @ 引用。
  • 快速:把 instructions 貼在 Generate 最上方(但會越來越長、難除錯)。
  • 原則:Opal 是流程引擎;你移植的是「規則與資產」,不是把別的平台直接嵌進來。

版本管理:你要同時管「流程」與「規格」,而不是只管文字

建議做一份主檔(校內版控)+各平台只當發布端;回復版本前先備份。

主檔 平台版本史 回復風險
治理對象 你要版本化的內容 最小可行規則
Opal mini-app steps 結構、節點 prompts、Output 欄位、資產引用方式 v1.x 改欄位/流程;v1.x.y 修文字;每次改版寫更新摘要
Assets 格式範本、紅線清單、用語規範、檢核表 資產檔名含版本號+生效日;資產內第一行寫版本資訊
Scripts(本地端) 去識別化程式、mapping 加密、稽核紀錄 先假資料測試;上線前必有權限/保存期限;變更需可回溯

最後收斂成一張檢核表:讓 Opal 變成「穩定可用的行政流程」

你可以把這頁貼到單位 SOP;每次上線前逐項勾稽。

上線前檢核 可稽核 可交付
  • User Input:禁輸入清單是否明確?是否要求代碼化?
  • Generate:是否有 PII Gate?是否先抽取再生成?是否列出不確定點?
  • Assets:格式範本/紅線/語氣是否資產化?是否有版本號與更新摘要?
  • Output:是否同時有 Webpage(閱讀)與 Sheet(追蹤)?欄位是否可回查?
  • 本地端:是否有去識別化管線?mapping 是否加密、最小權限、到期刪除?
  • 稽核:Console/Sheet 是否能回溯每次處理?是否有人工覆核紀錄?

主要參考資料

建議把本頁保留在簡報最後,方便同仁回查來源與規範。

References SOP Contact
主要來源
  • Opal Overview / Quickstart / FAQ(developers.google.com)
  • Gemini token / models / function calling(ai.google.dev)
  • Claude Skills(support.claude.com)
  • 個資保護主管機關函釋(pdpc.gov.tw)
講者資訊
    吳相勲 / 終身教育部