关于 Signs of AI Writing
Signs of AI Writing 是面向教育者和写作者的英西双语写作诚信工具集。它通过高亮证据和修改建议解释写作特征,并比较文档中的相似段落,而非给出黑箱判定。
主要功能
- 01可解释的 AI 写作特征检查
- 02逐项建议与实时改写
- 03查找文档间的相似段落
- 04跨语言改写检测
- 05浏览器本地分析
适用场景
- 01与学生一起审阅写作特征
- 02修改被标记为疑似 AI 风格的文本
- 03比较提交内容中的相似段落
- 04检查跨语言的疑似改写
MCP 相关
README 将 MCP 服务列为从其他应用使用该工具集的一种方式,但没有说明其提供的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
✍︎ AI 写作迹象
你是教师吗?从这里开始 → — 用浅白的语言介绍它能做什么、不能做什么,并用图表展示错误率,而非列成表格。没有徽章,没有区间表示法,也无需安装。支持英语和西班牙语。
试用在线演示 → — 支持英语和西班牙语,可在浏览器中运行。无需注册,分析过程不会上传任何内容。
在编辑器中使用 → — 适用于
Claude Code、Codex、Gemini CLI 和 Cursor 的 Agent 技能,只需一行命令:npx skills add peopleworks/SignsofAI -g。
它遵循引擎评分所用的相同规则进行编辑,绝不凭空编造数字。
下载 Windows 应用 → — 将同一工具放进一个窗口中。安装程序无需管理员权限,并附带 .NET 运行时;如果你不想安装,也可以下载 .zip。

