当前位置: 首页 > news >正文

Ollama(3)模型迁移和API使用

目录

1. Ollama模型迁移

1.1 ollama模型文件models目录

1.2 blobs 文件夹

1.3 manifests 文件夹

1.4 迁移步骤

 2. Ollama服务REST API

2.1 /api/generate 接口

2.1.1 请求参数

 2.1.2 response 参数


1. Ollama模型迁移


上一章节我们详细介绍了ollama中模型环境变量,其中涉及到模型位置存储的配置。

Ollama(2)安装配置GPU运行-CSDN博客文章浏览阅读398次,点赞7次,收藏8次。Ollama是在Github上的一个开源项目,其项目定位是:一个本地运行大模型的集成框架,目前主要针对主流的LLaMA架构的开源大模型设计,通过将模型权重、配置文件和必要数据封装进由Modelfile定义的包中,从而实现大模型的下载、启动和本地运行的自动化部署及推理流程。此外,Ollama内置了一系列针对大模型运行和推理的优化策略,目前作为一个非常热门的大模型托管平台,基本主流的大模型应用开发框架如LangChain、AutoGen、Microsoft GraphRAG及热门项目AnythingLLM、Op https://blog.csdn.net/yilvqingtai/article/details/149564191

那么如何把原来Ollama下载的模型迁移到新的位置

1.1 ollama模型文件models目录

Ollama的blobsmanifests文件夹是模型存储的核心组件,分别用于存放二进制文件和模型元数据。

(base) root@xxx:/home/ollama# tree
.
└── models├── blobs│   ├── sha256-31df23ea7daa448f9ccdbbcecce6c14689c8552222b80defd3830707c0139d4f│   ├── sha256-369ca498f347f710d068cbb38bf0b8692dd3fa30f30ca2ff755e211c94768150│   ├── sha256-4cd576d9aa16961244012223abf01445567b061f1814b57dfef699e4cf8df339│   ├── sha256-5e9a45d7d8b98eb61a65815d36008bfef6fd6ebad6f0be432fb61d83b70550f8│   ├── sha256-6e4c38e1172f42fdbff13edf9a7a017679fb82b0fde415a3e8b3c31c6ed4a4e4│   ├── sha256-970aa74c0a90ef7482477cf803618e776e173c007bf957f635f1015bfcfef0e6│   ├── sha256-a85fe2a2e58e2426116d3686dfdc1a6ea58640c1e684069976aa730be6c1fa01│   ├── sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc│   ├── sha256-c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4│   ├── sha256-ce4a164fc04605703b485251fe9f1a181688ba0eb6badb80cc6335c0de17ca0d│   └── sha256-f4d24e9138dd4603380add165d2b0d970bef471fac194b436ebd50e6147c6588└── manifests└── registry.ollama.ai└── library├── deepseek-r1│   ├── 1.5b│   └── 70b└── nomic-embed-text└── latest8 directories, 14 files

1.2 blobs 文件夹

存放模型的二进制文件(如.bin.data等格式),每个文件对应模型库中特定模型的标识(如sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc)。标识可通过访问官网模型页复制获取,用于匹配本地文件。

1.3 manifests 文件夹

包含模型的元数据(如manifest.json),记录文件列表、哈希值等关键信息。迁移时需完整复制对应模型的manifests目录结构,确保元数据与blobs中的文件对应。

1.4 迁移步骤

  1. 联网下载模型‌:使用ollama pull命令获取模型,或从官网手动下载blobsmanifests文件夹。 ‌
  2. 离线传输‌:将blobs和对应模型的manifests文件夹复制到目标设备(如另一台电脑或服务器)。 
  3. 验证模型‌:在目标设备运行ollama list,若显示模型名称则迁移成功。 ‌

 2. Ollama服务REST API

Ollama 服务启动后会提供一系列原生  REST API 端点。通过这些Endpoints可以在代码环境下与ollama启动的大模型进行交互、管理模型和获取相关信息。其中两个endpoint 是最重要的,分别是:

  • POST /api/generate
  • POST /api/chat
  • POST /api/create
  • POST /api/tags
  • POST /api/show
  • POST /api/copy
  • DELETE /api/delete
  • POST /api/pull
  • POST /api/push
  • POST /api/embed
  • GET /api/ps

