Ollama
什么是 Ollama?
Ollama 是一个先进的 AI 工具,允许用户轻松地在本地设置和运行大型语言模型(支持 CPU 和 GPU 模式)。使用 Ollama,用户可以利用强大的语言模型,如 Llama 2,甚至可以自定义和创建自己的模型。Ollama 将模型权重、配置和数据打包成一个单一的包,由 Modelfile 定义。它优化了设置和配置细节,包括 GPU 使用。
有关 Ollama 的更多详情,请查看:
演讲
观看在 Docker Con 23 的演讲:
观看 Code to the Moon 的介绍:
入门
要开始使用,请将以下依赖项添加到项目的 pom.xml
中:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-ollama</artifactId>
<version>1.0.0-beta3</version>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>ollama</artifactId>
<version>1.19.1</version>
</dependency>
当 Ollama 在 testcontainers 中运行时,尝试一个简单的聊天示例代码:
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.model.Image;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.ollama.OllamaChatModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.DockerClientFactory;
import org.testcontainers.containers.Container;
import org.testcontainers.ollama.OllamaContainer;
import org.testcontainers.utility.DockerImageName;
import java.io.IOException;
import java.util.List;
public class OllamaChatExample {
private static final Logger log = LoggerFactory.getLogger(OllamaChatExample.class);
static final String OLLAMA_IMAGE = "ollama/ollama:latest";
static final String TINY_DOLPHIN_MODEL = "tinydolphin";
static final String DOCKER_IMAGE_NAME = "tc-ollama/ollama:latest-tinydolphin";
public static void main(String[] args) {
// 创建并启动 Ollama 容器
DockerImageName dockerImageName = DockerImageName.parse(OLLAMA_IMAGE);
DockerClient dockerClient = DockerClientFactory.instance().client();
List<Image> images = dockerClient.listImagesCmd().withReferenceFilter(DOCKER_IMAGE_NAME).exec();
OllamaContainer ollama;
if (images.isEmpty()) {
ollama = new OllamaContainer(dockerImageName);
} else {
ollama = new OllamaContainer(DockerImageName.parse(DOCKER_IMAGE_NAME).asCompatibleSubstituteFor(OLLAMA_IMAGE));
}
ollama.start();
// 拉取模型并基于所选模型创建镜像
try {
log.info("开始拉取 '{}' 模型... 可能需要几分钟...", TINY_DOLPHIN_MODEL);
Container.ExecResult r = ollama.execInContainer("ollama", "pull", TINY_DOLPHIN_MODEL);
log.info("模型拉取完成!{}", r);
} catch (IOException | InterruptedException e) {
throw new RuntimeException("拉取模型时出错", e);
}
ollama.commitToImage(DOCKER_IMAGE_NAME);
// 构建 ChatLanguageModel
ChatLanguageModel model = OllamaChatModel.builder()
.baseUrl(ollama.getEndpoint())
.temperature(0.0)
.logRequests(true)
.logResponses(true)
.modelName(TINY_DOLPHIN_MODEL)
.build();
// 示例用法
String answer = model.chat("提供3个简短的要 点解释为什么Java很棒");
System.out.println(answer);
// 停止 Ollama 容器
ollama.stop();
}
}