mcpField
S
Signs of AI Writing

Signs of AI Writing

ローカル
github.com/peopleworks科学・教育286 週間前に更新

Signs of AI Writing について

Signs of AI Writing は、教育者や執筆者向けの英語・スペイン語対応の文章インテグリティツールです。根拠のハイライトと修正案で文章の特徴を説明し、ブラックボックス判定ではなく文書間の共通箇所を比較します。

主な機能

  1. 01説明可能な AI 文章チェック
  2. 02項目別の提案とリアルタイム編集
  3. 03文書間の共通箇所の比較
  4. 04言語をまたぐ言い換え検査
  5. 05ブラウザー内でのローカル分析

活用シーン

  1. 01学生と文章の特徴を確認
  2. 02AI らしい表現として指摘された文章を修正
  3. 03提出物間の共通箇所を比較
  4. 04言語をまたぐ言い換えの可能性を確認

MCP 対応

README では他のアプリから利用する方法の一つとして MCP サーバーに言及していますが、公開するツールの詳細は記載されていません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
nugetSignsOfAI.Mcp0.8.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

✍︎ AI ライティングの兆候

ライブデモ Windows アプリ ライセンス: MIT .NET 10 Blazor WebAssembly GitHub スター

NuGet Core NuGet CLI NuGet MCP CodeGuilds で公開中

先生の方へ。まずはこちらから → — これができることと、できないことを、平易な言葉で説明しています。誤検出率は表ではなく図で示しています。バッジも区間表記もなく、インストールするものもありません。英語とスペイン語に対応。

ライブデモを試す → — 英語とスペイン語に対応し、ブラウザーで動作します。登録は不要で、解析時に何もアップロードしません。

エディターで使う → — Claude Code、Codex、Gemini CLI、Cursor 向けのエージェントスキルを、1 行で導入できます: npx skills add peopleworks/SignsofAI -g。 このエンジンが採点に用いるのと同じルールで編集を行い、数値をでっち上げることは決してありません。

Windows アプリをダウンロード → — 同じツールをウィンドウで。管理者権限を必要としないインストーラーで、.NET ランタイムを同梱しています。お好みでなければ .zip 版もどうぞ。

AI ライティングの兆候がテキストをリアルタイムに解析する様子: AI の兆候が蓄積するにつれてスコアが上がり、その後すべての兆候が修正案とともにハイライトされます

ライブデモの実際の記録です — 入力するたびにスコアが更新され、すべてのハイライトには修正案が添えられます。

読むより見たい方へ。 2 分間の解説動画: English · Español

学術とライティングの誠実さのための、無料でプライバシー重視のツールキットです。できることは 2 つあります:

  1. AI っぽさをなくすリンター — AI が生成した文章の兆候 (使われすぎる語彙、修辞的な 口癖、ロボットのような文のリズム) を指摘し、すべての指摘についてその修正方法を伝えます。
  2. オリジナリティチェッカー — 「本人が書いたのか、それともコピーしたのか?」 文書同士を比較し、 それらが共有する箇所 — 逐語的なコピー、言い換えられたパラフレーズ (言語をまたぐ場合も)、 そしてコホート全体の概要 — を人間が判断するための証拠として提示します。ブラックボックス的な判定ではありません。

🔒 解析はすべてお使いのブラウザー内で実行され、実行のために何かがアップロードされることはありません。 アカウントも、テレメトリーも、あなたのテキストを目にするサーバーもありません。

4 つの機能はテキストをデバイスの外に送信する可能性がありますが、そのいずれも、あなたが有効にしない限り実行されません。それぞれ、あなたが選択した時点でインターフェース上に開示されます。言い換えチェックとパープレキシティ測定(どちらも、あなたまたは私たちがホストするサーバーを呼び出します)、あなた自身の API キーを指定したときのライブ書き換え — キーはお使いのデバイスに留まり、テキストはあなたが選んだプロバイダーに送信されます — 、そして特徴的なフレーズに対する任意のウェブスポットチェック(これはオペレーターが検索プロバイダーを設定している場合にのみ存在します)。

