私有化部署大模型Ollama
- 为什么需要私有化部署大模型
- 一、Ollama本地部署Llama3大模型
- 二、Langchain4j调用Ollama本地部署模型API
- 三、Ollama本地部署nomic向量模型
- 四、Spring AI调用Ollama本地部署模型API
为什么需要私有化部署大模型
企业考虑成本和数据隐私问题,会特别希望能在企业内部部署一套大模型,在企业内部直接调用,这样就能成本可控,数据也不会泄露,所以开源大模型是非常有前景的,目前来说Meta开源的Llama3是开源大模型中性能表现最好的,所以这节课先带大家来尝试使用Ollama来部署Llama3和nomic模型。
一、Ollama本地部署Llama3大模型
Ollama的目标是能够在本地运行大模型,使用Go语言实现的一款开源项目,项目地址为https://github.com/ollama/ollama。
官方主页为https://ollama.com/,进入主页就能看到在各个操作系统中如何下载和安装
安装完后,就可以使用ollama命令来私有化部署和运行某个大模型,首次运行需要下载大模型文件,所以需要花时间。
在这个 https://ollama.com/library 中可以搜索你想要尝试的大模型,比如llama3
进入对应模型的首页,还可以选择要尝试的模型版本
比如我选择8b之后,右侧就给出了运行命令
直接运行该命令即可,默认情况下模型文件会下载在用户目录的.ollama目录下
等待下载完即可,下载完后会自动进入聊天对话模式
可以按Ctrl+d退出。
如果你只想启动ollama的服务端,从而用来接收API调用,那么可以运行:
ollama serve
这样,ollama的服务端就启动了,就可以接收模型的请求调用了,不过可能ollama部署了多个模型,所以请求调用时需要指定想要调用的是哪个模型.
二、Langchain4j调用Ollama本地部署模型API
比如我们用Langchain4j可以这么调用,先引入ollama的依赖:
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-ollama</artifactId><version>${langchain4j.version}</version>
</dependency>
然后:
package com.qjc.demo;import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.language.LanguageModel;
import dev.langchain4j.model.ollama.OllamaLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.output.Response;/**** @projectName ollama-demo* @packageName com.qjc.demo* @author qjc* @description TODO* @Email qjc1024@aliyun.com* @date 2024-10-18 09:10**/
public class Main {public static void main(String[] args) {LanguageModel model = OllamaLanguageModel.builder().baseUrl("http://localhost:11434/v1/").modelName("llama3:8b").build();String result = model.generate("你是谁").content();System.out.println(result);}
}
输出为:
不过,ollama是兼容了Open Ai的API的,所以也可以直接使用OpenAiChatModel:
OpenAiChatModel model = OpenAiChatModel.builder().baseUrl("http://localhost:11434/v1/").modelName("llama3:8b").apiKey("123").build();String result = model.generate("你是谁");
System.out.println(result);
三、Ollama本地部署nomic向量模型
并不定是OpenAI的向量化模型就是最好的,比如Ollama支持的nomic-embed-text就比OpenAI的text-embedding-ada-002和text-embedding-3-small要好。
https://ollama.com/library/nomic-embed-text
所以,我们可以利用Ollama来本地部署
nomic-embed-text
对于向量化模型,我们只需要把模型拉取下来,并通过API调用就可以了,所以可以运行:
ollama pull nomic-embed-text:v1.5
来拉取
然后就可以在Langchain4j中进行测试了:
package com.qjc.demo;import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.model.StreamingResponseHandler;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.language.LanguageModel;
import dev.langchain4j.model.ollama.OllamaEmbeddingModel;
import dev.langchain4j.model.ollama.OllamaLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.openai.OpenAiEmbeddingModel;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.model.output.Response;/**** @projectName ollama-demo* @packageName com.qjc.demo* @author qjc* @description TODO* @Email qjc1024@aliyun.com* @date 2024-10-18 09:18**/
public class Main {public static void main(String[] args) {OllamaEmbeddingModel model = OllamaEmbeddingModel.builder().baseUrl("http://localhost:11434/").modelName("nomic-embed-text:v1.5").build();System.out.println(model.embed("你是谁").content());}
}
不过,目前Ollama的向量化API还没有兼容OpenAI,所以只能用OllamaEmbeddingModel,而不能用OpenAiEmbeddingModel。
四、Spring AI调用Ollama本地部署模型API
同理,也可以使用Spring AI来调用Ollama本地部署的大模型和向量模型,比如,先引入:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
再配置:
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=llama3:8b
spring.ai.ollama.embedding.model=nomic-embed-text:v1.5
就可以正常使用Spring AI调用Ollama部署的模型了,不过目前Ollama的Starter中只提供了OllamaChatClient和OllamaEmbeddingClient
因此不支持ImageClient等其他客户端。
另外在Spring AI中也可以通过open-ai的starter来使用Ollama部署的模型,因为Ollama兼容了Open AI的API,但是同样还不支持Embedd