learn - Ollama-本地环境搭建与使用
learn - Ollama-本地环境搭建与使用
Ollama-本地环境搭建与使用
已经到了25年,各种的AI层出不穷,那么如何掌握一下AI或者自己也拥有一款本地私有的AI工具呢?
Ollama安装
我那个正在吃灰的台式机扛起了这个重任:
CPU: 4c
Mem: 12G
System: centos7
Ollama 在 CentOS 上主要有两种部署方式,您可以根据需求选择:
- 使用 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
- 直接二进制安装(更贴近系统)
- 下载 Ollama 的二进制文件(例如通过官方安装脚本
curl -fsSL https://ollama.com/install.sh | sh),或手动下载并解压到/usr/bin目录。 - 创建专用用户和组(如
ollama)以增强安全性,并设置正确的文件权限。 - 配置 systemd 服务文件(如
/etc/systemd/system/ollama.service)以实现开机自启动和后台管理。
- 下载 Ollama 的二进制文件(例如通过官方安装脚本
Ollama 验证运行情况
- 使用命令行方式:
1
2
3
4
#启用模型
ollama run llama3.2
#询问:你是谁。
#询问:介绍一下中国首都。
- 使用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 ~]$
- 使用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 进行授权