Spring AI 使用本地 Ollama Embeddings

这篇具有很好参考价值的文章主要介绍了Spring AI 使用本地 Ollama Embeddings。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 OpenAI 的 Embeddings 接口是有费用的,如果想对大量文档进行测试,使用本地部署的 Embeddings 就能省去大量的费用,所以我们尝试使用本地的 Ollama Embeddings。

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

即使你电脑没有性能很强的显卡,仅仅依靠 CPU 也能运行一些参数量较小的模型。ollama 中下载量最多的是 llama2 模型,但是这个模型对中文支持不太好,我们可以试试 Google 开源的 gemma 模型:
ollama embedding,Spring AI,spring,人工智能,java,spring ai,ollama
https://ollama.com/library/gemma

这个模型包含几个不同的版本,默认为 7b 的版本,可以先试试 7b,如果速度太慢可以换 2b 试试,执行命令 ollama run gemma 时会下载模型并运行,模型默认会下载到用户目录中的 .ollama 中,如果用户目录(一般在C盘)所在盘空间少,可以提前通过环境变量方式修改位置,参考下面的配置(改成自己的路径):

OLLAMA_MODELS=D:\.ollama

如果不会在 Windows 创建 .前缀的目录,也可以用正常目录,也可以打开 git bash,使用命令 mkdir .ollama 创建

配置环境变量后一定打开一个新的 CMD 或者 Terminal,然后执行 ollama rum gemma 下载并启动模型(已经下载到用户目录的模型可以整体移动到新的目录)。启动后可以在控制台进行对话,如下所示:

>ollama run gemma
>>> 你好
你好!我很好,谢谢您的问候。

您想让我做什么呢?我能够帮助您吗?

接下来在 Spring AI 中使用该模型,首先引入Maven依赖:

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

通过下面示例代码运行:

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);
}

接口使用很简单,下面再看如何使用 Ollama 的 Embeddings。

var ollamaApi = new OllamaApi();
//指定使用的模型
var embeddingClient = new OllamaEmbeddingClient(ollamaApi)
		.withDefaultOptions(OllamaOptions.create().withModel("gemma"));
//测试数据
VectorStore vectorStore = new SimpleVectorStore(embeddingClient);
vectorStore.add(List.of(
		new Document("白日依山尽,黄河入海流。欲穷千里目,更上一层楼。"),
		new Document("青山依旧在,几度夕阳红。白发渔樵江渚上,惯看秋月春风。"),
		new Document("一片孤城万仞山,羌笛何须怨杨柳。春风不度玉门关。"),
		new Document("危楼高百尺,手可摘星辰。不敢高声语,恐惊天上人。")
));
Scanner scanner = new Scanner(System.in);
while (true) {
	System.out.print("请输入关键词: ");
	String message = scanner.nextLine();
	if (message.equals("exit")) {
		break;
	}
	List<Document> documents = vectorStore.similaritySearch(message);
	System.out.println("查询结果: ");
	for (Document doc : documents) {
		System.out.println(doc.getContent());
	}
}

在我本地运行时(靠CPU),解析文档耗时如下:

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

每一条文本耗时在6秒左右。解析完成后输入提示词进行验证:

请输入关键词: 春风
查询结果: 
青山依旧在,几度夕阳红。白发渔樵江渚上,惯看秋月春风。
一片孤城万仞山,羌笛何须怨杨柳。春风不度玉门关。
白日依山尽,黄河入海流。欲穷千里目,更上一层楼。
危楼高百尺,手可摘星辰。不敢高声语,恐惊天上人。

请输入关键词: 黄河
查询结果: 
青山依旧在,几度夕阳红。白发渔樵江渚上,惯看秋月春风。
一片孤城万仞山,羌笛何须怨杨柳。春风不度玉门关。
白日依山尽,黄河入海流。欲穷千里目,更上一层楼。
危楼高百尺,手可摘星辰。不敢高声语,恐惊天上人。

春风的结果还可以,但是黄河的结果就不对了。

如何使用其他模型进行 Embedding 呢?

只要启动了任何一个模型,我们通过修改上面的 withModel("gemma") 中的参数即可使用其他模型,如果本地下载过 llama2 模型,就可以直接改这里的参数,不需要重新执行 ollama run llama2 命令,这个命令影响 chat 功能的使用,不影响 embedding。如果指定的模型不存在,会提示如下信息:

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

可以通过 ollama pull llama2 进行下载。

我们还可以搜专门的 embedding 模型,搜索时注意下图搜索的位置:

ollama embedding,Spring AI,spring,人工智能,java,spring ai,ollama

顶部可以搜索全局的模型,不限于官方 library 下面的模型,搜索 embedding 结果如下:

ollama embedding,Spring AI,spring,人工智能,java,spring ai,ollama

我们可以试试 mofanke/dmeta-embedding-zh 这个模型,还有一个 mofanke/acge_text_embedding 是我联系作者后,作者新提供的模型,后面文章也会以这个为例介绍如何将 huggingface 上的模型转换为 ollama 的模型来使用。

使用命令 ollama pull mofanke/dmeta-embedding-zh 下载模型,这个模型不能通过 ollama run xxx 启动,需要通过其他模型启动后来引用,还使用前面的 ollama run gemma,下载完模型后修改 withModel("mofanke/dmeta-embedding-zh"),然后进行测试即可。

