Ollama

Ollama简介

随着各个公司发布开源大模型,大模型管理工具越来越重要。Ollama就是一款优秀的开源大模型管理工具。利用Ollma开发者们可以自由的创建,训练模型,并且搭建本地化chatbot。同时Ollama还支持OpenAI同样形式的REST API以提升开发者效率。本质上讲Ollama是一个集成的本地大模型运行框架,它的出现极大地简化了AI模型的开发和使用过程。它支持Linux、Mac、Windows等系统,其内部不仅提供了丰富的AI模型库,而且提供了强大的API接口,可以方便将AI功能整合到用户自己具体的应用中。

Ollama的特点:

  • 一键式安装,无需繁琐的环境配置,简单易用
  • 性能强大,可以充分利用本地的计算资源,可以仅仅利用CPU或者充分调用本地GPU来运行模型
  • 功能丰富,提供了丰富的模型库,支持多种大语言模型并且支持多模态模型
  • 提供了丰富的API接口,便于开发者结合自身需求灵活进行功能扩展和开发

相关资料:Ollama官网 GitHub 支持的模型列表

Ollama在Windows系统上的使用

Ollama安装

直接在官网下载Windows平台的安装包

image-20240507145152909

安装完成之后就可以在菜单栏看到Ollama图标,此时就可以在Windows上使用Ollama了

Ollama使用

安装成功之后,我们在电脑任何位置打开命令行窗口,可以直接启动Ollama

image-20240507150145854

我们执行以下命令,可以自动pull对应的模型,并对模型进行加载,我们可以通过官网查看支持模型列表和具体的模型细节

1
ollama run [modelname]

首次执行上述命令会下载模型到本地,如果本地存在该模型,则不会被重复下载

我们以阿里巴巴通义千问4B模型使用为例展示如何本地使用大语言模型

1
ollama run qwen:4b

image-20240507152309824

Ollama使用方式有两种,命令行的放方式和API的方式

命令行方式使用

image-20240507152416981

1
ollama run [modelname] *prompt* #可以不进入命令行方式调用

image-20240507152709759

1
ollama run [modelname] *prompt* --verbose  #添加--verbose可以查看模型推理的具体开销细节

image-20240507153558820

退出命令行

image-20240507152452012

API方式使用

curl用法指南 Ollama API官方文档

Ollama API默认的地址和端口是http:localhost:11434,可以在安装启动Ollama的系统中直接调用访问

下面我们利用postman构造HTTP请求,访问Ollama服务:

image-20240507155607340

响应

image-20240507155704762

如何修改默认端口号?

要更改地址和端口,可以添加以下环境变量:

  • 变量名:OLLAMA_HOST
  • 变量值(端口)::8000

这样Ollama服务访问地址就可以变为http://localhost:8000

SpringAI整合Ollama

官方文档

导入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

相关配置

1
2
3
4
5
6
#本地ollama服务地址
spring.ai.ollama.base-url=http://localhost:11434
#启动allama客户端
spring.ai.ollama.chat.enabled=true
#指定使用的模型
spring.ai.ollama.chat.options.model=qwen:4b

编写简单controller代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RestController
public class ChatController {

private final OllamaChatClient chatClient;

@Autowired
public ChatController(OllamaChatClient chatClient) {
this.chatClient = chatClient;
}

@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", chatClient.call(message));
}

@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
Prompt prompt = new Prompt(new UserMessage(message));
return chatClient.stream(prompt);
}

}

测试

构造请求http://localhost:8080/ai/generate?message=武汉景区

响应结果:

image-20240507211513747

参考资料

Ollama 使用指南

Ollama官网

Ollama GitHub

Ollama on Windows:本地运行大型语言模型(LLM)的新利器