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. 02分析 AI 生成文本特征
  3. 03对照自备语料检测抄袭
  4. 04比较论文并建立本地语料
  5. 05检查期刊投稿指南
  6. 06提供逐句分析报告

适用场景

  1. 01核验论文参考文献及 DOI
  2. 02将会议稿与期刊稿进行比较
  3. 03按投稿期刊指南检查格式
  4. 04在自有论文语料中查找重合

MCP 相关

aegis-mcp 通过 stdio 向 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 被标记为幻觉引用

对合成样例论文的真实 CLI 输出(docs/demo/sample_paper.txt)。其中的两个 DOI 均为虚构内容,AEGIS 会将其标记出来。

开源、离线、关注偏差的学术诚信分析。 文档完全在你自己的硬件上处理,绝不会上传到任何地方。启用在线验证时,引用检查可能会使用参考文献元数据(标题、作者、DOI)查询 Crossref/OpenAlex。 在单一工作流中分析抄袭、AI 生成内容、引用幻觉、代写、掠夺性引用和论文代写机构模式;此外,还提供一项用于 LLM 水印研究的实验性词元分布启发式检测。 抄袭检测基于语料库,而非实时爬取网络或数据库: AEGIS 会将你的文档与你提供的论文语料库进行比较(例如你以往的作品、下载的参考文献集等;请参阅构建语料库索引)。如果没有加载语料库,抄袭检测模块会正确报告“未加载以往作品”,而不是悄悄地什么也没找到;这不代表扫描失败。 结果仅作为人工审核的辅助信号,不构成对不当行为的认定。


开始使用

选择你想使用 AEGIS 的方式。以下三种方式都在你自己的电脑上运行。

1. 在浏览器中使用(最简单)。 安装一次,然后打开 Web 应用:

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

拖入 PDF、Word、LaTeX 或文本文件,选择 完整检查、私密 / 离线、 仅检查参考文献 或 风格与格式,即可获得一份通俗易懂的报告: 总体评级、需要查看的内容、每条参考文献及其核验结果,以及可下载的完整报告。比较两篇论文 选项卡和 我的比较库 选项卡可用于处理自我抄袭和构建语料库。 在 Windows 上,install.bat 会完成所有设置,双击 start-aegis.bat 即可打开 Web 应用。

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 安装程序包,下载 aegis-integrity-<version>.mcpb,文件位于 Releases 页面,然后打开它。在扩展设置中,选择安装了 AEGIS 的 Python。其他 MCP 客户端也可以直接运行 aegis-mcp 命令。

不确定哪些功能可以在你的电脑上运行? 运行 aegis doctor。它会列出所有功能、是否已就绪,以及修复问题所需的一条命令。 aegis doctor --warm-up 会提前下载 AI 模型,这样首次完整检查时就不必等待模型下载。


MCP 工具

aegis-mcp 向 Claude Code、Claude Desktop 和任何 MCP 客户端提供七种工具。

维护者已在 Glama 和 mcprush 上列出并认领此项目。请参阅各类上架状态的含义。

工具功能提示词示例
aegis_analyze_paper对 PDF/DOCX/TEX/TXT 执行完整的诚信检查流程“对 ~/drafts/paper.pdf 执行完整的诚信检查”
aegis_check_citations根据 Crossref 核验参考文献(找出伪造的 DOI)“检查 paper.docx 中的参考文献”
aegis_check_guidelines离线检查与 IEEE、ACM、BCS、IET、ISACA、Elsevier 指南的符合情况“这篇论文可以投给 Elsevier 期刊了吗?”
aegis_compare_papers比较两篇论文的重合内容(会议版与期刊版)“比较 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 设置为指定文件夹,以限制每个工具的访问范围(建议在 Agent 驱动 AEGIS 时设置)。
  • 工具输出会去除控制字符并截断;工具带有只读 / 非破坏性 MCP 提示。
  • 文档中的 DOI 会进行百分号编码,并在不跟随重定向的情况下获取。MCP 服务从不加载 ./.env。
  • CI 会运行测试、bandit、会阻止流程通过的 pip-audit 以及 CodeQL;Dependabot 已启用。

私下报告漏洞:请参阅 SECURITY.md。


支持项目

