最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring AI 使用本地 Ollama Embeddings的操作方法

 更新時(shí)間:2024年05月31日 17:08:26   作者:isea533  
使用 OpenAI 的 Embeddings 接口是有費(fèi)用的,如果想對(duì)大量文檔進(jìn)行測(cè)試,使用本地部署的 Embeddings 就能省去大量的費(fèi)用,所以我們嘗試使用本地的 Ollama Embeddings,這篇文章主要介紹了Spring AI 使用本地 Ollama Embeddings,需要的朋友可以參考下

使用 OpenAI 的 Embeddings 接口是有費(fèi)用的,如果想對(duì)大量文檔進(jìn)行測(cè)試,使用本地部署的 Embeddings 就能省去大量的費(fèi)用,所以我們嘗試使用本地的 Ollama Embeddings。

首先本地安裝 Ollama: https://ollama.com/download

即使你電腦沒有性能很強(qiáng)的顯卡,僅僅依靠 CPU 也能運(yùn)行一些參數(shù)量較小的模型。ollama 中下載量最多的是 llama2 模型,但是這個(gè)模型對(duì)中文支持不太好,我們可以試試 Google 開源的 gemma 模型:

在這里插入圖片描述

https://ollama.com/library/gemma

這個(gè)模型包含幾個(gè)不同的版本,默認(rèn)為 7b 的版本,可以先試試 7b,如果速度太慢可以換 2b 試試,執(zhí)行命令 ollama run gemma 時(shí)會(huì)下載模型并運(yùn)行,模型默認(rèn)會(huì)下載到用戶目錄中的 .ollama 中,如果用戶目錄(一般在C盤)所在盤空間少,可以提前通過環(huán)境變量方式修改位置,參考下面的配置(改成自己的路徑):

OLLAMA_MODELS=D:\.ollama

如果不會(huì)在 Windows 創(chuàng)建 .前綴的目錄,也可以用正常目錄,也可以打開 git bash,使用命令 mkdir .ollama 創(chuàng)建

配置環(huán)境變量后一定打開一個(gè)新的 CMD 或者 Terminal,然后執(zhí)行 ollama rum gemma 下載并啟動(dòng)模型(已經(jīng)下載到用戶目錄的模型可以整體移動(dòng)到新的目錄)。啟動(dòng)后可以在控制臺(tái)進(jìn)行對(duì)話,如下所示:

>ollama run gemma
>>> 你好
你好!我很好,謝謝您的問候。
您想讓我做什么呢?我能夠幫助您嗎?

接下來在 Spring AI 中使用該模型,首先引入Maven依賴:

<dependency>
	<groupId>org.springframework.ai</groupId>
	<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

通過下面示例代碼運(yùn)行:

var ollamaApi = new OllamaApi();
var chatClient = new OllamaChatClient(ollamaApi).withModel("gemma")
		.withDefaultOptions(OllamaOptions.create()
				.withModel("gemma")
				.withTemperature(0.9f));
Scanner scanner = new Scanner(System.in);
while (true) {
	System.out.print(">>> ");
	String message = scanner.nextLine();
	if (message.equals("exit")) {
		break;
	}
	String resp = chatClient.call(message);
	System.out.println("<<< " + resp);
}

接口使用很簡(jiǎn)單,下面再看如何使用 Ollama 的 Embeddings。

var ollamaApi = new OllamaApi();
//指定使用的模型
var embeddingClient = new OllamaEmbeddingClient(ollamaApi)
		.withDefaultOptions(OllamaOptions.create().withModel("gemma"));
//測(cè)試數(shù)據(jù)
VectorStore vectorStore = new SimpleVectorStore(embeddingClient);
vectorStore.add(List.of(
		new Document("白日依山盡,黃河入海流。欲窮千里目,更上一層樓。"),
		new Document("青山依舊在,幾度夕陽紅。白發(fā)漁樵江渚上,慣看秋月春風(fēng)。"),
		new Document("一片孤城萬仞山,羌笛何須怨楊柳。春風(fēng)不度玉門關(guān)。"),
		new Document("危樓高百尺,手可摘星辰。不敢高聲語,恐驚天上人。")
));
Scanner scanner = new Scanner(System.in);
while (true) {
	System.out.print("請(qǐng)輸入關(guān)鍵詞: ");
	String message = scanner.nextLine();
	if (message.equals("exit")) {
		break;
	}
	List<Document> documents = vectorStore.similaritySearch(message);
	System.out.println("查詢結(jié)果: ");
	for (Document doc : documents) {
		System.out.println(doc.getContent());
	}
}