2.1 /api/generate 接口

  该接口使用提供的模型为给定提示生成响应。这是一个流式端点,因此会有一系列响应。最终响应对象将包括统计信息和请求中的其他数据。其中比较重要的参数我做了标红处理,大家重点理解。

2.1.1 请求参数

常规参数

参数名类型描述
model(必需)模型名称,必须遵循 model:tag 格式,如果不提供,则将默认为 latest
prompt(必需)用于生成响应的提示。
suffix(可选)模型响应后的文本。
images(可选)base64 编码图像的列表(适用于多模态模型,如 llava)。

高级参数 (可选)

参数名类型描述
format(可选)返回响应的格式。格式可以是 json 或 JSON 模式。最主要的问题是避免产生大量空格
options(可选)文档中列出的其他模型参数,例如 temperature
system(可选)系统消息,用于覆盖 Modelfile 中定义的内容。
template(可选)要使用的提示模板,覆盖 Modelfile 中定义的内容。
stream(可选)如果为 false,响应将作为单个响应对象返回,而不是对象流。
raw(可选)如果为 true,则不会对提示应用格式。
keep_alive(可选)控制模型在请求后保持加载的时间(默认:5分钟)。
context(可选)(已弃用) 从先前请求返回的上下文参数,用于保持简短的对话记忆。

其中,Options参数详细解释如下,同样我对重点参数做了标红处理,大家重点理解。

参数名描述值类型示例用法
mirostat启用 Mirostat 采样以控制困惑度。(默认:0,0 = 禁用,1 = Mirostat,2 = Mirostat 2.0)intmirostat 0
mirostat_eta影响算法对生成文本反馈的响应速度。较低的学习率会导致调整较慢,而较高的学习率会使算法更具响应性。(默认:0.1)floatmirostat_eta 0.1
mirostat_tau控制输出的连贯性和多样性之间的平衡。较低的值会导致更集中和连贯的文本。(默认:5.0)floatmirostat_tau 5.0
num_ctx设置用于生成下一个标记的上下文窗口大小。(默认:2048), 影响的是模型可以一次记住的最大 token 数量。intnum_ctx 4096
repeat_last_n设置模型回溯的范围以防止重复。(默认:64,0 = 禁用,-1 = num_ctx)intrepeat_last_n 64
repeat_penalty设置惩罚重复的强度。较高的值(例如 1.5)会更强烈地惩罚重复,而较低的值(例如 0.9)会更宽松。(默认:1.1)floatrepeat_penalty 1.1
temperature模型的温度。增加温度会使模型的回答更具创造性。(默认:0.8)floattemperature 0.7
seed设置用于生成的随机数种子。将其设置为特定数字将使模型对相同提示生成相同的文本。(默认:0)intseed 42
stop设置使用的停止序列。当遇到此模式时,LLM 将停止生成文本并返回。可以通过在 modelfile 中指定多个单独的停止参数来设置多个停止模式。stringstop "AI assistant:"
num_predict生成文本时要预测的最大标记数。(默认:-1,无限生成),影响模型最大可以生成的 token 数量。intnum_predict 42
top_k降低生成无意义文本的概率。较高的值(例如 100)会给出更多样化的答案,而较低的值(例如 10)会更保守。(默认:40)inttop_k 40
top_p与 top-k 一起工作。较高的值(例如 0.95)会导致更具多样性的文本,而较低的值(例如 0.5)会生成更集中和保守的文本。(默认:0.9)floattop_p 0.9
min_ptop_p 的替代方案,旨在确保质量和多样性之间的平衡。参数 p 表示考虑标记的最小概率,相对于最可能标记的概率。例如,p=0.05 时,最可能的标记概率为 0.9,值小于 0.045 的 logits 会被过滤掉。(默认:0.0)

num_ctx / num_predict详细解释说明

num_ctx 和 num_predict参数都是需要放置在 options 参数中的,其中:

  • num_ctx该参数指的是大模型在一次对话中能够"看到"和"记住"的最大上下文长度,默认配置 2048,相当于一次只能向模型输入 2k token,超过 2k 模型就无法记住。当 prompt 特别长时往往会出现问题。并且现在开源模型往往支持长上下文,默认配置会严重限制本地模型能力。

  • num_predict 参数指的是模型响应返回的最大 token 数据量。