それ以外のすべて — すべてのルール、スコア、文字スキャン、引用のクロスチェック、ライターベースライン、レポート — はローカルで計算され、そこに留まります。デスクトップアプリでは、パープレキシティ測定もローカルです。

Windows アプリはより新しいバージョンが公開されているかどうかを確認することもできます。これは自動更新がなく、今後も決してないためです。これは 4 つのうちの 1 つではありません。テキストもアカウントも識別子も送信せず、GitHub の公開リリース一覧への 1 回のリクエストのみで、ブラウザーが行うものと同じです。最初のチェックの前に確認を求め、多くても 1 日 1 回で、あなたに代わって何かをダウンロードしたり実行したりすることは決してありません。

.NET 10 と Blazor WebAssembly で、Pedro Hernández (PeopleWorks)(Microsoft MVP for .NET)によって制作 — .NET と Microsoft 開発者コミュニティのために、por y para la comunidad educativa。

リポジトリ: https://github.com/peopleworks/SignsofAI

英語とスペイン語は、2 つの独立した方法でサポートされています:

  • インターフェースはツールバーから EN ⇄ ES を即座に切り替えられます — ページのリロードはなく、ブラウザーごとに記憶され、初回訪問時にはブラウザーの言語に従います。翻訳は誰でも貢献できるプレーンな JSON ファイルです: インターフェースの翻訳 を参照してください。
  • 解析は言語ごとのルールパックに対して実行され、自動検出または選択が可能です。スペイン語のルールパックは、スペイン語向けの AI ライティングマーカーの独自の派生です。

この 2 つは意図的に分離されているため、検出結果は解析対象のテキストの言語のままになります。英語の文章に関するアドバイスは、インターフェースがスペイン語であっても英語で提供されます。それはアドバイスが対象としている言語だからです。


人間に対してどのくらいの頻度で誤判定するのか?

すべての AI 検出ツールがこの質問をされ、ほとんどが答えていません。Docs/CALIBRATION.md がその答えです。これは 2022 年より前に書かれた 296 件のテキストに対して測定されたものです — オープンアクセスの研究論文、両言語における 2022 年以前の百科事典の改訂版、そして 英語を学ぶ成人学習者による 206 件の教室エッセイ(1 人につき 1 件、2006 年から 2012 年の間に収集されたコーパスから)です。

30/100 のしきい値では、そのうち 2 件が検出されます。観測値は 0.7% で、95% 区間は 2.4% に達します。この勧告は、都合のよい端ではなく不確実な端から導かれているため、コーパスが小さい間は慎重な姿勢を保ち、コーパスの成長に応じてデータが動く方向に従います。

学習者は、このカテゴリー全体が害を与えていると非難されているグループです — 他の検出ツールは彼らのエッセイの 61% を検出すると研究は報告しています — そして彼らが加わったことで境界が以前の 25 ではなく 30 に置かれている理由でもあります。25 の時点では、このツールは彼らの 206 件のエッセイのうち 9 件(4.4%)を検出し、公表された 90 件のテキストは 1 件も検出しませんでした。その数値は、グループ別にそのページに記載されており、平均化されて消されることはありません。他のツールで報告されている数値よりはるかに低いですが、ゼロではありません。

これは意図的に精度の数値ではありません。精度には機械が書いたテキストの集合が必要であり、それはその月に存在したどのモデルのサンプルでもあります。一方、偽陽性率には人間が書いたテキストだけが必要であり、このカテゴリーが実際に引き起こす害を測定します — 研究は、検出ツールが非ネイティブ英語話者のエッセイの 61% を検出すると報告しており、それについて自分たちで公表しているツールは 1 つもありません。

このレポートはまた、どのルールが誤作動するかをランク付けして示しています。そのリストは心地よいものではありませんが、この取り組みが生み出す最も有用なものです。

コーパスは誰でも拡張できる JSON マニフェストであり、それを構築して測定するツールは tools/SignsOfAI.Calibration にあり、全体は 1 つのコマンドで再実行できます。Docs/Calibration/README.md をご覧ください — スペイン語の学術ライティングが最も求められている貢献です。


