王大明跟 Da-Ming Wang 是同一個人嗎?用 LLM 打造 CRM 自動化資料清洗流水線
☰ 目錄 table-of-contents.md
「王大明」、「Da-Ming Wang」、「wang.daming@gmail.com」——這三筆 CRM 紀錄是同一個人,還是三個客戶?傳統的字串比對規則答不出來,但 LLM 可以。這篇我會示範怎麼用 LLM 打造一條自動化的資料清洗流水線,從重複偵測做到格式標準化,把資料庫的垃圾山剷平。
那一刻,我心裡的 OS 通常是:「因為你們輸入資料的時候從來不看格式啊!」
但抱怨歸抱怨,技術債還是得還。過去我們處理 CRM 資料清洗,靠的是寫到手軟的 Regular Expressions (Regex) 和無止盡的 Excel VLOOKUP 地獄。但現在是 2025 年了,如果還在用 `if name == '台北市'` 這種寫法,真的會寫到懷疑人生。今天這篇文章,我要來聊聊如何利用 LLM (大型語言模型) 結合自動化工具,來解決這個困擾所有企業的千年難題:使用 LLM 自動處理重複或錯誤資料。
為什麼傳統的 CRM 資料清洗是場災難?
在進入 AI 實戰之前,我們先來看看傳統方法的死穴在哪裡。大多數企業的 CRM (不管是 HubSpot, Salesforce 還是自架的 WordPress 系統) 資料來源都很雜:
- 網站表單自動填入 (使用者手滑打錯字)
- 業務手動 Key-in (格式隨心所欲)
- 活動名單匯入 (Excel 欄位對不上)
- API 串接同步 (編碼問題)
這導致了幾個經典問題:
- 語意重複無法識別:傳統程式碼認為「台積電」和「台灣積體電路製造股份有限公司」是兩個完全不同的實體,但人類(和 LLM)知道它們是一樣的。
- 地址格式混亂:有人寫「110 台北市信義區」,有人寫「台北市信義區 110」,傳統腳本很難統一。
- 拼音與錯別字:「John Smith」被誤打成「Jhon Smith」,Fuzzy Matching (模糊比對) 可以解決一部分,但誤判率很高。
LLM:資料清洗的降維打擊武器
這就是為什麼我們需要引入 LLM (Large Language Model)。LLM 最強大的能力在於「語意理解」與「推論」。對於 CRM 資料清洗 來說,LLM 就像是一個不知疲倦、且博學多聞的實習生,它能讀懂資料背後的「意圖」。
1. 利用 Vector Embeddings (向量嵌入) 抓出隱藏的重複項
這是目前最潮也最有效的做法。我們不直接比對文字,而是將客戶資料 (姓名、Email、公司名稱) 透過 OpenAI 的 `text-embedding-3-small` 模型轉換成一組「向量數字」。
在向量空間中,「AI 工程師」和「人工智慧開發者」的距離會非常近,即使它們字面上完全不同。透過計算 Cosine Similarity (餘弦相似度),我們可以輕易抓出那些傳統腳本抓不到的重複客戶。
2. 使用 LLM 進行格式標準化 (Standardization)
這是 LLM 最擅長的。你可以給它一個髒亂的地址或公司名稱,要求它輸出標準格式。例如:
- Input: "北市信義路五段七號 101 大樓"
- Prompt: "請將上述地址標準化為台灣郵政格式,包含郵遞區號,並以 JSON 格式回傳。"
- Output: `{"zipcode": "110", "city": "台北市", "district": "信義區", "address": "信義路五段7號", "landmark": "台北101"}`
實戰教學:用 Python + OpenAI 打造清洗腳本
身為工程師,不秀點 Code 全身不對勁。雖然我們常推廣 n8n 這種 No-Code 工具 (這在自動化流程中超好用),但對於批次處理大量歷史髒資料,Python 還是王者。
以下是一個簡單的概念驗證 (PoC),展示如何使用 OpenAI API 來判斷兩筆 CRM 資料是否為同一人:
// 雖然這通常用 Python 跑,但為了照顧 WordPress 開發者,我用 PHP 示意 API 的呼叫邏輯
function check_duplicate_with_llm($record_a, $record_b) {
$api_key = 'YOUR_OPENAI_API_KEY';
$endpoint = 'https://api.openai.com/v1/chat/completions';
$prompt = "
你是專業的 CRM 資料管理員。請判斷以下兩筆資料是否代表同一個客戶。
回傳 JSON 格式:{'is_duplicate': boolean, 'reason': string, 'confidence_score': 0-100}
資料 A: " . json_encode($record_a, JSON_UNESCAPED_UNICODE) . "
資料 B: " . json_encode($record_b, JSON_UNESCAPED_UNICODE);
$body = [
'model' => 'gpt-4o-mini', // 使用 mini 版本較省錢
'messages' => [
['role' => 'system', 'content' => 'Output only JSON.'],
['role' => 'user', 'content' => $prompt]
],
'response_format' => ['type' => 'json_object']
];
// 發送請求 (使用 wp_remote_post 是 WordPress 的標準做法)
$response = wp_remote_post($endpoint, [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $api_key
],
'body' => json_encode($body),
'timeout' => 30
]);
if (is_wp_error($response)) {
return false;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
return json_decode($body['choices'][0]['message']['content'], true);
}
// 測試資料
$client_1 = ['name' => 'Eric Chen', 'company' => 'Roamer Tech', 'email' => 'eric@roamer.com'];
$client_2 = ['name' => '陳埃瑞克', 'company' => '浪花科技', 'email' => 'eric.chen@roamer-tech.com'];
// 呼叫函式
$result = check_duplicate_with_llm($client_1, $client_2);
// 結果:LLM 能夠理解 Roamer Tech = 浪花科技,判定為高度疑似重複
自動化架構設計:別讓資料有機會變髒
清洗歷史資料只是「治標」,要「治本」就必須在資料進入 CRM 的入口處設下關卡。這就是我們常說的 Data Quality Firewall (資料品質防火牆)。
我建議的架構如下:
- 輸入端 (WordPress 表單/Webhook):當使用者提交表單時。
- 中介層 (n8n / Middleware):資料不要直接寫入 CRM。
- 第一步:呼叫 LLM 進行格式標準化 (修正 Email、電話、地址)。
- 第二步:呼叫 Vector DB 或 CRM API 查詢是否有相似度 > 90% 的現有聯絡人。
- 決策層:
- 如果是新客戶 -> 寫入 CRM。
- 如果是重複客戶 -> 更新現有資料 (Update) 或標記為 Review。
隱私與資安:工程師的最後一道防線
在使用 LLM 處理 CRM 資料清洗 時,大家最擔心的就是資安問題。「Eric,把客戶名單傳給 OpenAI 真的安全嗎?」
這是個好問題。這裡有幾個實務建議:
- PII 去識別化:在傳送給 LLM 之前,可以將敏感個資 (如身分證字號、信用卡號) 進行 Hash 處理或遮罩,只讓 LLM 處理非敏感的結構化資料。
- 使用 Enterprise 協議:如果你使用的是 Azure OpenAI Service 或 OpenAI Enterprise,條款中通常會保證不會使用你的資料來訓練模型。
- Local LLM (地端模型):如果資料真的極度敏感,可以考慮在公司內部伺服器跑 Llama 3 或 Mistral 模型,透過 Ollama 串接,這樣資料就完全不出內網,雖然維護成本較高,但最安全。
結論:資料是資產,髒資料是負債
導入 使用 LLM 自動處理重複或錯誤資料 的流程,初期看起來需要一點技術門檻,但長遠來看,它能節省業務團隊無數個小時的「找人」時間,更能讓你的行銷自動化不再因為錯誤的 Email 而寄送失敗。
不要讓你的 CRM 變成數位垃圾場。善用 AI,讓資料真正成為驅動業績的資產。
延伸閱讀
常見問題
為什麼傳統方法難以清洗 CRM 中的重複資料?
如何用 LLM 抓出 CRM 裡語意重複的客戶?
把客戶資料傳給 OpenAI 做清洗安全嗎?
如何從源頭防止 CRM 資料變髒?
訂閱免費電子報
把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。