跳到主要内容

Jlama

Jlama 项目

项目设置

要将 langchain4j 安装到您的项目中,请添加以下依赖项:

对于 Maven 项目 pom.xml


<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.0.0-beta3</version>
</dependency>

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-jlama</artifactId>
<version>1.0.0-beta3</version>
</dependency>

<dependency>
<groupId>com.github.tjake</groupId>
<artifactId>jlama-native</artifactId>
<!-- 用于更快的推理。支持 linux-x86_64, macos-x86_64/aarch_64, windows-x86_64
使用 https://github.com/trustin/os-maven-plugin 来检测操作系统和架构 -->
<classifier>${os.detected.name}-${os.detected.arch}</classifier>
<version>${jlama.version}</version> <!-- 版本来自 langchain4j-jlama pom -->
</dependency>

对于 Gradle 项目 build.gradle

implementation 'dev.langchain4j:langchain4j:{your-version}'
implementation 'dev.langchain4j:langchain4j-jlama:{your-version}'

模型选择

您可以使用 HuggingFace 上的大多数 safetensor 模型,并使用 owner/model-name 格式指定它们。 Jlama 在 http://huggingface.co/tjake 下维护了一个预量化流行模型列表。

支持使用以下架构的模型:

  • Gemma 模型
  • Llama 模型
  • Mistral 模型
  • Mixtral 模型
  • GPT-2 模型
  • BERT 模型

聊天完成

聊天模型允许您使用经过对话数据微调的模型生成类人回复。

同步

创建一个类并添加以下代码。

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.jlama.JlamaChatModel;

public class HelloWorld {
public static void main(String[] args) {
ChatLanguageModel model = JlamaChatLanguageModel.builder()
.modelName("tjake/TinyLlama-1.1B-Chat-v1.0-Jlama-Q4")
.build();

String response = model.chat("说 '你好世界'");
System.out.println(response);
}
}

运行程序将生成类似以下输出的变体

你好世界!今天我能为您提供什么帮助?

流式处理

创建一个类并添加以下代码。

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;
import dev.langchain4j.model.jlama.JlamaStreamingChatModel;
import dev.langchain4j.model.output.Response;

import java.util.concurrent.CompletableFuture;

public class HelloWorld {
public static void main(String[] args) {
StreamingChatLanguageModel model = JlamaStreamingChatLanguageModel.builder()
.modelName("tjake/TinyLlama-1.1B-Chat-v1.0-Jlama-Q4")
.build();

CompletableFuture<ChatResponse> futureResponse = new CompletableFuture<>();
model.chat("讲个关于 Java 的笑话", new StreamingChatResponseHandler() {

@Override
public void onPartialResponse(String partialResponse) {
System.out.print(partialResponse);
}

@Override
public void onCompleteResponse(ChatResponse completeResponse) {
futureResponse.complete(completeResponse);
}

@Override
public void onError(Throwable error) {
futureResponse.completeExceptionally(error);
}
});

futureResponse.join();
}
}

您将在 onPartialResponse 方法中实时接收 LLM 生成的每个文本块(令牌)。

您可以看到下面的输出是实时流式传输的。

"为什么 Java 开发者戴眼镜?因为他们看不见 C#"

当然,您可以将 Jlama 聊天完成与其他功能结合使用,如 设置模型参数聊天记忆,以获得更准确的回复。

聊天记忆 中,您将学习如何传递聊天历史记录,以便 LLM 知道之前说过什么。如果您不传递聊天历史记录,就像这个简单的例子一样,LLM 将不知道之前说过什么,因此无法正确回答第二个问题("我刚才问了什么?")。

许多参数在后台设置,如超时、模型类型和模型参数。 在 设置模型参数 中,您将学习如何明确设置这些参数。

Jlama 有一些特殊的模型参数,您可以设置

  • modelCachePath 参数,允许您指定一个目录路径,模型下载后将缓存在该目录中。默认为 ~/.jlama
  • workingDirectory 参数,允许您为给定的模型实例在磁盘上保持持久的聊天记忆。这比使用聊天记忆更快。
  • quantizeModelAtRuntime 参数,将在运行时量化模型。当前量化始终为 Q4。您也可以使用 jlama 项目工具预先量化模型(有关更多信息,请参见 Jlama 项目)。

函数调用

Jlama 支持支持函数调用的模型(Mistral、Llama-3.1 等)。 参见 Jlama 示例

JSON 模式

Jlama 尚不支持 JSON 模式。但您始终可以礼貌地要求模型返回 JSON。

示例