codecamp

Ollama API 复制模型

POST /api/copy 把一个模型复制成新名字,等价于 ollama cp。它不复制权重数据——新名字只是指向同一份底层内容,所以几乎不占额外磁盘。

版本基线 v0.40.12,官方 docs.ollama.com/api/copy。

一、调用

curl http://localhost:11434/api/copy -d '{
  "source": "gemma4",
  "destination": "gemma4-backup"
}'

返回:

{ "status": "success" }

二、请求字段

字段 类型 必填 说明
source string 是 原模型名
destination string 是 新模型名

三、最常见的四个用途

1. 兼容写死模型名的客户端

很多工具默认请求 gpt-3.5-turbo、claude-3-5-sonnet 这类名字:

## OpenAI 兼容客户端
ollama cp llama3.2 gpt-3.5-turbo

## Anthropic 兼容客户端
ollama cp qwen3-coder claude-3-5-sonnet

复制后即可直接用:

curl http://localhost:11434/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "gpt-3.5-turbo",
        "messages": [{"role": "user", "content": "Hello!"}]
    }'

这是最实用的一条——避免改客户端源码。

2. 推送前改成 用户名/模型名

ollama push 要求模型名带用户名:

ollama cp mymodel myuser/mymodel
ollama push myuser/mymodel

3. 做修改前的备份

curl http://localhost:11434/api/copy -d '{
  "source": "my-model",
  "destination": "my-model-backup"
}'

之后可以放心 ollama create 覆盖原模型,出问题就复制回来。

4. 一次下载多处命名

同一个大模型需要在不同工具里用不同名字时,复制比重复下载省几十 GB。

四、复制后发生什么

  • 新名字出现在 /api/tags 列表里,各占一条
  • digest 与原模型相同(指向同一份内容)
  • modified_at 是新时间
  • 删除其中一个不影响另一个(底层内容有引用计数)

五、Python 示例

import requests

def copy_model(src, dst):
    r = requests.post("http://localhost:11434/api/copy", json={
        "source": src, "destination": dst,
    })
    r.raise_for_status()
    return r.json()

print(copy_model("gemma4", "gemma4-backup"))

## 确认列表里都有
names = [m["name"] for m in requests.get("http://localhost:11434/api/tags").json()["models"]]
print("gemma4" in names, "gemma4-backup" in names)

常见问题

现象 原因 处理
404 source 不存在 ollama list 核对
400 destination 已存在 先删除或用别的名字
复制后磁盘没变小 本来就共享内容,不占额外空间 正常
push 仍失败 名字没带用户名 复制成 用户名/模型名 格式

动手试

## ① 复制一份
curl -s http://localhost:31434/api/copy -d '{"source":"gemma4","destination":"gemma4-backup"}' 2>/dev/null || \
curl -s http://localhost:11434/api/copy -d '{"source":"gemma4","destination":"gemma4-backup"}'

## ② 确认两个都在,且 digest 相同
curl -s http://localhost:11434/api/tags | python -c "
import sys,json
for m in json.load(sys.stdin)['models']:
    if m['name'].startswith('gemma4'):
        print(m['name'], m['digest'][:12])"

digest 相同 = 共享内容,磁盘占用没翻倍。

Ollama API 创建模型
Ollama API 拉取模型
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Ollama Cloud

Ollama CLI 命令行参考

Ollama Modelfile 参考

Ollama 上下文长度

Ollama 导入自定义模型

Ollama 常见问题

Ollama 硬件支持

Ollama 故障排查

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }