用JAVA实现人工智能:采用框架Spring AI Java

news/2025/1/7 22:14:10/

Spring AI 集成人工智能,为Java项目添加AI功能指南

本文主旨是用实际的可操作的代码,介绍Java怎么通过spring ai 接入大模型。

例子使用spring ai alibaba QWen千问api完成,你可以跑通以后换自己的实现。QWen目前有100万免费Token额度,可以快速实现需求。同时,因为qwen也是个开源的模型,我们可以自己搭建模型来实现免费使用。

目录

?编辑

Spring AI 集成人工智能,为Java项目添加AI功能指南

Spring AI 介绍:为Java引入统一的AI开发框架

Spring AI的主要功能介绍

模型 Model

提示 Prompt

提示词模板 Prompt Template

嵌入 Embedding

结构化输出 Structured Output

检索增强生成 RAG

智能体 Agent

函数调用 Function Calling

向量存储 Vector Store

Spring AI Alibaba 介绍 :接入阿里云百炼大模型的开发工具

阿里云通义千问介绍

使用Spring AI Alibaba构建聊天API的详细指南

1. 环境准备

2. 获取API Key

3. 配置API Key

4. Maven仓库与依赖配置

5. ChatClient的初始化与控制器实现

6. 测试


Spring AI 介绍:为Java引入统一的AI开发框架

过去,Java在AI应用框架方面存在不足,缺乏一个能够良好支持AI开发的统一框架。Spring AI应运而生,它是一个专为AI工程设计的应用框架,旨在将Spring生态系统的设计原则如可移植性和模块化引入AI领域。Spring AI的核心优势在于它提供了一套标准化接口,使得开发者可以轻松地切换不同的AI服务提供商,仅需修改配置即可。此外,Spring AI与现有的Spring生态兼容性极好,同时也完美地融入了Java面向对象编程的特点。这不仅简化了开发流程,还极大地减少了迁移和维护的成本。

Spring AI的主要功能介绍

模型 Model

一句话说明:提供与阿里云通义大模型交互的能力。
输入:用户查询或指令。
输出:基于大模型生成的响应。
举例:通过ChatClient调用通义千问,实现聊天对话。

提示 Prompt

一句话说明:作为有组织的一系列消息和请求选项的容器。
输入:一系列消息及请求选项。
输出:AI模型的响应结果。
举例:使用ChatModel的call()方法传递Prompt实例,获取AI回复。

提示词模板 Prompt Template

一句话说明:用于构建动态提示内容的模板机制。
输入:占位符参数值。
输出:完整的提示字符串。
举例:从文件加载模板并替换参数后发送给AI模型,如生成笑话。

嵌入 Embedding

一句话说明:将文本转换为向量表示,便于相似度计算等操作。
输入:原始文本。
输出:对应的向量形式。
举例:将用户输入转换成向量,用于后续处理如检索增强生成。

结构化输出 Structured Output

一句话说明:将AI模型的非结构化输出转换为结构化的Java对象。
输入:AI模型生成的非结构化文本。
输出:映射到指定Java Bean的数据。
举例:将描述演员及其电影列表的文字自动转换为ActorsFilms类的对象。

检索增强生成 RAG

一句话说明:结合外部数据源提高生成内容的质量和准确性。
输入:用户查询及相关背景信息。
输出:基于检索结果生成的更准确回答。
举例:利用阿里巴巴财报PDF中的信息回答关于财报的问题。

智能体 Agent

一句话说明:代表执行特定任务的逻辑实体。
输入:任务相关的参数。
输出:任务执行的结果。
举例:定义一个数学工具函数供LLM在需要时调用进行计算。

函数调用 Function Calling

一句话说明:允许大型语言模型调用开发者定义的功能。
输入:函数名及所需参数。
输出:函数执行后的结果。
举例:通过定义MessageStatusService查询消息状态,并由LLM决定何时调用。

向量存储 Vector Store

一句话说明:管理和查询文档向量数据库。
输入:文档及其元数据。
输出:按相似度排序的匹配文档列表。
举例:上传PDF文件至知识库,随后基于查询向量检索相关片段。

Spring AI Alibaba 介绍 :接入阿里云百炼大模型的开发工具

