2. Ollama REST API - api/generate 接口详

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

1. /api/generate 接口参数概览

常规参数

参数名

类型

描述

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

(可选)

(已弃用)从先前请求返回的上下文参数,用于保持简短的对话记忆。

对于endpoints来说,如果使用代码调用,常规的调用方式是通requests库进行调用。如下所示:

import requests # type: ignore import json # 设置 API 端点 generate_url = "http://192.168.110.131:11434/api/generate" # 这里需要根据实际情况进行修改 # 示例数据 generate_payload = { "model": "deepseek-r1:7b", # 这里需要根据实际情况进行修改 "prompt": "请生成一个关于人工智能的简短介绍。", # 这里需要根据实际情况进行修改 "stream": False, # 默认使用的是True,如果设置为False,则返回的是一个完整的响应,而不是一个流式响应 } # 调用生成接口 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. response 参数格式化解析

response字段指的是模型生成的实际输出内容。对于DeepSeek-R1模型来说,response字段中包含<think> 标签和正常文本,<think> 标签用于表示模型的思考过程或内部推理,而正常的文本则是模型生成的实际输出内容。注意:非推理类模型的返回结果中没有<think></think>标识。

3.num_ctx / num_predict 输入输出控制

num_ctxnum_predict参数都是需要放置在options参数中的,其中:

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

我们可以这样测试:

import requests # type: ignore import json # 设置 API 端点 generate_url = "http://127.0.0.1:11434/api/generate" # 这里需要根据实际情况进行修改 # 示例数据 generate_payload = { "model": "deepseek-r1:1.5b", # 这里需要根据实际情况进行修改 "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)

测试结果:

生成响应: { "model": "deepseek-r1:1.5b", "created_at": "2026-01-25T13:46:31.2225119Z", "response": "<think>\n嗯,用户让我生成一个关于人工智能", "done": true, "done_reason": "length", "context": [ 151644, 14880, 43959, 46944, 101888, 104455, 9370, 98237, 99534, 100157, 1773, 151645, 151648, 198, 106287, 3837, 20002, 104029, 43959, 46944, 101888, 104455 ], "total_duration": 3521795400, "load_duration": 3112872000, "prompt_eval_count": 13, "prompt_eval_duration": 321000000, "eval_count": 10, "eval_duration": 76000000 }

4. 流式输出功能

接下来看流式输出输出,其参数和如上代码保持一致,只需要在response_generate中添加stream=True,最后再通过流式的方式进行响应结果处理即可。代码如下所示:

import requests # type: ignore import json # 设置 API 端点 generate_url = "http://127.0.0.1:11434/api/generate" # 示例数据 generate_payload = { "model": "deepseek-r1:1.5b", "prompt": "请生成一个关于人工智能的简短介绍。", "options": { "temperature": 0.6, } } # 调用生成接口 response_generate = requests.post(generate_url, json=generate_payload, stream=True) # 在这里添加stream=True if response_generate.status_code == 200: # 处理流式响应 for line in response_generate.iter_lines(): if line: try: # 解码并解析每一行的 JSON response_json = json.loads(line.decode('utf-8')) if 'response' in response_json: print(response_json['response'], end='', flush=True) # 检查 response_json 字典中是否存在键 'done',并且其值是否为 True。如果这个条件成立,表示生成的响应已经完成。 if response_json.get('done', False): print('\n\n完整响应:', json.dumps(response_json, ensure_ascii=False, indent=2)) except json.JSONDecodeError as e: print(f"JSON 解析错误: {e}") else: print("生成请求失败:", response_generate.status_code, response_generate.text)

测试结果

5. Ollama 模型生命周期管理


默认情况下,通过Ollama run启动一个模型后,会将其在VRAM(显存)中保存5分钟。主要作用是为了做性能优化,通过保持模型在显存中,可以避免频繁的加载和卸载操作,从而提高响应速度,特别是在连续请求的情况下。

我们可以通过ollama stop命令立即卸载某个模型。而在生成请求中,一种高效的方式是通过keep_alive参数来控制模型在请求完成后保持加载在内存中的时间。其可传入的参数规则如下:

参数类型