import requests # type: ignore
import json# 设置 API 端点
generate_url = "http://192.168.11.103:11434/api/generate"    # 这里需要根据实际情况进行修改# 示例数据
generate_payload = {"model": "deepseek-r1:32b",   # 这里需要根据实际情况进行修改"prompt": "请生成一个关于人工智能的简短介绍。",  # 这里需要根据实际情况进行修改"stream": False,       # 默认使用的是True,如果设置为False,则返回的是一个完整的响应,而不是一个流式响应"options": {# "num_ctx": 7,  慎用,可能会导致Ollama服务不稳定,建议选择 1024 及以上"num_predict": 10}
}# 调用生成接口
response_generate = requests.post(generate_url, json=generate_payload)
if response_generate.status_code == 200:generate_response = response_generate.json()print("生成响应:", json.dumps(generate_response, ensure_ascii=False, indent=2))
else:print("生成请求失败:", response_generate.status_code, response_generate.text)

 2.1.2 response 参数

响应参数

参数名描述
total_duration单次响应花费的总时间
load_duration加载模型花费的时间
prompt_eval_count提示中的token数
prompt_eval_duration评估提示所花费的时间(以纳秒为单位)
eval_count响应中的token数
eval_duration生成响应的时间(以纳秒为单位)
context在此响应中使用的对话的编码,可以在下一个请求中发送以保持对话记忆
response空响应是流的,如果未流式传输,则将包含完整的响应
generate_response["response"]# 提取 <think> 标签中的内容
think_start = generate_response["response"].find("<think>")
think_end = generate_response["response"].find("</think>")if think_start != -1 and think_end != -1:think_content = generate_response["response"][think_start + len("<think>"):think_end].strip()
else:think_content = "No think content found."# 提取正常的文本内容
normal_content = generate_response["response"][think_end + len("</think>"):].strip()# 打印结果
print("思考内容:\n", think_content)
print("\n正常内容:\n", normal_content)# 打印每个参数的值
print("Model:", generate_response["model"])
print("Created At:", generate_response["created_at"])
print("Response:", generate_response["response"])
print("Done:", generate_response["done"])
print("Done Reason:", generate_response["done_reason"])
print("Context:", generate_response["context"])
print("Total Duration:", generate_response["total_duration"])
print("Load Duration:", generate_response["load_duration"])
print("Prompt Eval Count:", generate_response["prompt_eval_count"])
print("Prompt Eval Duration:", generate_response["prompt_eval_duration"])
print("Eval Count:", generate_response["eval_count"])
print("Eval Duration:", generate_response["eval_duration"])

2.2 /api/chat 接口

该接口使用提供的模型在聊天中生成下一条消息。与 /api/generate 的参数基本一致,但是在请求的参数上会根据聊天场景进行调整。主要调整的是:

  • 不再使用 prompt 参数,而是使用 messages 参数。
  • 新增了 tools 参数,用于支持工具调用。

2.2.1 请求参数

常规参数

参数名类型描述
model(必需)模型名称。
messages(必需)聊天的消息,用于保持聊天记忆。
tools(可选)JSON 中的工具列表,供模型使用(如果支持)。

消息对象字段

字段名描述
role消息的角色,可以是 systemuserassistant 或 tool
content消息的内容。
images(可选) 要在消息中包含的图像列表(适用于多模态模型,如 llava)。
tool_calls(可选) 模型希望使用的 JSON 中的工具列表。

高级参数 (可选)

参数名描述
format返回响应的格式。格式可以是 json 或 JSON 模式。
options文档中列出的其他模型参数,例如 temperature
stream如果为 false,响应将作为单个响应对象返回,而不是对象流。
keep_alive控制模型在请求后保持加载的时间(默认:5分钟)。

其中,Options参数说明:

