删除模型 (DELETE /api/delete)

删除模型接口用于从本地删除不需要的模型,释放磁盘空间。

基本用法

curl -X DELETE http://localhost:11434/api/delete -d '{
  "name": "my-model"
}'

成功时返回 200 状态码,无响应体。

请求参数

参数类型必需说明
namestring要删除的模型名称

代码示例

Python

import requests

def delete_model(model_name):
    response = requests.delete(
        "http://localhost:11434/api/delete",
        json={"name": model_name}
    )
    
    if response.status_code == 200:
        print(f"模型 {model_name} 已删除")
    else:
        error = response.json().get("error", "未知错误")
        print(f"删除失败: {error}")

delete_model("my-model")

删除前确认

def delete_with_confirm(model_name):
    models = requests.get("http://localhost:11434/api/tags").json()["models"]
    
    model_info = None
    for m in models:
        if m["name"] == model_name or m["name"].startswith(model_name + ":"):
            model_info = m
            break
    
    if not model_info:
        print(f"模型 {model_name} 不存在")
        return
    
    size_gb = model_info["size"] / (1024 ** 3)
    print(f"即将删除: {model_info['name']}")
    print(f"大小: {size_gb:.2f} GB")
    
    confirm = input("确认删除?(y/n): ")
    if confirm.lower() == "y":
        delete_model(model_info["name"])

delete_with_confirm("my-model")

JavaScript

async function deleteModel(modelName) {
    const response = await fetch('http://localhost:11434/api/delete', {
        method: 'DELETE',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ name: modelName })
    });
    
    if (response.ok) {
        console.log(`模型 ${modelName} 已删除`);
    } else {
        const error = await response.json();
        console.error(`删除失败:`, error.error);
    }
}

await deleteModel('my-model');

Go

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

type DeleteRequest struct {
    Name string `json:"name"`
}

func deleteModel(modelName string) error {
    req := DeleteRequest{Name: modelName}
    body, _ := json.Marshal(req)
    
    httpReq, _ := http.NewRequest(
        "DELETE",
        "http://localhost:11434/api/delete",
        bytes.NewReader(body),
    )
    httpReq.Header.Set("Content-Type", "application/json")
    
    client := &http.Client{}
    resp, err := client.Do(httpReq)
    if err != nil {
        return err
    }
    defer resp.Body.Close()
    
    if resp.StatusCode == 200 {
        fmt.Printf("模型 %s 已删除\n", modelName)
    }
    
    return nil
}

func main() {
    deleteModel("my-model")
}

实际应用

清理旧版本

def cleanup_old_versions(model_name, keep_latest=True):
    models = requests.get("http://localhost:11434/api/tags").json()["models"]
    
    versions = []
    for m in models:
        name = m["name"]
        if name.startswith(model_name + ":"):
            tag = name.split(":")[1]
            if tag != "latest" or not keep_latest:
                versions.append(name)
    
    for version in versions:
        print(f"删除: {version}")
        delete_model(version)
    
    print(f"已清理 {len(versions)} 个旧版本")

cleanup_old_versions("llama3.2")

清理大模型

def cleanup_large_models(max_size_gb=5):
    models = requests.get("http://localhost:11434/api/tags").json()["models"]
    
    for m in models:
        size_gb = m["size"] / (1024 ** 3)
        if size_gb > max_size_gb:
            print(f"{m['name']}: {size_gb:.2f} GB")
    
    confirm = input("删除以上模型?(y/n): ")
    if confirm.lower() == "y":
        for m in models:
            size_gb = m["size"] / (1024 ** 3)
            if size_gb > max_size_gb:
                delete_model(m["name"])

cleanup_large_models(5)

清理所有模型

def clear_all_models():
    models = requests.get("http://localhost:11434/api/tags").json()["models"]
    
    print(f"共有 {len(models)} 个模型")
    total_size = sum(m["size"] for m in models) / (1024 ** 3)
    print(f"总大小: {total_size:.2f} GB")
    
    confirm = input("确认删除所有模型?(yes/no): ")
    if confirm.lower() == "yes":
        for m in models:
            delete_model(m["name"])
        print("所有模型已删除")

clear_all_models()

注意事项

  1. 删除不可恢复:删除后需要重新下载
  2. 模型不能正在运行:需要先卸载运行中的模型
  3. 释放磁盘空间:删除后立即释放空间
  4. 基础模型保护:其他模型依赖的基础模型可能无法删除