私有化部署大模型最佳解决方案 Ollama (8B)模型


为什么需要私有化部署大模型

企业考虑成本和数据隐私问题,会特别希望能在企业内部部署一套大模型,在企业内部直接调用,这样就能成本可控,数据也不会泄露,所以开源大模型是非常有前景的,目前来说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 [email protected]
 * @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 [email protected]
 * @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

猜你喜欢

转载自blog.csdn.net/qq_42731358/article/details/143037186
今日推荐