教師の方へ:ソフトウェアではない部分

最初に必要なのは検出ツールではありません。Docs/Teaching/ は、そのまま貼り付けられるシラバスの文言、何か問題が起きる前に学生に配布できる 1 ページのシート、そして疑問が正式なものになった日のための手順です — すべてバイリンガルで、ライセンス、帰属、許可の一切が不要です。

そのいずれもこのツールを必要としません。これが存在するのは、教室における AI ライティングの難しい部分が決して検出ではなかったからです。それは、何かを疑い、誰にも尋ねる人がいない朝にあなたがどうするかです。3 つの文書はすべて同じルールに基づいています:スコアが学生に関する決定の理由になることは決してない、そして作品についての対話が、ソフトウェアにはできないことを解決します。


1. AI ライティングリンター(「Analyze」)

スコアを吐き出すだけのブラックボックス検出器とは異なり、これは説明可能で、実行可能で、教育的な リンターです。貼り付け、アップロード(.docx / .txt / .md)、またはそのまま入力するだけで、 0〜100 のスコア、ハイライト、統計、指摘ごとの修正案が書くそばから更新されます。

カテゴリ例
語彙delve、tapestry、multifaceted、nuanced、pivotal、underscore、showcase、testament…(ChatGPT 以降の過剰頻度で重み付け)
修辞否定の並列(「単なる X ではなく Y です」)、決まり文句の書き出し(「今日のデジタル時代において」)、ヘッジング(「〜であることは注目に値します」)、偽の範囲、三つの法則
構文コピュラの回避(「〜として機能します」、「〜の証です」)、誇張された構文(「極めて重要な役割を果たします」)
統計バースト性(burstiness) — 文の長さの均一性。機械のテキストは 0.0〜0.2 にとどまり、人間の文章は 0.6〜0.8 です
  • 文のリズムの可視化 — バースト性を目に見える形にする文ごとの棒グラフ。

  • 指摘ごとの推奨事項 — フラグが立ったすべての兆候に、具体的な修正案とその根拠となる研究が付きます。

  • ライブ書き換え(オンデバイス、キー不要) — あなたのテキストと AI っぽさを除去したバージョンを並べて表示し、 キーストロークごとに再構築され、進めるにつれてスコアが下がります。ルールパックで動作するため — モデルも、ネットワークも、API キーも不要 — 即時かつ無料です。すべての変更は選択可能な代替案とともに一覧表示され、 ワンクリックでこれはそのままにすることもできます。最も強い兆候のみから空虚な強調語も削除するまで、 3 段階の強度があります。

    これは単語の置き換えが誠実にできることだけを行い、間違ってしまう編集は辞退します。 「delve into」を「examine into」にはせず、*「単なる X ではなく、それは Y です」*という構文が依存する 「just」を削除せず、女性名詞の前に「el」を付けたりしません。リズムと修辞構造には本当の書き換えが必要なので、 それらは推奨事項に残ります — そしてパネルにはその件数が表示されます。

  • Humanize(任意、BYOK) — AI プロバイダーを接続し、フラグが立ったテキストをワンクリックで書き換えます。 Anthropic(claude-opus-4-8、ブラウザから動作)、OpenAI / DeepSeek、Azure OpenAI、または Ollama (ローカル、キー不要)。認証情報はブラウザ内にのみ保存され、プロバイダーに直接送信されます。

  • ビフォー/アフターの差分と共有可能な結果カード(あなたのテキストを決して含まない PNG サマリー)。

  • カスタムカタログ(BYO ルール) — 禁止語を貼り付けるか、ルールパック JSON をインポート。ライブでマージされます。

  • カタログページ — 両言語のあらゆる AI ライティングの兆候を集めた検索可能なライブラリで、 ブラウザ内 BM25 インデックスでランク付けされています。

すべての AI の兆候がハイライトされた注釈付きテキストと、その横にそれぞれを説明して修正する推奨事項リスト

