Community寫作與編輯github.com

boris-timofeenko/ne-slop-text

撰寫或修正文字,使其讀起來像特定人物所寫,而非網路上的一般模型。適用於信件、求職信、履歷、貼文、README 等。

ne-slop-text 是什麼?

這項技能專注於生成或修改文字,使其擺脫 AI 模型慣用的「平均化」寫作風格(即 slop),轉而呈現特定人物的個人聲音。它不靠換詞,而是透過一個包含「哲學分析」、「偏離預設值的迭代循環」以及「最後的潤飾」的管道來達成。此技能支援任何語言,並可在 Claude Code、Cursor、Codex 等平台上使用。其實現原理是:先分析任務與材料,找出只有該人物才有的獨特素材;接著生成多個模型的預設輸出作為對照,並透過定義好的話語特徵問卷來標記草稿;最後根據標記結果進行修訂,並使用輕量級的 lint 工具進行最終檢查。對於重要文本,還支援盲測與權重學習,讓系統能從使用者的偏好中持續進步,避免落入常見的「人性化」改寫陷阱。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/boris-timofeenko/ne-slop-text/tree/HEAD

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

ne-slop-text 是做什麼的?

Slop 就是平均:當模型用最可能的選擇填補空白,或當被要求「讓它變得更好」時所寫出的東西。它存在於決策中(說了什麼、誰推動了事件、如何結尾、列出了什麼、命名了什麼),而不是在詞彙上。換詞無法解決問題:StoryScope(Russell 等人,COLM 2026)僅憑話語特徵就能以 93% 的 F1 分數區分 AI 與人類故事,而專業的表面改寫僅將偵測率從 95.5% 移動到 93.9%。模型聚集在同一個區域;人類則分散各處。因此,這項技能不套用固定食譜。它會針對每項任務,找出預設模型的落點,並利用該人物的素材將草稿從那裡移開。

此管道的發現與測試方式:docs/evidence.md。以下路徑皆相對於此技能的目錄。

輸入

  • 一項任務(寫什麼、寫給誰、為什麼)或一份原始文字(待修正的文本)。
  • 背景資訊,可選:文件、事實、該人物自己的用語(語音逐字稿、聊天記錄、內部筆記)。

選擇模式

  • 短文模式(約 120 字以下:聊天回覆、簡短訊息、標題):執行步驟 1,然後步驟 3。此長度下循環沒有訊號;在盲測中,100 字摘要的五種不同寫法無法區分。
  • 全文模式(任何更長、要給他人看的內容):執行步驟 1、2、3、4。當文字很重要或用戶要求時,執行步驟 5。

步驟 1. 撰寫前的哲學

  1. 素材優先。 找出只有這個人擁有的東西:一個具體事件;他們持有的一個觀點;塑造事件但非他們本身的力量(有人推動、某物被繼承、某事失敗了);一個保留或限制;他們自己的措辭。同一文體的舊文本(過去的履歷和信件)提供的是事實,而非聲音。
  2. 缺失的素材。 如果文字很重要,提出 1 到 3 個簡短問題;語音回答最佳,保留逐字稿作為素材。提出不暗示答案的開放式問題:「實際上是怎麼發生的」、「有沒有這樣一個案例」、「你對 X 有什麼看法」、「你還做不到什麼」。如果你無法提問,請使用可驗證的具體細節(姓名、數字、來源)並保持缺口可見。絕不用平均值填補缺口。
  3. 讀者與他們的代碼。 他們具體要求了什麼?他們使用哪些詞語和玩笑?用他們自己的話回答,當它能表達觀點時就是活的(「您的廣告要求正義,所以我不會聲稱自己最好:我還沒見過其他候選人」)。將他們的用語當作標籤或標題則是 slop。
  4. 貼近素材呈現。 該人物的思考順序、他們的保留用語(「可能」、「整體而言」)、字面而非慣用語的翻譯、使用短動詞的第一人稱:「我帶領 3 名 QA 工程師並簽署版本發佈」被標記為活;「帶領一個由 3 名 QA 工程師組成的團隊並擁有發佈簽署權」則被標記為 slop。
  5. 文體存在於容器中(格式、長度、問候語、必填欄位),而非每個句子。列表放在該放的地方(技能區塊、表格、附件履歷);一個句子承載一個事件或一個機制。
  6. 懷疑來得太容易的東西。 如果一個句子不是經過決策產生的,那它很可能是平均化的結果。

