Ollama API 应用指南

news2025/4/24 12:53:26

在这里插入图片描述

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 的核心功能,适用于开发聊天机器人、自动化脚本、语义分析等多种场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2341488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PNG透明免抠设计素材大全26000+

在当今的数字设计领域,寻找高质量且易于使用的素材是每个设计师的日常需求。今天,我们将为大家介绍一个超全面的PNG透明免抠设计素材大全,涵盖多种风格、主题和应用场景,无论是平面设计、网页设计还是多媒体制作,都能轻…

4.多表查询

SQL 多表查询:数据整合与分析的强大工具 文章目录 SQL 多表查询:数据整合与分析的强大工具一、 多表查询概述1.1 为什么需要多表查询1.2 多表查询的基本原理 二、 多表查询关系2.1 一对一关系(One-to-One)示例: 2.2 一…

美团2024年春招第一场笔试 C++

目录 1&#xff0c;小美的平衡矩阵 2&#xff0c;小美的数组询问 3&#xff0c;小美的MT 4&#xff0c;小美的朋友关系 1&#xff0c;小美的平衡矩阵 【题目描述】 给定一个n*n的矩阵&#xff0c;该矩阵只包含数字0和1。对于 每个i(1<i<n)&#xff0c;求在该矩阵中&am…

XHTMLConverter把docx转换html报java.lang.NullPointerException异常

一.报错 1.报错信息 org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerExceptionat org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:77)at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.doConve…

OpenCV 图形API(52)颜色空间转换-----将 NV12 格式的图像数据转换为 RGB 格式的图像

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从 NV12 (YUV420p) 色彩空间转换为 RGB。该函数将输入图像从 NV12 色彩空间转换到 RGB。Y、U 和 V 通道值的常规范围是 0 到 255。 输出图…

COdeTop-206-反转链表

题目 206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 …

线段树讲解(小进阶)

目录 前言 一、线段树知识回顾 线段树区间加减 区间修改维护&#xff1a; 区间修改的操作&#xff1a; 区间修改update&#xff1a; 线段树的区间查询 区间查询&#xff1a; 区间查询的操作&#xff1a; 递归查询过程&#xff1a; 区间查询query&#xff1a; 代码&…

openharmony5.0.0中C++公共基础类测试-线程相关(一)

C公共基础类测试及源码剖析 延续传统&#xff0c;show me the code&#xff0c;除了给出应用示例还重点分析了下openharmony中的实现。 简介 openharmony中提供了C公共基础类库&#xff0c;为标准系统提供了一些常用的C开发工具类&#xff0c;本文分析其实现&#xff0c;并给…

TDengine 数据订阅设计

简介 数据订阅作为 TDengine 的一个核心功能&#xff0c;为用户提供了灵活获取所需数据的能力。通过深入了解其内部原理&#xff0c;用户可以更加有效地利用这一功能&#xff0c;满足各种实时数据处理和监控需求。 基本概念 主题 与 Kafka 一样&#xff0c;使用 TDengine 数…

URP-UGUI交互功能实现

一、非代码层面实现交互&#xff08;SetActive&#xff09; Button &#xff1a;在OnClick&#xff08;&#xff09;中添加SetActive方法&#xff08;但是此时只首次有效&#xff09; Toggle &#xff1a;在OnClick&#xff08;&#xff09;中添加动态的SetActive方法 &#…

UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025

UniGoal的提出了一个通用的零样本目标导航框架&#xff0c;能够统一处理多种类型的导航任务 &#xff08;如对象类别导航、实例图像目标导航和文本目标导航&#xff09;&#xff0c;而无需针对特定任务进行训练或微调。 它的特点是 图匹配与多阶段探索策略&#xff01;&#x…

通过Quartus II实现Nios II编程

目录 一、认识Nios II二、使用Quartus II 18.0Lite搭建Nios II硬件部分三、软件部分四、运行项目 一、认识Nios II Nios II软核处理器简介 Nios II是Altera公司推出的一款32位RISC嵌入式处理器&#xff0c;专门设计用于在FPGA上运行。作为软核处理器&#xff0c;Nios II可以通…

Linux/AndroidOS中进程间的通信线程间的同步 - IPC方式简介

前言 从来没有总结过Linux/Android系统中进程间的通信方式和线程间的同步方式&#xff0c;这个专栏就系统总结讨论一下。首先从标题可知&#xff0c;讨论问题的主体是进程和线程、通信和同步&#xff1b;在这里默认你理解进程和线程的区别。通信和同步有什么概念上的区别&…

Windows:注册表配置应用

0、简介 本篇博客记录一下&#xff0c;日常的系统注册表配置选项&#xff0c;以防再次遇到问题不知如何解决。 1、开机启动配置 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run :: 此位置存储了所有用户登录时需要启动的程序。 在该项下新建字符串值&#…

WebXR教学 05 项目3 太空飞船小游戏

准备工作 自动创建 package.json 文件 npm init -y 安装Three.js 3D 图形库&#xff0c;安装现代前端构建工具Vite&#xff08;用于开发/打包&#xff09; npm install three vite 启动 Vite 开发服务器&#xff08;推荐&#xff09;&#xff08;正式项目开发&#xff09; …

达梦统计信息收集情况检查

查询达梦某个对象上是否有统计信息 select id,T_TOTAL,N_SMAPLE,N_DISTINCT,N_NULL,BLEVEL,N_LEAF_PAGES,N_LEAF_USED_PAGES,LAST_GATHERED from sysstats where id IN (select id from sysobjects where upper(name)upper(&objname));可能有系统对象&#xff0c;可以增加…

【matlab】气泡图的应用

【matlab】气泡图的应用 .rtcContent { padding: 30px; } .lineNode {font-size: 12pt; font-family: "Times New Roman", Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; } clear load zb_equi.mat load …

飞帆控件:在编辑模式下额外加载的库

飞帆是一个自由的控件设计平台。在飞帆中&#xff0c;我们可以很方便地创建基于 Vue 2 组件的控件&#xff0c;并使用控件来搭建网页。 他山之石&#xff0c;可以攻玉。在创建控件中&#xff0c;使用 js 、css 依赖库能让我们的控件更强大。 有些时候&#xff0c;在编辑模式下…

Super-Vlan和MUX-Vlan的原理、配置、区别

Super-Vlan 原理 Super-Vlan也叫Aggregate-Vlan。 一般的三层交换机中&#xff0c;通常是采用一个VLAN对应一个vlanif接口的方式实现广播域之间的互通&#xff0c;这在某些情况下导致了IP地址的浪费。因为一个VLAN对应的子网中&#xff0c;子网号、子网定向广播地址、子网缺…

el-table怎么显示 特殊单元格的值

1. 在 el-table-column 上绑定了 formatter 方法 formatEntityName &#xff0c;它会对每一行该列的数据&#xff08; cellValue &#xff09;进行处理。 2. 在 formatEntityName 方法中&#xff0c;尝试对传入的 cellValue 进行 JSON.parse 操作&#xff0c;并根…