これが違いです。「87% AI」ではなく、どの単語が、なぜフラグが立ったのか、そして代わりに何を書くべきかです。

2. オリジナリティチェッカー(「Originality」)

「AI が書いたのか、コピーしたのか、隠すために言い換えたのか?」 2 つ以上の文書——論文とその出典、あるいは 学生が提出した課題の束——を投入すると、それらが正確に何を共有しているのかがわかります。基本理念は 誠実です:私たちは証拠を提示して強調する。判断するのは人間です。私たちが断罪することは決してありません。 これは Turnitin のようなインターネット全体のインデックスではありません。

フェーズ検出するもの方法実行場所
A — リテラルコピー逐語的に共有された箇所。大文字・小文字やアクセントの変更に耐性ありアクセント/大文字小文字を正規化した単語 k-シングル + 貪欲な最長一致タイリング。トークン単位で検証🔒 お使いのブラウザ内
B — 言い換え言い換えられたコピー — 同じアイデア、異なる言葉 — 言語をまたぐ場合も文エンベディング(Google EmbeddingGemma-300M、ONNX)+ コサイン類似度🌐 オプションのサーバー(オプトイン)
C — コホートクラス全体で誰が誰をコピーしたかを一目で一括アップロード + N×N の重複ヒートマップ。セルをクリックするとペアを検査🔒 お使いのブラウザ内
D — Web スポットチェックある箇所がすでにオンラインに存在するかどうか文書の最も特徴的な箇所を抽出し、ワンクリックの完全一致フレーズ検索(Google/Bing/DuckDuckGo)を提供🔒 お使いのブラウザ内
  • 共有箇所の証拠 — 一致箇所は両方の文書で並べてハイライトされます。見出しの 重複数値は、ハイライトされているものと正確に一致します(証拠がそのままスコアです)。
  • フェーズ B は、デバイスから出る唯一の機能です。 オプトインであり、UI で開示され、チェック対象として 選択した文だけを PeopleWorks サーバーに送信します。それ以外はすべてお使いのマシン上にとどまります。
  • フェーズ D は意図的に誠実です:私たちは Web 全体をインデックスすることはできないので、できるふりをする代わりに、 チェックする価値のある箇所を提示し、検索を準備します——あなたがクリックするまでどこにも何も送信されません。 オプションの自動 Web 検索はサーバー運営者が有効にできます(以下のオプションのサーバーを参照)。

どの文書がテキストを共有しているかを示すコホート重複マトリクス。最も類似したペアが下にランク付けされている

クラス全体を一目で:すべての文書を他のすべての文書と照合し、次に共有箇所そのものを——断罪ではなく、証拠です。

3. 予測可能性メーター(オプションのサーバー)

パープレキシティを誠実に再構成したものです。小さな言語モデル(Qwen2.5-0.5B または Microsoft Phi-4-mini、int8 ONNX)が、 テキストの言い回しがどれほど予測可能 / ありふれているかを測定します。これは AI 対 人間の判定では ありません ——ラベル付きコーパスでは両者はひどく重なり合います(記憶された人間のテキストも予測可能とスコアされます)。私たちは 予測可能性を、言語ごとに較正された、多くのシグナルのうちの 1 つとして誠実に提示します。オプトインで、PeopleWorks サーバー上で実行されます。モデルは遅延ロードされ、アイドル時にアンロードされてサーバーを軽量に保ちます。

4. 他のアプリから使う — MCP サーバー

ここまでのことはすべて、Claude Desktop および任意の MCP クライアントから、SignsOfAI.Mcp を通じて利用できます。これは Model Context Protocol サーバーであり(公式の ModelContextProtocol SDK、stdio トランスポート上に構築されています)。エンジンは SignsOfAI.Core — 純粋な .NET、ブラウザー不要 — に存在するため、サーバーはそれをツールとして公開するだけです:

