Java程序员的AI框架,它来了

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

摘要:

        在本文中,我们将探索Spring AI——一个为Java开发者社区设计的革命性的人工智能框架。了解其核心功能、如何集成到现有的Spring应用中,以及它如何简化AI项目的开发。

前言:

        在当今这个由数据和智能驱动的时代,人工智能(AI)已经成为推动业务创新和优化用户体验的关键力量。从个性化推荐系统到自然语言处理,AI技术正在以前所未有的速度渗透到我们生活的每一个角落。然而,尽管AI的承诺如此诱人,对于许多Java开发者来说,将AI集成到现有的应用和服务中仍然是一项挑战。这是因为大多数AI框架和工具往往要求开发者具备专门的知识,或者需要在使用不同的技术栈之间进行昂贵的转换。

        Java一直是企业级应用开发的主力军,以其成熟的生态系统、强大的性能和跨平台的能力而受到广泛赞誉。但是,当涉及到AI时,Java社区似乎缺乏一个既能与Spring等现有框架无缝集成,又能为开发者提供易于上手的AI解决方案的平台。

        那么,对于Java开发者来说,有没有一个易于上手且功能强大的AI框架呢?答案是肯定的。随着Spring AI的推出,Java开发者现在有了一个专为他们量身打造的AI框架。Spring AI不仅承诺将AI的力量带到Java开发者的指尖,而且还保证与Java开发者已经熟悉的Spring生态系统无缝集成。这无疑是Java和AI领域的一大进步。

        在本文中,我们将深入探讨Spring AI,了解它如何为Java开发者提供一个平滑的AI集成路径,以及它如何帮助开发者快速构建和部署智能应用。无论您是AI新手还是有经验的开发者,Spring AI都旨在使您能够轻松地将AI的强大功能集成到您的Java应用中,从而开启新一代智能应用的篇章。

入门示例:

话不多说,先看示例:

@RestController
@RequestMapping("/chat")
public class SimpleAiController {

	private final ChatClient chatClient;


	@Autowired
	public SimpleAiController(ChatClient chatClient) {
		this.chatClient = chatClient;
	}

	@GetMapping("/ai/simple")
	public Map<String, String> completion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
		return Map.of("generation", chatClient.call(message));
	}

}

调用Restful接口:

>curl localhost:8080/ai/simple

{"generation":"Why couldn't the bicycle stand up by itself? Because it was two tired!"}

可以看到,还是一贯的Spring风格,调用十分简单。以后用Java写AI应用再也不用写复杂的封装代码,或者到Github寻找一些不能确定靠不靠谱的三方框架了,Java程序员开发AI应用也能像写CRUD代码一样轻松了。(这里推荐一个比较优秀的Java AI框架-langchian4j,使用十分简单,之前在公司开发AI功能的时候发现的,但因为是三方框架,不敢直接集成到公司项目里,最后只能含泪封装了一大堆参数)

Spring AI简介:

        Spring AI旨在简化包含人工智能功能的应用程序的开发,而不会造成不必要的复杂性。

        该项目从著名的 Python 项目中汲取灵感,例如 LangChain 和 LlamaIndex,但 Spring AI 并不是这些项目的直接移植。该项目成立的信念是,下一波生成式 AI 应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在。

        Spring AI 的核心是提供抽象,作为开发 AI 应用程序的基础。这些抽象具有多种实现,只需最少的代码更改即可轻松交换组件。

Spring AI 提供以下功能:

  • 支持所有主要的模型提供商,如OpenAI,Microsoft,Amazon,Google和Huggingface。

  • 支持的模型类型包括聊天和文本到图像,还有更多类型正在开发中。

  • 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 选项。还支持下拉以访问特定于模型的功能。

  • 将 AI 模型输出映射到 POJO。

  • 支持所有主要的矢量数据库提供商,例如 Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate

  • 跨 Vector Store 提供程序的可移植 API,包括一个类似 SQL 的新颖元数据过滤器 API,该 API 也是可移植的。

  • Function calling 函数调用

  • 用于 AI 模型和矢量存储的 Spring Boot 自动配置和启动器。

  • 用于数据工程的 ETL 框架