Spring AI Alibaba 是基于 Spring AI 的实现,它专为接入阿里云百炼系列大模型而设计。通过 Spring AI Alibaba,开发者能够轻松使用阿里云通义提供的聊天、图片生成或语音生成等AI应用。

Spring AI Alibaba 提供了包括对话、文生图、文生语音等功能在内的多种生成式模型适配,并支持OutputParser、Prompt Template以及让AI模型接入外部数据的能力。

这使得开发者可以快速构建具备智能对话和其他AI功能的应用程序。

其核心优势在于标准化了不同AI提供者的接口实现,允许一次编写代码后只需更改配置即可切换不同的AI服务提供商。此外,它直接兼容Flux流输出,简化了与市场上多数基于流的机器人模型的集成过程。

阿里云通义千问介绍

通义千问是由阿里集团提供的开源大模型服务,支持全尺寸、多模态的大规模模型。在中文开源模型领域中,通义千问展现了卓越的能力,在多项客观评测指标上超越了Llama 3 70B,并在国内的思南大模型竞技场排名中名列前茅。

通义千问的核心优势包括:1)能力排名靠前;2)可访问性和合规性;3)完全开源;4)价格合适。其中,Qwen和Qwen vl两个模态的模型在开源榜单上均位居国内第一。调用API的成本较低,且有100万免费token可以使用,甚至可以选择自己构建以实现免费使用。

对于大模型的客观测评方法,通常采用基准测试和人类评估两种方式。基准测试通过设置考题和答案来评分,常见的基准测试包括GSM-8K、MMLU、TheoremQA和GPQA等。而人类评估或竞技场模式则是由人根据偏好选择更优的答案,这种模式更加贴近实际应用场景,但可能存在主观性偏差。结合使用这两种方法可以获得更为全面的大模型性能评价。

参考链接:

  • https://huggingface.co/spaces/open-llm-leaderboard/open_llm_leaderboard

  • https://lmarena.ai

  • CompassArena

使用Spring AI Alibaba构建聊天API的详细指南

为了实现基于Spring AI Alibaba的聊天API,允许用户输入信息并通过流式返回结果,我们需遵循以下步骤。这个过程包括了环境配置、依赖管理、API Key设置、ChatClient的注入以及具体的Controller实现等环节。以下是详细的执行步骤:

1. 环境准备

确保你的开发环境满足如下要求:

  • JDK版本:JDK 17 或更高。

  • Spring Boot版本:3.3.x 或更高。

2. 获取API Key

访问阿里云百炼页面,登录后开通“百炼大模型推理”服务,并创建一个新的API Key。请妥善保存此Key,后续需要在项目中使用。

3. 配置API Key

在启动你的应用程序前,请确保已在环境中设置了AI_DASHSCOPE_API_KEY环境变量,其值为上一步获取到的API Key。例如,在Unix-like系统中可通过命令行设置:

export AI_DASHSCOPE_API_KEY=your_api_key_here

同时,在application.properties文件里添加以下内容以供Spring Boot应用读取:

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
4. Maven仓库与依赖配置

由于Spring AI Alibaba相关组件尚未发布到Maven中心仓库,因此你需要将Spring官方的里程碑和快照仓库添加至项目的pom.xml文件中。此外还需添加Spring AI Alibaba的starter依赖和其他必要的Spring Boot依赖项。

<repositories><repository><id>sonatype-snapshots</id><url>https://oss.sonatype.org/content/repositories/snapshots</url><snapshots><enabled>true</enabled></snapshots></repository><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><dependencies><!-- Spring Boot parent project --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/></parent><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M3.1</version></dependency><!-- Other dependencies as needed -->
</dependencies>
5. ChatClient的初始化与控制器实现

接下来,我们需要在Controller中注入ChatClient实例,并通过它来处理来自用户的请求。这里展示了一个简单的示例,该示例接收用户输入并利用Flux流式返回AI生成的回答。

