主题
进程内(ONNX)
LangChain4j 将若干流行的本地嵌入模型打包为 maven 依赖提供。 它们由 ONNX runtime 驱动, 运行在同一个 java 进程中。
每个模型都提供两种版本:原始版与量化版(量化版在 maven 构件名中带 -q 后缀,且在类名中含 Quantized)。
例如:
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
<version>1.22.0-beta32</version>
</dependency>1
2
3
4
5
2
3
4
5
java
EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
Response<Embedding> response = embeddingModel.embed("test");
Embedding embedding = response.content();1
2
3
2
3
或者使用量化版:
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings-all-minilm-l6-v2-q</artifactId>
<version>1.22.0-beta32</version>
</dependency>1
2
3
4
5
2
3
4
5
java
EmbeddingModel embeddingModel = new AllMiniLmL6V2QuantizedEmbeddingModel();
Response<Embedding> response = embeddingModel.embed("test");
Embedding embedding = response.content();1
2
3
2
3
所有嵌入模型的完整列表可在这里找到。
并行化
默认情况下,嵌入过程会使用所有可用的 CPU 核并行化, 因此每个 TextSegment 都会在独立的线程中被嵌入。
并行化是通过使用一个 Executor 完成的。 默认情况下,进程内嵌入模型使用一个缓存线程池, 线程数等于可用处理器数。 线程会缓存 1 秒。
你可以在创建模型时提供一个自定义的 Executor 实例:
java
Executor = ...;
EmbeddingModel embeddingModel = new AllMiniLmL6V2QuantizedEmbeddingModel(executor);1
2
2
暂不支持使用 GPU 进行嵌入。
自定义模型
许多模型(例如来自 Hugging Face 的模型)都可使用, 只要它们是 ONNX 格式的。
关于如何将模型转换为 ONNX 格式,说明见这里。
许多已转换为 ONNX 格式的模型可在这里找到。
使用自定义嵌入模型的示例:
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings</artifactId>
<version>1.22.0-beta32</version>
</dependency>1
2
3
4
5
2
3
4
5
java
String pathToModel = "/home/langchain4j/model.onnx";
String pathToTokenizer = "/home/langchain4j/tokenizer.json";
PoolingMode poolingMode = PoolingMode.MEAN;
EmbeddingModel embeddingModel = new OnnxEmbeddingModel(pathToModel, pathToTokenizer, poolingMode);
Response<Embedding> response = embeddingModel.embed("test");
Embedding embedding = response.content();1
2
3
4
5
6
7
2
3
4
5
6
7