【引】如何在本地调试自己的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, 码农工匠的作译者互助群作品推荐------