name: humanizer description: 将AI生成的文本重写为自然的人类写作,通过移除常见的LLM模式,同时保留意义和语气。
人性化工具: 移除AI写作模式
编辑文本,使其听起来像真人写的:更清晰的节奏、更强的具体性、更少的填充词,没有聊天机器人痕迹。保持原始意义、事实和意图。
快速质量检查清单
name精确匹配文件夹名称 (humanizer)- 示例是可复制粘贴运行的 (Bash + Node.js)
- 重写保留事实性声明和范围
- 输出包括重写后的文本和可选简洁更改摘要
- 不发明事实、引用或来源
使用时机
- 用户要求“人性化”、“去AI化”、“让这听起来自然”或“移除AI语气”
- 草稿听起来通用、夸张、公式化或过度修饰
- 内容有聊天机器人痕迹(犹豫、恭维语气、样板介绍/结尾)
- 需要更紧凑、更直接的风格而不改变事实性声明
必需工具 / API
- 无需外部API
- 可选本地工具用于批量编辑:
rg(ripgrep) 用于模式检测node(v18+) 用于脚本化重写管道
安装选项:
# Ubuntu/Debian
sudo apt-get install -y ripgrep nodejs npm
# macOS
brew install ripgrep node
技能
basic_usage
使用此流程处理单个段落:
- 在输入中识别AI模式
- 将句子重写为更简单的结构
- 当提供详细信息时,用具体细节替换模糊声明
- 保持语气与用户上下文一致(正式/非正式/技术性)
- 返回重写后的文本
Bash (模式扫描):
cat input.txt \
| rg -n -i "\b(additionally|crucial|pivotal|underscores|highlighting|fostering|landscape|testament|vibrant)\b|\b(i hope this helps|let me know if|great question)\b|—|[“”]"
Node.js (基于规则的简单人性化器):
function humanizeText(text) {
const replacements = [
[/\bIn order to\b/g, "To"],
[/\bDue to the fact that\b/g, "Because"],
[/\bAt this point in time\b/g, "Now"],
[/\bIt is important to note that\b/g, ""],
[/\bI hope this helps!?\b/gi, ""],
[/\bLet me know if you'd like.*$/gim, ""],
[/\bserves as\b/g, "is"],
[/\bstands as\b/g, "is"],
[/\bboasts\b/g, "has"],
[/—/g, ","],
[/[“”]/g, '"']
];
let output = text;
for (const [pattern, to] of replacements) {
output = output.replace(pattern, to);
}
return output
.replace(/\s{2,}/g, " ")
.replace(/
{3,}/g, "
")
.trim();
}
// 用法:
// const fs = require('node:fs');
// const input = fs.readFileSync('input.txt', 'utf8');
// console.log(humanizeText(input));
robust_usage
用于长草稿和生产输出:
- 第一遍进行模式检测
- 第二遍调整结构/节奏(混合短句和长句)
- 移除无支持的声明(“专家说”、“观察者指出”)除非有来源
- 优先使用普通动词 (
is/are/has) 而不是夸张的替代词 - 只有在存在真实不确定性的地方保持不确定性
Bash (批量重写启动器):
#!/usr/bin/env bash
set -euo pipefail
in_file="${1:-input.txt}"
out_file="${2:-output.txt}"
sed -E \
-e 's/\bIn order to\b/To/g' \
-e 's/\bDue to the fact that\b/Because/g' \
-e 's/\bAt this point in time\b/Now/g' \
-e 's/\bserves as\b/is/g' \
-e 's/\bstands as\b/is/g' \
-e 's/\bboasts\b/has/g' \
-e 's/[“”]/"/g' \
-e 's/—/,/g' \
"$in_file" > "$out_file"
echo "重写文本已保存至: $out_file"
Node.js (带验证的管道):
import fs from "node:fs/promises";
const bannedPatterns = [
/\bI hope this helps\b/i,
/\bLet me know if you'd like\b/i,
/\bGreat question\b/i,
/\bAdditionally\b/g,
/\bcrucial|pivotal|vibrant|testament\b/g
];
function rewrite(text) {
return text
.replace(/\bIn order to\b/g, "To")
.replace(/\bDue to the fact that\b/g, "Because")
.replace(/\bAt this point in time\b/g, "Now")
.replace(/\bserves as\b/g, "is")
.replace(/\bstands as\b/g, "is")
.replace(/\bboasts\b/g, "has")
.replace(/—/g, ",")
.replace(/[“”]/g, '"')
.replace(/\s{2,}/g, " ")
.trim();
}
function validate(text) {
const hits = bannedPatterns.flatMap((pattern) => {
const m = text.match(pattern);
return m ? [pattern.toString()] : [];
});
return { ok: hits.length === 0, hits };
}
async function main() {
const inputPath = process.argv[2] || "input.txt";
const outputPath = process.argv[3] || "output.txt";
const input = await fs.readFile(inputPath, "utf8");
const output = rewrite(input);
const report = validate(output);
await fs.writeFile(outputPath, output, "utf8");
if (!report.ok) {
console.error("警告: 可能的AI模式残留:", report.hits);
process.exitCode = 2;
}
console.log(`已保存: ${outputPath}`);
}
main().catch((err) => {
console.error(err.message);
process.exit(1);
});
模式检查清单
扫描并移除这些类别当它们出现时:
- 重要性夸张和传统框架
- 无上下文的知名度/媒体点名
- 表面化的
-ing链 - 促销/广告措辞
- 模糊归属(“专家说”)
- 公式化的“挑战/未来前景”部分
- 过度使用的AI词汇(例如,关键、强调、织锦)
- 系词回避 (
serves as,stands as而不是is) - 负面平行结构 (
not just X, but Y) - 三原则过度使用
- 过度同义词循环
- 虚假范围 (
from X to Y无有意义的尺度) - 破折号过度使用
- 机械粗体强调
- 内联标题项目符号痕迹
- 标题大小写过度使用,当句子大小写合适时
- 正式内容中的表情符号装饰
- 预期直引号时使用弯引号
- 聊天机器人协作痕迹
- 知识截止免责声明留在最终副本中
- 谄媚/恭维语气
- 填充词膨胀
- 过度犹豫
- 无实质的通用积极结论
输出格式
返回:
rewritten_text(字符串, 必需): 最终人性化草稿changes(字符串数组, 可选): 3-8条简洁项目符号描述主要编辑warnings(字符串数组, 可选): 未解决的模糊性或缺失来源详情
示例:
{
"rewritten_text": "政策可能影响结果,尤其是在小型团队中。",
"changes": [
"移除了填充短语: 'It is important to note that'",
"将模糊的犹豫'could potentially possibly'替换为'may'"
],
"warnings": [
"关于影响规模的说法在原始文本中仍无来源支持"
]
}
错误形状:
{
"error": "input_too_short",
"message": "需要至少一个完整句子以可靠地人性化。",
"fix": "提供更长的段落或将短片段组合成段落。"
}
速率限制 / 最佳实践
- 最多使用2次重写遍数(模式遍 + 声音遍)以避免过度编辑
- 除非用户要求简化,否则保持领域术语和命名实体不变
- 保留格式意图(标题、项目符号、引用块),除非明显损坏
- 如果来源声明模糊,保持措辞保守并提供警告,而不是发明具体细节
- 默读输出:如果节奏听起来机械,变化句子长度和节奏
代理提示
您拥有人性化技能。当用户要求使文本听起来自然时:
1) 阅读完整草稿并检测AI写作模式。
2) 重写以保留意义、事实和预期语气。
3) 优先使用具体、具体的语言,而不是模糊的重要性声明。
4) 移除聊天机器人痕迹、填充词和过度犹豫。
5) 使用更易读的简单结构 (is/are/has)。
6) 变化句子节奏,使文本听起来像真人所说。
7) 返回重写后的文本。可选添加关键更改的简短项目符号摘要。
永不发明事实。如果声明模糊且无来源提供,保持其保守。
故障排除
重写感觉太平淡
- 症状: 文本干净但无灵魂
- 修复: 在上下文允许的地方添加自然意见/立场;变化节奏和句子长度
意义从原始漂移
- 症状: 新版本听起来更好但改变了声明
- 修复: 重新运行,严格要求:逐句保留事实性声明和范围
输出仍听起来像AI生成
- 症状: 频繁抽象词汇和公式化过渡残留
- 修复: 首先运行模式扫描,然后仅重写标记的跨度;避免全局同义词交换
验证工作流
在返回输出前使用此快速关口:
- 逐句比较原始与重写版本,检查事实等效性
- 验证未引入不支持的新具体细节
- 检查遗留的聊天机器人痕迹 (
I hope this helps,Let me know if) - 确保节奏多样性(不是所有句子长度相同)
- 返回
warnings用于未解决的模糊性
另请参阅
- …/web-interface-guidelines-review/SKILL.md — 改善用户界面文案的清晰度和结构
- …/json-and-csv-data-transformation/SKILL.md — 在重写遍数前转换和验证大型文本数据集
参考
- 来源灵感: https://skills.sh/blader/humanizer/humanizer
- 模式基础: Wikipedia “Signs of AI writing” (WikiProject AI Cleanup)