在我本地運(yùn)行時(shí)(靠CPU),解析文檔耗時(shí)如下:

10:33:10.423 - Calling EmbeddingClient for document id = 44d0114f-62ae-4d05-9e6d-457f157386ce
10:33:16.201 - Calling EmbeddingClient for document id = ac65024a-26a9-4827-af4c-af48a3321a4b
10:33:22.176 - Calling EmbeddingClient for document id = 53747918-8e8e-42e1-b4e6-3792c24b6881
10:33:26.125 - Calling EmbeddingClient for document id = 63123b8d-b475-48b4-b38e-71dbf1b49250

每一條文本耗時(shí)在6秒左右。解析完成后輸入提示詞進(jìn)行驗(yàn)證:

請(qǐng)輸入關(guān)鍵詞: 春風(fēng)
查詢結(jié)果: 
青山依舊在,幾度夕陽紅。白發(fā)漁樵江渚上,慣看秋月春風(fēng)。
一片孤城萬仞山,羌笛何須怨楊柳。春風(fēng)不度玉門關(guān)。
白日依山盡,黃河入海流。欲窮千里目,更上一層樓。
危樓高百尺,手可摘星辰。不敢高聲語,恐驚天上人。

請(qǐng)輸入關(guān)鍵詞: 黃河
查詢結(jié)果: 
青山依舊在,幾度夕陽紅。白發(fā)漁樵江渚上,慣看秋月春風(fēng)。
一片孤城萬仞山,羌笛何須怨楊柳。春風(fēng)不度玉門關(guān)。
白日依山盡,黃河入海流。欲窮千里目,更上一層樓。
危樓高百尺,手可摘星辰。不敢高聲語,恐驚天上人。

春風(fēng)的結(jié)果還可以,但是黃河的結(jié)果就不對(duì)了。

如何使用其他模型進(jìn)行 Embedding 呢?

只要啟動(dòng)了任何一個(gè)模型,我們通過修改上面的 withModel("gemma") 中的參數(shù)即可使用其他模型,如果本地下載過 llama2 模型,就可以直接改這里的參數(shù),不需要重新執(zhí)行 ollama run llama2 命令,這個(gè)命令影響 chat 功能的使用,不影響 embedding。如果指定的模型不存在,會(huì)提示如下信息:

[404] Not Found - {"error":"model 'llama2' not found, try pulling it first"}

可以通過 ollama pull llama2 進(jìn)行下載。

我們還可以搜專門的 embedding 模型,搜索時(shí)注意下圖搜索的位置:

在這里插入圖片描述

頂部可以搜索全局的模型,不限于官方 library 下面的模型,搜索 embedding 結(jié)果如下:

在這里插入圖片描述

我們可以試試 mofanke/dmeta-embedding-zh 這個(gè)模型,還有一個(gè) mofanke/acge_text_embedding 是我聯(lián)系作者后,作者新提供的模型,后面文章也會(huì)以這個(gè)為例介紹如何將 huggingface 上的模型轉(zhuǎn)換為 ollama 的模型來使用。

使用命令 ollama pull mofanke/dmeta-embedding-zh 下載模型,這個(gè)模型不能通過 ollama run xxx 啟動(dòng),需要通過其他模型啟動(dòng)后來引用,還使用前面的 ollama run gemma,下載完模型后修改 withModel("mofanke/dmeta-embedding-zh"),然后進(jìn)行測(cè)試即可。

Ollama 的存在使得 Java 調(diào)用各種開源大模型變得更統(tǒng)一更簡(jiǎn)單,就好比大部分商業(yè)大模型都參考 OpenAI 的 API,方便我們調(diào)用一樣。通過 Ollama 的擴(kuò)展方式,還可以方便我們導(dǎo)入官方倉庫不存在的其他模型,后續(xù)文章會(huì)以 acge_text_embedding 為例介紹如何自定義基于 PyTorch 的模型。

