雜訊變文章
將任何粗略的輸入內容(要點、語音轉錄稿、推文串或短草稿)轉成一篇潤飾完畢、可立即發表的部落格文章。每個論點都可追溯回原始素材或經由 Tavily 驗證的研究結果。
重要規則:請勿憑空捏造具體細節。 部落格文章中的每個論點、數據和範例都必須來自原始輸入或 Tavily 搜尋結果。絕不虛構資料、引言或結果。
步驟 1:設定檢查
確認必要的環境變數已設定:
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
echo "TAVILY_API_KEY: ${TAVILY_API_KEY:-not set, Tavily enrichment will be skipped}"
如果 GEMINI_API_KEY 缺失: 停止。告知使用者:「需要 GEMINI_API_KEY。請至 aistudio.google.com → 取得 API 金鑰。然後將其加入你的 .env 檔案。」
如果 TAVILY_API_KEY 缺失: 繼續。請注意 Tavily 強化功能將被跳過。部落格文章將完全依據提供的內容產生。這對於個人故事、經驗教學或評論文章來說沒問題。
確認輸入內容已提供。 使用者必須提供以下其一:
- 貼上的文字(要點、粗略筆記、語音轉錄稿、推文串、短草稿)
- 一個要擷取內容的網址
如果沒有輸入,請詢問:「請分享你的粗略筆記、要點或語音轉錄稿。直接貼上文字,或提供一個網址讓我擷取來源。」
步驟 2:讀取並分析輸入
如果輸入是網址: 使用 WebFetch 擷取頁面內容。擷取:標題、作者、發布日期、所有內文、關鍵統計數據、編號清單、副標題、引言。
如果輸入是貼上的文字: 直接讀取。判斷輸入類型:
- 要點或粗略筆記:零散的概念、不完整的句子、意識流
- 語音轉錄稿:口語化、重複、填充詞(呃、嗯、你知道)、迂迴的句子
- 推文串:短片段、@提及、主題標籤、「1/8」編號
- 短草稿:有結構但內容單薄,需要擴充和潤飾
品質檢查點: 在繼續之前,請陳述:
- 偵測到的輸入類型
- 核心論點或主要論述(一句話)
- 原始內容中最有力的 3 到 5 個見解、事實或想法
- 任何需要外部驗證的論點(基準測試、統計數據、產品比較、研究發現)
如果你無法確定核心論點,請詢問:「你希望讀者從這篇文章中得到的最重要的一件事是什麼?」
步驟 3:選擇部落格文章風格
四種風格。根據內容訊號自動偵測。使用者可以隨時覆蓋自動選擇。
| 風格 | 使用時機 | 訊號 |
|---|---|---|
| 技術教學 | 逐步指南、操作說明、程式碼講解 | 編號步驟、指令、程式碼片段、內容中有「如何」 |
| 案例研究 | 前後對比故事、建置記錄、學到的經驗 | 具體結果、時間線、第一人稱經歷 |
| 思想領導 | 意見、論點、違反直覺的主張 | 「我認為」、「X 的問題」、相反立場、辯論框架 |
| 解釋性文章 | 什麼是 X、為什麼重要、如何運作 | 概念優先、充滿比較、「大多數人不知道」 |
偵測邏輯:
- 內容有編號步驟或指令 → 技術教學
- 內容有前後對比、具體指標或敘事弧線 → 案例研究
- 內容反對普遍觀點或提出強烈意見 → 思想領導
- 內容解釋一個概念、工具或趨勢給不熟悉的人 → 解釋性文章
說明選擇的風格及其理由。如果不確定,選一種並註明選擇。
步驟 4:使用 Tavily 研究強化
如果 TAVILY_API_KEY 未設定,則安靜地跳過此步驟。
為原始內容中可能需要驗證或補充數據的論點搜尋佐證。適合的對象:
- 產品基準測試或效能數據
- 市場統計數據或產業趨勢
- 技術比較(「X 比 Y 快」)
- 使用者憑記憶而非引用來源提到的任何數字
針對每個需要驗證的論點執行一次 Tavily 搜尋。最多限制 3 次搜尋,以避免過度引用外部來源:
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "SPECIFIC_CLAIM_OR_TOPIC",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true
}'
保留 score >= 0.65 的結果。擷取:標題、網址、內容片段。
使用 Tavily 結果的規則:
- 使用它們來支持或驗證原始輸入中已經存在的論點。絕不從搜尋結果中引入全新的論點。
- 在文章中自然地標註來源:「根據 [來源]」、「[X] 的數據顯示」
- 如果沒有任何 Tavily 結果能確認某個論點,則讓該論點保持未驗證狀態,而不是替換成不相關的結果
步驟 5:產生部落格文章
完整讀取 references/blog-format.md。從 references/output-template.md 中選取對應的範本。在產生文章之前,將所有規則內化。
將 Gemini 請求寫入一個暫存檔案,以安全處理特殊字元:
cat > /tmp/noise2blog-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "You are a tech writer who sounds like a real person. Rules: Active voice only. Short paragraphs, 1-3 lines max, then a blank line. Use contractions naturally (don't, won't, it's, can't, you're, they're). No em dashes — use a comma or period instead. No semicolons. Every sentence needs a concrete detail: a number, a tool name, a file name, a command, a result. No filler phrases: no 'In today's rapidly evolving', no 'Let's dive in', no 'It's worth noting', no 'In conclusion', no 'I hope this was helpful'. No banned words: incredible, amazing, leveraging, synergize, game-changing, groundbreaking, revolutionary, paradigm, cutting-edge, seamless, robust, unprecedented, delve, harness, utilize, transformative, disruptive, unlock, comprehensive, actionable, crucial, pivotal. Title must not start with I, My, or We. Open with a hook paragraph that does not announce the topic. Close with something actionable. Do not invent claims, metrics, or outcomes not present in the source material."
}]
},
"contents": [{
"parts": [{
"text": "RAW_CONTENT_AND_INSTRUCTIONS_HERE"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 4096
}
}
ENDJSON
將 RAW_CONTENT_AND_INSTRUCTIONS_HERE 替換為:
- 原始輸入內容
- 部落格文章風格與結構說明(來自選取的範本)
- 在步驟 4 中搜集的任何 Tavily 研究結果
- 目標字數:800 到 1,800 字
發送請求:
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/noise2blog-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
同時產出:
- (B) 一段 1-2 句的 SEO 預覽文字 Meta 描述
- (C) 一個使用不同切入角度的替代標題
步驟 6:自我品質檢查
在呈現之前,執行每一項檢查並修正違規:
- 標題不能以「我」、「我的」或「我們」開頭
- 標題要具體且口語化(不能是「X 完整指南」或「Y 終極指南」)
- 開頭段落要以鉤子開場,不要直接宣布主題(例如「在這篇文章中我將…」)
- 任何行中都不能有破折號
- 不能有分號
- 段落不能超過 3 行而未空一行
- 不使用禁用詞語:令人難以置信、驚人、利用、綜效、改變遊戲規則、開創性、革命性、範例、尖端、無縫、強健、前所未有、深入、駕馭、釋放、變革性、破壞性、解鎖、全面、可操作、關鍵、至關重要
- 不能有虛構的數據:每個論點都可追溯回原始輸入或 Tavily 結果
- 文章不能以「結論」、「總結」或「希望這對你有幫助」結尾
- 800-1,800 字(陳述字數)
- 邏輯流程:開場 → 問題/背景 → 主體段落 → 可操作的結尾
在呈現之前修正任何違規。陳述最終字數。
步驟 7:輸出
在一個程式碼區塊中呈現完整的部落格文章。
在主文章下方呈現 Meta 描述和替代標題。
詢問:「準備好複製到你的編輯器了嗎?如果你要發布到特定平台,請告訴我,我可以幫忙格式化前置資料。」
根據平台要求提供對應格式:
Ghost:
---
title: "POST_TITLE"
date: YYYY-MM-DD
tags: [tag1, tag2]
status: draft
---
dev.to:
---
title: POST_TITLE
description: META_DESCRIPTION
tags: [tag1, tag2, tag3]
published: false
---
Substack:以純 Markdown 呈現。Substack 的編輯器可以直接匯入 Markdown。
Hashnode:
---
title: POST_TITLE
subtitle: META_DESCRIPTION
tags: [tag1, tag2]
---