文章

learn - Ollama-本地环境搭建与使用

learn - Ollama-本地环境搭建与使用

Ollama-本地环境搭建与使用

已经到了25年,各种的AI层出不穷,那么如何掌握一下AI或者自己也拥有一款本地私有的AI工具呢?

Ollama安装

我那个正在吃灰的台式机扛起了这个重任:

CPU: 4c

Mem: 12G

System: centos7

Ollama 在 CentOS 上主要有两种部署方式,您可以根据需求选择:

  1. 使用 Docker 容器部署(推荐用于快速入门) —— 我的选择
    • 拉取 Ollama 的官方 Docker 镜像:docker pull ollama/ollama

    • 运行容器,例如限制内存为 8GB 并映射端口:docker run -d --name my-ollama -p 11434:11434 --memory=8g ollama/ollama

    • 启动后,可以使用 docker exec -it my-ollama ollama run llama3.2 来下载并运行一个模型(如 Llama2)。

1
2
3
4
5
6
7
8
# 已安装模型列表
ollama list 
# 可以安装的模型:https://ollama.com/library/
# 例如 https://ollama.com/library/deepseek-r1
# 安装 llama3.2
ollama run llama3.2
# 我这里选择的总2.0 GB ,下载速度 2.2 MB/s 预计剩余时间 14m22s。
# deepseek-r1 总5.2 GB  
  1. 直接二进制安装(更贴近系统)
    • 下载 Ollama 的二进制文件(例如通过官方安装脚本 curl -fsSL https://ollama.com/install.sh | sh),或手动下载并解压到 /usr/bin 目录。
    • 创建专用用户和组(如 ollama)以增强安全性,并设置正确的文件权限。
    • 配置 systemd 服务文件(如 /etc/systemd/system/ollama.service)以实现开机自启动和后台管理。

Ollama 验证运行情况

  1. 使用命令行方式:
1
2
3
4
#启用模型
ollama run llama3.2
#询问:你是谁。
#询问:介绍一下中国首都。
  1. 使用API方式:
1
2
3
4
5
6
7
8
9
curl http://localhost:11434/api/generate -d '{
 "model": "gemma3",
 "prompt": "请问中国的首都在哪里",
 "stream": false
}'

#output:
#{"model":"gemma3","created_at":"2025-12-11T07:45:52.249695834Z","response":"中国的首都是**北京**。\n\n北京位于中国北方,是中国的政治、文化、教育和科技中心。\n","done":true,"done_reason":"stop","context":[105,2364,107,238350,237889,110323,238317,56285,73189,106,107,105,4368,107,110323,238317,15310,1018,32707,1018,236924,108,32707,58427,11064,180526,236900,237026,110323,44368,236951,23516,236951,23736,237206,33386,20634,236924,107],"total_duration":40481861909,"load_duration":35590536765,"prompt_eval_count":15,"prompt_eval_duration":767465033,"eval_count":26,"eval_duration":3993985996}[wangfuyu@wfy ~]$ 
   
  1. 使用go语言对接LLM:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func Test_LangChan_OLlama_Analyze(t *testing.T) {
	res, err := iagent.LangChan.CallOLlamaAnalyze("我想知道明天北京是什么天气?并且告诉我111.222.33.4的归属地?")
	t.Log(res)
	t.Log(err)
	if res != nil {
		if res.Weather.City != "" {
			weatherRes, err2 := iweather.WeatherSrv.GetWeatherAnalyze(res.Weather.City, res.Weather.Date)
			if err2 != nil {
				t.Log(err2)
			}
			t.Log(weatherRes)
		}
	}
}

重要的是提示词

prompt

${nowTime} =(time.Now().Format(“2006-01-02”)))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
请分析以下用户请求的意图,并按指定格式回复:

用户请求: "%s"

请严格按照以下JSON格式回复,不要添加其他内容:
{
"weather": {"city":"","date":""},
"ipv4": "参数内容"
}

说明:
- 如果有天气查询,city是对应的城市,date是对应的查询日期,现在的日期是nowTime
- 如果有IP归属地查询,ipv4填写IP地址,
- 如果你不知道,只需说不知道,不要试图编造答案。
1
2
3
4
5
6
7
8
9
10
11
12
13
func (l *langChan) CallOLlamaAnalyze(input string) (*dto.OLlama, error) {
	// 构造提示词,引导模型输出结构化结果
	//prompt :=

	body, err := ollama.Call(context.Background(), prompt)
	if err != nil {
		return nil, err
	}
	var res dto.OLlama
	json.Unmarshal([]byte(body), &res)
	return &res, nil
}

运行结果如下:(执行时间是2025/12/11 16:13)

1
2
3
4
5
6
7
=== RUN   Test_LangChan_OLlama_Analyze
    langchan_test.go:16: 北京 2025-12-12 165.2.5.6
    langchan_test.go:17: <nil>
    langchan_test.go:24: 中国-北京 时间:2025-12-12,天气:中雪
--- PASS: Test_LangChan_OLlama_Analyze (15.55s)
PASS

总结

使用ollama进行对LLM服务私有化部署,可以随时随地进行开发模拟,更可以按照自己的想法去实现一些具体的只能工具。

然后LLM是对已有的数据进行了训练,我们要知道未来的事情或者不再这些已经训练的数据里面的知识,可以让LLM帮我识别出需要的信息然后再转交其他服务处理。

嗯,私有化部署的好处是:还可以把个人或者团队的知识文档进行训练,然后我们就可以直接问它,让它帮我做下一步决定等等。

本文由作者按照 CC BY 4.0 进行授权