到此這篇關(guān)于Spring AI 使用本地 Ollama Embeddings的文章就介紹到這了,更多相關(guān)Spring AI Ollama Embeddings內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你利用SpringBoot寫一個(gè)屬于自己的Starter

    教你利用SpringBoot寫一個(gè)屬于自己的Starter

    如果我們將可獨(dú)立于業(yè)務(wù)代碼之外的功配置模塊封裝成一個(gè)個(gè)starter,復(fù)用的時(shí)候只需要將其在pom中引用依賴即可,SpringBoot為我們完成自動(dòng)裝配,簡(jiǎn)直不要太爽,這篇文章主要給大家介紹了關(guān)于如何利用SpringBoot寫一個(gè)屬于自己的Starter,需要的朋友可以參考下
    2022-03-03
  • Java中Stream流去除List重復(fù)元素的方法

    Java中Stream流去除List重復(fù)元素的方法

    這篇文章主要為大家詳細(xì)介紹了Java中Stream流去除List重復(fù)元素的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java消息隊(duì)列RabbitMQ之消息模式詳解

    Java消息隊(duì)列RabbitMQ之消息模式詳解

    這篇文章主要介紹了Java消息隊(duì)列RabbitMQ之消息模式詳解,RabbitMQ提供了一種qos(服務(wù)質(zhì)量保證)功能,即在非自動(dòng)確認(rèn)消息的前提下,如果一定數(shù)目的消息(通過基于Consumer或者Channel設(shè)置Qos的值)未被確認(rèn)前,不進(jìn)行消費(fèi)新的消息,需要的朋友可以參考下
    2023-07-07
  • Java學(xué)習(xí)25個(gè)JAVA常見代碼示例-值得收藏的筆記

    Java學(xué)習(xí)25個(gè)JAVA常見代碼示例-值得收藏的筆記

    本文列舉了25個(gè)Java常用代碼示例,涵蓋了基礎(chǔ)語法、面向?qū)ο缶幊?、高?jí)編程概念等內(nèi)容,旨在幫助Java初學(xué)者掌握編程技能,從入門到成長(zhǎng)為架構(gòu)師
    2025-11-11
  • Java調(diào)用Python代碼實(shí)現(xiàn)Word轉(zhuǎn)化為PDF格式

    Java調(diào)用Python代碼實(shí)現(xiàn)Word轉(zhuǎn)化為PDF格式

    這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)調(diào)用Python代碼實(shí)現(xiàn)Word轉(zhuǎn)化為PDF格式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-03-03
  • Java根據(jù)日期截取字符串的多種實(shí)現(xiàn)方法

    Java根據(jù)日期截取字符串的多種實(shí)現(xiàn)方法

    在實(shí)際開發(fā)中,我們經(jīng)常會(huì)遇到需要根據(jù)日期來截取字符串的需求,例如從文件名中提取日期信息,Java 提供了多種方法來實(shí)現(xiàn)根據(jù)日期來截取字符串的功能,本文將給大家介紹了Java根據(jù)日期截取字符串的多種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-11-11
  • Scala小程序詳解及實(shí)例代碼

    Scala小程序詳解及實(shí)例代碼

    這篇文章主要介紹了Scala 第一個(gè)Scala小程序詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • SpringCloud?Gateway的使用?+?Nacos動(dòng)態(tài)路由實(shí)踐指南

    SpringCloud?Gateway的使用?+?Nacos動(dòng)態(tài)路由實(shí)踐指南

    SpringCloudGateway是一個(gè)基于Spring5.0、SpringBoot2.0和ProjectReactor等技術(shù)開發(fā)的網(wǎng)關(guān),本文介紹SpringCloud?Gateway的使用+Nacos動(dòng)態(tài)路由實(shí)踐指南,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • SpringCloud Gateway自動(dòng)裝配實(shí)現(xiàn)流程詳解

    SpringCloud Gateway自動(dòng)裝配實(shí)現(xiàn)流程詳解

    Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單有效的、統(tǒng)一的 API 路由管理方式。Spring Cloud Gateway 作為 Spring Cloud 生態(tài)系中的網(wǎng)關(guān),它不僅提供統(tǒng)一的路由方式,并且基于 Filter 鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全、監(jiān)控/埋點(diǎn)和限流等
    2022-10-10
  • Java線程狀態(tài)運(yùn)行原理解析

    Java線程狀態(tài)運(yùn)行原理解析

    這篇文章主要介紹了Java線程狀態(tài)運(yùn)行原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

玉屏| 绥江县| 万山特区| 宜黄县| 双流县| 灵寿县| 延川县| 大邑县| 惠水县| 昭平县| 海兴县| 临西县| 安塞县| 金溪县| 湘西| 福贡县| 治县。| 右玉县| 武川县| 永川市| 阳泉市| 南澳县| 湘阴县| 苍梧县| 海淀区| 德安县| 阳江市| 灵寿县| 兴国县| 驻马店市| 晋中市| 汪清县| 南安市| 上饶县| 毕节市| 民乐县| 寿光市| 丹阳市| 杭州市| 清苑县| 花莲县|