示例

描述

持续时间字符串

"10m" 或 "24h"

表示保持模型在内存中的时间,单位可以是分钟(m)或小时(h)。

以秒为单位的数字

3600

表示保持模型在内存中的时间,单位为秒。

任何负数

-1 或 "-1m"

表示保持模型在内存中,负数值将使模型持续加载。

'0'

0

表示在生成响应后立即卸载模型。

import requests # type: ignore import json # 设置 API 端点 generate_url = "http://127.0.0.1:11434/api/generate" # 示例数据 generate_payload = { "model": "deepseek-r1:1.5b", "prompt": "请生成一个关于人工智能的简短介绍。", "stream": False, "keep_alive": "10m", # 设置模型在请求后保持加载的时间 "options": { "temperature": 0.6, } } # 调用生成接口 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) if generate_response["eval_duration"] != 0: tokens_per_second = generate_response["eval_count"] / generate_response["eval_duration"] * 10**9 print(f"Tokens per second: {tokens_per_second}") else: print("eval_duration is zero, cannot calculate tokens per second.")

此时就可以在服务器控制台查看到:

keep_alive在工程化的项目中,往往需要根据请求的频率来设置,如果请求不频繁,可以使用默认值或较短的时间,以便在不使用时释放内存。而如果应用程序需要频繁调用模型,可以设置较长的keep_alive时间,以减少加载时间。很关键,非常影响服务器的性能和应用程序的用户体验。大家一定要注意。

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

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

相关文章

学霸同款MBA必备AI论文平台TOP8:开题报告写作全测评

学霸同款MBA必备AI论文平台TOP8&#xff1a;开题报告写作全测评 学术AI工具测评&#xff1a;为何需要一份MBA专属榜单 随着人工智能技术的不断进步&#xff0c;AI写作工具在学术研究中的应用日益广泛。对于MBA学生而言&#xff0c;撰写高质量的开题报告不仅是学业要求&#xff…

第三十二周周报

文章目录 摘要Abstract一、论文的基本思想和贡献基本思想主要贡献 二、研究背景三、模型介绍四、Training1.初始化2、数据增强3、平铺策略 总结 摘要 本周阅读了经典图像分割论文 U-Net&#xff0c;重点学习了其网络结构设计与推理策略。论文提出对称的编码器–解码器架构&…

Vibe Coding - 「skills.sh 时代」:Vercel 如何用 Agent Skills 重塑开发者工作流

文章目录概述一、什么是 Agent Skills&#xff1a;给 Agent 装上“专业插件”二、Vercel 的 Agent Skills 生态&#xff1a;三件核心基础设施1. skills CLI&#xff1a;为 Agent 安装“依赖”的命令行工具2. skills.sh&#xff1a;开放的技能目录与排行榜首页3. 开源技能集合&a…

Linux —— 进程概念 - 初识进程

目录 3. 进程 3.1 基本概念和基本操作 3.1.2 描述进程 - PCB 3.1.3 task_struct 3.1.4 查看进程 3.1.5 通过系统调用获取进程的标示符 3.1.6 通过系统调用创建进程-fork初识 3. 进程 3.1 基本概念和基本操作 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执…

Linux —— 进程概念 - 进程运行、阻塞、挂起状态

3.2 进程状态 3.2.1 Linux内核源代码怎么说 为了弄明白正在运行的进程是什么意思&#xff0c;我们需要知道进程的不同状态。一个进程可以有几个状态&#xff08;在Linux内核里&#xff0c;进程有时候也被叫做任务&#xff09; 下面的状态在kernel源代码里定义&#xff1a; /*…

提示工程架构设计:如何平衡性能与准确性?

提示工程架构设计:如何平衡性能与准确性? 元数据框架 标题 提示工程架构设计:性能与准确性的系统平衡方法论 关键词 提示工程;大语言模型(LLM);性能优化;准确性验证;架构设计;Prompt Compression;反馈循环 摘要 提示工程是大语言模型(LLM)应用的“操作系统…

用c语言写一个nes游戏模拟器 - 教程

用c语言写一个nes游戏模拟器 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

人人租苹果17PM监管机回收流程,全国上门回收