具体使用:

环境配置:

  1. JDK要求版本:17
  2. 添加以下存储库定义:
    <repositories>
        <repository>
          <id>spring-milestones</id>
          <name>Spring Milestones</name>
          <url>https://repo.spring.io/milestone</url>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
        <repository>
          <id>spring-snapshots</id>
          <name>Spring Snapshots</name>
          <url>https://repo.spring.io/snapshot</url>
          <releases>
            <enabled>false</enabled>
          </releases>
        </repository>
      </repositories>

    repositories {
      mavenCentral()
      maven { url 'https://repo.spring.io/milestone' }
      maven { url 'https://repo.spring.io/snapshot' }
    }
  3. 依赖管理:
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>0.8.1-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    dependencies {
      implementation platform("org.springframework.ai:spring-ai-bom:0.8.1-SNAPSHOT")
      // Replace the following with the starter dependencies of specific modules you wish to use
      implementation 'org.springframework.ai:spring-ai-openai'
    }
  4. 配置文件:
    spring.ai.openai.api-key=YOUR_API_KEY
    spring.ai.openai.chat.options.model=gpt-3.5-turbo
    spring.ai.openai.chat.options.temperature=0.7
  5. 开始使用

OpenAI 文本生成流式/非流式输出:

  1. 非流式:  
    @RestController
    @RequestMapping("/chat")
    public class SimpleAiController {
    
    	private final ChatClient chatClient;
    
    
    	@Autowired
    	public SimpleAiController(ChatClient chatClient) {
    		this.chatClient = chatClient;
    	}
    
    	@GetMapping("/ai/simple")
    	public Map<String, String> completion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
    		return Map.of("generation", chatClient.call(message));
    	}
    
    }
    调用:
    >curl localhost:8080/ai/simple
    
    {"generation":"Why couldn't the bicycle stand up by itself? Because it was two tired!"}
  2. 流式:
     

    @RestController
    @RequestMapping("/chat")
    public class SimpleAiController {
    
    	private final StreamingChatClient streamChatClient;
    
    	@Autowired
    	public SimpleAiController(StreamingChatClient streamChatClient) {
    		this.streamChatClient=streamChatClient;
    	}
    
    	//流式
    	@GetMapping("/ai/stream")
    	public void streamCompletion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
    		streamChatClient.stream(message).subscribe(
    				m -> System.out.println("Received message: " + m),
    				throwable -> System.err.println("Error occurred: " + throwable.getMessage()),
    				() -> System.out.println("Stream completed")
    		);
    		return;
    	}
    
    }

    调用:
     

    >curl http://localhost:8080/ai/stream

    结果:
    java spring ai,java,人工智能,开发语言

OpenAI图片生成:

@RestController
@RequestMapping("/chat")
public class SimpleAiController {

	private final ImageClient imageClient;

	@Autowired
	public SimpleAiController(ImageClient imageClient) {
		this.imageClient=imageClient;
	}

	@GetMapping("/ai/image")
	public void imageCompletion() {
		ImageResponse response = imageClient.call(
				new ImagePrompt("A cute baby dog",
						OpenAiImageOptions.builder()
								.withQuality("hd")
								.withN(1)
								.withHeight(1024)
								.withWidth(1024)
								.withModel(OpenAiImageApi.DEFAULT_IMAGE_MODEL)
								.build())

		);
		response.getResults().stream().forEach(r -> System.out.println("Image: " + r.getOutput()));
	}

}

调用:

>curl http://localhost:8080/chat/ai/image

结果:

java spring ai,java,人工智能,开发语言

访问Url:

其他:

可以看到调用方式还是非常简单,其他功能可以参考Spring AI官方文档,相信即使是没有接触过AI应用开发的Javaer也能够很快上手。

网络环境解决方案:

