SpringAI——Java生态接入LLM

最近,Spring官网发布了SpringAI,可点此查看https://spring.io/blog/2024/03/12/spring-ai-0-8-1-released,对于SpringAI的介绍,可看官方文档:https://spring.io/projects/spring-ai#overview。
本文将使用SpringAI配合Ollama完成SpringAI的体验,下面分别介绍SpringAI和Ollama。

一、Spring AI

Spring AI是一个专为人工智能工程而设计的应用框架。它的目标是将Spring生态系统的设计原则,如可移植性和模块化设计,应用于人工智能领域,并推广使用纯Java对象(POJO)作为AI领域应用程序的构建块。

1.Spring AI的核心特性
  • 跨AI提供商的API支持:Spring AI提供了一套可移植的API,支持与多个AI服务提供商的聊天、文本到图像和嵌入模型进行交云。
  • 同步和流式API选项:框架支持同步和流式API,为开发者提供了灵活的交互方式。
  • 模型特定功能访问:允许开发者通过配置参数访问特定模型的功能,提供了更细致的控制。
2.支持的模型
  • 聊天模型:包括OpenAI、Azure Open AI、Amazon Bedrock、Cohere’s Command、AI21 Labs’ Jurassic-2、Meta’s LLama 2、Amazon’s Titan、Google Vertex AI Palm、Google Gemini、HuggingFace(包括Meta的Llama2等数千种模型)、Ollama(本地运行AI模型)、MistralAI等。
  • 文本到图像模型:如OpenAI的DALL-E、StabilityAI等。
  • 嵌入模型:包括OpenAI、Azure Open AI、Ollama、ONNX、PostgresML、Bedrock Cohere、Bedrock Titan、Google VertexAI、Mistal AI等。
3.向量存储API和向量数据库

Spring AI提供了跨不同提供商的向量存储API,具有类似SQL的元数据过滤API,保持了可移植性。支持的向量数据库包括Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Redis、Weaviate、Qdrant等。

4.函数调用和ETL框架

Spring AI允许开发者声明java.util.Function实现,用于OpenAI模型的提示响应中。这一特性最小化了不必要的代码,并使AI模型能够请求更多信息以完成其响应。此外,框架还包括一个基于Java函数编程概念的ETL框架,帮助开发者将文档传输到模型提供商使用的向量存储中。

5.丰富的参考文档和示例应用

Spring AI配备了详尽的参考文档、示例应用程序和研讨会/课程材料,确保开发者拥有开始使用和充分利用框架所需的所有资源。

6.Spring AI的未来

Spring AI的未来版本将在当前基础上构建,计划提供对更多AI模型的访问,例如Google刚刚发布的Gemini多模态模型。框架还将引入评估AI应用程序效果的工具,更多的便利API和功能,以帮助解决查询/总结文档等常见用例。

7.Spring AI的使用

要开始使用Spring AI,只需几个简单的步骤:

  1. 安装Spring CLI。
  2. 在shell中运行以下命令创建一个新应用程序:
    spring boot new --from ai --name myai
  3. 这将创建一个用于与ChatGPT进行基本交互的应用程序。按照生成的README文件中的说明获取您的API密钥。
  4. 使用以下命令运行应用程序:
    ./mvw spring-boot:run
  5. 使用curl测试端点:
    curl localhost:8080/ai/simple

二、Ollama:本地运行大型语言模型的轻量级框架

Ollama是一个开源项目,旨在为用户提供一个简单、可扩展的框架,以便在本地机器上快速启动和运行大型语言模型。无论是研究人员、开发者还是对人工智能感兴趣的爱好者,Ollama都提供了一个便捷的途径来探索和利用最新的语言模型技术。

1.核心特性
  • 多平台支持:Ollama支持macOS、Windows预览版和Linux操作系统,确保了广泛的用户基础能够使用该框架。
  • Docker镜像:通过官方的Docker镜像ollama/ollama,用户可以轻松地在容器化环境中部署Ollama。
  • 丰富的模型库:项目支持包括Llama 2、Mistral、Gemma在内的多种大型语言模型,用户可以根据需要选择合适的模型。
  • 易于安装:Ollama提供了详细的安装指南,无论是通过下载压缩包还是使用命令行工具,用户都能轻松完成安装过程。
  • 模型自定义:用户可以通过创建Modelfile来导入GGUF模型,或者从PyTorch和Safetensors导入模型,实现模型的个性化定制。
  • 命令行界面(CLI):Ollama提供了一系列的CLI命令,简化了模型的创建、管理和运行过程。
  • REST API:通过REST API,用户可以编程方式运行和管理模型,为自动化和集成提供了便利。
  • 社区集成:Ollama与多个社区项目集成,包括Web和桌面应用程序、终端工具、数据库、包管理器和移动应用等,扩展了其应用范围。
