内容
<p align="center">
<img src="./cover.png" alt="Alchemy — 像人类一样写作,不再像大型语言模型" width="100%">
</p>
# Alchemy
Alchemy 是一个即插即用的规则集,它可以防止你的 AI 编程代理写出像大型语言模型(LLM)一样的内容:没有乱七八糟的破折号,没有“不仅仅是 X,而是 Y”,没有乱七八糟的 *delve*。你只需要添加一次,代理读取后,生成的 README、commit 消息和文档就会像人类写的。
将铅变成黄金。这是一个文件,大约 1000 个令牌,与代理的其他指令存放在一起:[`ALCHEMY.md`](./ALCHEMY.md)。这里的其他内容只是为了让它进入你的项目。
## 如何防止我的 AI 写得像大型语言模型?
在你的项目中安装它,并指向你的代理。选择适合你的栈:
```bash
# Node / npm
npx @fernforge/alchemy init
# Python / pip
pip install alchemy-writing
alchemy init
```
`init`会在你的项目中写入 `ALCHEMY.md`,并从你已有的代理配置中链接它:`CLAUDE.md`、`AGENTS.md`、`.cursorrules` 或 Copilot 指令。从那时起,代理会在其正常上下文中读取规则。 如果不想安装任何东西,可以直接打印规则:
```bash
npx @fernforge/alchemy print # 或:alchemy print
```
更喜欢手动操作?将 [`ALCHEMY.md`](./ALCHEMY.md) 复制到你的仓库中,并从代理的指令文件中引用它。就是这样,没有服务,没有 API,没有账户。
## 转换前后
Alchemy 可以捕获以下类型的句子。相同的事实,两种不同的表达方式:
**转换前**
> Redis 不仅仅是一个数据库——它是一个强大、健壮的缓存层,可以释放整个栈的全部潜力。
**转换后**
> Redis 是一个内存存储。将缓存和会话存储在其中,数据库就不再是瓶颈。
转换前的一句话堆积了四个“特征”:不是“不仅仅是 X,而是 Y”的对比,形容词堆积(`powerful`、`robust`),单独的破折号,以及“释放全部潜力”。但这些都没有说明 Redis 是做什么的。转换后的句子则直接陈述了一个具体事实。 这就是 Alchemy 的全部功能,它将这种转换应用于代理写入的任何地方。
## 它能去除哪些大型语言模型特征?
它会去除以下具体特征:
- 空对比:“不仅仅是 X,而且是 Y”,“不是关于 A,而是关于 B”。
- 三个连续的短语或规则的填充: “fast, reliable, scalable”, “No X. No Y. Just Z.”
- 用堆积的形容词代替事实: robust, seamless, powerful, comprehensive.
- 破折号堆积。真正的特征是密度,所以规则是:少用。
- 填充词汇:delve, leverage, harness, unlock, elevate, tapestry, realm, showcase.
- 开场白 (“In today's fast-paced world”, “At its core”) 和 结尾总结 (“In conclusion”, “Ultimately”).
- 在回答问题前重复问题。
解决方法永远不是替换同义词。而是用具体事实替换模糊的词汇:不是“robust”,而是“handles 10k req/sec”。规则促使代理更注重事实。
其背后的原理是:没有一个单词能证明某段文字是由机器写的。信号是许多特征聚集在一起,分布在平坦、均匀加权的文本中。Alchemy 针对这些聚集的特征,以便在不去除真正合适的单词的情况下减少这些特征。
## 与 Claude、Cursor 或 Copilot 一起使用
`init` 会检测项目中已有的配置文件,并从中链接规则集,因此相同的 `ALCHEMY.md` 可用于不同代理:
- Claude Code / Claude 通过 `CLAUDE.md` 读取它。
- Cursor 通过 `.cursorrules` 读取它。
- Copilot 通过其指令文件读取它。
- 任何支持 `AGENTS.md` 的代理都可以通过它获取。
一套规则,适用于任何代理。
## 作为 MCP 服务器使用
要在每个项目中提供规则,而不是将文件提交到每个仓库,可以将 Alchemy 作为 MCP 服务器运行。将其添加到客户端配置文件(Claude Desktop、Cursor、Cline):
```json
{
"mcpServers": {
"alchemy": { "command": "npx", "args": ["-y", "@fernforge/alchemy-mcp"] }
}
}
```
它公开了一个 `get_writing_rules` 工具和一个 `alchemy://rules` 资源,因此任何支持 MCP 的代理都可以在撰写文本时拉取规则集。更多详细信息请参见 [`mcp/`](./mcp)。
## 三种安装方式,一套规则
这三种方式都使用相同的规则,因此可以根据工具链选择任意一种:
- npm: `@fernforge/alchemy` — `npx @fernforge/alchemy init`
- PyPI: `alchemy-writing` — `pip install alchemy-writing`
- MCP: `@fernforge/alchemy-mcp` — `npx @fernforge/alchemy-mcp`
## 规则来源
规则基于人们实际标记为 AI 写作的内容,而不是猜测:Wikipedia 的“AI 写作的迹象”,Kobak 等人的一项研究测量了 ChatGPT 发布后研究论文中哪些词汇激增,Pangram 的短语频率数据,以及 Reddit 和 r/Professors 上关于如何识别 AI 写作的长期讨论。它的内容故意保持简短:具体指导代理在上下文中可以理解,而不是论文。
本文档遵循其自身的规则。如果它读起来不错,那就是效果。
## 贡献
发现它遗漏的特征?打开一个 issue 或提交一个带有实际的前后示例的 PR。具体例子比新的抽象规则更有价值。
仅编辑根 [`ALCHEMY.md`](./ALCHEMY.md)。`python/` 和 `mcp/` 下的副本由 `node scripts/sync-rules.mjs` 生成,如果它们漂移,CI 将失败。npm、PyPI 和 MCP 包从 GitHub Releases 发布(参见 [.github/workflows](./.github/workflows))。
## License
MIT