雕虫小技:Ollama的使用技巧

【引】如何在本地调试自己的AI 应用? Ollama或者LM studio 之类运行时工具或许是不错的选择,如果进行大规模的AI 工程实践,图灵引进的一本佳作或许可以提供一些指南------

当启动 Ollama 时,它会自动启动侦听端口 11434 的REST API。这个REST API允许您从任何支持 HTTP 请求的编程语言或环境与 Ollama 进行交互。我们可以使用它来执行各种任务,例如查询模型、管理配置或将 Ollama 集成到应用程序中。你可参考 Ollama 有关如何使用 API 的文档(Ollama/docs/api.md)。

此外,通过定制模型目录,可以控制模型的存储位置,从而优化系统的存储。REST API 对于基于AI 服务或者不同语言的多个应用程序需要访问同一个 Ollama 实例的场景特别有用。

1. 生成文本

要使用 LLM 生成文本,可以使用以下 curl 命令与 Ollama 进行接口:

go 复制代码
$ curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Tell me a joke"
}'

上面使用的是 llama 3.2 模型,并要求它生成一个笑话。请注意,每个响应都包含一个标记,即所谓的流输出。在模型的上下文中,流输出允许模型一个接一个地递增地生成响应,而不是等待一次生成整个响应。这种方法可以帮助减少延迟并提供更快的反馈,特别是对于需要实时交互的应用程序。在处理大输出或优化低延迟应用程序时,它特别有用。

2. 禁用流式输出

虽然流式输出对于实时交互非常有用,但是在有些场景中,我们可能希望一次获得整个输出。要实现这一点,可以通过将 stream 参数设置为 false 来禁用流:

go 复制代码
$ curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Tell me a joke", 
  "stream": false  
}'

3.在 Python 中使用 Ollama API

使用 Python 的requests库,可以轻松地发送 HTTP 请求来与 REST API 进行交互。

下面的示例使用 POST 请求 Ollama API 生成一个笑话:

go 复制代码
import requests

url = "http://localhost:11434/api/generate"
model = "llama3.2"  

headers = {
    "Content-Type": "application/json",
}

data = {
    "model": model,
    "prompt": "Tell me a joke",
    "stream": False
}

response = requests.post(url, 
                         json = data,
                         headers = headers
                        )
print(response.json())

我们可以使用 response 从 API 响应中提取所需的实际内容:

go 复制代码
print(response.json()["response"])

4.获取模型列表

如果想得到服务器上安装的型号列表,使用 http://localhost:11434/api/tags 端点:

go 复制代码
import requests

url = "http://localhost:11434/api/tags"

response = requests.get(url)
print(response.json())

下面是结果示例 :

{
'models': [
{
'name': 'llama3.2:latest',
'model': 'llama3.2:latest',
'modified_at': '2025-06-20T09:19:47.514667577+08:00',
'size': 2019393189,
'digest': 'a80c4f17acd55265feec403c7aef86be0c25983ab279d83f3bcd3abbcb5b8b72',
'details': {
'parent_model': '',
'format': 'gguf',
'family': 'llama',
'families': ['llama'],
'parameter_size': '3.2B',
'quantization_level': 'Q4_K_M'
}
}
]
}

5.获取模型的详细信息

如果想要特定模型的详细信息,可以使用 http://localhost:11434/api/show 端点并在请求中指定模型名称。

go 复制代码
import requests

url = "http://localhost:11434/api/show"
headers = {
    "Content-Type": "application/json",
}
data = {
    "model": "llama3.2",
    "stream": False
}

response = requests.post(url, 
                         json = data,
                         headers = headers
                        )
print(response.json())

6.生成嵌入

我们可以使用 http://localhost:11434/api/embed 端点为字符串生成嵌入。

go 复制代码
import requests

url = "http://localhost:11434/api/embed"

headers = {
    "Content-Type": "application/json"   
}

data = {
    "model": "llama3.2",
    "input": "Generate embeddings for this text."
}

response = requests.post(url, json=data, headers=headers)
print(response.json())

