Ollama

Ollama

简介

Ollama 是一款在本地运行大模型的软件。

使用

使用如下命令即可安装:

1
2
3
4
5
6
curl -fsSL https://ollama.com/install.sh | sh
sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo echo '[Service]' >> /etc/systemd/system/ollama.service.d/environment.conf
sudo echo 'Environment="OLLAMA_HOST=0.0.0.0:11434"' >> /etc/systemd/system/ollama.service.d/environment.conf
sudo systemctl daemon-reload
sudo systemctl restart ollama

Chat

使用如下命令可以拉取大模型:

1
ollama pull llama2:latest

然后可以使用如下命令测试模型运行情况:

1
ollama run llama2

若可以正常使用则可以尝试调用 API:

1
2
3
4
curl http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt":"Why is the sky blue?"
}'

Embedding

使用如下命令可以拉取嵌入模型:

1
ollama pull nomic-embed-text:latest

可以尝试调用 API:

1
2
3
4
curl http://localhost:11434/api/embeddings -d '{
"model": "nomic-embed-text",
"prompt": "Llamas are members of the camelid family"
}'

图形化界面

Open WebUI

编写如下 docker-compose.yaml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3.8'

services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080"
environment:
- 'OLLAMA_BASE_URL=<ollama_address>'
- 'WEBUI_SECRET_KEY='
volumes:
- ./data:/app/backend/data
extra_hosts:
- host.docker.internal:host-gateway
restart: always

然后使用如下命令启动即可:

1
docker-compose up -d 

注:启动时间有些长,记得使用 docker-compose logs -f 看日志。

LobeChat

编写如下 docker-compose.yaml 文件:

1
2
3
4
5
6
7
8
9
version: '3.8'

services:
lobe-chat:
image: lobehub/lobe-chat
ports:
- "3210:3210"
environment:
- OLLAMA_PROXY_URL=<ollama_address>/v1

然后使用如下命令启动即可:

1
docker-compose up -d 

使用前端库调用

使用如下代码安装依赖:

1
npm install ollama

然后即可编写如下程序访问 API:

jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
'use client';

import {Ollama} from 'ollama/browser'
import React,{ useState } from 'react';

export default function Dashboard() {
const ollama = new Ollama({host: 'http://localhost:11434'})
const [data, setData] = useState<String>();
const [isLoading, setIsLoading] = useState(false);

const fetchData = async () => {
try {
setIsLoading(true);
const response = await ollama.chat({
model: 'llama3',
messages: [{role: 'user', content: 'Why is the sky blue?'}],
})
setData(response.message.content);
} catch (error) {
console.error('Error fetching data:', error);
} finally {
setIsLoading(false);
}
};

return (
<div>
<h1>Example Page</h1>
<button onClick={fetchData} disabled={isLoading}>
{isLoading ? 'Loading...' : 'Fetch Data'}
</button>
{data && (
<div>
<p>{data}</p>
</div>
)}
</div>
);
}

参考资料

官方项目

大模型清单

Embedding models


Ollama
https://wangqian0306.github.io/2024/Ollama/
作者
WangQian
发布于
2024年3月7日
许可协议