在线演示的真实录屏 — 分数会随着输入实时更新,每处标注都附有修改建议。
想看视频而不是阅读? 这段两分钟的介绍视频: English · Español
一套免费的隐私优先工具包,旨在维护学术诚信与写作诚信。它能做两件事:
- 去 AI 化检查器 — 标记 AI 生成文本的特征(过度使用的词汇、惯用的修辞手法、机械的句子节奏),并针对每一项发现,告诉你如何修改。
- 原创性检查器 — “这是他们写的,还是抄的?” 对比文档并找出它们共享的段落 — 包括逐字抄袭、改写后的释义(即使跨语言也能识别),以及整个群体的概览 — 并将其作为供人类判断的证据。不是黑箱式判定。
🔒 分析完全在你的浏览器中运行,运行分析时不会上传任何内容。 无需账户,没有 遥测,也没有能看到你文本的服务器。
有四项功能可以将文本发送到设备之外,只有在你主动启用后才会运行,并且会在你选择时 在界面中明确说明:改写检查和困惑度测量(两者都会调用你或我们托管的服务器)、你提供 自己的 API 密钥时使用的实时改写——密钥保留在你的设备上,文本会发送给你选择的服务提供商——以及 针对某个独特短语的可选网页抽查,只有在运营方配置了搜索服务提供商时才会启用。
其他所有内容——每条规则、评分、字符扫描、引用交叉核对、写作者基线和报告——都在本地计算并保留 在本地。桌面应用中的困惑度测量也在本地完成。
Windows 应用还可以检查是否发布了更新版本,因为它没有自动更新功能,而且永远不会有。此操作 不属于上述四项:它不会发送文本、账户信息或标识符——只会向 GitHub 的公开发布列表发送一次请求, 与浏览器发出的请求相同。它会在首次检查前征求同意,每天最多检查一次,而且绝不会替你下载或运行任何内容。
由 Pedro Hernández (PeopleWorks) 使用 .NET 10 和 Blazor WebAssembly 构建,Microsoft .NET MVP——献给 .NET 和 Microsoft 开发者社区,por y para la comunidad educativa。
仓库:https://github.com/peopleworks/SignsofAI
支持英语和西班牙语,两者通过两种相互独立的方式实现:
- 界面可通过工具栏即时切换 EN ⇄ ES——无需重新加载页面,按浏览器分别记忆设置,首次访问时会遵循浏览器语言。翻译是任何人都可以贡献的纯 JSON 文件:请参阅翻译界面。
- 分析会使用按语言划分的规则包,可自动检测,也可手动选择。西班牙语规则包是针对西班牙语 AI 写作标记的原创整理。
两者刻意保持独立,这样检测结果就会使用待分析文本的语言:即使界面使用西班牙语,针对英语行文的建议仍会以英语给出,因为建议针对的是英语。
它误判人类文本的频率有多高?
每款 AI 检测器都会被问到这个问题,但几乎没有一款会回答。Docs/CALIBRATION.md
给出了答案:我们以 296 篇 2022 年以前写成的文本为依据进行测量——开放获取研究文章、两种语言中 2022 年以前的百科全书修订内容,以及 206 篇英语学习者在课堂上撰写的作文,每位学生一篇,来自 2006 年至 2012 年间收集的语料库。
在 30/100 的阈值下,它会标记其中 2 篇:观测值为 0.7%,95% 置信区间的上限为 2.4%。 推荐值依据区间中较不乐观的一端制定,而不是采用更好看的数值,因此在语料库规模较小时仍保持谨慎,并会随着语料库扩大而根据数据的变化调整。
学习者正是整个类别被指责会伤害的群体——研究报告称,其他检测器会标记他们 61% 的作文——也正是因为他们加入了测试,阈值才从之前的 25 提高到 30:在 25 的阈值下,工具标记了他们 206 篇作文中的 9 篇,占 4.4%;而 90 篇已发表文本中没有一篇被标记。报告按群体列出了这一数字,没有将其平均掉。这个数值远低于其他工具的报告值,但并非为零。
我们刻意不将其称为准确率。准确率需要一批机器生成文本,而这批文本只是当月可用模型的样本;误报率只需要人类写作文本,并且衡量的是这一类别实际造成的伤害——研究报告称,检测器会标记非英语母语者撰写的 61% 的作文,而没有任何一款检测器公开过自身的这一数据。
报告还列出了哪些规则会误判,并按排名排列。这份列表令人不安,也是这项工作最有用的成果。
语料库采用 JSON 清单,任何人都可以扩充;用于构建和测量语料库的工具位于 tools/SignsOfAI.Calibration,整个流程只需一条命令即可重新运行。请参阅 Docs/Calibration/README.md——我们最期待收到西班牙语学术写作方面的贡献。
写给教师:软件之外的部分
检测器并不是你首先需要的东西。Docs/Teaching/ 提供可直接粘贴使用的教学大纲措辞、一页可在出问题之前发给学生的说明,以及一套在问题进入正式处理程序时使用的流程——全部为双语内容,且不受任何许可、署名或授权要求限制。
这些内容都不需要使用本工具。之所以提供这些材料,是因为在课堂上应对 AI 写作的难点从来不是检测,而是在你早上开始怀疑时,却无人可问,该怎么办。这三份文件都基于同一条原则:绝不能以分数作为对学生作出决定的理由;关于作品的交流,才能解决任何软件都无法解决的问题。
1. AI 写作检查器(“Analyze”)
不同于只给出一个分数的黑盒检测器,这是一款可解释、可操作、具备教育意义的
检查器。粘贴、上传(.docx / .txt / .md),或直接开始输入——0–100 分的评分、标注、
统计信息和针对每项发现的修改建议都会随着你的写作实时更新。
| 类别 | 示例 |
|---|---|
| 词汇 | delve、tapestry、multifaceted、nuanced、pivotal、underscore、showcase、testament…(根据 ChatGPT 出现后频率的超额增长加权) |
| 修辞 | 否定式平行结构("it's not just X, it's Y")、陈词滥调式开头("in today's digital age")、模糊措辞("it's worth noting that")、虚假范围、三段式 |
| 句法 | 避免系动词("serves as a…", "a testament to…")、冗长表达("plays a crucial role") |
| 统计 | 节奏变化度——句子长度的均匀程度。机器文本通常在 0.0–0.2;人类散文在 0.6–0.8 |
-
句子节奏可视化——按句显示的柱状图,让节奏变化度一目了然。
-
针对每项发现的建议——每个被标记的特征都附有具体修改方法及其研究依据。
-
实时改写(在设备上运行,无需密钥)——并排显示你的文本和去 AI 化版本,每次按键都会重新生成,随着修改进行,评分也会降低。它基于规则包运行——无需模型、网络或 API 密钥——因此即时且免费。每项改动都会列出可选方案,还提供一键式保留此处不改选项。提供三种力度,从仅修改最明显的特征到连空洞的强调词也一并删除。
它只做诚实而言可通过替换词语完成的修改,并且会拒绝可能改错的编辑:它不会把 “delve into” 改成 “examine into”,不会删掉 "not just X, it's Y" 结构所依赖的 “just”,也不会在阴性名词前加上 “el”。节奏和修辞结构需要真正的改写,因此仍会列在建议中——面板还会说明有多少项。
-
润色(可选,自带密钥)——连接 AI 服务提供商,一键改写被标记的文本。可选 Anthropic(
claude-opus-4-8,可在浏览器中使用)、OpenAI / DeepSeek、Azure OpenAI 或 Ollama(本地运行,无需密钥)。 凭据仅保存在你的浏览器中,并会直接发送给服务提供商。 -
修改前后对比以及可分享的结果卡片(PNG 摘要,绝不包含你的文本)。
-
自定义目录(自带规则)——粘贴禁用词或导入规则包 JSON;合并会实时生效。
-
目录页面——可搜索的 AI 写作特征库,涵盖两种语言,并通过浏览器内的 BM25 索引进行排序。

