Task03:Ollama API 的使用

Ollama API 使用指南

简介

Ollama 提供了强大的 REST API,使开发者能够方便地与大语言模型进行交互。通过 Ollama API,用户可以发送请求并接收模型生成的响应,应用于自然语言处理、文本生成等任务。本文将详细介绍生成补全、对话生成的基本操作,并对创建模型、复制模型、删除模型等常见操作也进行了说明。

端点

  • 回答补全
  • 对话补全
  • 创建模型
  • 复制模型
  • 删除模型
  • 列出运行模型
  • 列出本地模型
  • 显示模型信息
  • 拉取模型
  • 推送模型
  • 生成嵌入

一、回答补全

POST /api/generate

使用指定的模型生成给定提示的响应。这是一个流式端点,因此会有一系列响应。最终的响应对象将包括来自请求的统计信息和其他数据。

参数

  • model: (必需)模型名称
  • prompt: 要生成响应的提示
  • suffix: 模型响应后的文本
  • images: (可选)一个base64编码的图像列表(用于多模态模型,如 llava

高级参数(可选):

  • format: 返回响应的格式。目前唯一接受的值是 json
  • options: 其他模型参数,如 temperatureseed
  • system: 系统消息
  • template: 要使用的提示模板
  • context: 从先前对 /generate 的请求中返回的上下文参数,可以用于保持简短的对话记忆
  • stream: 如果设置为 false ,响应将作为单个响应对象返回,而不是一系列对象流
  • raw: 如果设置为 true ,将不会对提示进行任何格式化。如果您在请求API时指定了完整的模板提示,可以选择使用 raw 参数
  • keep_alive: 控制模型在请求后保留在内存中的时间(默认:5m

示例请求(流式)

curl http://localhost:11434/api/generate -d '{"model": "llama3.1","prompt": "为什么草是绿的?"
}'

在 Python 中使用 Ollama API

导入Ollama模块

导入模块

使用方法

from ollama import chat
from ollama import ChatResponseresponse: ChatResponse = chat(model='deepseek-r1:14b', messages=[{'role': 'user','content': '为什么天空是蓝色的?',},
])
print(response['message']['content'])
<think>
嗯,为什么天空是蓝色的呢?这个问题听起来好像很简单,但其实要解释清楚可能需要一些思考。首先,我知道阳光看起来是白色的,但它其实包含了各种颜色的光,对吧?就像雨后出现的彩虹一样,白光被分解成了红、橙、黄、绿、蓝、靛、紫这些颜色。那为什么天空会呈现蓝色呢?是不是因为太阳发出的光中有更多的蓝色光线?或者说,空气中的某些成分影响了阳光的颜色?我记得以前学过一个叫“散射”的现象,可能和这个有关。散射是指光线被空气中的分子或颗粒散开的现象,而不同颜色的光在散射时的表现可能不同。根据我模糊的记忆,有一个叫做瑞利散射的理论,可能是解释天空颜色的关键。瑞利散射说的是当光穿过大气层时,较短波长的光更容易被散射。蓝色和紫色的光波长比红色和橙色的要短,所以它们应该更易被散射到各个方向。但是我们看到的天空是蓝色而不是紫色,这可能是因为人眼对紫色的敏感度较低,或者大气中的某些因素削弱了紫色光的影响。另外,我想到日出和日落时,太阳的位置很低,阳光需要穿过更厚的大气层,这时较长波长的红光更容易穿透,而蓝光大部分被散射掉了,所以天空在日出日落时会变成红色或橙色。这也支持了瑞利散击理论。不过,我还记得有时候天空看起来会有不同的颜色变化,比如在污染较重的时候可能会有灰蒙蒙的颜色,或者在某些天气条件下出现其他色调,这可能是因为大气中的颗粒物或者其他因素影响了光线的散射方式。所以,不仅仅是瑞利散射,还可能有其他因素在起作用。总的来说,天空呈现蓝色主要是因为阳光中的蓝色光被空气分子大量散射到各个方向,而人眼对蓝光更敏感,所以我们看到天空是蓝色的。但在日出和日落时,由于光线经过更厚的大气层,蓝色光大部分被散射掉了,剩下红色的光穿透过来,使天空呈现红色或橙色。当然,这只是我的初步理解,可能还有其他因素需要考虑,比如大气中的气体成分、颗粒物的影响,以及不同波长的光在大气中的传播路径等。为了更准确地回答这个问题,我应该查阅一些相关的物理和光学知识,或者看看权威的科学解释来验证我的想法是否正确。通过这个思考过程,我对为什么天空是蓝色有了一个基本的理解,但为了确保准确性,可能还需要进一步学习相关理论和实验结果。
</think>天空呈现蓝色主要是因为阳光中的蓝色光波在大气中被散射的结果。具体来说,这是由于瑞利散射现象:较短波长的蓝光比红光更容易被大气分子散射到各个方向,导致我们在抬头望向天空时看到的是被散射后的蓝光。

流式响应

可以通过设置 stream=True 启用响应流,使函数调用返回一个 Python 生成器,其中每个部分都是流中的一个对象。

from ollama import chatstream = chat(model='deepseek-r1:8b',messages=[{'role': 'user', 'content': '为什么天空是蓝色的?'}],stream=True,
)for chunk in stream:print(chunk['message']['content'], end='', flush=True)
<think>
嗯,为什么天空是蓝色的呢?这个问题好像从小的我就有了。小时候在院子里玩耍的时候,我总是好奇地看着蓝天白云,觉得它很美,但同时也有点疑惑,既然地球是圆的,阳光照射到这里,为什么不是其他颜色呢?首先,我想可能和地球的大气层有关。地球大气层由不同的气体组成,比如氧气、氮气、水蒸气等。我听说过空气折射,可以让我们看到地平线。但是,这能解释蓝天吗?是不是这些气体在阳光下发生了什么变化?然后,我想到了散射。太阳发出的光有很多颜色,像红橙黄这些颜色被大气层中的某些分子吸收了,而蓝光可能没有被完全吸收,所以我们才会看到蓝天。但是具体是什么样的过程呢?我好像记得听说过“蓝光”的问题,大气层对蓝光特别敏感,导致太阳看起来像一个圆盘,这就是日食现象的原因。再想想,白云是因为大气中悬浮着的小水滴折射和反射阳光,形成不同的颜色。这些小水滴可能在不同高度有不同的温度,所以云彩呈现出各种颜色,比如红、黄、紫等,这就是彩云的原因。但蓝天到底是怎么回事呢?我还记得有人说过,地球大气层中的分子对光的吸收和散射有一定的规律,不同波长的光线被处理 differently。比如,太阳辐射主要包含可见光和一些无可见光,比如紫外线和红外线。蓝色的大多数光在大气层中被散射了,所以我们才能看到天空的颜色。不过,我不太确定这些解释是否完全正确。我是不是漏掉了什么?比如,是否还有其他因素影响天空的颜色,比如污染或者海市蜃楼等现象?也许我应该查阅一下相关资料,看看科学家是怎么解释这个问题的。通过了解光线在大气中的传播和吸收过程,或许能更清楚地理解为什么天空是蓝色的。总之,我的初步结论是:天空呈现蓝色主要是因为大气层对不同颜色的光线散射处理的结果,尤其是蓝光被大量散射,所以我们才会看到蓝天。不过,我还需要进一步确认这些细节,以确保理解的正确性。
</think>天空呈现蓝色主要由于地球的大气层对光的折射和散射作用,特别是对蓝色光线的高效散射。具体来说:1. **光的传播与大气层**:太阳发出的光包括多种颜色,但大气中的分子(如氧气、氮气等)会对这些光线进行折射和吸收。2. **蓝光的散射**:蓝色光波长较短,大气层中的小颗粒物特别敏感,导致大量蓝光被散射出去,使得我们看到的天空呈现蓝色。这也解释了为什么太阳看起来是一个圆盘,而不是真正的球体,这就是日食现象。3. **其他颜色的吸收**:红橙黄等颜色的光线在大气中被更多地吸收,因此它们无法到达我们的眼睛,导致我们看到的天空相对而言较为明亮。4. **云彩的形成**:白云是由于大气中的水蒸气凝结成小水滴,并因折射和反射阳光而呈现出各种颜色,如红、黄、紫等。不同高度的温度差异也导致云彩呈现不同的颜色。综上所述,天空呈蓝色是由于大气层对光线进行了特定的散射作用,尤其是对蓝光的高效处理,使得我们能够看到明亮而美丽的天空。

结构化输出

from pydantic import BaseModel, Field
from ollama import chat
import jsonclass CountryInfo(BaseModel):capital: str = Field(..., alias="首都")population: str = Field(..., alias="人口")  # 修正字段名从number到populationarea: str = Field(..., alias="占地面积")  response = chat(model='deepseek-r1:1.5b',messages=[{'role': 'user','content': "请介绍美国的首都、人口、占地面积信息,并以 JSON 格式返回。要求JSON的键必须使用中文名称:'首都'、'人口'、'占地面积'。"}],format="json",  options={'temperature': 0}, 
)response_content = response["message"]["content"]if not response_content:raise ValueError("Ollama 返回的 JSON 为空")json_response = json.loads(response_content)  
print("原始JSON响应:", json_response)# 验证数据是否符合CountryInfo模型
try:country_info = CountryInfo.model_validate(json_response)  print("解析后的模型:", country_info)
except Exception as e:print("验证错误:", e)
原始JSON响应: {'首都': '纽约', '人口': '2.4 亿', '占地面积': '109 万平方公里'}
解析后的模型: capital='纽约' population='2.4 亿' area='109 万平方公里'

