本機專屬檔案分析
目標
在不將檔案或其內容傳送至任何雲端服務的情況下,分析表格、文件、PDF 與圖片檔案,並在每種模式中遮罩個人資料 — 姓名、聯絡方式、地址、身分證號碼。原始檔案以唯讀方式在本機開啟,擷取與統計透過本機腳本執行,所有產出物皆保留在本機工作目錄中。
步驟 1 — 務必先要求本機路徑(強制執行,不可省略)
啟動此技能後的第一句話必須要求提供本機路徑,不得開始分析。請根據情境調整以下說詞,務必包含四點:不會上傳任何資料、需要絕對路徑、如何複製路徑,以及可選的檔案選擇器。
我僅會在此機器上分析這個檔案 — 不會有任何資料傳送至雲端服務,並且報告中的姓名、電話號碼、地址與身分證號碼都會被遮罩。 請提供絕對本機路徑,例如
/Users/you/Documents/ledger.xlsx或D:\data\ledger.xlsx;多個檔案請以換行分隔。 複製路徑的方式:在檔案上按右鍵 → 「複製為路徑」(Windows),或將檔案拖曳至終端機 / 在 Finder 中使用 ⌥⌘C (macOS)。 或者直接說「幫我挑選檔案」,我將會開啟一個本機檔案對話框。
後續處理:
- 使用者說「挑選 / 顯示對話框」 → 執行
python "<skill_dir>/scripts/pick_path.py"(可多選),或加上--single參數。使用輸出的路徑作為輸入。結束代碼 2 表示沒有圖形化工作階段 — 改為要求使用者貼上路徑。 - 使用者說「它已經附上了」,但只有附件卡片而無路徑 → 依照下一節處理。請勿直接讀取附件。
- 接收到路徑後,進行驗證:路徑存在、副檔名受支援、檔案數量合理(依類型分組,超過約 10 個檔案時提醒)。
當使用者已丟入附件時
在接受之前先說明風險:
有一點必須提醒:上傳到聊天中的檔案可能已經儲存在平台的伺服器上,因此該路徑不再是完全本機的。 如果此檔案包含機密或個人資料,請改為提供其本機路徑,我將會從磁碟讀取 — 不會有任何資料離開此機器。
如果使用者仍要使用附件,可以繼續,但必須誠實標註:「輸入來源為聊天附件,可能已送達平台伺服器」— 絕對不能稱附件為「完全本機」。
步驟 2 — 讓使用者選擇模式
有兩種選項;使用者必須選擇。若未指定,則使用一般模式並在回答的第一行說明。
| 一般模式 (預設) | 嚴格模式 | |
|---|---|---|
| 報告內容 | 結構 + 統計 + 遮罩值預覽 (前 N 列、內文摘錄) | 僅提供彙總指標:列數/欄數、型別、非空值率、不重複計數、範圍、平均值 |
| 原始文字 | 遮罩後的文字會進入報告,可供模型檢視 | 絕不出現;模型僅能看到指標 |
| 適用情境 | 一般內部資料、語意解讀、書面結論 | 客戶記錄、薪資、醫療資料、合約、機密資料 |
| 成本 | 遮罩內容進入推論上下文 | 無法進行語意判斷,僅能提供統計為基礎的回答 |
說詞:
請選擇模式:① 一般模式 — 結構、統計與遮罩預覽,讓我能讀取內容並得出結論;② 嚴格模式 — 僅提供指標,報告中不會出現任何原始文字。預設為一般模式。
強制遮罩 (所有模式皆適用,無法關閉)
遮罩不是選項,而是預設行為。腳本沒有關閉開關,--mode strict 也不代表「遮罩是選用的」— 嚴格模式是在遮罩之上再疊加「不顯示原始文字」。
| 類別 | 涵蓋欄位 | 結果 |
|---|---|---|
| 姓名 | 姓名、帳戶持有人、聯絡人、法定代理人、負責人、處理者、帳戶管理員、申請人、收款人、持卡人、股東 | [NAME#1] |
| 聯絡方式 | 手機、市話 (含區碼)、傳真、電子郵件 | [PHONE#1] / [EMAIL#1] |
| 地址 | 地址、居住地、郵寄地址、註冊地址、戶籍地址 | 保留省市,其餘變成 [ADDRESS#1];--mask-region 會連同區域一起隱藏 |
| 身分證明 | 身分證號碼 (18/15 碼)、護照、旅行證件、軍人證、統一社會信用代碼 | [ID#1] |
| 金融 | 銀行卡、帳號、卡號 | [ACCOUNT#1] |
| 其他識別碼 | 車牌、客戶編號、員工編號、會員編號、學號、社會安全號碼、保單號碼 | [PLATE#1] / [IDNO#1] |
三項實作原則,可在交付記錄中引用:
- 穩定的假名。 相同的來源值在同一執行中永遠對應到相同的假名。「張三出現 3 次」會變成「
[NAME#1]出現 3 次」— 計數、去重與合併仍然可行,但身分無法保留。 - 磁碟上無對應表。 值與假名的對應表僅存在記憶體中。
report.md或manifest.json都不會包含它;只會寫入命中計數。 - 自由文字的啟發式規則。 結構化表格會依據欄位標題進行分類並進行整欄遮罩。文件內文、PDF 與投影片中的自由文字則依賴正規表示法加上姓氏辭典(「聯絡人:張三」、「張先生」)。啟發式規則會有遺漏 — 特別是在沒有上下文線索的孤立姓名。請清楚說明;絕不能聲稱「已偵測到所有內容」。
保留省市是刻意的設計:支援區域層級的分析,同時不暴露街道地址。當區域本身也屬於敏感資訊時,請使用 --mask-region。
步驟 3 — 在本機擷取
python "<skill_dir>/scripts/local_extract.py" "/path/to/ledger.xlsx" "/path/to/report.docx" \
--workspace ".local_analysis"
嚴格模式請加上 --mode strict;隱藏區域請加上 --mask-region;自訂遮罩模式請使用 --redact "EMP\d{6}" (可重複)。
輸出 (全部位於 --workspace 內):
report.md— 遮罩後的結構描述 + 統計 + 預覽;其餘分析僅以此為輸入manifest.json— 檔案清單、SHA-256、模式、masking.enabled=true、遮罩命中計數、network_used: false
主控台會印出每個檔案的類型、大小、遮罩欄位、命中計數以及「network requests: 0」。之後請使用本機檔案閱讀器讀取 report.md;請勿以螢幕截圖或線上 OCR 取代。
步驟 4 — 在本機計算,絕不依賴推論
總和、比率、不重複計數、排序、分組、期間比較:一律透過本機腳本計算。在沒有完整資料的情況下,模型的估計幾乎總是錯誤的。重複使用 local_extract.py 中的 parse_xlsx / parse_delimited / Masker,在一個一次性腳本中進行計算,然後將數字寫入報告。可以直接對假名進行分組與計數 — 無需還原。
步驟 5 — 產出稽核單
python "<skill_dir>/scripts/local_audit.py" ".local_analysis" --note "在本機處理,未上傳任何資料"
稽核單包含五個部分:來源檔案完整性 (重新檢查雜湊值,證明為唯讀且無複製)、遮罩執行情況 (開關狀態、類別、本次執行的命中次數)、產出物清單、逐行紅線檢查、結論。結束代碼 0 = 通過,1 = 處理過程中來源檔案發生變更。
步驟 6 — 報告
先下結論,再呈現資料,最後附上一個結尾陳述:
此分析完全在此機器上執行,未涉及任何雲端服務;來源檔案為唯讀且未經修改,報告中已遮罩姓名、電話號碼、地址與身分證號碼 (使用穩定假名)。產出物位於
.local_analysis/,稽核單位於audit.md。
紅線 (絕不可觸發)
| 類別 | 禁止行為 | 常見工具 |
|---|---|---|
| 雲端文件 | 建立、匯入或「編輯」線上試算表/文件 | 騰訊文檔、金山文檔、飛書文檔連接器 |
| 雲端硬碟 / 物件儲存 | 上傳檔案或產出物 | 騰訊雲端硬碟、WeDrive、雲端檔案儲存 |
| 知識庫 | 寫入知識庫、匯入網址 | 知識庫上傳、知識庫輸入 |
| 外部搜尋 | 使用來源文字或片段作為查詢 | 網頁搜尋、頁面抓取 |
| 線上轉換 / OCR | 線上 PDF 轉換、線上解壓縮、線上圖片辨識 | 任何線上工具、圖片理解 API |
| 向外發送 | 將檔案或摘要傳送至聊天、郵件、機器人 | WeCom 訊息、電子郵件、會議記錄上傳 |
僅有一個例外:使用者明確表示「這個可以上傳 / 傳送」。即便如此,仍要重申並取得第二次確認後才能行動。
各檔案類型的本機路徑
| 類型 | 建議的本機處理方式 | 備註 |
|---|---|---|
.xlsx .xlsm | local_extract.py (直接處理 zip + XML) | 多工作表、欄位層級遮罩;日期可能顯示為序列數字 |
.csv .tsv .txt .md .json .html | local_extract.py | 自動偵測 UTF-8 / GB18030 編碼及分隔符;CSV 依標題進行遮罩 |
.docx .pptx | local_extract.py (直接處理 zip + XML) | 段落、標題大綱、表格、每張投影片要點;內文透過自由文字遮罩處理 |
.pdf | local_extract.py | 當有安裝本機的 workbuddy-pdf CLI 時使用,否則使用內建的 zlib 備援方案 |
.png .jpg .gif .bmp .webp | local_extract.py | 僅擷取格式、尺寸、雜湊值;僅在存在 tesseract 時進行本機 OCR |
.xls .doc .ppt 舊版二進位格式 | 要求使用者在本機重新儲存,或在本機編輯器中開啟 | 絕對不能傳送至線上轉換器來擷取內容 |
| 掃描 PDF / 圖片中的文字 | 本機 OCR,或由使用者口述內容 | 若無 OCR,請誠實說明限制 — 不要透過雲端處理 |
特別是圖片:若無 tesseract,則僅將其視為中繼資料處理,並說明「無法辨識圖片內容」,提供兩種本機處理方式 (安裝 OCR 重新執行 / 使用者描述內容)。請勿使用視覺模型「看一看」— 這會將圖片送入推論路徑,違反使用者的要求。
降級規則
- 本機腳本可解析 → 使用腳本的輸出。
- 無可擷取的文字 (掃描檔、舊版格式、加密) → 說明原因,提供本機替代方案 (在本機重新儲存、本機 OCR、使用者口述)。
- 使用者急著要「立刻看到結果」 → 回到模式問題:「鑑於目前狀態,我只能提供統計性的回答 — 可以接受嗎?」
常見錯誤
- 略過路徑請求,直接分析聊天附件:違反步驟 1。
- 將整個
report.md貼入回答中:報告是工作文件;回答應包含結論與關鍵數字。 - 認為嚴格模式就不需要遮罩:這兩個維度是彼此獨立的。
- 將未遮罩的值輸出到主控台或暫存檔「以便查看資料」:遮罩必須在寫入任何內容之前完成。
- 用估計取代本機計算:在完整資料規模下,估計幾乎總是錯誤的。
- 「為了方便」將
.xls送到雲端轉換器:違反紅線;請改為在本機重新儲存。 - 忽略編碼:將 GB18030 的 CSV 以 UTF-8 讀取會產生亂碼,進而污染欄位描述。腳本會處理編碼;手寫程式碼也必須注意。
語言說明
偵測規則主要針對中文資料格式 (身分證號碼、省/市地址、中文姓氏) 加上通用模式 (電子郵件、電話、銀行卡、車牌)。報告與主控台輸出目前為中文;在模式允許的情況下,偵測邏輯與語言無關。對於純英文文件,結構化表格遮罩仍可透過欄位標題運作,但自由文字的名稱偵測效果較弱 — 請誠實說明,不要過度承諾。