参数名描述值类型示例用法
mirostat启用 Mirostat 采样以控制困惑度。(默认:0,0 = 禁用,1 = Mirostat,2 = Mirostat 2.0)intmirostat 0
mirostat_eta影响算法对生成文本反馈的响应速度。较低的学习率会导致调整较慢,而较高的学习率会使算法更具响应性。(默认:0.1)floatmirostat_eta 0.1
mirostat_tau控制输出的连贯性和多样性之间的平衡。较低的值会导致更集中和连贯的文本。(默认:5.0)floatmirostat_tau 5.0
num_ctx设置用于生成下一个标记的上下文窗口大小。(默认:2048), 影响的是模型可以一次记住的最大 token 数量。intnum_ctx 4096
repeat_last_n设置模型回溯的范围以防止重复。(默认:64,0 = 禁用,-1 = num_ctx)intrepeat_last_n 64
repeat_penalty设置惩罚重复的强度。较高的值(例如 1.5)会更强烈地惩罚重复,而较低的值(例如 0.9)会更宽松。(默认:1.1)floatrepeat_penalty 1.1
temperature模型的温度。增加温度会使模型的回答更具创造性。(默认:0.8)floattemperature 0.7
seed设置用于生成的随机数种子。将其设置为特定数字将使模型对相同提示生成相同的文本。(默认:0)intseed 42
stop设置使用的停止序列。当遇到此模式时,LLM 将停止生成文本并返回。可以通过在 modelfile 中指定多个单独的停止参数来设置多个停止模式。stringstop "AI assistant:"
num_predict生成文本时要预测的最大标记数。(默认:-1,无限生成),影响模型最大可以生成的 token 数量。intnum_predict 42
top_k降低生成无意义文本的概率。较高的值(例如 100)会给出更多样化的答案,而较低的值(例如 10)会更保守。(默认:40)inttop_k 40
top_p与 top-k 一起工作。较高的值(例如 0.95)会导致更具多样性的文本,而较低的值(例如 0.5)会生成更集中和保守的文本。(默认:0.9)floattop_p 0.9
min_ptop_p 的替代方案,旨在确保质量和多样性之间的平衡。参数 p 表示考虑标记的最小概率,相对于最可能标记的概率。例如,p=0.05 时,最可能的标记概率为 0.9,值小于 0.045 的 logits 会被过滤掉。(默认:0.0)floatmin_p 0.05

2.2.2 响应参数

参数名描述
total_duration单次响应花费的总时间
load_duration加载模型花费的时间
prompt_eval_count提示中的token数
prompt_eval_duration评估提示所花费的时间(以纳秒为单位)
eval_count响应中的token数
eval_duration生成响应的时间(以纳秒为单位)
context在此响应中使用的对话的编码,可以在下一个请求中发送以保持对话记忆
response

空响应是流的,如果未流式传输,则将包含完整的响应

 

  • message
  在 /chat 接口中,返回的模型响应结果存放在 message 中, 同样对于 DeepSeek-R1 模型,response 字段中包含 标签和正常文本, 标签用于表示模型的思考过程或内部推理,而正常的文本则是模型生成的实际输出内容。注意:非推理类模型的返回结果中没有标识。

http://www.dtcms.com/a/294973.html

相关文章:

  • Modbus协议详解与c#应用
  • 重写 与 重载
  • pig cloud框架中引入websocket
  • nginx websocket 代理 断网后 再联网 不能连接
  • Windows下编译UTF8-CPP
  • 前端学习 5:DFT
  • 云效CI/CD教程(PHP项目)
  • 如何提升连带消费?从新零售“人-货-场”模型拆解
  • 220V降5V,输出100MA,为家电电器消费类产品提供电源WD5202L
  • OpenCV+Python
  • WebGIS 常用坐标系
  • 真的假的?CISP认证考试将全面推行线下机考?
  • 我考PostgreSQL中级专家证书二三事
  • ubuntu24.04 nvidia driver无效///重装驱动
  • MYOJ_8513:CSP初赛题单6:竞赛要求相关
  • Java基础夯实——泛型全解析
  • Excel导入SQLServer报错
  • 炬森精密:缓冲滑轨的创新力量,重塑家居静音与安全新体验
  • SSM框架中关于Spring MVC的技术问题
  • 智能迎宾的认知革命:Deepoc具身智能如何让机器人读懂人类微语言
  • 论文略读: Howto Merge Your Multimodal Models Over Time?
  • IGM弧焊机器人气体节约
  • SwiftUI 实战:构建一个复杂的图书首页长页面
  • 本地部署 Stable Diffusion:零基础搭建 AI文生图模型
  • Linux中scp命令传输文件到服务器报错
  • 直播软件搭建与原生直播系统开发全解析
  • 【2025目标检测】最新论文
  • VulhubDVWA靶场环境搭建及使用
  • 【Mysql】 Mysql zip解压版 Win11 安装备忘
  • Neo4j 框架 初步简单使用(基础增删改查)