2.模型安装和使用

Ollama官网:https://ollama.com/
Ollama Github地址:https://github.com/ollama/ollama

2.1 macOS安装指南
  1. 下载Ollama压缩包:
    访问Ollama的GitHub页面或官方网站,找到适用于macOS的下载链接。
    Download Ollama for macOS
  2. 解压压缩包:
    将下载的Ollama-darwin.zip文件解压到希望安装Ollama的目录。
  3. 安装依赖(如果有):
    根据Ollama的README文件或官方文档,安装任何必要的依赖项。
  4. 运行Ollama:
    打开终端,切换到解压后的Ollama目录,运行Ollama的启动命令。
cd Ollama-darwin
./ollama
2.2 Windows安装指南
  1. 下载Ollama安装程序:
    在Ollama的GitHub页面上找到Windows预览版的下载链接。
    Download Ollama for Windows
  2. 运行安装程序:
    双击下载的OllamaSetup.exe文件,并按照安装向导的指示完成安装。
  3. 验证安装:
    安装完成后,可以通过运行Ollama的命令或启动桌面应用程序来验证安装是否成功。
2.3 Linux安装指南
  1. 通过curl安装:
    打开终端,运行以下命令来安装Ollama。
    curl -fsSL https://ollama.com/install.sh | sh
  2. 手动安装(可选):
    如果希望手动安装或需要更详细的安装步骤,可以参考Ollama的GitHub仓库中的Linux安装文档。
    Manual install instructions
  3. 运行Ollama:
    安装完成后,可以通过终端运行Ollama的命令来启动框架。
2.4 Docker安装指南
  1. 安装Docker(如果尚未安装):
    根据操作系统,从Docker官网下载并安装Docker。
  2. 拉取Ollama Docker镜像:
    在终端中运行以下命令来拉取官方的Ollama Docker镜像。
    docker pull ollama/ollama
  3. 运行Docker容器:
    使用以下命令运行Ollama容器。
    docker run -it ollama/ollama
2.5 验证安装

无论使用的是哪种安装方法,都可以通过运行以下命令来验证Ollama是否已成功安装并运行:
ollama run gemma:2b
这将启动Gemma:2b模型,可以通过与模型交互来测试其功能。Gemma:2b模型对中文相对友好一些,例如:
在这里插入图片描述

三、SpringAI与Ollama
1.首先创建一个Spring项目

在这里插入图片描述

2.选择要使用的模型依赖,这里我选择的是Ollama

在这里插入图片描述

3.Ollama模型选择,Ollama官网中有多个模型可以选择,本次使用gemma:2b这个模型

在这里插入图片描述

4.在配置文件中,配置Ollama模型的URL和要使用的模型
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=gemma:2b
5.启动Ollama,并运行gemma:2b模型。安装完成Ollama后,在命令窗口使用ollama run gemma:2b命令运行该模型,如果系统没有gemma:2b model的话会自动下载,所以第一次会慢一些

在这里插入图片描述

gemma:2b model运行成功后,可通过http://localhost:11434查看状态
在这里插入图片描述

6.在Java代码中进行测试

在这里插入图片描述

支持流式访问,比如这里,给LLM一个提示词:你是一个高级运营,你擅长于写各种运营文案,根据:{message} 场景写一个不少于100字的文案。然后,告诉它一个场景,例如:旅游。
执行程序,给出的结果如下:

## 探索自然,打开无限之旅!你是否渴望沉浸在自然美景之中?在感受阳光轻轻抚过皮肤的温暖中?在聆听动听的森林鸟叫中?在品尝异国美食的滋味中?我们为您打造了一套精彩旅游解决方案,带您走进神秘自然之中!从沉浸式的森林冒险到神秘自然之旅,我们提供各种体验,让您在自然之中寻找属于自己的精彩。**加入我们,开启无限之旅!*** **体验神秘自然:** 在神秘森林中,感受自然的奇迹,体验自然界的美丽与神秘。
* **品尝异国美食:** 探索世界的味蕾,品尝当地特色美食,感受不同的文化与风味。
* **沉浸在自然之中:** 在自然公园中散步,体验自然风光,感受生命的活力。
* **与自然共存:** 在环保旅游中,与生态环境共存,创造属于自然界的文明。**立即开始你的自然之旅吧!**complete~!

