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。