AI 寫的開發信要像對方自己寫的:我們給樣品定的品質門檻
先講清楚:這套開發信我們目前一封都沒有寄,程式裡也沒有寄信的程式碼。這篇寫的是流程設計,以及我們給樣品定的品質門檻。
起點是一個想法:與其寄一封自我介紹,不如直接附上產品做出來、對方用得到的東西。我們設計了三種樣品。MindThread 那一種,是照對方自己的語氣寫三篇 Threads 示範草稿;SEO/GEO 那一種,是掃描對方公開頁面得出的三點檢查結果,每點附對方自己十分鐘能改的做法;UltraGrowth 那一種,是對方官網在 AI 搜尋裡的觀察,加一頁精簡報告。
第一版做出五封樣品,我們請審查員扮演收件那家店的老闆打分,平均 5.7 分。問題很典型:開頭引對方首頁標語,草稿是把官網文案搬上 Threads,檢查結果是「沒有 h1、圖片沒有 alt」這種掃描器通用句。換成你收到,大概也是直接刪掉。
後來我們定了四道門檻。
第一道:先做品牌簡報,抓不到的照實寫
模型寫之前,先替每個對象做一份品牌簡報,固定六欄:定位、客群、語氣、在賣什麼、最近在推什麼、看得見的痛點。每一條都要附出處。
資料只從公開地方拿,而且只讀:
- 官網抓 3 到 5 頁(首頁、關於、課程或服務這類),只用 GET,原始 HTML 存檔。
- Threads 網頁版沒登入看不到貼文,所以改用 Meta 官方 API 唯讀抓近 15 則。
- 官網有 RSS 就抓近 10 篇,有 YouTube 就抓頻道最新影片。
- IG 和 FB 沒登入只拿得到粉絲數和簡介,貼文內容抓不到。這點直接寫進簡報,不假裝有讀過。
研究深度也有門檻:官網至少 3 頁,近期內容至少 10 則。五個對象裡有一家沒有 Threads、FB 要登入,近期內容是 0 則。我們沒有硬湊,而是在簡報寫明原因,近況只從官網最新消息判斷。
開頭也改了規則:不再引首頁標語,改寫對方最近 30 天做的一件具體的事,附日期和逐字短引,再加一個對方可能沒注意到的觀察。例如某個網站的最新消息摘要,直接顯示一段程式碼;或某個品牌剛上架幾支影片,近期貼文都還沒提到。
第二道:語氣用程式算,不讓模型猜
「請照對方的語氣寫」這句話對模型幾乎沒用。它會寫成它以為的「親切小店風」。所以我們從對方的貼文直接算數字,再把數字交給模型:
// 從對方自己的貼文算語氣統計(簡化版)
const EMOJI = /\p{Extended_Pictographic}/gu
export function voiceStats(posts) {
const texts = posts.map((p) => p.text || '').filter(Boolean)
if (!texts.length) return null
const n = texts.length
const count = (re) => texts.reduce((a, t) => a + (t.match(re) || []).length, 0)
const chars = texts.map((t) => [...t.replace(/\s+/g, '')].length)
return {
posts: n,
avgChars: Math.round(chars.reduce((a, b) => a + b, 0) / n),
avgLines: +(texts.reduce((a, t) => a + t.split('\n').filter((l) => l.trim()).length, 0) / n).toFixed(1),
emojiPerPost: +(texts.flatMap((t) => t.match(EMOJI) || []).length / n).toFixed(1),
hashtagsPerPost: +(count(/#[^\s#]+/g) / n).toFixed(1),
pronouns: { 我: count(/我(?!們)/g), 我們: count(/我們/g), 你: count(/你/g), 妳: count(/妳/g), 您: count(/您/g) },
questions: count(/[??]/g),
}
}
拿其中一個品牌來說,近期貼文平均不到 100 字、每則六、七行、幾乎不放表情符號、稱呼讀者幾乎都用「妳」、從不用「您」、每則都有問句。草稿就照這個寫:一句一行、用「妳」跟讀者說話、問句收尾。
第二個問題來得意外。第一輪改版後,審查員最大的抱怨是「把我們昨天的貼文再貼一次」。模型為了像,乾脆照抄。所以加一道反向檢查:草稿跟對方已發的貼文連續 18 字相同,就退回重寫。
// 兩段文字最長的連續相同字數(簡化版,以字元計,中文一字算一)
export function longestCommonRun(a, b) {
const x = [...a], y = [...b]
let best = 0
let prev = new Array(y.length + 1).fill(0)
for (let i = 1; i <= x.length; i++) {
const cur = new Array(y.length + 1).fill(0)
for (let j = 1; j <= y.length; j++) {
if (x[i - 1] === y[j - 1]) { cur[j] = prev[j - 1] + 1; if (cur[j] > best) best = cur[j] }
}
prev = cur
}
return best
}
// 用法:任何一篇已發貼文跟草稿的 longestCommonRun >= 18 就退回
最後,草稿要接對方「正在推、但還沒在 Threads 講過」的東西,例如官網的教學文、剛上架的影片。每篇草稿底下附一句「為什麼這樣寫」,指到具體的日期和貼文。
第三道:每句事實附來源,程式重比
這一道跟我們給站內 AI 助理做的忠實度檢查是同一個思路:模型寫的每句話,都要能對回原始資料。
每封樣品都有一份事實對照表,每句講到對方的話,對到來源網址和逐字片段。寄前檢查會做這些事:
- 開頭句的引文,拿存檔重新比對一次。
- 草稿裡每個事實的出處片段,逐字對得到公開頁。
- 草稿裡出現來源沒寫的數字就退回,中文數字也查。
- 官網檢查的每一點,附實跑 curl 的輸出檔、十分鐘改法,以及照官網原文組好、可以直接貼上的文字。
- 正文 200 到 350 字,純文字,連結只放在簽名,附退訂說明。
- 禁用字清單:免費、您、破折號、保證、限時這類。
AI 搜尋的結果還有一個坑。同一題問兩次,引用官網的次數從 1 變成 0。如果每次重產都重問,信裡那句「AI 搜尋有引用你」可能下一秒就不成立。所以 AI 搜尋的句子由程式照存檔組出來,模型不能改數字;人工修稿後重產時,沿用同一份存檔。
為了確認這些檢查真的會擋,我們做了反例測試:故意塞「免費」、「您」、破折號、外部網址、假引文、刪掉「為什麼這樣寫」、放入錯誤的個人化內容,7 種各自觸發對應的檢查並失敗。
第四道:請審查員扮演收件老闆打分,7 分以下重寫
前三道管的是「對不對」,這一道管的是「對方想不想回」。
做法是開一個新的審查員,請它扮演那家店的老闆,替整封信打 1 到 10 分。10 分是一定回而且想用,7 分是還行但大概不回,5 分以下是直接刪掉。每一輪都開新的審查員,給它上一版的分數和扣分原因當基準,並要求它自己去對官網快照、貼文和 AI 搜尋存檔,不能只讀信。
規則是 7 分以下(含 7 分)重寫,最多兩輪。結果:
| 第一版 | 改版第 1 輪 | 改版第 2 輪 | |
|---|---|---|---|
| 五封平均 | 5.7 | 6.6 | 7.0 |
| 最高 | 7 | 7.5 | 7.5 |
五封都比第一版高,最多高 2 分,但沒有一封到 8 分。
更值得記的是兩輪之後的事。我們再做一次事實查核,還是抓到錯:一篇草稿推的活動,那頁其實設了密碼、只公開標題;一則舊貼文的月份寫錯;一句「你們常用 A、B、C 選項讓讀者回覆」,實際上十幾篇裡只有 1 篇用了字母。另外第一輪曾推一門寄信兩天後就開課的課程,早鳥早就截止了,後來加了規則:不推 7 天內開始或早鳥已截止的活動。
打分的審查員看得出「我會不會回」,但不一定看得出「這句是不是真的」。所以評分和事實查核要分開做。這些錯都修了,但修完沒有再評分,最終稿的分數我們不知道。
還差什麼
最後一輪審查員的共同意見,我們照實列:
- 簽名沒有真人。現在署名「團隊」,有三封的審查員都提到「不知道是誰寫的」。
- 對已經很勤發文的品牌講不出價值。對方有人每天固定時間發文,「一次排好一週」對他沒有吸引力,要講他沒覆蓋到的東西。
- 檢查結果硬湊三點。有一封對方真正在意的只有一點,另外兩點是湊數。
- 十分鐘改法沒寫前提。有的網站後台改不了 head,要附一句「轉給網站廠商」的話。
- AI 搜尋只問了一家,但信裡的說法像是問了好幾家。
還有一點要承認:審查員扮演的老闆不是真的老闆,分數只是代理指標。
照做清單
- 每個對象先做品牌簡報:六欄、每條附出處,抓不到的寫明原因。
- 開頭寫對方最近 30 天的一件具體的事,附日期和逐字短引。
- 語氣用程式從對方貼文算,數字交給模型。
- 草稿跟對方已發貼文連續 18 字相同就退回。
- 每句事實附出處片段,程式重比;來源沒有的數字一律退回。
- 會變動的外部結果(像 AI 搜尋)存檔一次,之後都用存檔。
- 用反例確認每道檢查真的會擋。
- 請審查員扮演收件人打分,7 分以下重寫,最多兩輪;評分之後再另外做一次事實查核。
常見問題
用 AI 寫開發信,怎麼讓草稿像對方自己寫的?
先抓對方最近的貼文,用程式算語氣:平均字數、每則幾行、表情符號、hashtag、用「你」「妳」還是「您」、幾個問句。模型照這些數字寫,不靠它自己猜風格。再加一道檢查:草稿跟對方已發的貼文連續 18 字相同就退回,因為照抄對方昨天的貼文,比寫得不像更糟。
AI 寫的開發信怎麼避免講錯對方的事?
每一句講到對方的事實,都要附出處和逐字片段,程式會拿存檔重新比對;草稿裡出現來源沒寫的數字就退回,中文數字也查。即使這樣,兩輪評分之後的事實查核還是抓到密碼保護的活動頁被當成公開資訊、日期寫錯月份、推論過頭。所以最後一關一定要有人或另一個審查員對原始資料查一次。
這套開發信流程已經在寄了嗎?
還沒有。目前一封都沒寄,程式裡也沒有寄信的程式碼,這篇寫的是流程設計。五封樣品只在內部評分,最高 7.5 分,沒有一封到 8 分。我們覺得還沒好到可以寄。