借助阿里云FC函数代理文章来源地址https://www.toymoban.com/news/detail-857332.html

到了这里,关于Java程序员的AI框架,它来了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 好用且免费的CodeWhisperer,给1024程序员节送礼来了

          国庆期间没有胆量去人从众的景点,关在家里刷手机时意外在亚马逊的User Group公众号上发现了CodeWhisperer这么个好东西(bu yao qian),以后撸代码也可以提高生产力(fang yang mo yu)了,这还不赶紧上手试一下。看官方介绍说它支持流行的IDE开发工具,包括VS Code、Intelli

    2024年02月08日
    浏览(47)
  • java程序员的就业指导(重点)

    想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内容写到你的简历中,当然更需要的是你在面试的时候向

    2024年02月09日
    浏览(37)
  • Linux必备基础命令,JAVA程序员必备

    目录 一、了解基本的左侧栏什么意思​编辑 二、ls,ll(list,查找目录内容) 三、cd(change directory,切换目录) 小技巧,我们在查找东西的时候,可以使用tab进行智能补全。 四、touch(建立文件) echo(打印到控制台) 五、vim(对文件进行更细粒度的编辑) 六、mkdir(创建目录

    2024年02月05日
    浏览(90)
  • 黑马程序员 Java设计模式学习笔记(一)

    目录 一、设计模式概述 1.1、23种设计模式有哪些? 1.2、软件设计模式的概念 1.3、学习设计模式的必要性 1.4、设计模式分类 二、UML图 2.1、类图概述 2.2、类图的作用 2.3、类图表示法 类的表示方式 类与类之间关系的表示方式 关联关系 聚合关系 组合关系 依赖关系 继承关系

    2024年01月19日
    浏览(52)
  • Java程序员必备工具大全,助力开发效率提升!

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月13日
    浏览(60)
  • 写给Java程序员的Solidity合约快速入门

    前段时间有个项目要用到智能合约,合约的载体是类以太的某链,采用Solidity作为语言,因为疫情原因拉了公司一个Java来写,于是有了这篇Solidity快速入门。 我首先要说的是Java开发写solidity合约是基本可行的,大体思路和解决方案都类似,甚至我认为比通常的Java开发还要简单

    2023年04月09日
    浏览(36)
  • 黑马程序员Java零基础视频教程笔记-面向对象

    1. 面向对象介绍 ① 面向:拿、找 ② 对象:能干活的东西 ③ 面向对象编程:拿东西过来做对应的事情 2. 面向对象重点学习什么 ① 学习获取已有对象并使用 ② 学习如何设计对象并使用 1. 类和对象 ① 类(设计图):是对象共同特征的描述; ② 对象:是真实存在的具体东西

    2024年02月01日
    浏览(48)
  • JAVA输入语句如何编写?老程序员来告诉你

    Java是一种流行的面向对象编程语言,它允许开发人员根据需求创建各种应用程序。输入是任何程序的重要部分,因为它允许用户向程序提供数据。在Java中,您可以使用标准输入流从控制台读取用户数据。在本文中,我们将介绍JAVA输入语句的编写方法。 Java提供了一个标准输

    2024年02月05日
    浏览(60)
  • 高级Java程序员必问,Redis事务终极篇

    Redis事务(Transaction)通过将多个Redis操作封装为一个原子性的操作序列,确保在事务执行过程中,不会受到其他客户端的干扰。从而在保证数据一致性的同时,协调并发,提高数据操作的效率和性能。 在分布式系统和高并发场景下,事务处理具有重要意义。Redis事务可以确保

    2024年02月02日
    浏览(57)
  • Java输入语句怎么写?老程序员来告诉你

    你好,各位编程小伙伴们!今天我们来聊聊Java输入语句怎么写。相信大家都知道,Java是一种面向对象的编程语言,因此输入语句也是通过对象来实现的。那么,接下来我将为大家详细讲解Java输入语句的写法,并通过代码实现。 在Java中,我们可以使用Scanner类来实现输入操作

    2024年02月08日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包