在这里插入图片描述

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

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

相关文章

2024 年值得关注的三大 DevOps 趋势

在过去几年中,DevOps 世界以前所未有的速度发展,但它仍然是许多组织效率、创新和数字化转型的主要驱动力。 Google 的 2023 年 加速 DevOps 状态报告显示,公司的软件交付性能质量可以预测组织绩效、团队绩效和员工福祉。 2024年&#xff0c…

【自然语言处理】NLP入门(八):1、正则表达式与Python中的实现(8):正则表达式元字符:.、[]、^、$、*、+、?、{m,n}

文章目录 一、前言二、正则表达式与Python中的实现1、字符串构造2、字符串截取3、字符串格式化输出4、字符转义符5、字符串常用函数6、字符串常用方法7、正则表达式1. .:表示除换行符以外的任意字符2. []:指定字符集3. ^ :匹配行首&#xff0…

Stable Diffusion科普文章【附升级gpt4.0秘笈】

随着人工智能技术的飞速发展,我们越来越多地看到计算机生成的艺术作品出现在我们的生活中。其中,Stable Diffusion作为一种创新的图像生成技术,正在引领一场艺术创作的革命。本文将为您科普Stable Diffusion的相关知识,带您走进这…

第十二届蓝桥杯EDA省赛真题分析

前言: 第十二届蓝桥杯EDA比赛用的是AD软件,从第十四届起都是使用嘉立创EDA专业版,所以在这里我用嘉立创EDA专业版实现题目要求。 一、省赛第一套真题题目 主观题整套题目如下: 试题一:库文件设计(5分&am…

双指针、bfs与图论

1238. 日志统计 - AcWing题库 import java.util.*;class PII implements Comparable<PII>{int x, y;public PII(int x, int y){this.x x;this.y y;}public int compareTo(PII o){return Integer.compare(x, o.x);} }public class Main{static int N 100010, D, K;st…

Java高级互联网架构师之路:排查当前JVM错误的步骤

程序 这个程序是有问题的,我们通过一些命令来分析这个程序究竟是哪里出了问题。首先把当前的程序通过SSH工具传输到centos系统中,之后我们就可以在linux环境下编译和执行。 注意一点:上面类的名字是Z,但是在linux环境下,我们将其改为了AA,并且文件名改为了AA,所以文章下…

zookeeper基础学习之六: zookeeper java客户端curator

简介 Curator是Netflix公司开源的一套zookeeper客户端框架&#xff0c;解决了很多Zookeeper客户端非常底层的细节开发工作&#xff0c;包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt&#xff08;Zookeeper&#xff09;以一句“Guava is to Java…

单片机FLASH深度解析和编程实践(下)

本篇文章将同大家分享单片机FLASH编程的相关寄存器和寄存器操作及库函数操作。本篇文章依然以STM32单片机为例进行解析。有关FLASH的基本原理和实现方法&#xff0c;大家可以参考上一篇文章&#xff1a;单片机FLASH深度解析和编程实践&#xff08;上&#xff09;-CSDN博客 目录…

基于Struts开发物流配送(快递)管理系统

开发工具&#xff1a;EclipseJdkTomcatMySQL数据库

【QT入门】VS2019+QT的开发环境配置

声明&#xff1a;该专栏为本人学习Qt知识点时候的笔记汇总&#xff0c;希望能给初学的朋友们一点帮助(加油&#xff01;) 往期回顾&#xff1a; 【QT入门】什么是qt&#xff0c;发展历史&#xff0c;特征&#xff0c;应用&#xff0c;QtCreator-CSDN博客【QT入门】Windows平台下…

huawei services HK华为云服务

huaweiserviceshk是一种云计算服务&#xff0c;为华为云服务用户提供了多种服务&#xff0c;包括云服务器、数据库、存储、网络等&#xff0c;用户可以根据自己的需求选择不同的服务并支付相应的费用 如何付费呢&#xff0c;这里可以使用441112&#xff0c;点击获取 卡片信息在…

Lua中文语言编程源码-第一节,更改llex.c词法分析器模块, 使Lua支持中文关键词。

源码已经更新在CSDN的码库里&#xff1a; git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的llex.c&#xff0c;是Lua的词法分析器模块。 增加中文保留字标识符列表&#xff0c;保留英文保留字标识符列表。 搜索“ORDER RESERVED”&#xff0c;将原始代码 …