主题
Jlama
项目搭建
要将 langchain4j 安装到你的项目,添加以下依赖:
Maven 项目的 pom.xml
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.22.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-jlama</artifactId>
<version>1.22.0-beta32</version>
</dependency>
<dependency>
<groupId>com.github.tjake</groupId>
<artifactId>jlama-native</artifactId>
<!-- for faster inference. supports linux-x86_64, macos-x86_64/aarch_64, windows-x86_64
Use https://github.com/trustin/os-maven-plugin to detect os and arch -->
<classifier>${os.detected.name}-${os.detected.arch}</classifier>
<version>${jlama.version}</version> <!-- Version from langchain4j-jlama pom -->
</dependency>Gradle 项目的 build.gradle
groovy
implementation 'dev.langchain4j:langchain4j:1.22.0'
implementation 'dev.langchain4j:langchain4j-jlama:1.22.0-beta32'Jlama 使用 Java 21 的预览特性。你可以用以下方式全局启用这些特性:
export JDK_JAVA_OPTIONS="--add-modules jdk.incubator.vector --enable-preview"
或者通过配置 maven compiler 与 failsafe 插件来启用预览特性。
模型选择
你可以使用 HuggingFace 上的大多数 safetensor 模型,并以 owner/model-name 格式指定它们。 Jlama 在 http://huggingface.co/tjake 下维护了一份预量化的流行模型列表。
支持使用以下架构的模型:
- Gemma 模型
- Llama 模型
- Mistral 模型
- Mixtral 模型
- GPT-2 模型
- BERT 模型
聊天补全
聊天模型让你能用一个在对话数据上微调过的模型生成类人的响应。
同步
创建一个类并添加以下代码。
java
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.jlama.JlamaChatModel;
public class HelloWorld {
public static void main(String[] args) {
ChatModel model = JlamaChatModel.builder()
.modelName("tjake/TinyLlama-1.1B-Chat-v1.0-Jlama-Q4")
.build();
String response = model.chat("Say 'Hello World'");
System.out.println(response);
}
}运行该程序会生成如下所示输出的一个变体
plaintext
Hello World! How can I assist you today?流式
创建一个类并添加以下代码。
java
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) {
StreamingChatModel model = JlamaStreamingChatModel.builder()
.modelName("tjake/TinyLlama-1.1B-Chat-v1.0-Jlama-Q4")
.build();
CompletableFuture<ChatResponse> futureResponse = new CompletableFuture<>();
model.chat("Tell me a joke about 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 生成逐块(词元)收到文本。
如下所示,输出是实时流式返回的。
plaintext
"Why do Java developers wear glasses? Because they can't C#"当然,你可以将 Jlama 聊天补全与设置模型参数、聊天记忆等其他特性结合,以获得更准确的响应。
在聊天记忆中,你将学习如何传递你的聊天历史,让 LLM 知道之前说过什么。如果你不传递聊天历史(像这个简单示例那样),LLM 就不会知道之前说过什么,也就无法正确回答第二个问题("我刚才问了什么?")。
许多参数是在幕后设置的,例如超时、模型类型与模型参数。 在设置模型参数中,你将学习如何显式地设置这些参数。
Jlama 有一些你可以设置的特殊模型参数
modelCachePath参数,允许你指定一个目录路径,模型下载后会被缓存在那里。默认为~/.jlama。workingDirectory参数,允许你在磁盘上为某个给定模型实例保持持久的 ChatMemory。这比使用 Chat Memory 更快。quantizeModelAtRuntime参数,会在运行时对模型量化。当前的量化始终为 Q4。你也可以用 jlama 项目的工具预先量化模型(更多信息参见 Jlama 项目)。
函数调用
Jlama 为支持函数调用的模型(Mistral、Llama-3.1 等)提供函数调用支持。 参见 Jlama 示例
JSON 模式
Jlama 尚不支持 JSON 模式。但你总可以礼貌地要求模型返回 JSON。