ツール機能実行場所
analyze_ai_writingスコア + 判定 + 指摘(修正案付き)+ 統計🔒 デバイス上
check_originality2 つ以上のドキュメント間の重複率と共通箇所🔒 デバイス上
search_catalogAI ライティングの痕跡のカタログを検索(EN/ES)🔒 デバイス上
extract_distinctive_phrases特徴的なフレーズ + すぐ使えるウェブ検索リンク🔒 デバイス上
inspect_characters不可視文字とラテン文字になりすます文字、行・列付き🔒 デバイス上
check_citationsドキュメントが自身の参考文献と矛盾する箇所、それぞれの行付き🔒 デバイス上
compare_to_baseline同じ書き手の過去の作品と比較して、その人自身の尺度でどう位置づけられるか🔒 デバイス上
write_report分析全体を、保存・転送・委員会への持ち込みができるドキュメントとして出力🔒 デバイス上
measure_predictabilityオプションのサーバー経由でのパープレキシティ🌐 サーバー(オプトイン)
check_paraphraseEmbeddingGemma 経由での言い換え・翻訳の一致🌐 サーバー(オプトイン)

最初の 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. エージェントスキルとして使う — /signs-of-ai

スキルには専用ページがあります →、2 つの モードを並べて比較でき、何を拒否するかも説明されています。

エディター内で作業するほうが好みですか? SKILL.md は、下書きをスロップ除去する — または テキストが帯びている痕跡を報告する — ドロップインの エージェントスキルで、英語とスペイン語に対応しています。これは同じ 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 内のタスクパネルです。ホームタブでRead the signsを押すと、開いているドキュメントを読み取り、 サイドバーで回答します:ブラウザーにコピーする必要も、ファイルをアップロードする必要も、書いているページを離れる必要もありません。

これは同じエンジンであり、縮小版ではありません。 すべてのルール、文字スキャン、引用の クロスチェック、判定ルールは、ウェブアプリとデスクトップアプリもレンダリングするクラスライブラリである SignsOfAI.UI を通じて提供されます。Word は単に 3 つ目のホストにすぎません。

なぜこの特定のツールにとってタスクパネルが適切な場所なのか

タスクパネルはブラウザーです。WebAssembly エンジンは一度ダウンロードされ、そのマシン上で動作します。 つまり ドキュメントがアップロードされることは決してありません。これは、ドキュメントが実際に存在するアプリケーションにおいて、Web アプリがすでに果たしている保証そのものです。

これは単なる気遣いではありません。このカテゴリの他のすべてのアドインは、あなたのテキストを API に送信します。彼らの分析はサーバーだからです。私たちのものはそうではないので、送信する先がありません。そしてマニフェストが要求するのは ReadDocument であり、ReadWriteDocument ではありません。Word 自体が、このアドインがあなたのドキュメントを読み取ることしかできないと強制するのであり、Web サイトの一文を信じるようあなたに求めるのではありません。

実際のドキュメントでの見え方

Word on the web でドキュメントの横に開いた The Signs of AI Writing タスクパネル: スコアは 0/100、ドキュメントが 357 語であるために判定は保留され、その下に 6 つの改行なしスペースが報告されている

これは Word on the web(アドレスバーが画像内にあります)で 357 語のドキュメントを開いたもので、このパネルは二度読む価値があります。

判定を出すことを拒否し、その理由を表示しました。このビルドがキャリブレーションされているコーパスには 649 語より短いテキストが含まれていないため、それ未満では比較対象がなく、スコアは*「機械がこれを書いた証拠でも、人が書いた証拠でもない」*となります。キャリブレーションをご覧ください。

そしてそれでも 6 つの改行なしスペースを検出しました。文字スキャンは文章に対する判断ではなく、ファイルに関する事実だからです。しきい値を持たないため、どの長さでも成立し、誰が何を書いたかについては何も述べません。パネルはそのことを明言しています。

すべてに答えるツールを作るのは簡単です。これはそうではない種類のものです。

インストール

アドインのページ → — 何をするのか、両方のインストール経路、そして何をすることを拒否するのかを、英語とスペイン語で説明しています。

手短に言うと、Web では Home → Add-ins → More Add-ins → My Add-ins → Upload My Add-in で src/SignsOfAI.Word/manifest.xml を選びます。Word for Windows にはアップロードボタンがなく、代わりに共有フォルダーのカタログを読み込みます。その手順は 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)

