内容
# 写作风格检查工具
[](https://github.com/theserverlessdev/wsc/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/wsc-mcp)
[](LICENSE)
一个用于检查写作风格的工具,可以检测**AI生成的文本特征**,包括常见的写作问题,如**模糊词汇**、**被动语态**、**重复词汇**、**长句**、**名词化**、**缓和语气**和**填充副词**等。该工具提供网页编辑器、HTTP API、MCP服务器、CLI和GitHub Action。
**[在线访问:wsc.theserverless.dev](https://wsc.theserverless.dev)**

## 功能
- **网页编辑器** - 实时高亮显示,并提供内联修复按钮,适用于所有8个检测器
- **HTTP API** - 发送文本并获取结构化JSON响应
- **MCP服务器(远程)** - 通过Streamable HTTP传输连接AI助手
- **MCP服务器(本地)** - 通过`wsc-mcp`在npm上使用stdio-based服务器
- **CLI** - 通过`wsc-lint`从命令行检查文件
- **GitHub Action** - 在CI中运行检查,并使用`::warning`注释
- **可配置** - 使用`.wscrc.json`文件自定义检测器
---
## 写作风格检查工具是什么(和不是什么)
写作风格检查工具标记AI生成的文本中研究发现的模式,并为每个标记提供来源。它不证明作者身份。基于分类器的检测器存在文档化的错误指控风险:斯坦福大学的一项研究发现,七个检测器错误标记了61%的非英语母语者撰写的论文。写作风格检查工具通过设计避免了这个陷阱 - 每个标记都是一个具体的、可解释的编辑,可以改善文本,无论谁或什么写了它。
---
## 检测规则
| 检测器 | 项目 | 描述 |
|----------|-------|-------------|
| **模糊词汇** | 95个词汇/短语 | 模糊的术语,如“非常”,“基本上”,“可以说”,“许多” |
| **被动语态** | 260个不规则动词 | 助动词 + 过去分词(规则`-ed` + 不规则) |
| **重复词汇** | — | 相邻的重复词汇,不区分大小写 |
| **长句** | 阈值:30个词汇 | 超过可配置的词汇计数的句子 |
| **名词化** | 245个词汇对 | 可替换为动词的名词(“利用” → “使用”) |
| **缓和语气** | 100个短语 | 削弱断言的短语(“我认为”,“似乎如此”) |
| **填充副词** | 139个词汇 | 没有实质内容的副词(“完全”,“绝对”) |
| **AI生成的文本特征** | 98个词汇(+111个变形)+ 83个短语 + 12个结构模式 | AI生成的文本中占比过高的词汇、短语和句子结构(`delve`,`rich tapestry`,`It's not just X — it's Y`) |
词汇列表来源于 [Matt Might的shell脚本](https://matt.might.net/articles/shell-scripts-for-passive-voice-weasel-words-duplicates/) 并扩展了额外的条目。AI生成的文本特征来源于已发布的语料库研究:Kobak等(2025年,Science Advances),Juzek & Ward(2025年,COLING),Liang等(2024年,斯坦福大学),以及Reinhart等(2025年,PNAS)。维基百科的编辑维护的[AI写作迹象]目录和AI检测供应商的报告完善了这些来源。
---
## 配置
创建`.wscrc.json`文件以自定义检测器。所有工具(API,MCP,CLI)都支持它。
```json
{
"$schema": "https://wsc.theserverless.dev/schema.json",
"detectors": {
"weaselWords": {
"enabled": true,
"add": ["synergy", "leverage"],
"remove": ["very"]
},
"longSentences": { "maxWords": 25 },
"adverbs": { "enabled": false }
}
}
```
每个字段都是可选的。缺少的字段将使用默认值。JSON模式在VS Code中提供自动补全。
---
## API用法
### `POST /api/check`
分析文本的写作风格问题。接受可选的`config`对象。
```bash
curl -X POST https://wsc.theserverless.dev/api/check \
-H "Content-Type: application/json" \
-d '{"text":"The code was written very quickly."}'
```
**响应:**
```json
{
"summary": {
"total": 2,
"weaselWords": 1,
"passiveVoice": 1,
"duplicateWords": 0,
"longSentences": 0,
"nominalizations": 0,
"hedging": 0,
"adverbs": 0
},
"issues": {
"weaselWords": [{ "word": "very", "index": 21, "line": 1, "column": 22, "context": "..." }],
"passiveVoice": [{ "phrase": "was written", "index": 9, "line": 1, "column": 10, "context": "..." }],
"duplicateWords": [],
"longSentences": [],
"nominalizations": [],
"hedging": [],
"adverbs": []
},
"meta": { "characterCount": 34, "wordCount": 6, "sentenceCount": 1, "processingTimeMs": 2 }
}
```
**使用配置:**
```bash
curl -X POST https://wsc.theserverless.dev/api/check \
-H "Content-Type: application/json" \
-d '{"text":"The code was written very quickly.", "config":{"detectors":{"weaselWords":{"enabled":false}}}}'
```
### `GET /api/check`
返回API文档为JSON。
### `GET /api/detectors`
返回所有8个检测器的列表,包含描述、可配置性和词汇计数。
### `GET /health`
运行一个烟雾测试,使用已知文本并返回`{"status":"healthy"}`或`503`。
**限制:**每个请求的最大字符数为100,000。所有来源都启用了CORS。
---
## MCP服务器
写作风格检查工具作为一个[MCP](https://modelcontextprotocol.io/)服务器提供,让AI助手可以直接检查您的写作。
### 工具
| 工具 | 描述 |
|------|-------------|
| `check_text` | 分析文本的所有8个写作风格问题。可选配置。 |
| `fix_duplicates` | 删除重复的相邻词汇并返回清理后的文本 |
| `list_word_lists` | 返回所有检测器词汇列表的信息 |
| `check_file` | *(仅限本地)* 从磁盘读取文件并分析它。自动发现`.wscrc.json`。 |
### 远程MCP服务器
将任何MCP客户端连接到托管服务器 - 无需安装。
```json
{
"mcpServers": {
"writing-style-checker": {
"type": "url",
"url": "https://wsc.theserverless.dev/mcp"
}
}
}
```
### 本地MCP服务器(stdio)
通过npm安装用于本地使用。包括`check_file`用于分析磁盘上的文件,并自动发现`.wscrc.json`。
```bash
npx wsc-mcp
```
**Claude Desktop / Claude Code 配置:**
```json
{
"mcpServers": {
"writing-style-checker": {
"command": "npx",
"args": ["wsc-mcp"]
}
}
}
```
参见 [`wsc-mcp` npm页面](https://www.npmjs.com/package/wsc-mcp) 获取完整文档。
---
## CLI
从命令行检查文件。
```bash
# 检查所有markdown文件
npx wsc-lint check "**/*.md"
# 从stdin读取
echo "The code was written very quickly." | npx wsc-lint check --stdin
# 脚本的JSON输出
npx wsc-lint check "**/*.md" --format json
# GitHub Actions注释
npx wsc-lint check "**/*.md" --format github
# 创建配置文件
npx wsc-lint init
```
参见 [`wsc-lint` README](cli/README.md) 获取完整文档。
---
## GitHub Action
```yaml
- uses: theserverlessdev/wsc/action@master
with:
files: '**/*.md'
max-warnings: 20
```
| 输入 | 默认值 | 描述 |
|-------|---------|-------------|
| `files` | `**/*.md` | 检查文件的glob模式 |
| `config` | — | `.wscrc.json`配置文件路径 |
| `max-warnings` | 无限制 | 最大警告数 |
| `only-changed` | `false` | 仅检查此PR中更改的文件 |
---
## 隐私
网页编辑器在**您的浏览器中运行** - 我们永远不会将文本发送到任何服务器。API和MCP端点仅处理您明确发送给它们的文本。
---
## 项目结构
```
.
├── src/
│ ├── core/ # 共享检测引擎
│ │ ├── detector.ts # 8个检测算法
│ │ ├── words.ts # 词汇/短语列表(800+条目)
│ │ ├── config.ts # 配置类型、合并、验证
│ │ ├── config-node.ts # Node独有:文件加载、发现
│ │ ├── analyzer.ts # 统一的analyzeText()入口点
│ │ └── index.ts # 公共API导出
│ ├── docs/ # 文档内容(Markdown文件)
│ ├── mcp/
│ │ └── handler.ts # MCP JSON-RPC 2.0处理器
│ ├── lib/
│ │ ├── App.svelte # 主编辑页面组件
│ │ ├── stores/theme.ts # 主题存储(浅色/深色/系统)
│ │ └── components/ # UI组件(StatsBar、ConfigPanel等)
│ ├── routes/
│ │ ├── +layout.svelte # 共享布局(头部、导航、页脚)
│ │ ├── api/check/+server.ts # HTTP API端点
│ │ ├── mcp/+server.ts # MCP端点
│ │ ├── health/+server.ts # 健康检查端点
│ │ ├── docs/+page.svelte # 文档页面
│ │ └── words/+page.svelte # 词汇库浏览器
│ └── styles/
│ └── main.scss # 全局样式(浅色+深色主题)
├── mcp-server/ # 独立stdio MCP服务器(npm:wsc-mcp)
├── cli/ # CLI工具(npm:wsc-lint)
├── action/ # GitHub Action(复合)
├── tests/ # 341个测试,分布在18个文件上
├── static/
│ ├── schema.json # .wscrc.json的JSON模式
│ ├── llms.txt # AI/LLM发现文件
│ └── llms-full.txt # 详细的LLM上下文
├── wrangler.toml # Cloudflare Workers配置
└── svelte.config.js # SvelteKit配置
```
---
## 本地开发
```bash
git clone https://github.com/theserverlessdev/wsc.git
cd wsc
npm install
npm run dev
```
访问 `http://localhost:5173`。API在 `/api/check`,MCP在 `/mcp`,健康检查在 `/health`。
### 命令
| 命令 | 描述 |
|---------|-------------|
| `npm run dev` | 启动开发服务器 |
| `npm run build` | 构建生产环境 |
| `npm run check` | 使用svelte-check进行类型检查 |
| `npm test` | 运行所有341个测试 |
| `npm run test:coverage` | 覆盖率报告 |
## 部署
作为Cloudflare Worker部署在 `wsc.theserverless.dev`。
```bash
npm run build
npx wrangler deploy
```
---
## 贡献
参见 [CONTRIBUTING.md](CONTRIBUTING.md) 获取开发设置、测试和拉取请求指南。
对于重大更改,请[先打开一个问题](https://github.com/theserverlessdev/wsc/issues)。
## 致谢
- [Matt Might](https://matt.might.net/) 的 [原始shell脚本](https://matt.might.net/articles/shell-scripts-for-passive-voice-weasel-words-duplicates/)
- 使用 [SvelteKit](https://svelte.dev/) 和 [Svelte 5](https://svelte.dev/blog/svelte-5-is-alive) 构建,部署在 [Cloudflare Workers](https://workers.cloudflare.com/)
- Logo由 [DiffusionBee](https://diffusionbee.com/) 制作
## 许可证
[MIT](LICENSE)