如何使用Pydantic

from pydantic import BaseModel, Field, field_validator  
from typing import Optionalclass Person(BaseModel):name: strage: int = Field(frozen=True, lt=200)address: Optional[str] = Nonephones: list[str] = Field(default_factory=list)@field_validator("phones")@classmethoddef validate_phones(cls, v:list[str]) -> list[str]:for n in v:if len(n) != 11 or n[0] != '1':raise ValueError("Phone number must be 11 digits")return v
p = Person(name="Alice", age=20,phones=["12345678901"])
p2 = Person(name="Bob", age=25, address="New York")# dict to pydantic
import json
info = {"name": "Petter", "age": 24, "phones": ["13242878818"]}
print(info)info_json = json.dumps(info)
print(info_json)
p = Person(**info)
p2 = Person.model_validate_json(info_json)
print(p)
print(p2)
{'name': 'Petter', 'age': 24, 'phones': ['13242878818']}
{"name": "Petter", "age": 24, "phones": ["13242878818"]}
name='Petter' age=24 address=None phones=['13242878818']
name='Petter' age=24 address=None phones=['13242878818']

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

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

相关文章

我用AI做数据分析之四种堆叠聚合模型的比较

我用AI做数据分析之四种堆叠聚合模型的比较 这里AI数据分析不仅仅是指AI生成代码的能力&#xff0c;我想是测试AI数据分析方面的四个能力&#xff0c;理解人类指令的能力、撰写代码的能力、执行代码的能力和解释结果的能力。如果这四个能力都达到了相当的水准&#xff0c;才可…