如果 AEGIS 对你有所帮助,在 GitHub 上点个星可以帮助其他研究人员找到它。报告错误、提供导致程序出错的论文样例以及提交拉取请求都更有帮助:请查看标有 good first issue 的未解决议题。


AEGIS 对比情况

每款主流诚信检测工具都有盲区。AEGIS v3.3 旨在同时弥补其中的 十四 项。

根据各供应商截至 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(自托管)机构版(未公开)机构版(未公开)付费(自助服务)付费(自助服务)付费(自助服务)

十四种检测模块

1. 引文幻觉检测

通过 Crossref REST API 解析每个 DOI,并交叉核对作者、年份和标题。 一项同行评审研究发现,ChatGPT 生成的虚假参考文献比例最高可达 55%,具体比例取决于模型 版本(Walters & Wilder,Scientific Reports,2023)。

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

2. LLM 水印分析——实验性(v2.1)

AEGIS 在此提供两种不同的功能,不应将它们混为一谈:

  • 实验性 token 分布异常启发式方法(默认,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 过度使用“此外”“而且”“另外”等词)
  • 句长均匀性(AI 生成的句长方差低得不自然)
  • 认知缓和表达率(AI 以公式化且具有特征性的频率使用缓和表达)
  • 章节模板匹配(标准 AI 论文结构:引言 -> 方法 -> ……)
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(通过拼写错误或字符替换进行混淆)。使用 128 个 MinHash 排列;通过 LSH 分带,实现对大型语料库的亚线性查询时间。还需要加载语料库——范围说明与上文相同。

8. 文体计量作者画像(Burrows' Delta)

为每个片段生成 60 维特征向量(10 个标量维度 + 50 个功能词维度)。与文档基线的 Burrows' Delta > 0.40 的片段会被标记为潜在代写部分。可检测将人工写作与 AI 写作混合的专业论文代写机构。

9. 自我抄袭/文本重复使用

分三层检测:字符 5-gram Jaccard(逐字重复)、单词 3-gram Jaccard(近乎逐字重复)、SBERT 余弦相似度 >= 0.88(跨语言释义重复)。风险等级遵循 COPE 文本重复使用指南(15% / 30% 阈值)。

10. 批量/课堂分析(v2.0 -- 新功能)

通过同时分析一组提交内容,检测论文代写机构和共享的 AI 来源文档:

  • 对所有提交内容计算成对相似度矩阵(MinHash + 罕见词汇重叠)
  • 结构指纹识别(表层文本不同但章节顺序相同)
  • AI 分数聚类(同一班级的学生不太可能独立写出全都像 AI 生成的文章)
  • 使用 Union-Find 聚类,按疑似共同来源对提交内容分组
11. 目标出版商验证(v2.4 -- 新功能)

将引文和重复投稿检查范围限定为作者最常咨询的六家出版商: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)进行配置;默认包含全部六家。

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 -- novel)