步驟 2. 循環:遠離預設值(全文模式)

  1. 預設值。 在不同模型(例如 opus、sonnet、haiku)上產生 3 個全新代理(fresh agent)。給每個代理純粹的任務和相同的背景資訊,使用 loop/default_prompt.md。它們不得看到此技能、草稿或彼此。
  2. 標註。 再用一個與書寫者不同模型的全新代理,使用 loop/questionnaire.json 並遵循 loop/annotator.md 來標註草稿和預設值。輸出:features.json。
  3. 報告。 python3 loop/consensus.py loop/questionnaire.json features.json D1,D2,D3 DRAFT TEXTS_DIR > report.txt 給出 P1(草稿做了所有預設值都做的事,且偏向機器風格)、P2(按權重偏向機器風格)、Keep(偏向人類,不要丟失)、與預設值共享的 4-grams 以及開頭句子與它們的接近程度。
  4. 修訂。 一個全新代理根據報告和背景資訊,對草稿套用 loop/reviser.md。素材優先於權重:呈現該人物自己用語的句子即使被特徵標記也應保留。
  5. 停止:最多 2 輪,或當 P1 為空時停止。文字不得變長。

成本:約 6 到 8 次代理調用和 3 到 5 分鐘。僅有共識並非 slop:當背景資訊豐富時,每個預設值也可能有具體事件。一個標記需要兩者兼具:預設值達成一致,且該特徵偏向機器風格。有些一致只是文體本身(README 說明如何安裝);告訴修訂者容器是什麼。

步驟 3. 最後的潤飾

python3 lint/lint.py FILE --lang en(或 ru),然後閱讀 lint/en.md 或 lint/ru.md。只修正它標記的內容;此時不要重構。詞彙列表是最弱的訊號,也最快過時。

步驟 4. 輸出

提供給使用者:文字;修改了什麼及原因,用幾行說明;仍然可見的開放式問題和缺口。當使用了背景資訊時,提供「行文 ← 來源」的對應表。絕不編輯使用者的原始檔案;草稿寫在它們旁邊。

步驟 5. 學習

  • 重要文字的盲測: python3 tools/blind.py out.html key.json "標題" "副標題" name=path=label ... 對同一份材料的多種處理結果進行排名,不可並列,句子標記(slop / alive)。至少比較兩段;短片段無法區分。
  • 標記成為權重。 將使用者的標記附加到 learn/marks.jsonl,並加上來自 learn/patterns.md 的模式標籤,然後執行 python3 learn/update_weights.py。它會顯示哪些模式已穩定,以及哪些問卷權重與它們不一致;編輯 loop/questionnaire.json 來匹配。一個被標記為 slop 兩次且從未被標記為 alive 的新模式會成為一個新特徵。
  • 拒絕比讚美教得更多。 當使用者編輯你的文字時,進行 diff:他們刪除的內容也是一種標記。

不該做的事(每一項都測試過)

  • 朝著文體方向打磨(「讓它更專業」):履歷用語和孤獨英雄會回來,事件也會被扭曲。
  • 從好的素材一次生成:模型會將聲音溶解到平均值中並丟失觀點。
  • 刻意表現隨意:作為結構寫出的笑話(「玩笑的答案是……;真正的答案是……」)、「增加個性」的改寫。這是人們能識別出的人性化簽名。
  • 從舊筆記而非從該人物當下獲取觀點。筆記說了一回事;該人物說了另一回事。
  • 追求罕見詞彙。活的文字在詞彙上很普通;罕見的是其中的決策。
  • 機智的轉折,即使是該人物自己的(「像工程師一樣和工程師說話」、「……然後團隊把票轉給另一個人」)。
  • 關於文字本身的文字(「先說 X,因為你明確要求了」)。

其他方法的適用場景

  • ne-slop(父技能,適用於任何創意工作):步驟 1 是其針對文字的部分。真實素材、許多明確的小決策、數個不同的變體,由人選擇,拒絕被記住,檢視結果。
  • StoryScope:步驟 2 背後的理論以及問卷權重的種子。
  • unslop:可移植性測試(這個句子是否適合另一個人或公司?)及其防止虛構事實的護欄屬於步驟 1 和 3;其詞彙列表提供給 lint。
  • humanizer:其模式列表提供給 lint。刻意排除其帶有「個性與靈魂」的改寫。

相關技能