要进一步了解什么是向量嵌入,参考《》。这种方法允许模型根据单词的上下文捕捉单词之间的语义关系,使其成为自然语言处理任务 (如相似性检测、聚类等) 中的基础技术。

7.保持加载在内存中的模型

默认情况下,Ollama 在模型最后一次使用后将其保存在内存中 4 分钟。这可以确保对频繁的 LLM 调用有更快的响应时间,同时在模型不再使用时为其他任务释放内存。

但是,如果希望立即从内存中卸载 LLM,可以使用 stop 命令:

go 复制代码
$ ollama stop llama3.2

这样做将从内存中卸载 LLM。但是,如果在此之后向 LLM 发送调用,LLM 将被重新加载到内存中。

如果您希望将 LLM 永远保留在内存中 (不需要卸载) ,请使用 keep _ alive 参数并将其设置为 -1 (或任何负数) :

go 复制代码
$ curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Why is the sky blue?", 
  "keep_alive": -1
}'

该命令确保 LLM 无限期地保留在内存中,使其不需要卸载就可以随时使用。但是你如何证实这一点呢?使用 ollama ps 命令:

go 复制代码
$ ollama ps
NAME               ID              SIZE      PROCESSOR    UNTIL   
llama3.2:latest    a80c4f17acd5    4.0 GB    100% GPU     Forever

上面的输出还表明 llama 3.2 模型已经完全加载到 GPU 中,并且它将永远存储在内存中。

若要在请求之后立即从内存中卸载 LLM,请将 keep _ alive 参数设置为 0。

如果希望在指定的时间内将 LLM 保存在内存中,可以将 keep _ alive 参数设置为一个字符串,比如 "24h"(24 小时) 或 "15m"(15 分钟) :

go 复制代码
$ curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Why is the sky blue?", 
  "keep_alive": "15m"
}'

上面的命令将 llama 3.2 模型保存在内存中 15分钟。

8.更改模型的文件夹

在使用 llm 时,开发人员面临的最常见挑战之一是存储空间。预训练模型往往消耗大量的存储,大小范围从几GB到几TB!

默认情况下,当在 Ollama 下载一个模型时,它存储在~/.ollama文件夹中。此文件夹通常位于计算机的主存储器中,所有下载的型号都集中在这里,以便于访问。但是,由于模型可能非常大,这个默认位置可能会很快占用可用磁盘空间,特别是当使用多个模型或试验不同版本的时候。

计算机制造商加剧了这个问题,他们的存储空间通常在 256GB 到 1TB 之间,经常只留下有限的空间。尤其是苹果设备,这使得开发人员很难管理预训练模型的巨大空间需求。

解决这个难题的最佳方案是将所有模型卸载到外部存储器上,例如 SSD或外挂硬盘。外挂的 ssd 提供了更快的读 / 写速度,这使得它们成为经常加载或微调模型的最佳选择。通过在外部介质来存储模型,您可以释放主驱动器上的宝贵空间,同时确保轻松的可移植性和可访问性。

对于Ollama,存储下载模型的位置是使用OLLAMAMODELS环境变量指定的。以下命令将 OLLAMAMODELS环境变量设置为连接到计算机外部 SSD 驱动器上的路径:

go 复制代码
$ export OLLAMA_MODELS="/Volumes/MySSD/ollama"

一旦这个环境变量确定下来,你需要退出奥拉马,然后通过运行一个模型重新启动它,如下面的示例:

go 复制代码
$ ollama run llama3.2
pulling manifest 
pulling dde5aa3fc5ff... 100% ▕████████████████▏ 2.0 GB                         
pulling 966de95ca8a6... 100% ▕████████████████▏ 1.4 KB                         
pulling fcc5a6bec9da... 100% ▕████████████████▏ 7.7 KB                         
pulling a70ff7e570d9... 100% ▕████████████████▏ 6.0 KB                         
pulling 56bb8bd477a5... 100% ▕████████████████▏   96 B                         
pulling 34bb5ab01051... 100% ▕████████████████▏  561 B                         
verifying sha256 digest 
writing manifest 
success

