rdzehtsiar/corpusforge
GitHub: rdzehtsiar/corpusforge
一个离线确定性的对抗性文本语料库编译器,用于对 tokenizer、解析器和 Unicode 处理管线进行压力测试并生成可复现的回归测试夹具。
Stars: 0 | Forks: 0
# CorpusForge
[](https://github.com/rdzehtsiar/corpusforge/actions/workflows/tests.yml)
[](https://codecov.io/gh/rdzehtsiar/corpusforge)
[](https://sonarcloud.io/summary/new_code?id=rdzehtsiar_corpusforge)
CorpusForge 是一个计划中的离线、确定性语料库编译器,专门用于处理恶意文本。它面向需要可复现输入的工程师,这些输入可对 tokenizer、解析器、渲染器、压缩行为、Unicode 处理和文本预处理 pipeline 施加压力。
该项目不是 AI 写作工具、本地语言模型或通用的 lorem ipsum 生成器。其目标是工程可靠性:生成可以复现、最小化并转化为回归测试夹具的对抗性文本和字节语料库。
## 愿景
CorpusForge 旨在使本地开发和 CI 中的恶意文本测试变得切实可行。
产品方向是:
- 基于显式种子和元数据进行确定性生成
- 感知 Unicode 的 tokenizer 和解析器压力测试
- 可复现的失败样本和字节范围
- 失败用例的缩减/最小化
- 可审查和验证的透明配置文件格式
- 优先离线操作,无遥测或云依赖
- 明确记录哪些功能受支持、部分支持、不稳定或故意不支持
## 当前状态
CorpusForge 处于早期实现阶段。
本仓库现在包含一个 Rust workspace、共享错误类型、确定性种子和流原语、里程碑 3 `.cff` v0 配置文件支持、里程碑 6 内置 tokenizer Unicode 工作流、范围较窄的里程碑 7 缩减/重放 MVP,以及范围较窄的里程碑 8 夹具/模板化语法生成。`corpusforge` 二进制文件可以打印顶层和特定命令的帮助信息,并且存在用于确定性夹具配置的 `.cff` v0 配置构建、读取、检查和验证工作流。
`corpusforge-unicode` crate 包含用于确定性、基于夹具的 Unicode 对抗性生成的里程碑 4 库 API。CLI 还通过 `corpusforge gen --unicode ...` 和 `corpusforge ci tokenizer` 公开了这些基于夹具的 tokenizer 模式:`grapheme`、`bidi`、`zero-width`、`emoji`、`normalization`、`mixed` 和 `invalid-utf8`。
Unicode 输出边界被有意分开。有效文本生成返回 UTF-8 文本并拒绝 `invalid-utf8`。原始字节生成返回字节,并且是 `invalid-utf8` 用例唯一受支持的路径。当前实现使用确定性流从内置夹具中采样;它并不是一个广泛的 Unicode 或 tokenizer 兼容性保证。
N-gram 训练和基于配置文件的生成已作为字节级 bigram MVP 实现。`corpusforge ci tokenizer` 可以针对内置的 tokenizer Unicode 样本运行外部 stdin harness,并写入稳定的 JSON 报告。
里程碑 7 添加了字节级缩减和基于配置文件按字节范围的重放。`corpusforge shrink` 读取最初失败的字节输入,直接调用谓词可执行文件(不使用 shell),将候选字节写入谓词的 stdin,并保留可复现的失败签名。谓词退出代码 `0` 表示候选通过;非零退出表示失败。仅当原始输入持续超时时才保留超时,并且会拒绝不稳定的谓词。默认值为 `--timeout-ms 1000` 和 `--max-runs 10000`。
`corpusforge replay` 读取带有嵌入 n-gram 模型的 `.cff` 配置文件,接受 `--seed` 或 `--seed-file`,并重放半开区间 `--range ..` 的字节范围。如果没有 `--out`,replay 会将二进制字节直接写入 stdout。`--json` 需要 `--out`,因为否则 stdout 会承载重放的字节。Shrink 和 replay 可以写入不带时间戳的稳定元数据 JSON。
配置文件格式支持仅限于不稳定的 `.cff` v0 行为,不提供跨版本兼容性保证。缩减器是字节级的,不感知 Unicode 或结构。Replay 当前使用直接的配置文件、种子和范围标志,而不是使用保存的元数据文件。在实现并由测试覆盖之前,更广泛的确定性输出保证、兼容性声明和生成行为应被视为计划中的。
里程碑 8 通过 `corpusforge gen --grammar markdown|json --grammar-mode valid|near-valid|malformed` 添加了用于 Markdown 和 JSON 的内置语法生成。语法输出仅为 UTF-8 文本,并由确定性夹具/模板构建。它不是一个完整的 Markdown 或 JSON 一致性测试套件,也尚未由 `.cff` 配置文件支持。语法生成可以选择使用 `--unicode ` 将有效文本的 Unicode 夹具模式组合到叶内容中;`invalid-utf8` 不能与语法生成组合,因为语法输出是有效的 UTF-8。有关当前面向 harness 的工作流,请参阅[语法工作流演示](./docs/grammar-workflow.md)。
目前请勿将 CorpusForge 用于生产工作流。
## 目标用户
CorpusForge 面向需要回答以下实际问题的工程师:
- tokenizer 是否能正确处理恶意的 Unicode 和字节序列
- 解析器或渲染器为何在罕见的文本边缘情况上崩溃
- 如何从种子和配置文件复现文本处理失败
- 如何将失败的输入最小化为稳定的回归测试夹具
- 摄取、embedding、RAG 或预处理 pipeline 在处理对抗性文本时的表现
- 如何在没有网络访问的情况下在 CI 中运行确定性文本压力测试
## 计划范围
初始开发侧重于:
- 可设置种子的语料库配置文件
- 确定性的文本和字节生成
- Unicode 对抗模式
- 内置的 Markdown 和 JSON 语法夹具
- 配置文件检查和验证
- 可复现的重放
- 缩减/最小化工作流
- 对 CI 友好的报告
后续工作可能会将语法生成连接到 `.cff` 配置文件,扩大覆盖范围,或者在这些行为被实现和测试后添加特定于语法的 CI 报告。
## 非目标
CorpusForge 不打算成为:
- 通用的 AI 文本生成器
- transformer 运行时
- 托管服务
- 基于遥测的产品
- 需要云账户的工具
- 替代特定格式的一致性测试套件
- 在没有证据的情况下保证解析器或 tokenizer 正确性的工具
## 原则
- 默认离线
- 默认无遥测
- 在实际可行的前提下实现确定性输出
- 可复现的配置文件、生成的语料库、重放范围和最小化用例
- 由测试支持的兼容性和可靠性声明
- 明确声明不支持和部分支持的行为
- 稳定、可检查的报告格式
- 跨平台开发和 CI 友好性
## 开发
开发当前使用 Rust CLI 优先的 workspace,采用确定性测试,并以单个静态二进制文件作为分发目标。
本地检查:
```
cargo fmt --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
cargo run -p corpusforge-cli -- --help
```
这些检查应保持离线和确定性。
项目文档:
- [架构](./docs/architecture.md)
- [确定性](./docs/determinism.md)
- [Tokenizer 工作流演示](./docs/tokenizer-workflow.md)
- [语法工作流演示](./docs/grammar-workflow.md)
- [路线图](./docs/roadmap.md)
- [Agent 工作流](./docs/agent-workflow.md)
- [贡献](./CONTRIBUTING.md)
## 许可证
根据 Apache License, Version 2.0 授权。
请参阅 [LICENSE](./LICENSE.txt)。
标签:ASM汇编, Rust, Unicode, 代码覆盖率, 压力测试, 可视化界面, 对抗性文本, 数据管道, 文本处理, 测试工具, 测试用例生成, 离线工具, 编译器, 网络流量审计, 解析器, 词法分析, 软件工程, 通知系统