mcpField
A
AEGIS Academic Integrity Checker

AEGIS Academic Integrity Checker

ローカル
github.com/sunilgentyala科学・教育191 日前に更新

AEGIS Academic Integrity Checker について

AEGIS Academic Integrity Checker は、研究者や機関向けのローカル学術公正性分析ツールです。引用、AI 生成文の兆候、盗用、投稿規定などを調べ、結果を人による確認の参考として提示します。

主な機能

  1. 01引用と架空 DOI の確認
  2. 02AI 生成文の兆候を分析
  3. 03指定コーパスとの盗用照合
  4. 04論文比較とローカルコーパス作成
  5. 05投稿先のガイドライン確認
  6. 06文単位の分析レポート

活用シーン

  1. 01論文の参考文献と DOI の検証
  2. 02会議論文と雑誌論文の比較
  3. 03投稿先の規定に沿った形式確認
  4. 04指定した論文コーパスとの重複確認

MCP 対応

aegis-mcp は stdio 経由で、論文分析、引用検証、ガイドライン確認、論文比較、ローカルコーパス管理、状態確認を行う 7 つのツールを MCP クライアントに公開します。文書はローカルで処理され、オンライン検証を有効にした場合のみ引用メタデータが Crossref/OpenAlex に送信されます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"sunilgentyala-aegis-integrity": {
"command": "uvx",
"args": [
"aegis-integrity"
]
}
}
}
起動コマンドuvx aegis-integrity

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiaegis-integrity3.3.2

ツール

7

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
file_pathstringはい
html_reportbooleanいいえ
skip_citationsbooleanいいえ
prior_works_dirstringいいえ
check_guidelinesstringいいえ
skip_ai_detectionbooleanいいえ

詳細

AEGIS 学術公正性チェッカー

バージョン Python ライセンス オフライン優先 バイアス対応、実験的 スター数

テスト CodeQL PyPI セキュリティポリシー mcprush 認証済みパブリッシャー、グレード A Glama 上の sunilgentyala/aegis-integrity MCP サーバー

ターミナルから論文を分析する AEGIS:架空の DOI 2 件を捏造された引用として検出

合成サンプル論文(docs/demo/sample_paper.txt)に対する実際の CLI 出力です。論文に含まれる DOI はどちらも架空のものであり、AEGIS はそれらを検出します。

オープンソースでオフライン、バイアスに配慮した学術公正性分析。 文書はお使いのハードウェア上だけで処理され、外部にアップロードされることはありません。オンライン検証が有効な場合、引用の確認では参考文献のメタデータ(タイトル、著者、DOI)を使って Crossref/OpenAlex に問い合わせることがあります。 盗用、AI 生成コンテンツ、引用の捏造、ゴーストライティング、略奪的な参考文献、エッセイ代筆業者に見られるパターンを、単一のパイプラインで分析します。さらに、LLM のウォーターマーク研究向けのトークン分布ヒューリスティックを実験的に備えています。 盗用検出はコーパスに基づくものであり、ウェブやデータベースをリアルタイムで巡回するものではありません。 AEGIS は、ユーザーが用意した論文コーパス(自身の過去の研究、ダウンロードした参考文献セットなど)と文書を比較します。詳しくはコーパスインデックスの構築をご覧ください。コーパスが読み込まれていない場合、盗用検出モジュールは何も検出しないままにするのではなく、「過去の研究が読み込まれていません」と正しく報告します。これはスキャンの失敗ではありません。 結果は人間によるレビューを補助するためのものであり、不正行為を判定するものではありません。


はじめに

AEGIS の使い方を選んでください。3 つの方法はいずれも、ご自身のコンピューター上で実行できます。

1. ブラウザーで使う(最も簡単です)。 一度インストールすれば、ウェブアプリを開けます。

pip install "aegis-integrity[ml]"
aegis ui

PDF、Word、LaTeX、またはテキストファイルをドラッグして、Full check、Private / offline、 References only、または Style & formatting を選ぶと、わかりやすいレポートが表示されます。 全体評価、確認すべき項目、検証結果付きのすべての参考文献、ダウンロード可能な完全なレポートが含まれます。 Compare two papers タブと My comparison library タブでは、自己剽窃の確認やコーパスの構築ができます。 Windows では、install.bat ですべてをセットアップし、start-aegis.bat をダブルクリックするとウェブアプリが開きます。

2. Claude Code 内で使う。 mcp エクストラ付きでパッケージをインストールし、プラグインを追加します。

pip install "aegis-integrity[mcp,ml]"
/plugin marketplace add sunilgentyala/aegis-integrity
/plugin install aegis-integrity@aegis-integrity

その後、自然な言葉で依頼する(「~/drafts/paper.pdf の参考文献をチェックして」「この論文は Elsevier のジャーナルに投稿できる状態ですか?」)か、/integrity-check および /submission-check スキルを使います。

3. Claude Desktop で使う。 オプション 2 と同様にパッケージをインストールし、 Releases ページから aegis-integrity-<version>.mcpb をダウンロードして開きます。拡張機能の設定で、AEGIS をインストールした Python を選択してください。他の MCP クライアントでは、aegis-mcp コマンドを直接実行できます。

お使いのコンピューターでどの方法が使えるかわかりませんか? aegis doctor を実行してください。利用可能な機能、それぞれの準備状況、問題を解決するコマンドが表示されます。 aegis doctor --warm-up を実行すると、あらかじめ AI モデルがダウンロードされるため、初回の完全チェックで待つ必要がなくなります。


MCP ツール

aegis-mcp は、Claude Code、Claude Desktop、および任意の MCP クライアントに 7 つのツールを公開します。

メンテナーが Glama および mcprush に掲載し、申請済みです。各掲載ステータスの意味については、こちらをご覧ください。

ツール機能プロンプトの例
aegis_analyze_paperPDF/DOCX/TEX/TXT に対する完全な研究公正性チェック「~/drafts/paper.pdf の研究公正性を完全にチェックして」
aegis_check_citationsCrossref と照合して参考文献を検証(捏造された DOI を検出)「paper.docx の参考文献をチェックして」
aegis_check_guidelinesIEEE、ACM、BCS、IET、ISACA、Elsevier のスタイルをオフラインでチェック「これは Elsevier のジャーナルに投稿できる状態ですか?」
aegis_compare_papers2 つの論文の重複をチェック(学会版とジャーナル版の比較など)「v1.docx と v2.docx を比較して」
aegis_index_add論文をローカルの比較用コーパスに追加「Smith2025.pdf をコーパスに追加して」
aegis_index_summaryコーパスを一覧表示「AEGIS のコーパスには何が入っていますか?」
aegis_status利用可能なチェックと、残りのチェックを有効にする方法を表示「AEGIS は正しく設定されていますか?」

セキュリティ

AEGIS はローカル優先で動作し、MCP サーバーは stdio 経由で実行されます。文書がコンピューターの外に送信されることはありません。Crossref/OpenAlex に送信されるのは参考文献のメタデータのみです。

  • MCP ツールが読み取るのは、最大 50 MB(AEGIS_MAX_FILE_MB)の .pdf、.docx、.tex、.txt ファイルのみです。
  • AEGIS_ALLOWED_ROOTS を設定すると、すべてのツールがアクセスできるフォルダーを限定できます(エージェントに AEGIS を操作させる場合に推奨)。
  • ツールの出力からは制御文字が除去され、長さが制限されます。ツールには読み取り専用/非破壊の MCP ヒントが付いています。
  • 文書内の DOI はパーセントエンコードされ、リダイレクトを使わずに取得されます。MCP サーバーが ./.env を読み込むことはありません。
  • CI ではテスト、bandit、ブロッキング設定の pip-audit、CodeQL が実行されます。Dependabot も有効です。

脆弱性を非公開で報告するには、SECURITY.md をご覧ください。


プロジェクトを支援する

AEGIS が役に立った場合は、GitHub でスターを付けると、他の研究者がプロジェクトを見つけやすくなります。バグ報告、正常に処理できない論文サンプルの提供、プルリクエストはさらに大きな助けになります。good first issue ラベルが付いた未解決の issue をご覧ください。


AEGIS の比較

主要なインテグリティツールには、それぞれ盲点があります。AEGIS v3.3 は、そのうち14 項目を同時に解消することを目指しています。

各ベンダーの公開ドキュメントおよび料金ページに基づいています(2026 年 8 月時点)。「公開情報なし」は、そのベンダーが機能を公開ドキュメントに記載していないことを意味し、機能がないと確認されたわけではありません。訂正はこちら。