DC-6靶机渗透测试全过程

目录 前期准备 一、渗透测试 1.IP地址查询 2.端口信息搜寻 3.网页信息搜集 wappalyzer WPScan 反弹shell graham用户 反弹出jens的shell nmap提权 二、总结 前期准备 攻击机&#xff1a; kali windows11 靶机&#xff1a;DC-6靶机&#xff08;调至NAT模式&#xff0…

[操作系统] 基础IO:系统文件I/O

在 Linux 操作系统中&#xff0c;文件 I/O&#xff08;输入/输出&#xff09;是程序与文件系统交互的基础。理解文件 I/O 的工作原理对于编写高效、可靠的程序至关重要。本文将深入探讨系统文件 I/O 的机制。 一种传递标志位的方法 在 Linux 中&#xff0c;文件的打开操作通常…

3.8 AI驱动的市场调研革命:从数据采集到竞品策略生成的闭环实践指南

AI驱动的市场调研革命:从数据采集到竞品策略生成的闭环实践指南 引言:智能时代的高效市场洞察 Forrester研究显示,使用AI辅助市场调研可使数据采集效率提升8倍,策略生成速度加快4倍。本文以GitHub Sentinel、LanguageMentor为案例,揭示如何构建AI增强型市场分析体系,实现…

AF3 MmcifObject类解读

AlphaFold3 中 MmcifObject类 是 解析 mmCIF 文件的核心数据结构,用于存储解析后的蛋白质结构信息,包含PDB 头部信息、Biopython 解析的结构、链序列信息等。 下面代码包含 Monomer 、AtomSite、ResiduePosition、ResidueAtPosition、 MmcifObject以及ParsingResult数据类的…

网络安全 “免疫力”:从人体免疫系统看防御策略

在当今数字化时代&#xff0c;网络安全已变得至关重要。每天&#xff0c;我们的网络系统都面临着来自各方的威胁&#xff0c;就像人体时刻暴露在各种病原体中一样。今天&#xff0c;我们就来聊聊网络安全与人体免疫系统的奇妙联系&#xff0c;看看从免疫系统中能汲取哪些构建强…

滚动弹幕案例

滚动弹幕案例 一、需求 1.页面上漂浮字体大小不一、颜色不一&#xff0c;从左向右滚动的弹幕&#xff1b; 2.底部中间有一个发送功能&#xff0c;可以发送新的弹幕&#xff1b; 3.底部的发送部分可以向下收起和弹出。 二、html <div class"container"><…

【wiki知识库】08.添加用户登录功能--后端SpringBoot部分

目录 一、今日目标? 二、SpringBoot后端实现 2.1 新增UserLoginParam 2.2 修改UserController 2.3 UserServiceImpl代码 2.4 创建用户上下文工具类 2.5?通过token校验用户&#xff08;重要&#xff09; 2.6 创建WebMvcConfig 2.7 用户权限校验拦截器 一、今日目标 上…