如果 llama 3.2 模型不在 models 文件夹中,那么它现在将被下载并保存在刚刚指定的新路径中。

请注意,导出环境变量不是永久性的ーー当 Mac 重启时,设置将会丢失。要使其永久化,需要将 export 语句附加到配置文件,如.zshrc 或.bash_profile 。保存后,使用以下命令重新加载配置:

go 复制代码
$ source ~/.zshrc

这样可以确保环境变量在系统重新启动时仍然存在,省去了每次重新export的麻烦。

9.更改端口号

如何更改 Ollama REST API 使用的端口号 (默认为 11434)?像配置模型目录一样,这是通过OLLAMA_HOST环境变量管理的。

go 复制代码
$ export OLLAMA_HOST=127.0.0.1:8081

上面的命令将端口号设置为 8081。一旦你在 Terminal 中设置了上面的选项,重启 Ollama,然后使用:

go 复制代码
$ ollama serve

若要使此更改永久化,请将 export 语句附加到 shell 配置文件中,并重新加载它。这允许您自定义 API 端口以适应您的环境或避免与其他应用程序冲突。

10. 在Ollama中使用MCP

在设置MCP服务时,JSON文件相当于记录各服务联系方式的地址簿。配置时需要注意的是,在保存文件时确认编码格式为UTF-8,避免出现乱码。下面是一个JSON配置文件的示例。

go 复制代码
{
"globalShortcut": "Ctrl+Space",
"mcpServers": {
"sqlite": {
"command": "C:\\Users\\datas\\anaconda3\\Scripts\\uvx.exe",
"args": ["mcp-server-sqlite", "--db-path", "C:\\Users\\datas\\AI_Docs.db"]
},
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"C:\\Users\\datas\\OneDrive\\Desktop\\ollama-mcp"
]
}
}
}

在安装好制定的MCP server后,可以使用以下命令启动。需要提供上面创建的 local.json 文件的路径(以windows系统为例)。

go 复制代码
mcphost -m ollama:qwen2.5 --config "C:\Users\datas\OneDrive\Desktop\local.json"

现在就可以将Ollama作为主机/客户端来使用MCP服务了。

小结

本文介绍了如何配置 Ollama 中的模型目录,以便将下载的模型存储在外部存储器上。此外,还探索了如何使用 curl 和 Python 与 REST API进行交互,以及如何调整模型留在内存中的持续时间和如何更改 Ollama REST API 侦听的端口号。最后,介绍了如何通过Ollama使用MCP服务。

【关联阅读】

PS, 码农工匠的作译者互助群作品推荐------

相关推荐
deephub9 小时前
Agent Lightning:微软开源的框架无关 Agent 训练方案,LangChain/AutoGen 都能用
人工智能·microsoft·langchain·大语言模型·agent·强化学习
Python大数据分析@12 小时前
tkinter可以做出多复杂的界面?
python·microsoft
范纹杉想快点毕业14 小时前
C语言课后大作业项目实战,微型数据库,文件操作详解从基础到实战
服务器·数据库·microsoft
为自己_带盐20 小时前
从零开始玩转 Microsoft Agent Framework:我的 MAF 实践之旅第三篇—工作流
数据库·mysql·microsoft
花间相见21 小时前
【AI开发】—— Spring AI 入门指南:核心特性与基础用法实战
人工智能·spring·microsoft
kyh10033811201 天前
微信小游戏《找茬找汉字闯关王》开发实战:送全部源码
microsoft·微信·微信小程序·小程序·微信小游戏·汉字找茬找梗
山岚的运维笔记1 天前
SQL Server笔记 -- 第42章:逻辑函数
java·服务器·笔记·sql·microsoft·sqlserver
种时光的人2 天前
探秘 CANN 的 hixl 库:让跨语言高性能交互如丝般顺滑
microsoft·交互·cann
皮卡丘不断更2 天前
AI 模块架构演进与意图识别方案深度讨论记录
人工智能·microsoft·架构·ai编程
烁烁闪闪烁烁2 天前
Claude Code 快速上手实战教程
数据库·人工智能·microsoft·chatgpt·ai编程·claude