文本AI模式检测器

基于规则的自然语言分析工具,通过200+启发式方法检测文本中的AI生成模式并给出0-100评分

  • by eric-tramel
  • Python
  • 本地部署
  • 168 星标
  • 更新于
在 GitHub 查看 eric-tramel/slop-guard

使用说明

斜坡防护装置

一个基于规则的散文连字号,为公式化的人工智能写作模式对文本进行0-100的评分。没有LLM法官,没有API调用。纯粹是程序性的。

默认管道加载24个可配置规则,由200多个文字和结构启发式算法支持。它返回一个数字分数、一个乐队标签、与周围环境的具体违规行为,以及每次点击的具体建议。

添加到您的代理

两个客户端使用相同的MCP命令: uvx slop-guard. 如果你想要一个自定义规则JSONL,请附加 -c /path/to/config.jsonl.

Claude 代码

从命令行添加:

claude mcp add slop-guard -- uvx slop-guard

添加到您的 .mcp.json:

{
  "mcpServers": {
    "slop-guard": {
      "command": "uvx",
      "args": ["slop-guard"]
    }
  }
}

法典

从命令行添加:

codex mcp add slop-guard -- uvx slop-guard

添加到您的 ~/.codex/config.toml:

[mcp_servers.slop-guard]
command = "uvx"
args = ["slop-guard"]

如果你想要一个固定的释放,把它钉上 args例如: ["slop-guard==0.5.0"].

命令行界面

这 sg 从终端命令lints散文。没有API密钥,没有网络调用。

快速启动

# Run without installing
uvx --from slop-guard sg README.md

# Or install it
uv tool install slop-guard
sg README.md

用法

sg [OPTIONS] INPUT [INPUT ...]

sg 需要至少一个输入。每个输入可以是文件路径, - 对于stdin或引用的内联散文文本:

sg "This is some test text"
echo "Latency dropped from 180 ms to 95 ms." | sg -

一次抓取多个文件(shell级glob扩展):

sg docs/*.md README.md
sg path/**/*.md

选项

标志 描述
-j, --json 以JSON格式输出结果,包括 source 作为原始内联/stdin文本或完整文件路径
-v, --verbose 显示个人违规行为和建议
-q, --quiet 仅打印未达到阈值的源
-t SCORE, --threshold SCORE 最低及格分数(0-100)。如果任何输入分数低于此值,则退出1
-c JSONL, --config JSONL JSONL规则配置的路径。默认为打包设置
-s, --score-only 仅打印数字分数输出
--counts 在摘要行中显示每条规则的点击次数

例子

# One-line summary per file
sg draft.md
# => draft.md: 72/100 [light] (1843 words) *

# Score-only output
sg -s draft.md

# Use a custom rule config
sg -c /path/to/config.jsonl draft.md

# Verbose output with violations and advice
sg -v draft.md

# JSON for scripting
sg -j report.md | jq '.score'

# JSON preserves the true CLI input identity
sg -j "The migration finished in 12 seconds." | jq '.source'
# => "The migration finished in 12 seconds."

# CI gate: fail if any file scores below 60
sg -t 60 docs/*.md

# Quiet mode: only show failures
sg -q -t 60 **/*.md

退出代码

代码 含义
0 成功(所有文件都通过阈值,或未设置阈值)
1 一个或多个文件得分低于阈值
2 错误(文件路径错误、读取失败等)

适配规则配置(sg-fit)

使用 sg-fit 从语料库数据中拟合JSONL配置规则:

# Legacy shorthand
sg-fit TARGET_CORPUS OUTPUT

# Multi-input mode (for shell-expanded globs or many files)
sg-fit --output OUTPUT TRAIN_INPUT [TRAIN_INPUT ...]

例子:

sg-fit data.jsonl rules.fitted.jsonl
sg-fit --output rules.fitted.jsonl **/*.txt **/*.md

可选参数:

  • --init JSONL:从特定的规则配置JSONL开始,而不是打包的默认值。
  • --negative-dataset INPUT [INPUT ...]:添加负数据集输入。这个标志可以重复;所有负行都被标准化为标签 0.
  • --no-calibration:跳过拟合后对比惩罚校准,以便在大型语料库上更快地拟合。
  • --output JSONL:当您通过多个培训输入时,此项为必填项。

目标语料库行可以是:

{"text": "body of text", "label": 1}

或者:

{"text": "body of text"}

如果 label 在目标语料库中省略, sg-fit 将其视为 1 (积极/目标风格)。

sg-fit 也接受 .txt 和 .md 文件夹。每个文件都被标准化为一个训练样本。

安装

需要 紫外线.

无需安装即可运行(建议用于MCP设置):

uvx slop-guard
# MCP server with custom rule config
uvx slop-guard -c /path/to/config.jsonl

持续安装(为您提供 slop-guard, sg,以及 sg-fit):

uv tool install slop-guard

重复性引脚版本:

uvx slop-guard==0.5.0

升级已安装的工具:

uv tool upgrade slop-guard

来源

从本地结账:

uv run slop-guard               # MCP server
uv run slop-guard -c config.jsonl
uv run sg            # CLI linter
uv run sg-fit data.jsonl rules.fitted.jsonl

核心开发工作流程也通过以下方式公开 make:

make sync
make check
make fix
make build
make verify-wheel

MCP工具

check_slop(text):分析字符串。仅返回JSON诊断;它不会重复输入文本。

check_slop_file(file_path):从磁盘读取文件并对其进行分析。输出相同,不重复有效负载中的文件路径。

它捕获了什么

默认规则包括股票炒作词和样板短语、辅助语气标记、未归因的黄鼠狼短语、人工智能自我披露、占位符文本、项目符号/区块引用/水平规则重的Markdown结构、任意的句中关键字粗体、句子和段落节奏,以及破折号或冒号的过度使用。

他们还标记了对比/设置-解决告诉、简洁的片段、重复的4-8个单词的短语、系词链、超长句子、格言式的结尾和不均匀的段落节奏。

10个单词以下的文本将被跳过,并返回一个干净的 100.

否则,评分使用指数衰减: score = 100 * exp(-lambda * density),其中密度是每1000个单词归一化的加权惩罚和。克劳德特定类别(对比度对、设置分辨率、简洁片段)会得到浓度倍数。重复使用相同的tic比不同的违规行为成本更高。

评分乐队

分数 乐队
80-100 清洁
60-79 光线
40-59 中等
20-39 重型
0-19 饱和

输出

命令行界面 --json 输出和MCP工具响应共享此结构:

source         CLI JSON only; raw inline/stdin text or full file path
score          0-100 integer
band           "clean" / "light" / "moderate" / "heavy" / "saturated"
word_count     integer
violations     array of {type, rule, match, context, penalty, start, end}
counts         per-category violation counts
total_penalty  sum of all penalty values
weighted_sum   after concentration multiplier
density        weighted_sum per 1000 words
advice         array of advice strings, one per distinct issue

MCP工具响应省略 source,因为工具运输工具已经携带 输入参数。

violations[].type 总是 "Violation" 用于打印记录。

基准快照

分数分布示例 benchmark/us_pd_newspapers_histogram.py 上 PleIAs/US-PD-Newspapers (一个本地分片的前9001行):

示例分数与长度散点图 benchmark/us_pd_newspapers_scatter.py 在同一个分片上:

根据规则计算时间曲线的示例 benchmark/compute-time.py + benchmark/chart.py (以最大长度标注最慢的规则):

许可证

麻省理工学院

致谢