相较于普通租赁设备,人人租监管机的核心优势集中在低门槛、高性价比上,精准适配了特定消费群体的需求。首先是审核通过率极高,监管锁的风险兜底作用,让平台对租户的信用要求大幅降低,即使是信用记录空白的白户、信…

基于51单片机的智能停车场车位管理系统 车位引导 实物 DIY

目录 51单片机智能停车场车位管理系统概述核心功能模块硬件搭建要点软件设计关键扩展功能建议注意事项 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 51单片机智能停车场车位管理系统概述 该系统基于51单片机实现车位检测、引导及管…

Arise

Arise​ (/əˈraɪz/) is a verb that primarily describes something coming into being, becoming evident, or moving upward.​ It signifies the emergence or origin of a situation, condition, or opportunit…

揭秘人人租平台苹果17监管机怎么回收变现

在消费升级与循环经济的双重趋势下,设备租赁成为越来越多人的选择,人人租作为国内头部的信用免押租赁平台,推出的监管机租赁服务,凭借低门槛、高性价比的特点,成为数码设备租赁市场的热门选项。监管机本是为企业设…

机器学习30:神经网络压缩(Network Compression)①

摘要 本次学习探讨了神经网络压缩的必要性及其核心技术。针对资源受限环境&#xff08;如移动设备与嵌入式系统&#xff09;下部署大型模型的需求&#xff0c;分析了网络剪枝与知识蒸馏等压缩方法的原理与应用。网络剪枝通过移除冗余参数或神经元实现模型轻量化&#xff0c;而知…

2025年教我学英语 - 出行

2025年教我学英语 - 出行1、出行 - trip [trɪp] 旅行 - journey [ˈdʒɜːni] 旅游 - tour [tʊə(r)] 观光 - sightseeing [ˈsaɪtsiːɪŋ] 游览 - excursion [ɪkˈskɜːʃn]2、游客 - tourist [ˈtʊərɪst] …

人人租苹果手机是不是监管机,哪里可以回收

在消费升级与轻资产理念的双重影响下,手机租赁成为越来越多人的选择,人人租作为国内头部的全品类信用租赁平台,凭借信用免押、机型丰富等优势迅速出圈,监管机更是成为其租赁业务中的主流品类。凭借审核宽松、租金亲…

高三党必看!4款热门学习机,谁能助力冲刺高考?

高三是高考冲刺的关键时期,时间紧、任务重,学习机的核心作用是“精准抓考点、高效补薄弱、冲刺高分”。本次聚焦高三冲刺需求,实测清北道远、学而思T4、科大讯飞T30Pro、作业帮X50四款机型,围绕“高考适配性、冲刺…

中石化加油卡回收全流程实操指南

中石化加油卡作为国内主流油品消费凭证,其回收市场已形成较为规范的运作体系。据2025年12月数据显示,全国年回收量突破8000万张,线上渠道占比高达67%。本文结合权威数据与实操案例,为大家梳理三大主流中石化加油卡…

Springboot3 | JUnit 5 运用详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Canvas 何尝不是亮点呢?(一)

一、Canvas 是什么? Canvas 是高性能渲染引擎。<canvas> 是一个位图渲染容器 所有内容都通过 JS API 绘制 绘制完成后,浏览器只认识「像素」,不再关心你画了什么 canvans 支持绘制的图形,总结起来有四种:直…

洛谷 P1135 奇怪的电梯 题解

题目链接 洛谷 P1135 奇怪的电梯 若 WA 58pts:题目中是从 \(A\) 开始,从 \(B\) 结束,而非从 \(1\) 到 \(n\)。 思路分析 中规中矩广搜题目。注意判断边界。 代码呈现 #include<bits/stdc++.h> using namespac…

大数据领域数据湖的成本控制与优化

大数据领域数据湖的成本控制与优化&#xff1a;策略与实践 关键词&#xff1a;大数据、数据湖、成本控制、优化策略、数据治理、存储优化、计算资源管理 摘要&#xff1a;本文深入探讨大数据领域数据湖中成本控制与优化的关键方面。从数据湖概念的发展背景出发&#xff0c;阐…