一款离线、依赖轻量的语法和用法检查器:检测缩写(正式文本中的 "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 -- novel;v3.1 新增 Elsevier)

针对 六家出版机构各自来源明确的风格指南,分别检查上述数学和语法发现,而不是将规则合并成一套通用规则——因此,符合 ACM 规范但违反 IEEE 特定规范的文档(反之亦然)会按出版机构分别显示,而不会被平均掩盖:

出版机构来源可检测的独特规则
IEEEIEEE《作者编辑风格手册》(2024)美式拼写、不使用缩写、以 "(n)" 引用公式、使用串列逗号
ACMACM《格式/参考文献指南》(以《芝加哥格式手册》为基础)美式拼写、数字方括号引用、使用串列逗号
BCSThe Computer Journal(OUP)《一般说明》未发布缩写/拼写规则——报告为推断结果,而非确定要求
IETIET《研究期刊作者指南》使用裸格式 "(1)" 引用公式(而非 "Eq. (1)");使用科学计数法,而非 5E03
ISACAISACA《期刊文章投稿指南》要求使用第三人称(“避免使用 'I' 或 'you'”);目标字数为 2,000-3,000;使用尾注,而非数字方括号
ElsevierElsevier《作者指南》/CRediT/Highlights/利益冲突声明政策页面美式或英式拼写均可,但不可混用;要求提供 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。在将其暴露给 localhost 以外的环境之前(例如绑定到其他主机、 使用反向代理等),请设置 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"(而非给出确定的风险等级)——单条低置信度参考文献绝不应被解读为“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_KEYunset如果已设置,REST API 的每个路由都要求在 X-API-Key 标头中提供匹配的值,/health 除外。未设置意味着不进行身份验证——此时仅应在可信网络中开放该 API。
AEGIS_MAX_UPLOAD_MB50/analyze、/compare 和 /corpus/add 接受的最大上传大小(MB);超出限制的上传会返回 HTTP 413。
AEGIS_MAX_CONCURRENT_JOBS2最大并发 /analyze 请求数;额外请求会返回 HTTP 503,而不是进入队列。

所有设置也可以作为 PipelineConfig 参数传入 Python API。


水印检测:能力与局限

AEGIS 的水印分析默认处于实验阶段,且不会影响总体完整性风险评分。依赖任何水印分析结果之前,请了解:

  • 无关的绿色列表无法验证秘密水印。 真实的水印方案(Kirchenbauer 等人,2023 年等)会使用密钥和与实际生成模型分词器绑定的播种方案来划分词汇表。AEGIS 的实验性启发式方法并不具备这些条件——它仅根据前一个词的哈希自行生成绿/红划分,纯粹将其作为统计零假设进行比较。与这一伪造的零假设相符,并不能证明与真实提供商的水印相符。
  • 分词器对齐很重要。 该启发式方法通过词级哈希近似令牌,而非任何真实 LLM 实际使用的 BPE 分词器。令牌边界各不相同,这会进一步破坏与真实方案的对应关系。
  • 异常检测不等于方案验证。 STATISTICAL_ANOMALY 结论意味着该启发式方法自身的零假设被超出——这并不意味着检测到了水印。只有使用真实且正确配置的方案进行的 VERIFIED_SCHEME 运行,才能支持这一结论(AEGIS 目前尚未实现此功能)。
  • 最短文本长度。 少于 200 个字母令牌时会返回 INSUFFICIENT_TEXT——完全不会评估较短的摘录。
  • 改写和编辑会降低任何真实水印的可检测性,AEGIS 不声称其方法对此具有鲁棒性。
  • 结果需要人工解读。 即使是经过验证的方案信号(若将来实现),也只是来源证据,并非不当行为的证明;其风险提升幅度最多限制为一个等级,而不会强制设为 CRITICAL。
  • 不针对特定提供商作出声明。 AEGIS 不声称能检测 GPT-4、Gemini、Claude 或任何其他专有提供商的水印。此处没有记录或实现任何此类方案。

运行测试

pip install pytest
pytest tests/ -v

测试套件运行时不会发起网络请求,也不会下载 ML 模型。


为什么选择 AEGIS

1. 本地优先处理。 AEGIS 绝不会将你的手稿上传到任何地方——分析完全在你自己的设备上运行。引文核查可能会使用参考文献元数据(标题、作者、DOI)查询 Crossref/OpenAlex,但绝不会发送文档本身,而且仅在启用在线验证时进行。

2. 减少对国际研究人员的误判偏差。 Liang 等人(Stanford,2023)发现,GPT 检测器将超过一半由非英语母语者撰写的 TOEFL 作文误判为 AI 生成。AEGIS 针对 15 种语言分别进行校准,以减少这种偏差。

3. 弥补其他地方尚未公开记录的检测空白。 引文团伙、论文代写机构,以及通过困惑度过滤器的 AI 润色文本,都没有公开记录显示主流工具能够检测这些问题。AEGIS 还包含一种实验性的、仅供参考的 LLM 水印启发式检测方法,这在开源替代方案中并不常见——请参阅其功能与局限性。

4. 结果可解释,而非黑箱。 每项标记都会指出确切的句子、匹配的来源以及触发标记的指标,方便人工审核者核实或驳回,而不是只给出一个不透明的分数。AEGIS 的结果是供人工审核参考的信号,而非对不当行为的判定。

5. 为研究机构打造。 提供用于集成 LMS 的 REST API、用于隔离网络部署的 Docker、用于课堂扫描的批处理模式,以及供期刊编辑系统使用的持久化索引。

6. 永久免费。 MIT 许可证。无需按提交次数付费或购买席位许可证,也不会被供应商锁定——商业工具则需要机构许可证或付费 API 额度。AEGIS 只需消耗计算资源。


参考文献

  • Kirchenbauer 等人(2023)。A Watermark for Large Language Models. ICML 2023。
  • Zhao 等人(2023)。Provable Robust Watermarking for AI-Generated Text. ICLR 2024。
  • Liang 等人(2023)。GPT Detectors Are Biased Against Non-Native English Writers. Patterns 4(7),2023。arXiv:2304.02819。
  • Walters 和 Wilder(2023)。Fabrication and Errors in the Bibliographic Citations Generated by ChatGPT. Scientific Reports 13,14045。doi:10.1038/s41598-023-41032-5。
  • Burrows(1987)。Word Patterns and Story Shapes. Literary Linguistic Computing 2(2)。
  • McCarthy 和 Jarvis(2010)。MTLD, vocd-D, and HD-D. Behavior Research Methods 42(2)。
  • COPE(2019)。Text Recycling Guidelines. 出版伦理委员会。

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.,美国德克萨斯州达拉斯

资质详情
IEEE 高级会员电气与电子工程师协会
CISM注册信息安全经理(ISACA)
ISACA信息系统审计与控制协会

联系邮箱:[email protected] GitHub:sunilgentyala LinkedIn:linkedin.com/in/sunil-gentyala 网站:sunilgentyala.github.io/aegis-integrity


更新日志

v3.3.2(October 2026)

面向官方 MCP Registry 的打包版本。检测行为没有变化。

  • mcp 现在是核心依赖项,并新增 aegis-integrity 命令以启动 MCP 服务,因此 uvx aegis-integrity 可以正常运行。aegis-mcp 保持不变。
  • README 现包含 MCP Registry 所有权标记。
v3.3.1(2026 年 10 月)

安全加固版本。检测行为没有变化。

  • 安全性:MCP 文件访问。 工具现在只读取不超过 AEGIS_MAX_FILE_MB(默认值为 50)的 .pdf、.docx、.tex 和 .txt 文件。新增的 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 抄袭等级”部分; PipelineConfig.run_ieee_plagiarism 可将其关闭。
v3.3.0(2026 年 9 月)
  • 新增(Web 应用): aegis ui 会在 http://127.0.0.1:8765/ 打开浏览器应用 (aegis serve 和 Docker 也会在 / 提供该应用)。支持拖放检查, 提供四种模式(完整、私密/离线、仅参考文献、风格与 格式)、出版方指南选择、通俗易懂的判定结果、 显示“未运行”而非误导性 0% 的评分卡片、问题优先排序的 参考文献表、“运行了哪些检查”面板、通俗易懂的“互联网使用”摘要、 沙盒查看器中的完整 HTML 报告,以及 JSON/HTML 下载。还包括“比较两篇论文”和 “我的比较库”标签页。页面完全独立:不使用 CDN、字体 或跟踪器,因此可离线运行;所有文档文本都通过 textContent 插入,绝不会作为 HTML 插入。
  • 新增(aegis doctor): 列出每项功能(文档读取、 语料库、释义和 AI 检测、非英语母语校准、 Crossref、spaCy、MCP)的状态:就绪 / 受限 / 未安装,并给出修复问题的 确切命令。--warm-up 会预下载模型;--plain 用于脚本。GET /status、Web 应用的状态面板和 MCP aegis_status 工具都使用相同的数据。
  • 新增(Claude 集成): 可安装的 aegis-mcp 服务(原先是 根目录下的脚本,路径硬编码为 C:\Gitrepos,只能在 一台机器上运行);Claude Code 插件及市场(claude-plugin/、 .claude-plugin/marketplace.json),包含 integrity-check、submission-check 和 aegis-setup 技能;以及 Claude Desktop 扩展(mcpb/)。aegis_mcp.py 仍作为向后兼容的启动器,供现有配置使用。
  • 新增(API): /analyze 支持 offline=true(完全不发起网络调用)、 guidelines=、include_html=true,以及每种检测器的开关。 /health 会报告 auth_required,且不再向未经身份验证的调用方暴露服务端的索引路径。
  • 修复(API 响应速度): /analyze、/compare 和 /corpus/add 直接在 异步事件循环中运行 CPU 密集型工作,因此一次分析会让其他所有请求(包括 /health)冻结数分钟。这些工作现在会在线程池中运行。
  • 修复(抄袭误报): n-gram 检测器会报告所有 MinHash LSH 候选项,包括精确 Jaccard 相似度仅为 8-14%、与其自身 25%/40% 阈值相差甚远的不相关段落。在一篇已发表的期刊论文中,这导致六段内容被标记为“抄袭”,将肺癌文本与网络安全文本配对,并把整体风险提升至中等。现在只保留精确 Jaccard 相似度达到阈值的候选项。
  • 修复(双栏 PDF 的引用误报): 跨行的 DOI (10.1016/j. + 换行符 + ebiom...)会被截断为 10.1016/j,并被报告为虚构;参考文献列表中的重复页眉(“... Control 115 (2026) ...”)会被读作出版年份;被猜作标题的作者列表或页码范围会导致不匹配,即使参考文献中包含真实标题;在线优先发表年份也会被判定为与印刷版年份不匹配。现在会重新拼接跨行 DOI(但不会拼接页码和后续词语),从参考文献中剔除重复的页眉/页脚行;只要解析出的标题出现在参考文献文本中,就会接受该标题;并接受 Crossref 中的印刷版、在线版或正式出版年份。对于 Crossref 无法解释的一年之差(它通常只存储在线优先日期),现在会在已验证的参考文献上添加备注,而非报告不匹配;更大的年份差仍会报告。页码范围的第一年(“(2022) 2049-2065”)不再被误读为出版年份。在测试论文中:已验证的参考文献从 12 条增至 17 条,虚构误报从 1 条降至 0 条,不匹配误报从 6 条降至 0 条。
  • 修复(PDF 中的方程误报): PDF 提取结果中单独占一行的方程编号无法被识别,因此所有“方程 (N)”引用都被报告为无对应项(测试论文中 28 条全部如此)。现在,如果前一行看起来像数学公式,单独一行的“(N)”也会被计入。若章节检测未能识别参考文献部分,方程检查器现在也会根据标题行跳过该部分。
  • 修复(配置): install.bat 创建的 .env 文件从未被 CLI 或 API 读取;现在会加载 ./.env 和 ~/.aegis/.env,且 aegis analyze --email 会遵循 AEGIS_CITATION_EMAIL。
  • 变更: 默认数据位置为 ~/.aegis/{index,reports},让 CLI、Web 应用和 MCP 服务共用同一个库。工作目录中已有的 ./aegis_index / ./aegis_reports,或 AEGIS_INDEX_DIR / AEGIS_REPORT_DIR,仍具有更高优先级。
v3.1.3(2026 年 9 月)
  • 修复(抄袭误报): n-gram 和语义相似度检测器会处理完整的提交文本,包括其中的参考文献部分。格式正确的引文必然会近乎原样地复现被引用论文的标题和作者字符串,因此,任何引用同一来源的两篇论文都会被标记为互相抄袭参考文献——一份真实提交仅因常规引文重合,就被评为抄袭 CRITICAL/0.93。现在,这两个检测器都改为处理 ParsedDocument.body_text(排除参考文献/书目部分);AI 检测和引文验证不受影响。
  • 修复(引文年份不匹配误报): DocumentParser._extract_year 会将参考文献原始文本中任何位置出现的第一个形如「19xx」/「20xx」的 4 位数字,视为其声称的出版年份。这可能会选中一个碰巧看起来像年份的页码/文章编号("..., p. 1947, 2025." 会被判定为 1947,而不是 2025),或选中会议举办年份而非其论文集的实际出版年份("...CRITIS 2016), ... 2017." 会被判定为 2016,而不是 2017)。现在会先去除末尾的 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 响应会沿用真实 404(DOI 未注册)的代码路径处理,将临时速率限制误判为对实际可解析 DOI 的 HALLUCINATED。现在,agency 检查中的非 404 错误会报告为 UNAVAILABLE,而不是 HALLUCINATED。
  • 修复(引文标题提取,Word 智能引号): Word 的智能引号自动更正常会将参考文献标题显示为弯引号,而非双引号;朴素的引号到引号匹配会出错,因为右弯引号与 Word 用于标题内部撇号的字符相同(例如「You've」),导致匹配在标题中途截断。现在会以紧邻结束引号之前的逗号为锚点(IEEE/ACM 格式中真正的标题边界);标题中途的撇号前不会出现逗号。
  • 修复(出版场所不匹配误报,联合主办的出版场所): 对于列出多个联合主办方的出版场所引用(例如「IEEE/ACM ... Conference」),系统此前只会检查列在首位的联合主办方,因此,DOI 即使正确解析到 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"。真正的修复需要可靠的 L2 英语风格启发式方法(例如冠词/介词错误密度),这需要新增检测器,而不是快速调整——在没有带标签语料可供验证的情况下,不作猜测,将其留作范围明确的后续工作。
v3.1.0(2026 年 9 月)
  • 新增: Elsevier 成为第六个按出版平台区分的指南配置文件(aegis.guidelines.profiles.GUIDELINE_PROFILES["ELSEVIER"]),内容取自 Elsevier 自己的作者指南、CRediT、Highlights 和利益冲突声明政策页面,并与一篇真实发表的 ScienceDirect 文章交叉核对。与其他五个出版平台不同,Elsevier 明确接受美式或英式拼写中的任意一种,且只会标记混用两种拼写的文档——拼写检查规则新增了 "EITHER" 类型,以准确表示这一要求,而不是强行给出错误的单一目标判断。新增四项结构检查,仅用于要求这些内容的出版平台(目前仅 Elsevier):CRediT 作者贡献声明、利益冲突声明、数据可用性声明,以及最多包含 3-5 个项目符号且每项不超过 85 个字符的 Highlights 部分。
  • 安全: 修复 REST API 的 X-API-Key 检查(aegis.api.app.require_api_key)中的计时侧信道问题——此前它用普通的 != 将请求头与 AEGIS_API_KEY 比较,遇到首个不匹配字符时便会提前结束,因此,与密钥前缀匹配字符越多的密钥,拒绝所需时间就会明显越长;理论上,攻击者可以逐个字符恢复密钥。现在改用 hmac.compare_digest。
  • 安全: 将若干依赖项的最低版本提高到高于多项已披露 CVE 所影响的版本:transformers(不安全反序列化导致远程代码执行,CVE-2024-11394/11392)、torch(即使设置 weights_only=True,torch.load 仍可导致远程代码执行,CVE-2025-32434)、PyMuPDF(嵌入内容提取中的路径遍历,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 的最低版本(无界多部分字段缓冲及阻塞事件循环回绕可能导致 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 多组单词对的一致性(美式/英式拼写)、主谓一致启发式规则、常见用法错误和可读性指标——完全离线运行,使用 regex + 可选的 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:统计各出版商已验证的引文数量;当参考文献声称属于这六家出版商之一,但其 DOI 解析到其他出版商时,标记 VENUE_MISMATCH;并通过 Crossref 按出版商限定范围搜索重复发表或先前发表的内容(IEEE/ACM/Elsevier/IET 使用成员 ID;IETE/BCS 不具备独立的 Crossref 成员身份,因此使用 DOI 前缀 + 容器标题匹配)。可通过 --target-publishers(CLI)/ venue_target_publishers(Python API)进行配置;默认启用,不会增加新的必需依赖(复用现有的 requests + Crossref 集成)。
v2.3.0(2026 年 7 月)

根据使用真实手稿进行测试的结果,修复后续审计发现的问题,并强化 CI/安全性。连续第二个次版本更新,包含行为修复,而非补丁更新:

  • 修复(正确性,高严重级别): DOCX 段落原先以单个 \n 连接,但段落级检测器(AI 内容、n-gram)会按 \n\n+ 拆分以查找段落边界——所有 DOCX 提交都会悄然合并成一个巨大的“段落”,导致该格式完全无法进行段落级 AI/n-gram 检测。现在还会提取表格单元格文本,以前这部分内容会被完全丢弃。
  • 修复(正确性,高严重级别): 单个低置信度的参考文献判定(即使只检测到一条引用)也可能显示为“100% 引用问题”,并单独将 overall_risk 推至 CRITICAL。现在只有在样本量充足时(至少 5 条参考文献,验证覆盖率至少 80%),引用检测结果才会影响风险;低于该标准时,报告会显示 "assessment": "INCONCLUSIVE",而不是给出虚假的确定性判定。UNRESOLVABLE 判定(网络/解析失败)也不再计入 citation_score——只有已确认的 HALLUCINATED/MISMATCH 才会计入。
  • 修复(正确性): 在 v2.2.0 修复 Crossref-404/机构检查后,DataCite 注册的 DOI(例如 arXiv 的 10.48550/* 前缀)此前只能得到通用的“未独立验证”通过结果。现在 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):使用 Python 3.10-3.12 的测试矩阵,并设置覆盖率门槛(60%,即当前基线——80% 是后续目标,尚未强制执行);还包括 ruff check(固定为实际用于检查此代码库的版本,而非“最新”版本——否则 ruff 的次版本更新若改变默认规则,可能在代码未变的情况下导致此门槛失败)、bandit,以及 Docker 构建 + 健康检查冒烟测试。pip-audit 会运行以供查看,但不会因传递依赖中的 CVE 而阻断。
  • 变更: 不再支持 Python 3.9。该版本已于 2025 年 10 月结束生命周期,而且 spacy 当前的依赖链(thinc>=8.3.12)不再发布适用于该版本的构建包——无论本项目如何配置,完整的 [ml,nlp,bib] 安装都已无法在 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 的注册机构,并在适用时返回 NOT_FOUND_IN_CROSSREF,而不是 HALLUCINATED。超时、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 版本现在报告 aegis.__version__,而非硬编码的 1.0.0。
  • 修复: 报告 JSON/HTML 将 "aegis_version": "2.1.0" 和过时的页脚版本号硬编码,而非使用 aegis.__version__。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(2026 年 7 月)
  • **修复:**将 README 和 GitHub Pages 网站上缺少来源的对比表声明和统计数据替换为有引用来源的内容(ESL 假阳性偏差引用 Liang 等人 2023 年的研究;引用造假率引用 Walters & Wilder 2023 年的研究),并对无法独立核实的竞品能力采用更谨慎的“未公开”表述
  • **修复:**移除了竞品定价中虚构的单次提交费用(其中多项费用没有公开来源);改为描述定价模式
  • **修复:**更正了 Liang 等人(2023)的引用——该研究发表于 Patterns(Cell Press),而非 Science
  • **修复:**将过时的 “AEGIS v2.0” 标题和表格引用更新为 v2.1
v2.1.0(2026 年 7 月)
  • **修复:**水印启发式规则可能无条件地将 overall_risk 设为 CRITICAL;现在在实验模式下它绝不会影响风险评分,即使在假设的已验证方案模式下,也最多只提升 1 个等级
  • 新增:WatermarkMode(disabled / experimental / verified_scheme)和 --watermark-mode CLI 标志
  • **变更:**水印判定结果重命名为 STATISTICAL_ANOMALY / NO_STATISTICAL_ANOMALY / 等;旧的确定性判定结果 WATERMARKED 已移除
  • **修复:**从 README 和 GitHub Pages 网站中移除了缺乏依据的假阳性率和 GPT-4/Gemini 检测声明
v2.0.0(2026 年 6 月)
  • **新增:**LLM 水印检测器(Kirchenbauer z 检验 + 熵 + 排名偏斜)
  • **新增:**引用网络分析器(自引膨胀、掠夺性期刊、OpenAlex)
  • **新增:**语义连贯性分析器(话语连接词、句子均匀性、MTLD)
  • **新增:**批量 / 课堂分析器(论文代写检测、成对相似度矩阵)
  • 新增:aegis batch CLI 命令
  • **改进:**流水线现在依次运行 10 个检测器,并采用统一的风险评分
  • **改进:**JSON 报告包含所有 v2.0 检测器的输出
  • **改进:**setup.py 升级为稳定状态(5 - Production/Stable)
v1.0.0(2026 年 5 月)
  • 首次发布:引用完整性、针对 ESL 校准的 AI 检测、SBERT 语义相似度、MinHash n-gram、Burrows' Delta 风格计量、自我抄袭检测、REST API + CLI

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。