knuddelsgmbh/jtokkit

JTokkit is a Java tokenizer library designed for use with OpenAI models.

JTokkit – Java 词元化工具包

是什么 – 一个纯 Java 库,实现了 OpenAI 模型所使用的相同词元化方案(例如 cl100k_basep50k_base 等)。它使 Java 应用程序能够对文本进行精确的词元计数或分割,生成 OpenAI API 所期望的完全一致的词元,与 OpenAI 的 Python tiktoken 包行为完全一致。

为何重要 – 在调用 GPT‑3.5、GPT‑4 或嵌入模型时,必须保持在词元限制内。JTokkit 为基于 JVM 的服务提供了一种快速、零依赖的方式,无需调用 API 即可计算这些限制。

主要特性

  • 支持所有主要 OpenAI 编码(r50k_basep50k_basep50k_editcl100k_baseo200k_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(宽松,适合商业用途)。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目