区别就在这里:不是“87% 是 AI”,而是哪些词、为何被标记,以及可以改写成什么。
2. 原创性检查器(“Originality”)
“这是 AI 写的、你复制的,还是你为了掩盖抄袭而改写的?” 放入两份或更多文档—— 一篇论文及其来源、一批学生作业——就能准确查看它们有哪些共同内容。我们的原则很明确:呈现证据并高亮标出,由人来判断。我们绝不指责。 这不是像 Turnitin 那样的全网索引。
| 阶段 | 检查内容 | 方式 | 运行位置 |
|---|---|---|---|
| A — 原文复制 | 原文相同的段落,即使大小写或重音符号改变也能识别 | 忽略重音符号和大小写的单词 k-shingles + 贪心最长匹配切分,并逐个词元验证 | 🔒 在你的浏览器中 |
| B — 改写 | 措辞不同的复制内容——意思相同、用词不同——即使跨语言也能识别 | 句子嵌入(Google EmbeddingGemma-300M,ONNX)+ 余弦相似度 | 🌐 可选服务(需主动启用) |
| C — 班级整体对比 | 一目了然地查看整班学生之间的抄袭关系 | 批量上传 + N×N 重合度热力图;点击单元格即可检查对应文档对 | 🔒 在你的浏览器中 |
| D — 网络抽查 | 检查某段内容是否已在线存在 | 提取文档中最具辨识度的段落,并提供一键精确短语搜索(Google/Bing/DuckDuckGo) | 🔒 在你的浏览器中 |
- 共同段落证据——在并排显示的两份文档中高亮匹配内容;标题中的重合度数字与高亮内容完全一致(证据就是评分)。
- 阶段 B 是唯一会将内容发送出设备的功能。 该功能需主动启用,且会在界面中明确说明;只会将你选择检查的句子发送到 PeopleWorks 服务。其他所有内容都留在你的设备上。
- 阶段 D 刻意保持诚实:我们无法索引整个网络,因此不会假装能做到,而是标出值得检查的段落并准备好搜索内容——只有在你点击搜索后,才会发送内容。 服务运营者可以启用可选的自动网络搜索(见下文可选服务)。