Ollama 的存在使得 Java 调用各种开源大模型变得更统一更简单,就好比大部分商业大模型都参考 OpenAI 的 API,方便我们调用一样。通过 Ollama 的扩展方式,还可以方便我们导入官方仓库不存在的其他模型,后续文章会以 acge_text_embedding 为例介绍如何自定义基于 PyTorch 的模型。文章来源地址https://www.toymoban.com/news/detail-859696.html

到了这里,关于Spring AI 使用本地 Ollama Embeddings的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在本地使用Ollama运行开源LLMs

    本文将指导您下载并使用Ollama,在您的本地设备上与开源大型语言模型(LLMs)进行交互的强大工具。 与像ChatGPT这样的闭源模型不同,Ollama提供透明度和定制性,使其成为开发人员和爱好者的宝贵资源。 我们将探索如何下载Ollama并与两个令人兴奋的开源LLM模型进行交互:Me

    2024年04月27日
    浏览(36)
  • 小白Windows下通过Ollama部署使用本地模型

    运行环境为 windows R9000P2021拯救者笔记本 AMD R7-5800H 32G 内存 NVIDIA RTX 3070 Laptop GPU Ollama下载exe,直接下一步下一步没有设置可以更改 windows默认安装路径: C:UserswbigoAppDataLocalProgramsOllama 安装后会自动将该路径加入环境变量 双击图标运行后状态栏会出现小图标,右键有退出、

    2024年03月13日
    浏览(64)
  • 使用 ollama 部署最新的Llama 3 70B本地模型

    在本地启动并运行大型语言模型。运行Llama 3,Mistral, Gemma, Code Llama和其他模型。自定义并创建您自己的。 综合优点: 快速下载+容器自动运行大模型,现在下载,马上上手。 本地利用 cpu 运行大模型,本地安全可靠。 ollama 命令,管理大模型相对方便,也可以多个大模型中切

    2024年04月25日
    浏览(53)
  • 从零开始 Spring Boot 52:@Embedded 和 @Embeddable

    图源:简书 (jianshu.com) 这篇文章会介绍 @Embedded 和 @Embeddable 两个注解在 JPA 中的用法。 先看一个示例: 这里使用了 Lombok 相关注解(比如 @Builder )帮助构建实体类,详细内容可以阅读我的相关文章。 user_student 是一个学生表,其中的 contacts_ 开头的字段保存联系人信息,这体

    2024年02月12日
    浏览(67)
  • 项目前瞻|Spring AI:在你的Spring应用中使用生成式AI

    过去一年里,ChatGPT 和 Google Bard 这样的东西出现,为大众带来了生成式人工智能,似乎每个人都在梦想和计划如何在他们的项目甚至日常生活中利用人工智能。 如果您是 Spring 开发人员,您可能想知道如何在 Spring 应用程序中实现生成式 AI。如果是这样,那么接下来这个视频

    2024年02月03日
    浏览(45)
  • 使用Spring AI让你的Spring Boot应用快速拥有生成式AI能力

    之前分享了关于Spring新项目 Spring AI 的介绍视频。视频里演示了关于使用Spring AI将Open AI的能力整合到Spring应用中的操作,但有不少读者提到是否有博客形式的学习内容。所以,本文就将具体介绍如何使用 Spring AI 快速让您的Spring应用拥有生成式AI的强大能力。 第一步:使用你

    2024年02月03日
    浏览(39)
  • 【linux 使用ollama部署运行本地大模型完整的教程,openai接口, llama2例子】

    # 安装相应的包 # 开启ollama服务端! # 启动llama2大模型(新开一个终端) # 如果不想启动运行,只下载可以 在启动完后,就可以对话了 # python接口对话   # OpenAI适配接口对话 # CUR流式接口 # 参考 llama2 (ollama.com) https://ollama.com/library/llama2 OpenAI compatibility · Ollama Blog https://ollama

    2024年03月25日
    浏览(73)
  • Elasticsearch:使用在本地计算机上运行的 LLM 以及 Ollama 和 Langchain 构建 RAG 应用程序

    无需 GPU 的隐私保护 LLM。在本博客中,我将演示使用不同的工具 Ollama 构建的 RAG 应用程序。 与本文相关的所有源代码均已发布在 github上。 请克隆存储库以跟随文章操作。我们可以通过如下的方式来克隆: Ollama 是一个轻量级且灵活的框架,专为在个人计算机上本地部署 LL

    2024年04月16日
    浏览(55)
  • Spring Boot学习随笔- 本地化测试(@SpringBootTest)、热部署(spring-boot-devtools)、日志Logback常用级别使用、指定包级别输出

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 频繁启动服务器进行功能的访问非常繁琐、SpringBoot给我们提供了用于测试的依赖,自动集成Junit,使用了这个以来后,test包在打包时不会被打包进去 @SpringBootTest注解 修饰在类上,用来启动本地Spring环境 作用 热部署是指

    2024年02月05日
    浏览(79)
  • Spring AI - 使用向量数据库实现检索式AI对话

     Spring AI 并不仅限于针对大语言模型对话API进行了统一封装,它还可以通过简单的方式实现LangChain的一些功能。本篇将带领读者实现一个简单的检索式AI对话接口。  在一些场景下,我们想让AI根据我们提供的数据进行回复。因为对话有最大Token的限制,因此很多场景下我们

    2024年04月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包