knuddelsgmbh/jtokkit
JTokkit is a Java tokenizer library designed for use with OpenAI models.
JTokkit – Java 词元化工具包
是什么 – 一个纯 Java 库,实现了 OpenAI 模型所使用的相同词元化方案(例如 cl100k_base、p50k_base 等)。它使 Java 应用程序能够对文本进行精确的词元计数或分割,生成 OpenAI API 所期望的完全一致的词元,与 OpenAI 的 Python tiktoken 包行为完全一致。
为何重要 – 在调用 GPT‑3.5、GPT‑4 或嵌入模型时,必须保持在词元限制内。JTokkit 为基于 JVM 的服务提供了一种快速、零依赖的方式,无需调用 API 即可计算这些限制。
主要特性
- 支持所有主要 OpenAI 编码(
r50k_base、p50k_base、p50k_edit、cl100k_base、o200k_base)。 - 简单的 API:创建一个
EncodingRegistry,通过名称或模型获取Encoding,然后调用encode/decode。 - 线程安全的对象,可在整个应用中共享。
- 无外部依赖;支持 Java 8+。
- 经过基准测试,比同类 Java 词元化工具快 2–3 倍。
获取方式
<!-- Maven -->
<dependency>
<groupId>com.knuddels</groupId>
<artifactId>jtokkit</artifactId>
<version>1.1.0</version>
</dependency>
// Gradle
implementation 'com.knuddels:jtokkit:1.1.0'
快速使用示例
EncodingRegistry registry = Encodings.newDefaultEncodingRegistry();
Encoding enc = registry.getEncoding(EncodingType.CL100K_BASE);
IntArrayList tokens = enc.encode("Hello world!"); // → [15496, 995]
String back = enc.decode(tokens); // → "Hello world!"
// 获取与特定模型匹配的编码器
Encoding modelEnc = registry.getEncodingForModel(ModelType.TEXT_EMBEDDING_ADA_002);
扩展方式 – 如果需要自定义 BPE 词汇表,可以自行实现 Encoding 接口并注册,或提供包含自定义正则表达式、词元映射和特殊词元映射的 GptBytePairEncodingParams,然后注册到 EncodingRegistry 中。
文档与源码 – 完整的 Javadoc 托管在 https://javadoc.io/doc/com.knuddels/jtokkit,简明指南位于 https://jtokkit.knuddels.de/。
许可证 – MIT(宽松,适合商业用途)。
相关
- 项目
- 项目
- 项目
- 项目
- 项目