一目了然地查看整个班级:每份文档与其他所有文档逐一对比,再查看共同段落本身——呈现证据,不作指控。
3. 可预测性指标(可选服务)
以诚实的方式重新诠释困惑度。一个小型语言模型(Qwen2.5-0.5B 或 Microsoft Phi-4-mini,int8 ONNX) 用于衡量文本措辞的可预测程度/通用程度。这不是 AI 与人类的判定结果——在带标签的语料库中,两者的得分重叠严重(记忆下来的人工文本也会被判为可预测)。我们会如实呈现可预测性,将其作为众多信号之一,并按语言进行校准。此功能需主动启用,在 PeopleWorks 服务上运行。模型会按需加载,并在空闲时卸载,以减轻服务负担。
4. 在其他应用中使用 — MCP 服务
以上所有功能也可通过 SignsOfAI.Mcp 提供给 Claude Desktop 和任何 MCP
客户端。它是一个模型上下文协议服务(基于官方的
ModelContextProtocol SDK,使用 stdio 传输)。由于
引擎位于 SignsOfAI.Core 中——纯 .NET,无需浏览器——服务只需将其作为工具公开:
| 工具 | 功能 | 运行位置 |
|---|---|---|
analyze_ai_writing | 评分 + 判定 + 发现(附修正建议)+ 统计数据 | 🔒 设备本地 |
check_originality | 比较 2 篇或更多文档的重合率和共有段落 | 🔒 设备本地 |
search_catalog | 搜索 AI 写作特征目录(EN/ES) | 🔒 设备本地 |
extract_distinctive_phrases | 提取独特短语 + 现成的网页搜索链接 | 🔒 设备本地 |
inspect_characters | 检查不可见字符和冒充拉丁字母的字符,并标出行号/列号 | 🔒 设备本地 |
check_citations | 检查文档中与自身参考书目矛盾之处,并标出各处行号 | 🔒 设备本地 |
compare_to_baseline | 根据同一作者以往作品的基线,评估一篇作品的表现 | 🔒 设备本地 |
write_report | 将完整分析写成文档,供保存、转发或提交委员会 | 🔒 设备本地 |
measure_predictability | 通过可选服务计算困惑度 | 🌐 服务(选择加入) |
check_paraphrase | 通过 EmbeddingGemma 查找改写或翻译后的匹配内容 | 🌐 服务(选择加入) |
前 8 项完全在本机运行;后 2 项会明确告知你,它们会将文本发送到服务
(端点通过 SIGNSOFAI_API_ENDPOINT 环境变量设置)。
它已发布到 NuGet,包名为 SignsOfAI.Mcp,因此无需构建。将 Claude Desktop 指向它:
// %APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "signs-of-ai": {
"command": "dnx",
"args": ["SignsOfAI.Mcp", "--yes"]
}}}
或者只需安装一次全局工具——dotnet tool install --global SignsOfAI.Mcp——然后使用
"command": "signsofai-mcp"。详情请参阅 src/SignsOfAI.Mcp/README.md。
VS Code:该包附带 MCP 清单,因此其
NuGet 页面上有一个 MCP Server 选项卡,其中已生成配置——将其复制到 .vscode/mcp.json 即可。
5. 将其用作 Agent 技能 — /signs-of-ai
技能有独立页面 →,其中并列展示了两种模式,以及它不会做什么。
更喜欢在编辑器中工作?SKILL.md 是一个可直接使用的 Agent 技能,能清理草稿中的低质 AI 文风——或者报告文本中带有哪些特征——支持 英语和西班牙语。它是对同一套 rules.en.json / rules.es.json 分类体系的易读提炼,因此编辑时遵循的规则与引擎评分所用规则相同。
# Claude Code, Codex, Gemini CLI, Cursor and the rest, in one command
npx skills add peopleworks/SignsofAI -g
# …or as a Claude Code plugin, from the marketplace manifest in this repository
/plugin marketplace add peopleworks/SignsofAI
/plugin install signs-of-ai
然后:
/signs-of-ai <your draft> # edit mode: rewrite + change summary
/signs-of-ai is this AI slop? <the text> # examine mode: the tells, quoted, no rewrite
该技能有意绝不伪造数值评分,也绝不声称文本由谁撰写——若要获得经过校准的 0–100 评分、突发性、原创性、引文、作者基线或困惑度,它会将任务交给此引擎处理(网页应用、CLI 或上文的 MCP 工具)。它沿用报告中的同样 6 条规则,规定一项发现可以声称什么,其中包括任何评分都必须附带的错误率。请参阅 skill/README.md。
6. 在写作时使用 — Word 加载项
Word 中的任务窗格。按下“开始”选项卡上的读取特征,它就会读取打开的文档并在侧边栏中给出答复:无需复制到浏览器,无需上传文件,也无需离开正在写作的页面。
**它使用的是同一个引擎,而非精简版。**所有规则、字符扫描、引文交叉核对和判定规则都通过 SignsOfAI.UI 提供。网页应用和桌面应用也通过这个类库进行呈现。Word 只是第三个宿主。
为什么任务窗格是这款工具的合适位置
任务窗格就是一个浏览器。WebAssembly 引擎只需下载一次,就会在本地设备上运行,这意味着文档永远不会被上传。这正是 Web 应用已经作出的保证,而且是在文档实际所在的应用中作出的保证。
这可不是无关紧要的小事。这个类别中的其他加载项都会把你的文本发送到 API,因为它们的分析是在服务器上进行的。我们的不是,所以根本没有地方可以发送文本。而且,清单申请的是 ReadDocument,而非 ReadWriteDocument:Word 本身会强制确保此加载项只能读取你的文档,而不是要你相信网站上的一句话。
实际文档中的效果

