mcpField
N
noise2blog

noise2blog

github.com/varnan-tech营销与增长68744 次安装2 周前更新
代码仓库

关于 noise2blog

这项技能可将粗略笔记、转录稿、推文合集、短草稿或 URL 内容整理成博客文章。它使用 Gemini 生成内容,并可通过 Tavily 研究核实主张,要求具体信息有来源依据。

主要功能

  1. 01接收笔记、转录稿、推文合集、草稿或 URL
  2. 02识别输入类型和博客文章风格
  3. 03配置 Tavily 后核查相关主张
  4. 04生成博客文章、SEO 元描述和备选标题
  5. 05依据输入材料或研究来源检查主张

适用场景

  1. 01将零散笔记整理为可发布的文章
  2. 02把转录稿或推文串改写成博客文章
  3. 03为草稿中的主张补充来源核实

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/varnan-tech/opendirectory --skill noise2blog

安装后在 Claude Code 中输入/noise2blog确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.env.example
README.md
evals/
evals.json
references/
blog-format.md
output-template.md

详细介绍

从杂乱素材到博客文章

将任意粗略素材(要点、语音转录、推文合集或简短草稿)整理成润色完善、可直接发表的博客文章。每项说法都必须有原始素材或经 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 → Get API key 获取密钥,并将其添加到 .env 文件中。”

如果缺少 TAVILY_API_KEY: 继续。说明将跳过 Tavily 补充信息。博客文章将完全基于用户提供的内容。这适用于个人经历、基于经验的教程或观点文章。

确认输入内容已提供。 用户必须提供以下内容之一:

  • 粘贴的文本(要点、粗略笔记、转录、推文合集或简短草稿)
  • 要抓取内容的 URL

如果没有输入内容,请询问:“请分享你的粗略笔记、要点或转录。可以直接粘贴,也可以提供要抓取来源的 URL。”


第 2 步:阅读并分析输入内容

如果输入是 URL: 使用 WebFetch 抓取页面内容。提取:标题、作者、发布日期、所有正文、关键统计数据、编号列表、小标题和引语。

如果输入是粘贴的文本: 直接阅读。识别输入类型:

  • 要点或粗略笔记:零散的想法、不完整的句子、意识流
  • 语音转录:口语化、重复、填充词(嗯、呃、像、你知道)、冗长曲折的句子
  • 推文串合集:简短片段、@提及、话题标签、“1/8”编号
  • 简短草稿:结构完整但内容单薄,需要扩充和润色

质量检查关卡: 继续之前,先说明:

  1. 识别出的输入类型
  2. 用一句话概括核心论点或主要观点
  3. 原始内容中最有力的 3~5 条见解、事实或想法
  4. 需要外部验证的说法(基准测试、统计数据、产品比较、研究发现)

如果无法确定核心论点,请询问:“你最希望读者记住的一件事是什么?”


第 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 的结果。提取:标题、url、内容摘要。

使用 Tavily 结果的规则:

  • 使用结果支持或核实原始输入中已有的论据。绝不要引入搜索结果中的全新论据。
  • 在正文中自然注明来源:“根据 [Source]”“[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) 用于 SEO 预览文本的 1-2 句元描述
  • (C) 一个采用不同切入角度的备选标题

步骤 6:自我检查

逐项执行所有检查,并在提交前修正违规之处:

  • 标题不以“I”“My”或“We”开头
  • 标题具体且自然(不能使用“A Comprehensive Guide to X”或“The Ultimate Guide to Y”)
  • 开篇段落要吸引读者,不要宣布主题(例如“In this post I will...”)
  • 任何一行都不得使用 em dash
  • 不得使用分号
  • 空行前的段落不超过 3 行
  • 不得使用以下禁用词:incredible、amazing、leveraging、game-changing、delve、harness、unlock、groundbreaking、cutting-edge、remarkable、paradigm、revolutionize、seamless、robust、utilize、unprecedented、comprehensive、actionable、crucial、pivotal
  • 不得编造数据:每项论据都必须能追溯至原始输入或 Tavily 结果
  • 文章结尾不得使用“In conclusion”“To summarize”或“I hope this helped”
  • 字数为 800-1,800 词(注明字数)
  • 逻辑流畅:开篇 → 问题/背景 → 正文各部分 → 可执行的结尾

修正所有违规之处。注明最终字数。


步骤 7:输出

将完整博客文章放在代码块中。

在正文下方提供元描述和备选标题。

询问:“可以复制到编辑器中了吗?如果你要发布到特定平台,请告诉我,我可以为你设置 frontmatter 格式。”

针对特定平台的请求:

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]
---

评论

支持 Markdown