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.pswp.cn/news/895606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895606.shtml
英文地址,請注明出處:http://en.pswp.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;熟悉卷積神經網絡的基本結構和…