クライアントは単独で完全に動作します。このサーバーはオプトインの機能(予測可能性メーターと フェーズ B の言い換えチェック)のみを支えます。ASP.NET Core(.NET 10)で ONNX モデルをホストし、 遅延読み込みとアイドル時のアンロードにより軽量に保たれます。モデルファイルは git には含まれておらず、 初回使用時にダウンロードされます。

クライアントはデフォルトでホストされたインスタンスを参照します。自分で実行するには、アプリのサーバー 設定でエンドポイントを指定し、自分のオリジン用に CORS を構成してください。

オプションの自動 Web 検索を有効にする(フェーズ D)

デフォルトでは、フェーズ D はオンデバイスのワンクリック検索体験です(キーは不要で、クリックするまで 何も送信されません)。運用担当者は、サーバー上で検索プロバイダーを構成することにより、さらに自動 Web 検索を有効にできます(プレゼンテーションに便利です)(キーはブラウザーには一切渡りません)。 構成しない限りオフのままです:

// 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
}

有効にすると、サーバーはその機能を通知し、クライアントは、ある一節を逐語的に含むページを報告する 自動の「Web を検索」アクションを提供します。オフの場合、クォータを使い果たした場合、またはエラーが 発生した場合、UI は手動のワンクリック検索にフォールバックします — 決して壊れることはありません。

ルールを拡張する

src/SignsOfAI.Core/Rules/Packs/rules.<lang>.json にエントリを追加します — 字句ルールは単一の 単語トークンに一致し、パターンルールは複数語の特徴を示す正規表現です。それぞれが weight、 severity、suggestion を設定します。

字句ルールは、suggestion にはできない方法で、ライブリライターに何をすべきかを伝えることも できます。このフィールドは人向けの文章(「mix、blend、range — あるいは単にそのものを名指しする」)であり、 プログラムが文章から意図を読み取るべきではありません。

{ "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 からカンマ区切りのリストを 読み取ることにフォールバックし、それ以外については推測を拒否します — 単独の語は置換("use")なのか 説明("muletilla")なのかであり得て、それらを見分けるには言語を知る必要があります。したがって、 明示的なフィールドを持たないルールは単に報告されるだけで、自動編集は決して行われません。だからこそ すべての組み込みルールは修正内容を明示しているのです(それを維持するテストがあります)。

インターフェースを翻訳する

このツールが対応していない言語を話すなら、それを追加できます — そして C# を知る必要はありません。

インターフェースはプレーンな JSON です。 src/SignsOfAI.UI/wwwroot/i18n/ に言語ごとに 1 ファイル、さらに locales.json マニフェストがあります。言語の追加は、en.json をコピーし、右側の値を翻訳し、 マニフェストに 1 行追加するだけです。ビルド手順も、読むべきコードもなく、言語スイッチが自動的に それを認識します。

最後までやる必要はありません。 省略したキーはすべて英語にフォールバックするので、部分的な翻訳は 空白だらけのページとしてではなく、部分的に翻訳されたものとして提供されます — ナビゲーションと メインページを翻訳し、プルリクエストを開き、残りはいつでも戻ってきてください。コントリビューターは スイッチ自体にクレジットされます。

すべてのプルリクエストは、正確な誤り — 打ち間違えたキー、重複したエントリ、失われた {0} プレース ホルダー — を指摘する一連のロケールテストを実行するので、翻訳は JSON を並べて読むのではなく、証拠に 基づいてレビューできます。これらのテストは、不完全な翻訳に対しては意図的に失敗しません。

完全ガイド → Docs/TRANSLATING.md

デプロイ

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)のパターンセットから適応したものです。これは検出器ではなく執筆スキルです。ここにある他のすべてと同様の方法でパックに取り入れられました。まずキャリブレーションコーパスに対してスクリーニングされ、そこでは 6 つすべてがゼロを記録しました。同じソースからの他の 12 の候補は、2022 年より前の文章で発火するため、取り入れられませんでした。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。