@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*")
public class ChatController {private final ChatClient chatClient;@Value("classpath:correct-and-expand.st")Resource resource;public ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping("/chat")public String chat(String input) {return this.chatClient.prompt().user(input).call().content();}@GetMapping(value = "/chatStream")public Flux<String> chatSteam(@RequestParam String input, HttpServletResponse response) {// 如果遇到乱码问题,可增加编码设置response.setCharacterEncoding("UTF-8");PromptTemplate promptTemplate = new PromptTemplate(resource);Prompt prompt = promptTemplate.create(Map.of("input", input));return chatClient.prompt(prompt).stream().content();}
}

以上代码展示了如何构建一个简单的聊天API端点,其中/chat用于非流式响应,而/chatStream则支持基于Reactor的流式响应。

6. 测试

完成上述步骤后,你可以通过向http://localhost:8080/ai/chat?input=你好发送GET请求来测试聊天功能是否正常工作。对于流式响应,尝试访问http://localhost:8080/ai/chatStream?input=你好查看效果。

通过按照上述步骤操作,你就能成功集成Spring AI Alibaba框架,搭建起一个基本但功能完整的聊天API服务。


http://www.ppmy.cn/news/1561384.html

相关文章

JuiceFS 详解:一款为云原生设计的高性能分布式文件系统

JuiceFS 详解&#xff1a;一款为云原生设计的高性能分布式文件系统 1. 什么是 JuiceFS&#xff1f; JuiceFS&#xff08;Juiced File System&#xff09;是一款高性能、POSIX 兼容的云原生分布式文件系统。它采用对象存储作为底层存储&#xff0c;支持多种元数据引擎&#xf…

Synthesia技术浅析(二):虚拟人物视频生成

Synthesia 的虚拟人物视频生成模块是其核心技术之一&#xff0c;能够将文本输入转换为带有同步语音和口型的虚拟人物视频。该模块如下所示&#xff1a; 1.文本输入处理 2.语音生成&#xff08;TTS, Text-to-Speech&#xff09; 3.口型同步&#xff08;Lip Syncing&#xff0…

YOLOV8涨点之融合自适应特征融合注意机制

基本架构 YOLOv8继承和发展了先前版本的设计理念,采用 三部分结构 :主干网络(Backbone)、特征融合网络(Neck)和检测头(Head)。这种模块化设计使模型能够灵活应对不同规模的任务需求: Backbone部分使用 C2f模块 替代了YOLOv5中的C3模块,实现了进一步的轻量化。 Neck部分采用…

MySQL 11 章——数据处理之增删改

一、插入数据 &#xff08;1&#xff09;实际问题 如果我们要想表中插入新的记录&#xff0c;那么解决方式&#xff1a;使用INSERT语句向表中插入数据 &#xff08;2&#xff09;方式一&#xff1a;VALUES的方式添加 方式一就是一条一条地添加数据演示代码&#xff1a; CRE…

【C语言程序设计——文件】文件操作(头歌实践教学平台习题)【合集】

目录&#x1f60b; <第1关&#xff1a;文件操作1> 任务描述 相关知识 文件打开操作 文件读取操作 使用 fgetc() 函数读取单个字符&#xff1a; 使用 fgets() 函数读取一行字符&#xff1a; 文件写入操作 使用 fputc() 函数写入单个字符&#xff1a; 使用 fput…

SSH网络终端的概述及使用指南

以下是5个常用的SSH网络终端的概述、功能特点、下载地址和使用方法&#xff1a; PuTTY 概述&#xff1a;PuTTY是一款开源的SSH和Telnet客户端&#xff0c;以其轻量级和便捷性而广受欢迎。功能特点&#xff1a;支持多种协议&#xff0c;包括SSH、Telnet、rlogin和原始TCP连接。提…

排序算法的实现(插入,希尔,选择,冒泡,堆排,快排)

目录 1.选择排序 2.冒泡排序 3.堆排序 4.插入排序 5.希尔排序 6.快排 6.1快排的优化 6.2快排&#xff08;双指针法&#xff09; 6.3快排&#xff08;非递归&#xff09; 7.归并排序 7.1归并非递归 8.计数排序 1.选择排序 对n个元素进行选择排序&#xff0c;我们可以…

原型模式详解与实践

在软件开发的奇妙世界里&#xff0c;我们常常面临重复创建相似对象的任务。如果每次创建都要从头开始设置各种属性和状态&#xff0c;不仅繁琐&#xff0c;还可能降低效率。原型模式就像一位神奇的魔法师&#xff0c;为我们提供了一种通过复制现有对象来创建新对象的优雅方式。…