AI大模型的技术突破与传媒行业变革

性能与成本&#xff1a;AI大模型的“双轮驱动” 过去几年&#xff0c;AI大模型的发展经历了从实验室到产业化的关键转折。2025年初&#xff0c;以DeepSeek R1为代表的模型在数学推理、代码生成等任务中表现超越国际头部产品&#xff0c;而训练成本仅为传统模型的几十分之一。这…

C++字符串处理指南:从基础操作到性能优化——基于std::string的全面解析

博主将从C标准库中的 std::string 出发&#xff0c;详细探讨字符串的处理方法&#xff0c;涵盖常见操作、性能优化和实际应用场景。以下内容将围绕std::string 的使用展开&#xff0c;结合代码示例进行说明。 一、std::string 的基本操作 1.1 创建与初始化 std::string 提供了…

3.【线性代数】——矩阵乘法和逆矩阵

三 矩阵乘法和逆矩阵 1. 矩阵乘法1.1 常规方法1.2 列向量组合1.3 行向量组合1.4 单行和单列的乘积和1.5 块乘法 2. 逆矩阵2.1 逆矩阵的定义2.2 奇异矩阵2.3 Gauss-Jordan 求逆矩阵2.3.1 求逆矩阵 ⟺ \Longleftrightarrow ⟺解方程组2.3.2 Gauss-Jordan求逆矩阵 1. 矩阵乘法 1.…

深入了解 Oracle 正则表达式

目录 深入了解 Oracle 正则表达式一、正则表达式基础概念二、Oracle 正则表达式语法&#xff08;一&#xff09;字符类&#xff08;二&#xff09;重复限定符&#xff08;三&#xff09;边界匹配符&#xff08;四&#xff09;分组和捕获 三、Oracle 正则表达式函数&#xff08;…

用python写一个聊天室程序

下面是一个简单的基于Socket的Python聊天室程序示例&#xff0c;包括服务器端和客户端&#xff1a; 服务器端代码&#xff1a; import socket import threadingdef handle_client(client, address):print(f"New connection from {address}")while True:msg client…

在nodejs中使用RabbitMQ(六)sharding消息分片

RabbitMQ 的分片插件&#xff08;rabbitmq_sharding&#xff09;允许将消息分布到多个队列中&#xff0c;这在消息量很大或处理速度要求高的情况下非常有用。分片功能通过将消息拆分到多个队列中来平衡负载&#xff0c;从而提升消息处理的吞吐量和可靠性。它能够在多个队列之间…

1.7 AI智能体实战指南:从单任务自动化到企业级智能体集群架构

AI智能体实战指南:从单任务自动化到企业级智能体集群架构 一、智能体技术演进:从脚本工具到认知革命的跨越 1.1 三代智能体能力对比 能力维度第一代(规则驱动)第二代(机器学习)第三代(LLM驱动)任务理解固定模式匹配统计模式识别语义推理与逻辑链分解环境适应需人工重写…

Github 2025-02-14 Java开源项目日报 Top10

根据Github Trendings的统计,今日(2025-02-14统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10C#项目1Guava: 谷歌Java核心库 创建周期:3725 天开发语言:Java协议类型:Apache License 2.0Star数量:49867 个Fork数量:10822 次…

C++17中的clamp函数

一、std::clamp() 其实在前面简单介绍过这个函数&#xff0c;但当时只是一个集中的说明&#xff0c;为了更好的理解std::clamp的应用&#xff0c;本篇再详细进行阐述一次。std::clamp在C17中其定义的方式为&#xff1a; template< class T > constexpr const T& cl…

WEB安全--SQL注入--常见的注入手段

一、联表查询&#xff1a; 1.1原理&#xff1a; 当payload参数被后端查询语句接收到时&#xff0c;其中的非法语句通过union关联显示出其他的数据 1.2示例&#xff1a; #payload: -1 and union select 1,2,database()--#query: $sqlselect * from users where id-1 and union …

QT笔记——QPlainTextEdit

文章目录 1、概要2、文本设计2.1、设置文本2.1、字体样式&#xff08;大小、下划线、加粗、斜体&#xff09; 1、概要 QPlainTextEdit 是 Qt 框架中用于处理纯文本编辑的控件&#xff0c;具有轻量级和高效的特点&#xff0c;以下是它常见的应用场景&#xff1a; 文本编辑器&am…

【D2】神经网络初步学习

总结&#xff1a;学习了 PyTorch 中的基本概念和常用功能&#xff0c;张量&#xff08;Tensor&#xff09;的操作、自动微分&#xff08;Autograd&#xff09;、正向传播、反向传播。通过了解认识LeNet 模型&#xff0c;定义神经网络类&#xff0c;熟悉卷积神经网络的基本结构和…