Ollama API 应用指南

在这里插入图片描述

1. 基础信息
  • 默认地址: http://localhost:11434/api
  • 数据格式: application/json
  • 支持方法: POST(主要)、GET(部分接口)

2. 模型管理 API

(1) 列出本地模型
  • 端点: GET /api/tags
  • 功能: 获取已下载的模型列表。
  • 示例:
    curl http://localhost:11434/api/tags
    
    import requests
    response = requests.get("http://localhost:11434/api/tags")
    print(response.json()["models"])
    
(2) 拉取模型
  • 端点: POST /api/pull
  • 参数:
    • name: 模型名称(必需,如 llama3:8b
    • stream: 是否流式显示进度(默认 true
    • insecure: 是否跳过 TLS 验证(默认 false
  • 示例:
    curl http://localhost:11434/api/pull -d '{"name": "mistral"}'
    
    response = requests.post(
        "http://localhost:11434/api/pull",
        json={"name": "mistral", "stream": False}
    )
    
(3) 删除模型
  • 端点: DELETE /api/delete
  • 参数: name(模型名称)
  • 示例:
    curl -X DELETE http://localhost:11434/api/delete -d '{"name": "llama2"}'
    
    response = requests.delete(
        "http://localhost:11434/api/delete",
        json={"name": "llama2"}
    )
    
(4) 创建自定义模型
  • 端点: POST /api/create
  • 参数: name(模型名)、modelfile(模型配置内容)
  • 示例:
    curl http://localhost:11434/api/create -d '{
      "name": "my-llama",
      "modelfile": "FROM llama3\nSYSTEM 你是一个法律助手"
    }'
    

3. 文本生成与交互

(1) 生成文本 (/api/generate)
  • 参数:
    {
      "model": "模型名",
      "prompt": "输入文本",
      "system": "系统提示(可选)",
      "template": "模板(覆盖默认提示格式)",
      "context": [数组,历史上下文ID],
      "stream": false,
      "options": {
        "temperature": 0.8,
        "top_p": 0.9,
        "max_tokens": 1000,
        "num_ctx": 4096
      }
    }
    
  • 响应:
    {
      "model": "模型名",
      "response": "生成文本",
      "context": [新的上下文ID],
      "done": true
    }
    
  • Python 流式处理:
    response = requests.post(
        "http://localhost:11434/api/generate",
        json={"model": "llama3", "prompt": "写一篇科幻小说开头", "stream": True},
        stream=True
    )
    for line in response.iter_lines():
        if line:
            print(json.loads(line)["response"], end="", flush=True)
    
(2) 多轮对话 (/api/chat)
  • 参数:
    {
      "model": "模型名",
      "messages": [
        {"role": "user", "content": "内容1"},
        {"role": "assistant", "content": "内容2"}
      ],
      "stream": false
    }
    
  • 响应:
    {
      "message": {"role": "assistant", "content": "回复内容"},
      "context": [上下文ID]
    }
    
  • Python 示例:
    messages = [
        {"role": "user", "content": "如何学习Python?"},
        {"role": "assistant", "content": "先掌握基础语法。"},
        {"role": "user", "content": "推荐一本书?"}
    ]
    response = requests.post(
        "http://localhost:11434/api/chat",
        json={"model": "llama3", "messages": messages}
    )
    print(response.json()["message"]["content"])
    

4. 嵌入向量 (/api/embeddings)

  • 参数:
    {
      "model": "模型名",
      "prompt": "输入文本",
      "options": {"temperature": 0.5}  # 可选参数
    }
    
  • 响应:
    {
      "embedding": [0.1, -0.2, ...]  # 浮点数数组
    }
    
  • Python 示例:
    response = requests.post(
        "http://localhost:11434/api/embeddings",
        json={"model": "llama3", "prompt": "自然语言处理"}
    )
    vector = response.json()["embedding"]
    

5. 高级功能与参数

(1) 上下文延续
  • 在生成请求中传递 context 数组以维持对话状态:
    response1 = requests.post("/api/generate", json={"model": "llama3", "prompt": "你好"})
    context = response1.json()["context"]
    
    response2 = requests.post(
        "/api/generate",
        json={"model": "llama3", "prompt": "继续上文", "context": context}
    )
    
(2) 性能调优参数
  • options 字段支持以下关键参数:
    {
      "num_ctx": 4096,      // 上下文窗口大小
      "num_gqa": 8,         // Grouped-Query Attention 组数
      "num_gpu": 1,         // GPU 层数(仅限支持GPU的模型)
      "main_gpu": 0,        // 主 GPU 索引
      "temperature": 0.7,   // 随机性(0-1)
      "repeat_penalty": 1.1 // 抑制重复生成
    }
    

6. 错误处理

  • 常见状态码:
    • 400: 请求参数错误
    • 404: 模型不存在
    • 500: 服务器内部错误
  • 错误响应格式:
    {
      "error": "错误描述"
    }
    

7. 完整 Python 客户端示例

import ollama

# 生成文本
response = ollama.generate(
    model='llama3', 
    prompt='用一句话解释人工智能',
    options={'temperature': 0.5}
)
print(response['response'])

# 流式对话
stream = ollama.chat(
    model='llama3',
    messages=[{'role': 'user', 'content': '写一首五言绝句'}],
    stream=True
)
for chunk in stream:
    print(chunk['message']['content'], end='', flush=True)

# 获取嵌入向量
embedding = ollama.embeddings(model='llama3', prompt='深度学习')
print(embedding['embedding'][:5])  # 打印前5维

8. 注意事项

  1. 模型兼容性

    • 不同模型支持的参数可能不同(如 GPU 加速需模型编译时启用 CUDA)。
  2. 长上下文处理

    • 增大 num_ctx 可能导致内存不足,建议逐步测试。
  3. 流式传输优化

    • 使用 stream=True 时,客户端需逐块处理数据以减少延迟。
  4. 自定义模型集成

    • 通过 Modelfile 创建的模型可直接通过 API 调用(model: 自定义模型名)。

通过此指南,可全面掌握 Ollama API 的核心功能,适用于开发聊天机器人、自动化脚本、语义分析等多种场景。

<think>好的,用户现在想了解如何使用Ollama API,特别是示例教程。首先,我需要回顾之前提供的卸载和加载模型的回答,确保这次回答在引用和结构上保持一致。用户提到的引用有四个,需要结合这些资料来组织内容,但要注意用户之前的问题可能更关注API的具体使用步骤。 首先,用户可能希望得到清晰的步骤,分点说明如何调用API。根据引用[3],Ollama的REST API有生成响应和聊天的端点,所以需要详细说明这两个部分。可能需要包括curl命令和代码示例,比如Python,因为用户之前的问题中有Python的代码示例。 接下来,用户可能需要知道如何管理模型,比如列出模型或删除模型,这部分可以结合引用[3]中的API方法,比如/api/tags来获取模型列表,以及/api/delete来终止会话。但根据之前回答,删除模型可能需要其他方法,比如ollama rm,所以需要确认API是否支持直接模型管理。 还要考虑用户可能遇到的问题,比如如何保持会话、处理流式响应,或者错误处理。引用[4]提到OllamaSharp的配置,可能需要提到如何设置API的基本URL和密钥,但根据引用[3]的示例,本地可能不需要API key,所以需要区分本地和远程API的情况。 用户可能还需要知道如何通过客户端库(如Python的requests库)来调用API,而不仅仅是curl命令。之前的回答中提到了Python客户端,所以需要给出Python的示例代码,并确保语法正确。 另外,用户可能想知道如何启动服务,确保Ollama服务正在运行,因为这是API调用的前提。可能需要简要提到启动服务的命令,比如ollama serve。 需要检查之前的回答中提到的REST API部分,确保没有遗漏重要功能,比如模型列表、生成响应、聊天对话等。同时,注意引用正确的来源,比如引用[3]提供的API示例,以及引用[1]中的教程内容。 最后,生成相关问题时要围绕API的使用,比如如何流式获取响应、处理错误、使用其他编程语言调用等。确保问题有针对性,帮助用户深入理解。</think>以下是根据Ollama官方文档及实践总结的API使用指南,包含5种核心应用场景及示例: ### 一、基础环境配置 1. 启动Ollama服务 ```bash ollama serve # 默认监听11434端口 ``` 2. 验证服务状态 ```bash curl http://localhost:11434 # 返回"Ollama is running"即正常[^3] ``` ### 二、文本生成API(同步) ```python import requests response = requests.post( "http://localhost:11434/api/generate", json={ "model": "llama3", "prompt": "量子计算机与传统计算机的根本区别是什么?", "stream": False, "options": {"temperature": 0.7} } ) print(response.json()["response"]) # 输出生成内容[^3] ``` ### 三、对话式API(支持多轮对话) ```python conversation_history = [] def chat_with_ai(message): global conversation_history conversation_history.append({"role": "user", "content": message}) response = requests.post( "http://localhost:11434/api/chat", json={ "model": "llama3", "messages": conversation_history, "stream": False } ) ai_response = response.json()["message"]["content"] conversation_history.append({"role": "assistant", "content": ai_response}) return ai_response print(chat_with_ai("如何学习深度神经网络?")) # 首次提问 print(chat_with_ai("请用PyTorch写个示例")) # 延续对话[^3] ``` ### 四、流式响应处理 ```python response = requests.post( "http://localhost:11434/api/generate", json={ "model": "llama3", "prompt": "解释Transformer架构", "stream": True }, stream=True ) for line in response.iter_lines(): if line: decoded_line = json.loads(line.decode('utf-8')) print(decoded_line.get("response", ""), end="", flush=True) ``` 流式传输可实时显示生成内容,适用于长文本生成场景[^3] ### 五、高级参数配置 ```python advanced_params = { "model": "llama3:70b", "prompt": "编写Python快速排序算法", "options": { "num_predict": 512, # 最大生成token数 "temperature": 0.8, # 随机性控制(0-1) "top_p": 0.9, # 核心采样概率 "repeat_penalty": 1.2 # 重复惩罚系数 }, "system": "你是一个资深Python工程师", # 系统提示词 "template": "{{ .Prompt }}", # 自定义模板 "context": [...] # 历史上下文数组 } ``` ### 六、模型管理API 1. 查看可用模型 ```bash curl http://localhost:11434/api/tags ``` 2. 删除本地模型 ```python requests.delete("http://localhost:11434/api/delete", json={"name": "llama3"}) ``` 3. 查看模型信息 ```bash curl http://localhost:11434/api/show -d '{"name": "llama3"}' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值