这是 Word 网页版(图中可以看到地址栏),打开了一份 357 个单词的文档。这个窗格值得仔细看两遍。
它拒绝给出判定,并说明了原因:此版本所依据的语料库中,没有短于 649 个单词的文本,所以低于这个长度就没有可供比较的内容,评分也就*"既不能证明文本是机器写的,也不能证明文本是人写的。"* 请参阅校准说明。
但它仍然找到了六个不间断空格,因为字符扫描反映的是文件中的事实,而不是对其文风的判断。它没有长度门槛,因此无论文本多长都适用;它也完全不涉及作者身份,面板对此明确作了说明。
做一个什么都能回答的工具很容易。这是另一种工具。
安装
加载项页面 → — 介绍它的功能、两种安装方式,以及它拒绝做的事,提供英语和西班牙语版本。
简而言之:网页版中依次选择“主页”→“加载项”→“更多加载项”→“我的加载项”→ “上传我的加载项”,并选择 src/SignsOfAI.Word/manifest.xml。Windows 版 Word 没有上传按钮,而是读取共享文件夹目录;src/SignsOfAI.Word/README.md 中介绍了具体步骤。
PowerPoint 是有意做成另一款产品的
演示文稿很少有 649 个单词,所以在 PowerPoint 中使用同一款加载项,大多只会像上面那样:不给出判定。这么做没错,但用处不大。适用于幻灯片篇幅的,是没有长度门槛的部分——字符扫描和具名特征——所以在那里真正值得问的是**“这份演示文稿是否带有文本人性化工具的痕迹”**,而不是“这是不是 AI 写的”。这是另一款产品,目前尚未开发。
架构
SignsOfAI.slnx
├─ src/
│ ├─ SignsOfAI.Core # Pure C# engines (no UI/server deps)
│ │ ├─ Analyzers/ # Lexical, Pattern, Burstiness (IAnalyzer)
│ │ ├─ Originality/ # OriginalityChecker (shingles+tiling), ParaphraseFinder,
│ │ │ # DistinctivePhraseExtractor
│ │ ├─ Rewriting/ # LocalRewriter — on-device de-AI-ifying, no model or network
│ │ ├─ Rules/Packs/ # rules.en.json, rules.es.json (embedded, community-extensible)
│ │ ├─ Text/ # Tokenizer, sentence splitter, language detector, statistics
│ │ └─ AiWritingAnalyzer # Public facade: Analyze(text, language)
│ ├─ SignsOfAI.UI # The whole interface (Analyze, Originality, Catalog) — shared by
│ │ │ # both hosts below, so a change lands in web and desktop at once
│ │ └─ wwwroot/i18n/ # UI translations: en.json, es.json + locales.json (community-extensible)
│ ├─ SignsOfAI.Web # Host: Blazor WebAssembly, runs in the browser
│ ├─ SignsOfAI.Desktop # Host: WPF + WebView2, runs offline and reaches local models
│ ├─ SignsOfAI.Cli # `dotnet tool` for CI pipelines
│ ├─ SignsOfAI.Mcp # MCP server (stdio): the engine as tools for Claude Desktop / any client
│ └─ SignsOfAI.Perplexity.Api # Optional ASP.NET Core server: predictability + embeddings
│ ├─ Engine/ # OnnxPerplexityEngine, OnnxEmbeddingEngine (lazy-load + idle-unload)
│ └─ Config/ # model profiles, calibration, embedding + web-search options
└─ tests/
└─ SignsOfAI.Core.Tests # xUnit (120+, incl. guards for the community locale files)
Core 引擎与 UI 和服务器解耦,CLI、Blazor 应用和 API 都可以复用它们。
运行
dotnet run --project src/SignsOfAI.Web
# then open http://localhost:5019
测试
dotnet test
命令行与 CI(dotnet tool)
此代码检查工具以全局工具的形式发布,因此你可以在 CI 中将其用于文风检查:
dotnet tool install --global SignsOfAI.Cli
signsofai check README.md # pretty report
signsofai check article.docx --lang en # Word documents too
signsofai check post.md --json # machine-readable
signsofai check post.md --max-score 40 # exit 1 if it reads too much like AI → fails CI
signsofai check post.md --rules my-style.json # your custom catalog
signsofai check ensayo.txt --lang es --reader-lang en --report out.md
--lang 表示文本所用的语言;--reader-lang 表示输出的阅读者所用的语言——证据报告、字符扫描和引文交叉核查都是面向阅读者,而非描述文风。默认情况下,它与文本语言相同,因此只有两者不同时才需要传入此参数。检测结果会有意保留文本所用的语言:西班牙语特征会用西班牙语说明。
分析引擎也可以作为库使用 — dotnet add package SignsOfAI.Core:
var result = new SignsOfAI.Core.AiWritingAnalyzer().Analyze(text, "auto");
Console.WriteLine($"{result.OverallScore}/100 — {result.Verdict}");
可选服务(SignsOfAI.Perplexity.Api)
客户端本身即可完整运行;此服务仅为可选启用功能提供支持(可预测性计量器和 Phase B 改述检查)。它基于 ASP.NET Core(.NET 10),托管 ONNX 模型,并采用延迟加载和空闲卸载,因此占用资源很少。模型文件不在 git 中,首次使用时会下载。
客户端默认连接到托管实例;如需运行自己的实例,请在应用的服务设置中设置端点,并为你的来源配置 CORS。
启用可选的自动网页搜索(Phase D)
默认情况下,Phase D 是设备端的一键搜索体验(无需密钥,点击前不会发送任何内容)。运营人员还可以通过在服务端配置搜索提供商来启用自动网页搜索——这适合用于演示(密钥不会接触浏览器)。除非完成配置,否则此功能始终关闭:
// appsettings.json (or environment variables)
"WebSearch": {
"Enabled": true,
"Provider": "brave", // Brave Search API (free tier); provider-abstracted
"ApiKey": "", // prefer the BRAVE_API_KEY environment variable
"MaxPhrasesPerDoc": 8,
"MaxResultsPerPhrase": 5
}
启用后,服务会公布此功能,客户端也会提供自动“搜索网页”操作,报告包含某段文字原文的网页。如果功能关闭、配额用尽或发生错误,界面会回退到手动一键搜索,不会导致功能失效。
扩展规则
在 src/SignsOfAI.Core/Rules/Packs/rules.<lang>.json 中添加条目——词汇规则匹配单个词语词元,模式规则则是用于匹配多词特征的正则表达式。每条规则都会设置 weight、severity 和 suggestion。
词汇规则还可以告知实时改写器应如何处理,而 suggestion 无法做到这一点:该字段是写给人的说明(“混合、融合、变化——或者直接说出具体事物”),程序不应从说明中推断意图。
{ "id": "lex.utilize", "terms": ["utilize", "utilizes"], "weight": 3.5, "severity": "Medium",
"suggestion": "use", "replacements": ["use"] }, // what to substitute, best first
{ "id": "lex.just", "terms": ["just"], "weight": 1.0, "severity": "Info",
"suggestion": "empty intensifier — usually deletable", "delete": true } // remove the word instead
这两个字段都是可选的。如果没有设置,改写器会退而从 suggestion 中读取以逗号分隔的列表,并拒绝猜测其他内容——单独一个词可能是替换项(“使用”),也可能是描述(“口头禅”),而要区分两者就需要了解语言。因此,没有显式字段的规则只会被报告,不会自动编辑;这就是为什么每条内置规则都明确写出了修正方式(有一项测试会确保这一点)。
翻译界面
如果你懂这种工具尚未支持的语言,就可以添加该语言——而且不需要懂 C#。
界面使用纯 JSON:每种语言对应 src/SignsOfAI.UI/wwwroot/i18n/ 中的一个文件,另有一个 locales.json 清单。添加语言只需复制 en.json,翻译右侧的值,再向清单添加一行。无需构建步骤,也无需阅读代码,语言切换器会自动识别新语言。
不必一次完成。 任何未填写的键都会回退到英语,因此,不完整的翻译也会以部分翻译的形式发布,而不会变成满页空白——翻译导航和主页后,提交拉取请求,之后随时可以回来补完其余内容。贡献者会在语言切换器中获得署名。
每个拉取请求都会运行一组语言区域测试,并准确指出错误——例如键名拼写错误、条目重复或 {0} 占位符丢失——这样就能依据测试结果审核翻译,而不必逐项对照阅读 JSON。这些测试特意不会因翻译不完整而失败。
部署
Blazor 客户端是静态文件包(可免费托管在任何地方)。项目包含以下 GitHub Actions:
- GitHub Pages(
deploy-pages.yml)——依次选择 Settings → Pages → Source:“GitHub Actions”。此工作流会重写 base href,并写入 SPA 的404.html回退页面。 - Azure Static Web Apps(
azure-static-web-apps.yml)——将部署令牌添加为仓库机密。
可选服务是标准的 ASP.NET Core 应用(对 SignsOfAI.Perplexity.Api 项目运行 dotnet publish)。
致谢
由 Pedro Hernández — PeopleWorks 创建,他是 Microsoft MVP for .NET。检测标记基于 AI 文体分析的语言学研究,详见 Docs/GoogleResearch.md。
chat.* 规则——助手自身的轮次,保留在文档中——改编自 amanmaqsood/prose-humanizer(MIT)的模式集。它是一项写作技能,而非检测器。与此处的所有内容一样,这些规则在加入规则包前都先经过校准语料筛选,六条规则的得分均为零。同一来源的另外 12 个候选规则未被纳入,因为它们会触发 2022 年之前的写作内容。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。