ギャップAEGIS v3.3TurnitiniThenticateCopyLeaksGPTZeroOriginality.ai
オープンソース/セルフホスト可能はいいいえいいえいいえいいえいいえ
引用のハルシネーション検出はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
IEEE/ACM/Elsevier/IET/IETE/BCS 向けの会場主張の検証+重複タイトルの確認はい(Crossref 経由のメタデータのみ、無料)はい(有料の Similarity Check メンバーシップによる全文照合)はい(有料の Similarity Check メンバーシップによる全文照合)公開情報なし公開情報なし公開情報なし
LLM ウォーターマークのトークン分布ヒューリスティック(実験的、キー不要)はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
引用ネットワーク分析(カルテル、略奪的行為)はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
ESL/非ネイティブ話者向けバイアス調整(15 言語)部分対応(実験的)公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
段落単位の AI スコアリングはい公開情報なし公開情報なしはいはい部分対応
意味的/言い換えによる盗用検出(SBERT)はい部分対応公開情報なし部分対応公開情報なし公開情報なし
文体計量学によるゴーストライティング検出(Burrows' Delta)はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
オープンコーパスを対象とする自己盗用検出はい公開情報なし有料公開情報なし公開情報なし公開情報なし
クラス/エッセイ代筆業者の一括検出はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
意味的整合性による AI 推敲検出はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
OpenAlex によるジャーナル品質連携はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
文ごとの完全に説明可能なレポートはい公開情報なし公開情報なし部分対応部分対応公開情報なし
数式チェック(式番号、参照先の欠落、表記法)はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
文法・言語慣習チェック(短縮形、米国/英国式のスペル、主語と動詞の一致)はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
出版社ごとのガイドライン準拠(IEEE/ACM/BCS/IET/ISACA/Elsevier を個別に確認)はい公開情報なし公開情報なし公開情報なし公開情報なし公開情報なし
オフライン/エアギャップ環境での運用はいいいえいいえいいえいいえいいえ
REST API+CLI(無料)はいいいえ有料有料有料有料
料金モデル$0.00(セルフホスト)機関向け(公開情報なし)機関向け(公開情報なし)有料(セルフサービス)有料(セルフサービス)有料(セルフサービス)

14 の検出モジュール

1. 引用のハルシネーション検出

Crossref REST API で各 DOI を解決し、著者、年、タイトルを照合します。 査読付き研究では、モデルのバージョンによって ChatGPT が参考文献の最大 55%を捏造したことが報告されています (Walters & Wilder、『Scientific Reports』、2023)。

判定結果: VALID | MISMATCH | HALLUCINATED | UNRESOLVABLE | NO_DOI

2. LLM のウォーターマーク分析 -- 実験的機能(v2.1)

AEGIS はここで、混同してはならない 2 つの異なる機能を提供します。

  • 実験的なトークン分布の異常ヒューリスティック(デフォルト、WatermarkMode.EXPERIMENTAL): Kirchenbauer(2023)のグリーンリスト z 検定や Zhao ら(2023)のエントロピー/順位の偏り分析の形を大まかに模した、鍵を必要としない統計手法です。実際の LLM プロバイダーのウォーターマーク鍵、シード方式、トークナイザーにはアクセスできません。この手法で検証する「グリーンリスト」は、実際のデプロイ環境から復元されたものではなく、統計上の帰無仮説としてローカルで生成されたものです。STATISTICAL_ANOMALY または NO_STATISTICAL_ANOMALY を報告できますが、確定的なウォーターマーク判定を出すことはありません。また、全体的な整合性リスクスコアには一切影響しません。
  • 既知の方式の検証(WatermarkMode.VERIFIED_SCHEME、オプトイン):実際の方式、トークナイザー、鍵が判明しており、指定されている場合に使用します。AEGIS は現在、実際の方式の検証機能を実装していないため、このモードでは上記のヒューリスティックに暗黙的にフォールバックせず、UNSUPPORTED_CONFIGURATION を報告します。

ウォーターマークの出力を信頼する前に、以下のウォーターマーク検出:機能と制限を参照してください。

3. 引用ネットワーク分析(v2.0 -- 新機能)

単一の引用に対する DOI チェックでは見逃される構造上の異常を検出するため、参考文献リスト全体を分析します。

  • 自己引用の水増し -- 参考文献の 30% 超で、著者が投稿者と共通している場合にフラグを立てます
  • 捕食的ジャーナルの検出 -- 既知の捕食的な名称パターンとのヒューリスティックなパターンマッチング
  • 引用の集中 -- すべての参考文献が単一の年に集中している場合に検出します(LLM による捏造の特徴)
  • OpenAlex との連携 -- ジャーナルの品質区分と引用インパクトを無料の API で照会します
  • DOI 欠落率 -- DOI の欠落率が非常に高い場合、AI が幻覚した参考文献リストと一致する可能性があります
4. ESL 調整済み AI コンテンツ検出

Liang ら(スタンフォード大学、2023)が報告したバイアスに対応します。 GPT 検出器は、TOEFL エッセイを書いた非ネイティブ執筆者の半数以上を AI 生成と誤判定し、ある検出器では最大 98% にフラグを立てた一方、英語ネイティブのエッセイは正確に判定されました。 15 言語について言語別のしきい値倍率を定義していますが、この部分は実験的です。言語はテキストから検出されますが、英語の投稿はほぼすべて「en」と判定されるため、英語以外の言語向け倍率が適用されることはまれです(v3.1.1 の変更履歴の注記を参照してください)。AEGIS が ESL の誤検出を解決したと見なさないでください。必ず人間が確認してください。段落単位のスコアリングにより、文書全体に一つの判定を下すのではなく、挿入された AI の文章を特定できます。

シグナル:GPT-2 のパープレキシティ、バースティネス、クロスパープレキシティ比、文体特徴のアンサンブル、GPT-4/GPT-5 世代の語彙的特徴の密度(v2.5 -- ChatGPT/GPT-4/GPT-5 ファミリーの出力に不釣り合いに多く見られる、文章の転換や表現を洗練する語彙。GPT-2 のパープレキシティだけでは、流暢な最先端モデルのテキストに対して検出しにくい特徴です)。

5. 意味的一貫性分析(v2.0 -- 新機能)

人間によるヒューマナイザー処理で後処理され、パープレキシティのフィルターを通過する AI による洗練済みテキストを検出します。「人間らしくないほど滑らか」という特徴を対象とします。

  • 談話接続表現の密度(AI は「Furthermore」「Moreover」「Additionally」を過剰に使用します)
  • 文の長さの均一性(AI は不自然なほど分散の小さい文章を生成します)
  • 認識論的な婉曲表現の頻度(AI は定型的で特徴的な頻度で断定を避けます)
  • セクション構成のテンプレート照合(標準的な AI 論文の構成:Introduction -> Methods -> ...)
6. 意味的/言い換えによる剽窃

SBERT による高密度検索と CrossEncoder による再ランキングで、語句が一切一致しない概念レベルの言い換えを検出します。BM25/TF-IDF のみに基づく従来のツールでは、これをまったく検出できません。

モデル:paraphrase-MiniLM-L6-v2(80 MB、CPU に適しています)。インデックス:FAISS IndexFlatIP。 先に読み込むコーパス(--corpus)が必要です。照合用にウェブやデータベースを組み込みでクロールする機能はありません。

7. N-Gram による盗用検出(MinHash LSH)

二重インデックス:単語の 3-gram(逐語的なコピー)と文字の 5-gram(誤字や文字の置換による難読化)。MinHash の置換数は 128 です。LSH のバンディングにより、大規模コーパスでもクエリ時間は劣線形になります。また、コーパスの読み込みが必要です。適用範囲については上記と同じ注意事項があります。

8. 文体計量による著者プロファイリング(Burrows' Delta)

セグメントごとに 60 次元の特徴ベクトル(スカラー値 10 個+機能語の次元 50 個)を使用します。文書のベースラインからの Burrows' Delta が 0.40 を超えるセグメントは、ゴーストライティングの可能性がある箇所としてフラグ付けされます。人間による文章と AI による文章を混在させる、プロによるエッセイ代筆業者を検出します。

9. 自己盗用/テキストの再利用

3 層の検出方式:文字 5-gram の Jaccard(逐語的なコピー)、単語 3-gram の Jaccard(ほぼ逐語的なコピー)、SBERT のコサイン類似度 >= 0.88(言語をまたいだ言い換えによる再利用)。リスクレベルは COPE のテキスト再利用ガイドライン(しきい値 15%/30%)に準拠します。

10. バッチ/クラス分析(v2.0 -- 新機能)

複数の提出物を同時に分析し、エッセイ代筆業者の活動や共有 AI ソース文書を検出します。

  • すべての提出物を対象とするペアごとの類似度マトリックス(MinHash+希少語彙の重複)
  • 構造フィンガープリンティング(表面的なテキストは異なるものの、セクションの順序が同一)
  • AI スコアのクラスタリング(クラス全員がそれぞれ独立して AI のような文章を書くのは、統計的に起こりにくいことを検出)
  • Union-Find クラスタリングにより、共通ソースが疑われる提出物をグループ化
11. 対象出版社の検証(v2.4 -- 新機能)

著者から特に問い合わせの多い 6 つの出版社を対象に、引用と二重投稿のチェック範囲を限定します:IEEE, ACM, Elsevier, IET, IETE, BCS。このモジュールを含め、外部ツールから出版社の実際の全文盗用データベースに照会することはできません。Turnitin/iThenticate を支える Crossref の Similarity Check コーパスは、料金を支払う会員組織に利用が制限されています。また、Scopus/IEEE Xplore の公開 API は、キーを使用してもメタデータまたは要旨のみを提供します。このモジュールでは代わりに、すべて無料の Crossref メタデータを利用して以下を行います。

  • 掲載先の申告の検証 -- 「IEEE Trans. ...」や「Proc. ACM ...」のように記載されているものの、DOI の実際の解決先が別の出版社である参考文献(掲載先の誤帰属または捏造)にフラグを付けます。モジュール 1 で解決済みの引用を再利用するため、追加のネットワーク呼び出しはありません。
  • 二重投稿の検索 -- 対象の各出版社を検索し、その掲載先ですでにインデックス化されている、ほぼ同一のタイトルを探します(IEEE/ACM/Elsevier/IET は Crossref の会員 ID を使用し、IETE と BCS は DOI プレフィックスとコンテナタイトルの照合を使用します。これらの出版社はそれぞれ Informa/Taylor & Francis と Oxford University Press を通じて出版しており、独自の Crossref 会員資格を保持していないためです)。

--target-publishers IEEE,ACM,...(CLI)または PipelineConfig.venue_target_publishers(Python API)で設定できます。デフォルトでは 6 社すべてが対象です。

12. 数式チェック(v3.0 -- 新機能)

番号付き数式の構造的な整合性をチェックします。連番になっているか(重複、欠番、順序の誤りを検出)、存在しない数式番号への本文中の参照がないか(改訂時の番号振り直しで残ることがよくあります)、番号は付いているものの一度も参照されない数式がないかを確認します。また、実際の出版社のスタイルマニュアルに基づく表記規則もチェックします。対象は指数表記(5E03 と 5×10³ の違い)、小数点前のゼロ、パーセンテージの範囲の表記、二重かっこによる参照です。数式は、LaTeX ソース(\begin{equation}/align/eqnarray/...)、Word のネイティブ OMML 数式 XML(python-docx ではまったく取得できず、.docx の Paragraph.text はすべての数式を黙ってスキップします)、または PDF/TXT 向けのテキストパターンヒューリスティックから抽出されます。純粋な Python で実装されており、ML への依存はありません。これはコンプライアンス/品質のシグナルであり、不正行為のシグナルではありません。overall_risk には影響しません。

13. 文法・言語規則のチェック(v3.0 -- 新機能)

オフラインで動作し、依存関係を最小限に抑えた文法・用法チェッカーです。縮約形の検出(フォーマルな文章での "don't" など)、30組以上の単語ペアにわたる米国式/英国式スペルの一貫性の検出、主語と動詞の一致に関するヒューリスティック("the data is" と "the data are" など)、よくある用法の誤り("comprised of"、"could of"、"less samples" と "fewer samples" の使い分け、年代や頭字語でのアポストロフィの誤用)、可読性指標に対応しています。正規表現と、オプションのspaCyによる品詞タグ付け(すでにAEGISの依存関係に含まれています)を使用して、すべてプロセス内で実行します。Javaランタイムも外部の文法サービスも、新たな必須依存関係も必要ありません。コンプライアンス/品質を示すシグナルとしても利用できますが、overall_risk には決して含まれません。

14. 出版団体別の投稿規定への準拠(v3.0 -- 新機能、v3.1でElsevierを追加)

上記の数式と文法に関する検出結果を、6つの出版団体それぞれが公開しているスタイルガイドに照らして、統合した汎用ルールセットではなく、個別にチェックします。そのため、ACMの規則には適合していてもIEEE固有の規則には違反する文書(またはその逆)を、平均化して見えなくするのではなく、投稿先ごとに確認できます。

投稿先出典検出対象となる特徴的な規則
IEEEIEEE Editorial Style Manual for Authors(2024)米国式スペル、縮約形の禁止、数式の引用表記「(n)」、シリアルカンマ
ACMACM Formatting/Reference Guide(Chicago Manual of Styleをベースに作成)米国式スペル、角括弧付きの数値引用、シリアルカンマ
BCSThe Computer Journal(OUP)General Instructions縮約形やスペルに関する規則は公開されていないため、断定せず推定として報告
IETIET Research Journals Author Guide数式を裸の "(1)" で参照("Eq. (1)" ではない)、5E03 ではなく科学的記数法を使用
ISACAISACA Journal Article Submission Guidelines三人称が必須(「I」や「you」を避ける)、目標語数は2,000~3,000語、数値を角括弧で示す方式ではなく後注を使用
ElsevierElsevier Guide for Authors / CRediT / Highlights / Declaration of Competing Interest policy pages米国式または英国式のどちらのスペルも可。ただし混在は禁止。CRediT著者声明、利益相反宣言、データ利用可能性声明が必須。Highlightsは3~5項目、各項目85文字以内

結果は PASS/NEEDS_REVIEW/NOT_ENOUGH_DATA で示され、助言として提供されます。FAIL にはなりません。これらはスタイル上の慣例であり、学術公正性に関する検出結果ではありません。AEGISは投稿先の編集部を代替するものではありません。aegis guidelines paper.pdf --venues IEEE,ACM,BCS,IET,ISACA,ELSEVIER(高速で、MLモデルを一切使用しません)を実行するか、aegis analyze ... --guidelines all で有効にしてください。


アーキテクチャ

submission (PDF / DOCX / TEX / TXT)
       |
       v
  DocumentParser              -- PyMuPDF / python-docx / TexSoup / striprtf
       |
  ┌────┴──────────────────────────────────────────────────────────────┐
  │  AEGISPipeline v3.0                                               │
  │                                                                   │
  │  NGramDetector             word 3-gram + char 5-gram MinHash LSH  │
  │  SemanticDetector          SBERT + FAISS + CrossEncoder reranker  │
  │  AIContentDetector[v2.5]   GPT-2 perplexity+burstiness+ESL+tell   │
  │  CitationIntegrityDetector Crossref REST API (DOI resolution)     │
  │  StylometricAnalyzer       Burrows' Delta; 60-dim feature vector  │
  │  SelfPlagiarismDetector    SBERT + n-gram vs. prior works         │
  │  LLMWatermarkDetector [v2.1] experimental, no real key            │
  │  CitationNetworkAnalyzer[v2] self-cite inflation; OpenAlex        │
  │  SemanticCoherenceAnalyzer[v2] discourse connectors; uniformity   │
  │  BatchAnalyzer         [v2] classroom-level essay mill detection  │
  │  TargetPublisherVerifier[v2.4] IEEE/ACM/Elsevier/IET/IETE/BCS     │
  │  MathFormulaChecker    [v3.0] equation numbering/refs/notation    │
  │  GrammarLanguageChecker[v3.0] contractions/spelling/agreement     │
  │  GuidelineComplianceChecker[v3.0] IEEE/ACM/BCS/IET/ISACA/Elsevier │
  └────────────────────────────┬──────────────────────────────────────┘
                               |
                          AnalysisReport
                               |
                          HTML report
                        (self-contained,
                         offline-viewable)

インストール

最小構成(MLモデルなし。引用、文体計量、電子透かし、一貫性、数式、文法、投稿先別の投稿規定への準拠に対応。すべて純粋なPythonで動作):

pip install -e .

フル構成(全14検出器):

pip install -e ".[ml,nlp,bib]"
python -m spacy download en_core_web_sm

Docker(本番環境/エアギャップ環境に推奨):

docker compose up --build
# Web app at http://localhost:8000/ ; API at the same address (bound to localhost only by default)
# Swagger UI at http://localhost:8000/docs

コンテナは非rootユーザーで実行され、ヘルスチェックに追加のツールは必要ありません。デフォルトでは、composeファイルはホストのループバックインターフェースにのみAPIを公開します。ローカルホスト以外に公開する前に(異なるホストバインドやリバースプロキシなど)、AEGIS_API_KEY を設定してください。設定しない場合、/health 以外のすべてのルートが認証なしで利用可能になります。

Windows向けワンクリック:

install.bat

クイックスタート

コマンドライン
# Full analysis (all 14 detectors):
aegis analyze paper.pdf --html report.html

# Fast, offline-only scan: math + grammar + per-venue guideline compliance,
# checked SEPARATELY for each requested venue -- no ML models at all:
aegis guidelines paper.pdf --venues IEEE,ACM,BCS,IET,ISACA,ELSEVIER --html guidelines.html

# Fold guideline compliance into the full analysis instead:
aegis analyze paper.pdf --guidelines all --html report.html

# Disable the experimental watermark heuristic entirely:
aegis analyze paper.pdf --watermark-mode disabled

# Against a reference corpus:
aegis analyze paper.pdf --corpus ./prior_papers/ --html report.html

# Self-plagiarism check against own prior publications:
aegis analyze paper.pdf --prior-works ./my_previous_papers/ --html report.html

# Pairwise comparison (conference vs. journal version):
aegis compare conference_draft.pdf journal_submission.pdf

# Batch / classroom analysis (essay mill detection):
aegis batch ./submissions/ --html batch_report.html

# Build a persistent index for a large corpus:
aegis index build ./corpus_dir/ --index-dir ./aegis_index/
aegis analyze paper.pdf --index-dir ./aegis_index/ --html report.html

# Start the REST API server:
aegis serve --host 0.0.0.0 --port 8000
Python API
from aegis.core.pipeline import AEGISPipeline, PipelineConfig

from aegis.detectors.watermark_detector import WatermarkMode

cfg = PipelineConfig(
    citation_email="[email protected]",
    run_watermark_detector=True,       # v2.0
    watermark_mode=WatermarkMode.EXPERIMENTAL,  # default; never affects overall_risk
    run_citation_network=True,         # v2.0
    run_coherence_analyzer=True,       # v2.0
)
pipeline = AEGISPipeline(config=cfg)

# Load a reference corpus (optional)
pipeline.load_corpus([("Smith2023", open("smith2023.txt").read())])

# Load your own prior publications (optional)
pipeline.load_prior_works([("My2022Conf", open("my2022.txt").read())])

report = pipeline.analyze("submission.pdf")
print(report.overall_risk)           # LOW | MEDIUM | HIGH | CRITICAL

# v2.0 new fields
print(report.watermark_result)       # WatermarkResult
print(report.citation_network_result)# CitationNetworkResult
print(report.coherence_result)       # CoherenceResult

# v3.0 new fields -- compliance/quality signals, never part of overall_risk
print(report.math_result)            # MathAnalysisResult
print(report.grammar_result)         # GrammarAnalysisResult
print(report.guideline_results)      # {"IEEE": GuidelineComplianceResult, ...}
                                      # (empty unless PipelineConfig.guideline_venues is set)

from aegis.report.generator import ReportGenerator
gen = ReportGenerator("./reports")
gen.generate_html(report)

# Batch classroom analysis (v2.0)
from aegis.detectors.batch_analyzer import BatchAnalyzer
analyzer = BatchAnalyzer()
batch = analyzer.analyze(
    doc_names=["alice.pdf", "bob.pdf", "carol.pdf"],
    doc_texts=[text_alice, text_bob, text_carol],
    ai_scores=[0.72, 0.69, 0.71],
)
print(batch.overall_risk)            # CRITICAL if essay mill detected
print(batch.suspicious_pairs)
REST API
# Upload for analysis:
curl -X POST http://localhost:8000/analyze \
     -F "[email protected]" -F "format=json"

# Add to reference corpus:
curl -X POST http://localhost:8000/corpus/add \
     -F "[email protected]" -F "label=Smith2023"

# Build search index:
curl -X POST http://localhost:8000/corpus/build

# Pairwise comparison:
curl -X POST http://localhost:8000/compare \
     -F "[email protected]" -F "[email protected]"

# Batch classroom analysis:
curl -X POST http://localhost:8000/batch \
     -F "[email protected]" -F "[email protected]" -F "[email protected]"

レポートフィールド(v2.1)

detector_status は、「この検出器は何も見つけなかった」と「この検出器は実行されなかった」を区別します。スコアが0.0というだけでは、検出器が無効だったのか、コーパスが見つからなかったのか、実際に問題がなかったのかを判別できません。検出された参考文献が5件未満の場合、または検証範囲が80%未満の場合、citation_summary.assessment は確度の高いリスクレベルではなく "INCONCLUSIVE" になります。信頼度の低い参考文献が1件あるだけで、「引用の100%が捏造」と判断されるようなことがあってはなりません。

{
  "overall_risk": "HIGH",
  "scores": {
    "plagiarism": 0.12,
    "ai_content": 0.71,
    "citation_issue_rate": 0.22,
    "style_inconsistency": 0.08,
    "self_recycling_pct": 4.2
  },
  "flags": ["AI content detected: AI_LIKELY (score=0.71)", "..."],
  "network_activity": {
    "document_content_transmitted": false,
    "citation_check_mode": "online",
    "citation_network_mode": "online",
    "external_services_contacted": ["Crossref", "OpenAlex"]
  },
  "detector_status": {
    "ngram": {"status": "completed", "reason": null},
    "semantic": {"status": "disabled", "reason": null},
    "ai_content": {"status": "completed", "reason": null},
    "citation": {"status": "completed", "reason": null},
    "self_plagiarism": {"status": "unavailable", "reason": "no prior works loaded"},
    "...": "one entry per detector -- completed | disabled | unavailable | failed"
  },
  "ai_detection": {
    "document_verdict": "AI_LIKELY",
    "ai_fraction": 0.62,
    "paragraph_scores": [...]
  },
  "citation_summary": {
    "total_references": 22,
    "references_with_identifier": 20,
    "references_verified": 19,
    "verification_coverage": 0.864,
    "assessment": "ASSESSED",
    "risk_level": "MEDIUM"
  },
  "citation_integrity": [...],
  "citation_network": {
    "self_citation_rate": 0.08,
    "predatory_journal_count": 0,
    "missing_doi_rate": 0.14,
    "flags": []
  },
  "watermark": {
    "mode": "experimental",
    "status": "completed",
    "verdict": "NO_STATISTICAL_ANOMALY",
    "evidence_status": "experimental",
    "affects_overall_risk": false,
    "tokens_evaluated": 842,
    "z_score": 0.41,
    "confidence": 0.0,
    "limitations": ["This is a keyless heuristic...", "..."]
  },
  "coherence": {
    "verdict": "AI_POLISHED",
    "ensemble_score": 0.63,
    "discourse_connector_density": 5.2,
    "sentence_length_cv": 0.29
  },
  "stylometric": {...},
  "self_plagiarism": {...}
}

設定

.env.example を .env にコピーし、以下を設定します。

変数デフォルト説明
AEGIS_INDEX_DIR./aegis_index永続化される FAISS + MinHash インデックスのディレクトリ
AEGIS_REPORT_DIR./aegis_reportsJSON/HTML レポートの出力先ディレクトリ
AEGIS_DEVICEcpuPyTorch デバイス(cpu、cuda、mps)
AEGIS_CITATION_EMAIL[email protected]Crossref polite-pool 用のメールアドレス
AEGIS_API_KEY未設定設定すると、/health を除くすべてのルートで、一致する X-API-Key ヘッダーが必要になります。未設定の場合は認証されないため、その場合は信頼できるネットワークにのみ API を公開してください。
AEGIS_MAX_UPLOAD_MB50/analyze、/compare、/corpus/add で受け付けるアップロードサイズの上限(MB)。上限を超えるアップロードには HTTP 413 が返されます。
AEGIS_MAX_CONCURRENT_JOBS2同時に処理できる /analyze リクエストの最大数。上限を超えるリクエストはキューに入れず、HTTP 503 を返します。

すべての設定は、Python API の PipelineConfig 引数として渡すこともできます。


ウォーターマーク検出:機能と制限事項

AEGIS のウォーターマーク分析はデフォルトでは実験的であり、全体的な 完全性リスクスコアには影響しません。ウォーターマークの出力を利用する前に、以下をご確認ください。

  • 無関係なグリーンリストでは、秘密のウォーターマークを検証できません。 実際のウォーターマーク方式 (Kirchenbauer ほか、2023 年など)では、秘密鍵と、実際に生成に使用されたモデルのトークナイザーに紐づく シード方式を用いて、語彙を分割します。AEGIS の実験的なヒューリスティックにはそのような仕組みはなく、 直前の単語のハッシュから独自のグリーン/レッドの分割を生成し、統計的な帰無基準として比較するだけです。 この独自の帰無基準との一致は、実際のプロバイダーのウォーターマークとの一致を示す証拠にはなりません。
  • トークナイザーの整合性が重要です。 このヒューリスティックは、実際の LLM が使用する BPE トークナイザーではなく、 単語単位のハッシュでトークンを近似します。トークン境界が異なるため、実際の方式との対応はさらに損なわれます。
  • 異常検出は方式の検証ではありません。 STATISTICAL_ANOMALY という判定は、このヒューリスティック独自の 帰無基準を超えたことを意味するだけで、ウォーターマークが見つかったことを意味しません。そのような主張を裏付けられるのは、 実際の方式を正しく設定して実行する VERIFIED_SCHEME の場合に限られます(現時点では AEGIS に実装されていません)。
  • テキストの最小長。 アルファベット文字のトークンが 200 個未満の場合は INSUFFICIENT_TEXT が返され、 短い抜粋は評価されません。
  • 言い換えや編集を行うと、実際のウォーターマークの検出可能性が低下します。 AEGIS は、いずれに対する堅牢性も主張しません。
  • 結果の解釈には人の判断が必要です。 検証済みの方式によるシグナル(将来実装された場合も含む)であっても、 来歴を示す証拠であり、不正行為の証明ではありません。また、リスクの引き上げは最大 1 段階に制限され、 CRITICAL に強制されることはありません。
  • 特定のプロバイダーに関する主張はありません。 AEGIS は、GPT-4、Gemini、Claude、その他の独自プロバイダーの ウォーターマークを検出できるとは主張しません。そのような方式は、ここでは文書化も実装もされていません。

テストの実行

pip install pytest
pytest tests/ -v

テストスイートは、ネットワークへの接続や ML モデルのダウンロードなしで実行できます。


AEGIS を選ぶ理由

1. ローカル優先の処理。 AEGIS は原稿をどこにもアップロードしません。分析はすべてお使いのマシン上で実行されます。引用チェックでは、オンライン検証が有効な場合に限り、文書そのものではなく、参考文献のメタデータ(タイトル、著者、DOI)を使って Crossref/OpenAlex に問い合わせることがあります。

2. 国際的な研究者に対する誤検出の偏りを軽減。 Liang et al. (Stanford, 2023) は、GPT 検出器が、英語を母語としない著者による TOEFL エッセイの半数以上を AI 生成と誤分類したことを明らかにしました。AEGIS は 15 言語にわたる言語別のキャリブレーションを適用し、この偏りを軽減します。

3. 他では公開文書化されていない見落としを補います。 引用カルテル、エッセイ作成業者、パープレキシティフィルターを通過する AI による文章の推敲は、主流ツールで検出対象として公開文書化されていません。AEGIS には、オープンソースの代替ツールではあまり見られない、実験的で情報提供のみを目的とする LLM ウォーターマークのヒューリスティックも含まれています。詳細は機能と制限事項をご覧ください。

4. ブラックボックスではなく、説明可能です。 すべてのフラグには、該当する文、照合対象となったソース、そして検出のきっかけとなった指標が記載されるため、人間のレビュアーが確認したり、却下したりできます。単一の不透明なスコアに頼ることはありません。AEGIS の結果は人間によるレビューを補助するシグナルであり、不正行為の判定ではありません。

5. 研究機関向けに構築。 LMS 連携用 REST API、エアギャップ環境へのデプロイ用 Docker、授業での一括スキャン用バッチモード、学術誌の編集システム向け永続インデックスを備えています。

6. いつまでも無料。 MIT ライセンスです。投稿ごとの料金、シートライセンス、ベンダーロックインはありません。商用ツールでは機関向けライセンスまたは有料 API クレジットが必要ですが、AEGIS でかかる費用はコンピューティング時間のみです。


参考文献

  • Kirchenbauer et al.(2023).大規模言語モデルのためのウォーターマーク.ICML 2023.
  • Zhao et al.(2023).AI 生成テキストのための証明可能で堅牢なウォーターマーク.ICLR 2024.
  • Liang et al.(2023).GPT 検出器は英語を母語としない執筆者に対して偏りがある.Patterns 4(7), 2023. arXiv:2304.02819.
  • Walters & Wilder(2023).ChatGPT が生成した書誌引用における捏造と誤り.Scientific Reports 13, 14045. doi:10.1038/s41598-023-41032-5.
  • Burrows(1987).語のパターンと物語の形式.Literary Linguistic Computing 2(2).
  • McCarthy & Jarvis(2010).MTLD、v​ocd-D、HD-D.Behavior Research Methods 42(2).
  • COPE(2019).テキスト再利用ガイドライン.Committee on Publication Ethics.

Docker(GitHub Packages)

ビルド済みコンテナーイメージが GitHub Container Registry に公開されています:

docker pull ghcr.io/sunilgentyala/aegis-integrity:latest
docker run --rm -p 8000:8000 -v aegis-data:/data ghcr.io/sunilgentyala/aegis-integrity

引用方法

研究で AEGIS を使用する場合は、このソフトウェアを引用してください:

@software{gentyala2026aegis,
  author    = {Gentyala, Sunil},
  title     = {{AEGIS}: Offline, Bias-Aware Academic Integrity Checker},
  year      = {2026},
  version   = {3.3.2},
  url       = {https://github.com/sunilgentyala/aegis-integrity}
}

機械可読なメタデータは CITATION.cff にあります。GitHub では「このリポジトリを引用」の下に表示されます。


ライセンス

MIT ライセンスです。LICENSEをご覧ください。


著者

Sunil Gentyala 独立研究 | HCL America Inc., Dallas TX, USA

資格詳細
IEEE Senior MemberInstitute of Electrical and Electronics Engineers
CISMCertified Information Security Manager (ISACA)
ISACAInformation Systems Audit and Control Association

連絡先:[email protected] GitHub:sunilgentyala LinkedIn:linkedin.com/in/sunil-gentyala ウェブサイト:sunilgentyala.github.io/aegis-integrity


変更履歴

v3.3.2(2026年10月)

公式 MCP Registry 向けのパッケージングリリースです。検出動作に変更はありません。

  • mcp がコア依存関係になり、新しい aegis-integrity コマンドで MCP サーバーを起動できるようになりました。そのため、uvx aegis-integrity が動作します。aegis-mcp に変更はありません。
  • README に MCP Registry の所有権マーカーが記載されました。
v3.3.1(2026年10月)

セキュリティ強化リリースです。検出動作に変更はありません。

  • セキュリティ:MCP のファイルアクセス。 ツールが読み込むファイルは .pdf、.docx、 .tex、.txt のみで、サイズの上限は AEGIS_MAX_FILE_MB(デフォルトは 50)です。新しい AEGIS_ALLOWED_ROOTS により、ツールがアクセスできるフォルダーを指定できます。prior_works_dir も同じ方法で検証されます。パスは絶対パスとして渡されるため、-x.pdf という名前のファイルが CLI オプションとして読み込まれることはありません。
  • セキュリティ:ツール出力。 モデルに返される出力から制御文字が除去され、60,000 文字で切り詰められます。すべてのツールに、MCP の読み取り専用/非破壊の注釈が付与されます。会場名も検証されます。
  • セキュリティ:DOI。 ドキュメントから抽出された DOI はパーセントエンコードされ、リダイレクトに従わずに取得されます(Crossref、DataCite、OpenAlex)。
  • セキュリティ:設定。 MCP サーバーは ./.env を読み込まなくなりました(AEGIS_ENV_FILE または ~/.aegis/.env のみ)。.dockerignore で .env、キー ファイル、仮想環境を除外します。
  • CI/リポジトリ: SECURITY.md、Dependabot、CodeQL、ブロッキング設定の pip-audit、最小権限のワークフロートークン、10 件の回帰テスト。
  • README: デモ GIF、MCP ツールの表、ESL のキャリブレーションを実験的と明記(v3.1.1 の注記を参照)。
v3.3.0(2026年10月)
  • 新機能:IEEE の盗用レベルチェック。 類似性の証拠を IEEE PSPB Operations Manual 8.2.4.D(2026年6月25日改訂)のレベルに対応付けます。レベル 1(主要部分、50%以上)、レベル 2(大部分、20~50%)、レベル 3(出典表示のない逐語的転載、20%未満)、レベル 4(引用符のない、出典表示済みの逐語的転載)です。単語が二重に数えられないよう一致箇所を統合し、マニュアルの規定に従って複数の出典からの一致を合算します。各レベルは参考値であり、IEEE は裁定によってレベルを決定します。
  • 新機能: 自身の過去の著作の再利用を 8.2.4.G/8.2.10(未開示の旧バージョン)に照らしてチェックし、出典または許諾に関する注記のない借用図表のキャプションにフラグを立てます。自身の過去の著作との重複は自己盗用検出ツールに任せ、二重に数えません。
  • HTML および JSON レポートに「IEEE Plagiarism Level」セクションを追加しました。PipelineConfig.run_ieee_plagiarism で無効にできます。
v3.3.0(2026年9月)
  • 新機能(ウェブアプリ): aegis ui で http://127.0.0.1:8765/ にブラウザーアプリを開きます (aegis serve と Docker では / でも提供されます)。4 つのモード(Full、Private/offline、References only、Style & formatting)によるドラッグ&ドロップチェック、投稿先ガイドラインの選択、平易な言葉での判定、 誤解を招く 0% ではなく「未実行」と表示するスコアタイル、問題を先に表示する順序で並べ替えられた 参考文献テーブル、「実行されたチェック」パネル、平易な言葉での「インターネットの使用状況」概要、 サンドボックス化されたビューアーでの完全な HTML レポート、JSON/HTML のダウンロードに対応しています。 「2 本の論文を比較」と「比較ライブラリ」タブもあります。単一の自己完結型ページで、CDN、フォント、 トラッカーを使用しないため、オフラインで動作します。すべての文書テキストは textContent で挿入され、 HTML として挿入されることはありません。
  • 新機能(aegis doctor): 文書の読み込み、コーパス、言い換えと AI の検出、非ネイティブ英語向けの キャリブレーション、Crossref、spaCy、MCP の各機能を「準備完了」「制限あり」「未インストール」で一覧表示し、 それぞれを修正するための正確なコマンドを示します。--warm-up はモデルを事前ダウンロードします。 スクリプトでは --plain を使用します。同じデータが GET /status、ウェブアプリのステータスパネル、 MCP の aegis_status ツールで使用されます。
  • 新機能(Claude 連携): インストール可能な aegis-mcp サーバー(これまでは、1 台のマシンでしか動作しない C:\Gitrepos のハードコードされたパスを持つルートレベルのスクリプトでした)、integrity-check、 submission-check、aegis-setup スキルを含む Claude Code プラグインとマーケットプレイス (claude-plugin/、.claude-plugin/marketplace.json)、Claude Desktop 拡張機能(mcpb/)を追加しました。 既存の設定との後方互換性のため、aegis_mcp.py は引き続きランチャーとして使用できます。
  • 新機能(API): /analyze は offline=true(ネットワーク呼び出しを一切行わない)、guidelines=、 include_html=true、各検出機能の切り替えを受け付けます。/health は auth_required を報告し、 認証されていない呼び出し元にはサーバーのインデックスパスを公開しなくなりました。
  • 修正(API の応答性): /analyze、/compare、/corpus/add は CPU 負荷の高い処理を非同期イベントループ上で 直接実行していたため、1 件の解析で /health を含むすべてのリクエストが数分間停止していました。 この処理はスレッドプールで実行するようになりました。
  • 修正(盗用検出の誤検知): n-gram 検出器は MinHash LSH の候補をすべて報告していました。 その中には、検出器自身のしきい値である 25%/40%を大きく下回る、正確な Jaccard 係数が 8~14%の 無関係な段落も含まれていました。公開済みの学術誌論文では、肺がんに関する文章とネットワークセキュリティに 関する文章を対応づける「盗用された」箇所が 6 件検出され、全体のリスクが MEDIUM になっていました。 候補は、正確な Jaccard 係数がしきい値を満たす場合にのみ保持されるようになりました。
  • 修正(2 段組み PDF の引用誤検知): 複数行に折り返された DOI(10.1016/j. +改行+ ebiom...)が 10.1016/j に切り詰められ、HALLUCINATED と報告されていました。参考文献一覧内の ページヘッダー(「... Control 115 (2026) ...」)が出版年として読み取られ、著者一覧やページ範囲が タイトルと推測され、実際のタイトルが参考文献に含まれていても MISMATCH と判定されていました。 また、オンライン先行公開の年が印刷版の年と異なる場合も不一致とされていました。折り返された DOI は 再結合されます(ページ番号や後続の単語は再結合されません)。参考文献から繰り返されるヘッダー/ フッター行を除去し、解決されたタイトルが参考文献のテキストに含まれていればタイトルを一致とみなし、 Crossref の印刷版/オンライン版/発行年のいずれも受け入れます。Crossref で説明できない 1 年の差 (オンライン先行公開日しか保存されていないことがよくあります)は、検証済みの参考文献に対する注記となり、 MISMATCH にはなりません。より大きな差は引き続き不一致になります。ページ範囲の最初の年 (「(2022) 2049-2065」)が出版年として読み取られることもなくなりました。テスト論文では、検証済みの 参考文献が 12 件から 17 件に増加し、誤った HALLUCINATED 判定が 1 件から 0 件に、誤った MISMATCH 判定が 6 件から 0 件になりました。
  • 修正(PDF の数式誤検知): PDF の抽出で独立した行に配置される数式番号が認識されず、「equation (N)」への 参照がすべて未対応として報告されていました(テスト論文では 28 件中 28 件)。直前の行が数式らしい場合、 独立した「(N)」の行も数式番号として扱うようになりました。また、セクション検出で参考文献セクションを 検出できなかった場合でも、見出し行から特定して数式チェッカーがそのセクションをスキップするようになりました。
  • 修正(設定): install.bat が作成する .env ファイルは CLI や API で読み込まれていませんでした。 ./.env と ~/.aegis/.env を読み込むようになり、aegis analyze --email は AEGIS_CITATION_EMAIL を 尊重するようになりました。
  • 変更: デフォルトのデータ保存場所は ~/.aegis/{index,reports} になりました。これにより CLI、ウェブアプリ、 MCP サーバーが同じライブラリを共有します。作業ディレクトリに既存の ./aegis_index/./aegis_reports が ある場合、または AEGIS_INDEX_DIR/AEGIS_REPORT_DIR が設定されている場合は、引き続きそちらが優先されます。
v3.1.3(2026年9月)
  • 修正(盗用の誤検出): n-gram 検出器と意味的類似性検出器が、提出文書の References セクションも含む全文を対象に実行されていました。正しく書式設定された引用では、引用元の論文のタイトルや著者名がほぼそのまま再現されるため、同じ出典を引用する論文同士が、互いの参考文献を盗用したとして検出されていました。実際に、通常の引用の重複だけを理由に、ある提出文書が CRITICAL/0.93 の盗用スコアを記録しました。現在は両方の検出器が ParsedDocument.body_text を対象に実行されます(References/Bibliography セクションは除外)。AI 検出と引用検証には影響しません。
  • 修正(引用年の不一致の誤検出): DocumentParser. _extract_year は、参考文献の生テキスト内のどこかにある「19xx」または「20xx」形式の最初の4桁の数字を、申告された出版年として取得していました。そのため、たまたま年のように見えるページ番号や論文番号("..., p. 1947, 2025." の場合、2025ではなく1947と判定)、または会議の開催年が、実際の会議録出版年の代わりに取得されていました("...CRITIS 2016), ... 2017." の場合、2017ではなく2016と判定)。現在は末尾の DOI を取り除き、ページ/巻/号を示すラベルまたはページ範囲のダッシュの直後にある候補を無視して、残った候補のうち最後のものを採用します。
v3.1.2(2026年9月)
  • 削除: JSON レポートファイルの生成(ReportGenerator.generate_json、aegis analyze --output/-o、aegis guidelines --output/-o、aegis batch --json、および対応する MCP ツールの JSON 出力経路)。JSON ファイルは HTML レポートのデータを、誰も読まない形式で重複して保持していました。今後、AEGIS が書き出すレポートファイルは、自己完結型の HTML レポートのみになります。REST API の GET /analyze?format=json による機械可読レスポンスには影響しません。これはレポートファイルではなく、稼働中の API 契約です。
  • 修正(引用の誤検出、短い/一般的なタイトル): DOI のない仕様書/ドキュメントページへの参照(タイトルが単に「Authorization」など)に対して Crossref のタイトル検索が実行され、偶然同じ短く一般的なタイトルを持つ無関係な出版物と一致していました。その結果、そもそも DOI が付与された出版物ではない参照に対し、捏造されたように見える MISMATCH/HALLUCINATED 判定が発生していました。現在は、抽出したタイトルが4語未満の場合、タイトル検索をスキップします。
  • 修正(引用の誤検出、二次検索のレート制限): 参照ごとの並行検証では、主となる /works/{doi} 呼び出しと二次的な /agency 呼び出しの両方を実行します。参照の多い論文では /agency 呼び出しのほうが Crossref のレート制限にかかりやすく、そこでの429/5xxレスポンスが、DOI 未登録を示す実際の404と同じコードパスに進んでいました。そのため、一時的なレート制限が、解決可能な実在 DOI に対する誤った HALLUCINATED 判定につながっていました。現在は、agency チェックで404以外のエラーが発生した場合、HALLUCINATED ではなく UNAVAILABLE として報告されます。
  • 修正(引用タイトルの抽出、Word のスマート引用符): Word のスマート引用符の自動修正により、参考文献のタイトルは二重引用符ではなく、左右の形が異なる単引用符で囲まれていました。単純な引用符間の一致処理は、閉じ側の曲がった引用符がタイトル内のアポストロフィ(例:「You've」)にも使われるため失敗し、タイトルの途中で一致が切れていました。現在は、閉じ引用符の直前にあるコンマを基準にします。IEEE/ACM 形式では、タイトルの実際の終端がこの位置にあり、タイトル途中のアポストロフィの前にコンマが来ることはありません。
  • 修正(会場不一致の誤検出、共同協賛の会場): 共同協賛の会場(例:「IEEE/ACM ... Conference」)を記載した参考文献は、最初に記載された共催者のみを基準に照合されていました。そのため、DOI が2番目に記載された共催者の Crossref メンバーに正しく解決されても、参考文献のテキストには両方の共催者名がすでに記載されているのに、誤った VENUE_MISMATCH フラグが付いていました。claimed_publisher() に対応する claimed_publishers_all() が追加され、不一致チェックでは、解決された出版元が申告された会場のいずれかであれば一致と判定するようになりました。
v3.1.1(2026年9月)
  • 修正(AI 検出精度、アンサンブルの重み付け): GPT_TELL_PHRASES (語彙的な特徴を示すシグナル。アンサンブルでの重みは25%)には、AI 特有の決まり文句 (「delve into」「tapestry of」「testament to」)と、一般的な フォーマルな文体で使われる接続表現(「furthermore」「moreover」「in conclusion」、 「robust」「leverage」)が混在していました。後者は、あらゆるアカデミックライティングの カリキュラムで標準的な語彙であり、ESL のライティングコースでフォーマルな つなぎ言葉としてまさに教えられているものです。両方の階層を同じ重みで数えると、この シグナルが、慎重でフォーマルな(多くの場合、非母語話者による)アカデミックな文章に 不釣り合いなペナルティを課し、検出器自体の ESL バイアス補正 (ESL_THRESHOLD_MULTIPLIER)を損なう可能性がありました。aegis.detectors.ai_detector で GPT_TELL_PHRASES_STRONG(通常の重み)と GPT_TELL_PHRASES_WEAK (WEAK_TELL_WEIGHT = 0.35)に分割しました。_gpt_tell_density はすべてのフレーズを 同じ重みで数えるのではなく、階層に応じて検出数に重みを付けるようになりました。
  • 注記(未修正): ESL_THRESHOLD_MULTIPLIER の英語以外の エントリーは、実際にはほぼ到達不能です。キャリブレーションは langdetect(text) を基準にしており、これは(正しく)作者の母語ではなく テキスト が書かれた言語を検出するため、文法に非母語話者の影響がある英語も含め、 実際の英語の投稿ではほぼ常に "en" を返します。 直接確認したところ、langdetect("This paper propose a novel method for is more efficient...") も "en" を返します。実際に修正するには、記事や前置詞の誤りの密度などを 利用する、英語を第二言語とする文体を判定するためのヒューリスティックが必要です。 これは手早い調整ではなく、新しい検出器に相当します。検証用のラベル付きコーパスなしに 推測で対応するのではなく、対象を絞った今後の課題として残しました。
v3.1.0(2026年9月)
  • 新機能: Elsevier を6番目の投稿先別ガイドラインプロファイルとして追加しました (aegis.guidelines.profiles.GUIDELINE_PROFILES["ELSEVIER"])。Elsevier 独自の 『Guide for Authors』、CRediT、Highlights、利益相反の宣言に関するポリシーページを 情報源とし、実際に公開された ScienceDirect の論文と照合しています。他の5つの投稿先と 異なり、Elsevier は米国式と英国式のどちらのスペルも明示的に認めており、文書内で 両方が混在している場合に限り指摘します。この仕様を正しく表現するため、チェッカーの スペル規則を拡張し、誤った単一の基準を強制する代わりに、新しい "EITHER" の バリアントを追加しました。投稿先が要件としている場合にのみ実行される構造チェックを 4つ追加しました(現時点では Elsevier のみ)。CRediT に基づく著者貢献声明、利益相反の 宣言、データ利用可能性声明、および各項目85文字以内の箇条書き3~5項目で構成される Highlights セクションです。
  • セキュリティ: REST API の X-API-Key チェック (aegis.api.app.require_api_key)にあったタイミングサイドチャネルを修正しました。 以前はヘッダーを AEGIS_API_KEY と通常の != で比較していたため、最初に不一致となる 文字で処理が短絡終了していました。そのため、先頭の一致文字数が多いキーほど拒否に 時間がかかることが計測可能であり、原理上、攻撃者がキーを1文字ずつ特定できる状態 でした。現在は hmac.compare_digest を使用します。
  • セキュリティ: 開示済みの複数の CVE に対応するため、依存関係の最低バージョンを 引き上げました。transformers(安全でないデシリアライズによる RCE、 CVE-2024-11394/11392)、torch(weights_only=True でも発生する torch.load の RCE、CVE-2025-32434)、PyMuPDF(embed-extract における パストラバーサル、CVE-2026-3029)、requests(Session の証明書検証回避、 CVE-2024-35195)、jinja2(|attr フィルターによるサンドボックス脱出、 CVE-2024-56201/56326/CVE-2025-27516)、python-multipart(DoS/ ReDoS、CVE-2024-53981/24762)、および明示的な最低バージョンを設定した starlette(multipart フィールドの無制限なバッファリングと、イベントループの ロールオーバー時のブロッキングによる DoS、CVE-2024-47874/CVE-2025-54121)です。 FastAPI 自体が定める、より緩い間接依存の最低バージョンには依存しないようにしました。 パッケージごとの出典は requirements.txt / setup.py を参照してください。
v3.0.0(2026年8月)
  • 新機能: 数式チェック(aegis.detectors.math_formula)。 数式番号(重複・欠落・順序違い)、存在しない数式への本文中の参照、参照されていない孤立した数式、IEEE/IET のスタイルマニュアルに基づく表記規則(指数表記、小数の先頭のゼロ、パーセント範囲の書式)を検出します。LaTeX ソース、Word のネイティブ OMML 数式 XML(これまでは AEGIS ではまったく検出できませんでした。python-docx の Paragraph.text は、すべての .docx 数式を暗黙に読み飛ばします)、または PDF/TXT のテキストパターンヒューリスティックから数式を抽出します。純粋な Python で実装されており、ML 依存関係はありません。
  • 新機能: 文法と用法規則のチェック (aegis.detectors.grammar)。短縮形、30 組以上の単語ペアを対象にした米国式/英国式スペルの一貫性検出、主語と動詞の一致に関するヒューリスティック、よくある用法の誤り、可読性指標に対応しています。正規表現とオプションの spaCy を使用し、完全にオフラインで動作します。Java ランタイムも外部の文法サービスも必要ありません。
  • 新機能: 出版社ごとの投稿先ガイドライン準拠チェック (aegis.guidelines)。aegis guidelines <file> --venues ... または aegis analyze ... --guidelines all を使って、数式と文法の検出結果を IEEE、ACM、 BCS、IET、ISACA それぞれ独自の出典付きスタイルガイダンスに照らして個別にチェックします(単一の統合ルールセットは使用しません)。各ルールには出典が記載されます。結果は助言として示され(PASS/NEEDS_REVIEW/NOT_ENOUGH_DATA)、FAIL にはなりません。これらはスタイル規則であり、不正行為の判定ではないため、overall_risk に反映されることもありません。
v2.5.0(2026年8月)
  • 修正(正確性、重大度:高): 投稿先出版社のキーワード照合 (publisher_registry.classify_publisher/claimed_publisher)で、短く一般的な投稿先キーワード(「iet」、「iete」、 「acm」、「bcs」)に対して単純な部分文字列一致を使用していました。そのため、無関係な単語にも誤って一致していました。たとえば、「quiet cooling system」に言及する参考文献は IET への投稿を主張していると分類され、「quieted」と表現された騒音に言及する参考文献は IETE への投稿を主張していると分類され、「pacman-style scheduling」に言及する参考文献は ACM への投稿を主張していると分類されていました。いずれも実際には投稿先の主張がないにもかかわらず、誤った VENUE_MISMATCH フラグを生成していました。現在は、キーワードの左右に文字や数字が隣接していないこと(単語または語句全体の一致)を要件とし、これらの誤一致を解消しました。一方で、「IEEE Trans...」、「Proc. ACM...」、「IET Communications」などの実際の一致には影響しません。
  • 新機能: AI コンテンツ検出器に GPT-4/GPT-5 世代の語彙的特徴を示すシグナルを追加しました。 検出器の中核シグナルである GPT-2 の困惑度/バースティネスは、GPT-2 世代の出力を対象に設計されているため、最先端のチャットモデル(GPT-4o、GPT-5 クラス、および同程度に RLHF で調整されたモデル)を過小検出します。これらのモデルは、GPT-2 がこれまで生成したものより、はるかに流暢で人間らしい困惑度とバースティネスを示します。これを補う語彙シグナル(GPT_TELL_PHRASES)を追加しました。ChatGPT/GPT-4/GPT-5 系モデルの出力で不釣り合いに多く使われる、つなぎや強調に関する語彙(「delve into」、「underscores」、「pivotal role」、「leverage」、「in conclusion」など)を対象とします。段落ごとに gpt_tell_density として報告され、困惑度/バースティネス/文体指標とともに、控えめな固定ウェイトでアンサンブルスコアに組み込まれます。検出された場合に示されるのは文体上の特徴であり、AI が執筆したことの証明ではありません。このプロジェクトが従来から採用している、過度な主張を避ける方針に沿ったものです(ウォーターマーク検出器を参照してください)。
v2.4.0(2026年8月)
  • 新機能: 対象出版社検証モジュール(検出器 #11)。引用と二重投稿のチェック対象を IEEE、ACM、Elsevier、IET、IETE、BCS に限定します。すべてのレポートに venue_verification を追加します。この項目には、出版社ごとの検証済み引用数、参考文献にこれら6つの出版社のいずれかが記載されているものの、DOI の解決先が異なる場合の VENUE_MISMATCH フラグ、Crossref を介して出版社ごとに対象を限定した重複・既刊検索が含まれます(IEEE/ACM/Elsevier/IET はメンバー ID、独立した Crossref メンバーシップを持たない IETE/BCS は DOI プレフィックスとコンテナタイトルの一致で検索します)。--target-publishers(CLI)/venue_target_publishers(Python API)で設定できます。デフォルトで有効で、新たな必須依存関係は追加しません(既存の requests と Crossref の連携を再利用します)。
v2.3.0(2026 年 7 月)

実際の原稿を使ったテストで見つかった問題への監査後の修正に加え、CI/セキュリティを強化しました。動作修正を含むマイナーリリースが 2 回連続となります。パッチリリースではありません。

  • 修正(正確性、重大度:高): DOCX の段落は単一の \n で結合されていましたが、段落単位の検出器(AI コンテンツ、n-gram)は段落の境界を見つけるために \n\n+ で分割していました。そのため、DOCX の投稿はすべて、気付かれないまま巨大な 1 つの「段落」にまとめられ、この形式では段落単位の AI/n-gram 検出が完全に無効になっていました。また、これまで完全に除外されていた表のセルテキストも抽出するようになりました。
  • 修正(正確性、重大度:高): 信頼度の低い参照判定が 1 件あるだけで(検出された引用が 1 件の場合でも)、結果が「引用の問題 100%」と受け取られ、単独で overall_risk を CRITICAL に引き上げることがありました。引用の検出結果がリスクに影響するのは、十分なサンプル数(参照が 5 件以上、検証範囲が 80% 以上)に達した場合のみとなりました。これに満たない場合、レポートには誤った確信に基づく判定ではなく、"assessment": "INCONCLUSIVE" と表示されます。また、UNRESOLVABLE 判定(ネットワーク/解析エラー)は citation_score に加算されなくなりました。加算されるのは、確認済みの HALLUCINATED/MISMATCH のみです。
  • 修正(正確性): DataCite に登録されている DOI(arXiv の 10.48550/* プレフィックスなど)は、v2.2.0 での Crossref の 404/機関チェック修正後も、一般的な「独立検証なし」の扱いにとどまっていました。AEGIS は DataCite 独自の REST API に問い合わせて、実際のタイトル/著者/年のメタデータを取得し、Crossref の結果と同じ比較を行うようになりました。
  • 修正(正確性): 参考文献タイトルの抽出では、. で分割した際に実際のタイトルに達する前に省略された著者のイニシャルに当たると、著者リストの一部(例:「Gentyala, F」「Mireshghallah, K」)が「タイトル」として返されることがありました。これは以前から知られている誤検出の原因です。引用スタイルの多くに見られる引用符付きのタイトルを優先するようになりました。また、代替処理では姓+イニシャルの形式に一致する部分を明示的にスキップし、十分な長さがある最初の部分をそのまま返さないようにしました。
  • 修正(透明性): レポートのフッターには、「第三者へのデータ送信なし」と常に記載されていましたが、実際には引用チェックでは Crossref/DataCite に、引用ネットワーク分析ではデフォルトで OpenAlex に接続していました。レポートに network_activity が追加され、今回の実行で接続したサービス(あれば)が正確に示されます。
  • 新機能: すべてのレポートに detector_status が含まれるようになりました。9 つの各検出器について、理由とともに completed/disabled/unavailable/failed の状態を報告します。これまではスコア 0.0 が、「実行して何も見つからなかった」「無効になっていた」「比較対象のコーパスがなかった」「例外が発生して記録されたものの、気付かれないまま処理された」のいずれなのか判別できませんでした。これらを区別できるようになりました。
  • 修正(セキュリティ): AI コンテンツ検出器で使用する GPT-2/GPT-2-medium モデルのリビジョンを固定しました(bandit B615:Hugging Face からのダウンロード時にリビジョンが未固定)。また、透かしのヒューリスティックで使用する暗号用途ではない MD5 バケット化ハッシュに usedforsecurity=False を指定しました(bandit B324)。
  • 新機能: CI(GitHub Actions):カバレッジゲート(現状の基準である 60%。80% は今後の目標で、まだ強制されていません)を含む Python 3.10~3.12 のテストマトリクス、ruff check(「最新」ではなく、このコードベースで実際に実行したバージョンに固定。ruff のマイナーリリースでデフォルトルールが変更された場合、コードを変更していないのにこのゲートが失敗するのを防ぎます)、bandit、Docker ビルド+ヘルスチェックのスモークテストを導入しました。pip-audit も実行しますが、間接依存関係の CVE では失敗しません。
  • 変更: Python 3.9 のサポートを終了しました。2025 年 10 月にサポート期間が終了しており、spacy の現在の依存関係(thinc>=8.3.12)も Python 3.9 用のビルドを公開しなくなりました。そのため、このプロジェクトの内容にかかわらず、[ml,nlp,bib] のフルインストールは Python 3.9 ではできなくなっています。python_requires は >=3.10 になりました。
v2.2.0(2026年7月)

独立監査で見つかった動作上およびセキュリティ上の修正です。ドキュメントのみの変更ではないため、パッチバージョンではなくマイナーバージョンの更新です。

  • 修正(正確性、高深刻度): ESL 向けの調整乗数が逆になっていました。1.0 未満の値は、非ネイティブ言語に対する AI 判定のしきい値を下げており、ESL の執筆者に対する誤検知を増やし、ドキュメントに記載された意図とは逆の動作になっていました。乗数を 1.0 より大きい値にし、しきい値を引き上げるようにしました。
  • 修正(正確性): Crossref の 404 を、引用が捏造された証拠(信頼度 0.95)として扱っていました。しかし、Crossref が対象とするのは Crossref に登録された DOI だけです。DataCite に登録された DOI(arXiv の 10.48550/* プレフィックスなど)は、有効であっても Crossref では常に 404 になります。現在は、まず DOI の登録機関を確認し、該当する場合は HALLUCINATED ではなく NOT_FOUND_IN_CROSSREF を返します。タイムアウト/429/5xx の場合は、引用に関する判定に含めず、UNAVAILABLE を返すようになりました。
  • 修正(正確性、データ損失): CorpusIndexer は再起動後にドキュメントのメタデータを再読み込みしていましたが、実際のドキュメント本文は再読み込みしていませんでした。そのため、build_indices() が空のコーパスから黙って再構築し、以前にインデックス化されたすべてのドキュメントを削除していました。ドキュメント本文を正しく保存し、再読み込みするようになりました。
  • 修正(セキュリティ): コーパス/インデックスのシリアライズに使っていた pickle を JSON に置き換えました。REST API の /corpus/add と /corpus/build は、/analyze が pickle.load でデシリアライズするのと同じディレクトリに書き込んでいました。このディレクトリが信頼できない第三者によって書き込み可能な場合、任意のコードが実行される危険がありました。
  • 修正(セキュリティ): REST API に認証、アップロードサイズの上限、同時実行数の上限がありませんでした。任意設定の AEGIS_API_KEY ヘッダー認証(/health 以外のすべてのルート)、AEGIS_MAX_UPLOAD_MB(デフォルト 50MB)、AEGIS_MAX_CONCURRENT_JOBS(デフォルト 2。無制限にキューイングする代わりに 503 を返す)を追加しました。 API バージョンは、ハードコードされた 1.0.0 ではなく aegis.__version__ を返すようになりました。
  • 修正: レポートの JSON/HTML では、aegis.__version__ を使わずに "aegis_version": "2.1.0" と古いフッターバージョンをハードコードしていました。source_breakdown のキー(ドキュメントラベル)は、HTML にエスケープせず埋め込まれていました。パイプラインが生成していた citation_network と coherence の検出結果は、JSON レポートにも HTML 出力にも含まれていませんでした。どちらも出力に含まれるようになりました。
  • 新機能: aegis batch CLI コマンドと POST /batch API エンドポイントを追加しました。どちらも README と GitHub Pages サイトにはすでに記載されていましたが、実装されておらず、aegis batch は「Error: No such command 'batch'」を返していました。どちらも既存の(これまでテストされていなかった)BatchAnalyzer 検出器に接続されるようになりました。
  • 修正(Docker): ヘルスチェックでは curl を実行していましたが、イメージにインストールされていなかったため、常に失敗していました。Python ベースのチェックに置き換えました。非 root ユーザーを追加し、黙って無視されていたモデルのダウンロード失敗をなくし、依存関係を二重にインストールしないようにしました(requirements.txt と編集可能インストールの内容はほぼ全面的に重複していました)。ベースイメージをコンテンツダイジェストで固定し、docker-compose.yml に CPU/メモリ制限と localhost のみへのポートバインドを追加しました。
  • 変更: この監査で正確性に関するバグが見つかったことを受け、README と GitHub Pages サイトのいくつかの無条件な主張(「Production Stable」→「Beta -- Human Review Required」、「Zero Blind Spots」、「Closes Every Gap」、「Enterprise-Ready」、「Defensible in any hearing」)を控えめな表現に改めました。また、Crossref/OpenAlex による引用検索を考慮していなかったプライバシーに関する主張を修正しました。
v2.1.1 (July 2026)
  • FIX: README と GitHub Pages サイトの比較表にあった、出典のない主張や統計を、出典付きの情報に置き換えました(ESL の偽陽性バイアスについては Liang et al. 2023、引用の捏造率については Walters & Wilder 2023)。また、独立して検証できない競合製品の機能については、「公開情報なし」という表現に留めました
  • FIX: 競合製品の料金について、出典が公開されていないものが複数あったため、投稿ごとの料金を示す根拠のない金額を削除し、料金モデルの説明に置き換えました
  • FIX: Liang et al. (2023) の引用を修正しました。Science ではなく、Patterns (Cell Press) に掲載されています
  • FIX: 古い「AEGIS v2.0」の見出しと表の記載を v2.1 に更新しました
v2.1.0 (July 2026)
  • FIX: ウォーターマークのヒューリスティックが overall_risk を無条件に CRITICAL にできていましたが、実験モードではリスクスコアに影響せず、仮に検証済みスキームモードを導入した場合でも、リスクレベルの上昇は最大+1段階に制限されるようになりました
  • NEW: WatermarkMode(disabled / experimental / verified_scheme)と --watermark-mode CLI フラグ
  • CHANGED: ウォーターマークの判定名を STATISTICAL_ANOMALY / NO_STATISTICAL_ANOMALY などに変更しました。従来の断定的な WATERMARKED 判定は廃止しました
  • FIX: README と GitHub Pages サイトから、裏付けのない偽陽性率と GPT-4/Gemini の検出に関する主張を削除しました
v2.0.0 (June 2026)
  • NEW: LLM ウォーターマーク検出器(Kirchenbauer z 検定 + エントロピー + 順位の偏り)
  • NEW: 引用ネットワーク分析器(自己引用の水増し、捕食ジャーナル、OpenAlex)
  • NEW: 意味的一貫性分析器(談話接続表現、文の均一性、MTLD)
  • NEW: バッチ/教室分析器(エッセイミル検出、ペアワイズ類似度行列)
  • NEW: aegis batch CLI コマンド
  • IMPROVED: パイプラインで検出器を10個順番に実行し、統一されたリスクスコアを算出するようになりました
  • IMPROVED: JSON レポートに v2.0 のすべての検出器の出力が含まれるようになりました
  • IMPROVED: setup.py を安定版に更新しました(5 - 製品/安定)
v1.0.0 (May 2026)
  • 初回リリース:引用の整合性、ESL に合わせて調整した AI 検出、SBERT 意味的類似度、MinHash n-gram、Burrows' Delta 文体統計、自己盗用検出、REST API + CLI

コメント

MCP は初めてですか?

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

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