JAVA可不可以做AI开发?

JAVA实现人工智能,采用框架SpringAI SpringAI是AI工程师的一个应用框架,它提供了一个友好的API和开发AI应用的抽象,旨在简化AI应用的开发工序,例如开发一款基于ChatGPT的对话应用程序。项目地址文档地址目前该项目已经集成了OpenAI、Azure OpenAI、HuggingFace、Ollama等API。不过,对于集成了OpenAI接口的项目,只要再搭配One-API项目,就可以调用目前主流的大语言模型了。在介绍如何使用Spring AI开发一个对话接口之前,我先介绍下ChatGPT应用的开发原理。 阅读详情

本文教你怎样用Spring AI给Java项目加上的AI功能。

以往,大模型接口通常仅提供 Http 服务,或者是不太专业的 sdk。这就致使我们 Java 程序员不得不依据这些非标准的 SDK 来开展自身业务。虽然这种方式可行,但却存在显著弊端,即接口缺乏统一性,并且与 Java 传统的面向对象编程习惯不太契合。

值得庆幸的是,spring ai 挺身而出,借鉴 Langchain 的一些核心对象封装形式,重新构建了一套适用于 Java 的 ai 调用接口。如此一来,我们便能通过同一接口随时更换不同的 ai 实现方案,这无疑便捷了许多。

下文就是spring ai 的整个介绍,我们以spring ai alibaba为例(因为国内用这个方便一些),来仔细讲解如何快速的让java可以使用大模型的能力

本例的是spring ai alibaba和QWen千问API。你可以先试着跑通例子,再换成自己的实现。现在QWen有100万免费Token可以用,很适合快速开发。另外QWen是开源的,自己搭模型也能免费用。

Spring AI:Java领域中的AI应用框架革新

过去在Java领域里,缺少一个优秀的AI应用框架。这给开发者带来不少困扰。Spring AI的出现解决了这个问题。它是一个专为AI工程设计的应用框架。Spring AI把Spring生态系统的设计原则带到了AI开发中。这样做让Spring AI和现有的Spring生态无缝对接。同时Spring AI也完美支持Java面向对象编程。使用Spring AI最大的好处是提供了一套统一的接口。这样可以轻松切换不同的AI服务提供商。只需更改配置即可。这大大简化了开发工作。Spring AI还兼容Flux流输出。这意味着它可以很容易地与基于流的机器人模型集成。通过这些设计,Spring AI显著减少了程序员的工作量。

Spring AI Alibaba:简化接入阿里云大模型服务的开发工具

Spring AI Alibaba 是一个基于 Spring AI 的实现,专门针对阿里云的大模型服务进行适配。它让开发者能够轻松接入阿里云的百炼系列云产品,如通义千问等大模型。Spring AI Alibaba 支持多种生成式模型的应用场景,包括对话、文生图、文生语音等功能。它的核心优势在于提供了一套统一的接口,使得代码可以写一次就支持多种AI提供商的服务切换。此外,还提供了诸如 Prompt Template 和 OutputParser 等实用工具,帮助简化开发流程。通过 Spring AI Alibaba,开发者可以快速构建出功能强大的AI应用,而无需深入了解底层复杂的API调用逻辑。

阿里云通义千问简介

通义千问是由阿里集团推出的开源大模型服务,支持全尺寸和多模态的大规模模型。它在中文开源模型领域表现出色,在国内的思南大模型竞技场排名中名列前茅。

通义千问的核心优势包括:

  1. 能力排名靠前:QWen 在MMLU、TheoremQA、GPQA等客观评测指标上超越了Llama 3 70B。
  2. 可访问性和合规性:API调用有安全保护,避免恶意攻击问题。
  3. 完全开源:提供了全尺寸的多模态大模型开源版本,用户可以根据需求选择不同大小的模型。
  4. 价格合适:提供100万免费token使用,并且调用API的成本较低,甚至可以自己构建免费使用。

特别推荐关注其Qwen和Qwen vl两个模态的模型,它们在开源榜单上均位居国内第一。

对于大模型的能力评估,主要通过基准测试和人类评估两种方式进行。基准测试包括GSM-8K、MMLU、TheoremQA和GPQA等,可以参考Hugging Face的开放大模型排行榜[https://huggingface.co/spaces/open-llm-leaderboard/open_llm_leaderboard]。而人类评估则更贴近实际应用场景,可以参考国外的竞技场排行榜[https://lmarena.ai]或国内的思南平台CompassArena [https://arena.opencompass.org.cn/]。

在Spring Boot中集成Spring AI Alibaba

为了基于Spring Boot集成Spring AI Alibaba,并完成一个支持prompt的流返回接口的项目,您需要遵循以下步骤来设置您的开发环境和编写代码。本示例将创建一个简单的对话模型,通过GET请求接收用户输入并使用ChatClient能力生成回复。此外,我们将确保该接口支持CORS跨域访问,URL为http://localhost:8080/ai/steamChat?input=...。

1. 环境与依赖准备

首先,请确认满足以下前置要求:

  • JDK版本在17或以上。
  • Spring Boot版本在3.3.x及以上。

添加阿里云百炼API KEY

请前往阿里云百炼页面按照指示操作以获取API KEY,并将其设置到系统环境变量中(或者直接在应用配置文件里指定):

export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}

配置Maven仓库

由于spring-ai-alibaba-starter可能还没有发布到官方Maven中央仓库,您需要添加Spring的仓库到您的pom.xml文件中,以便能够正确下载所需依赖项:

<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>

引入必要的依赖

在pom.xml内添加对spring-ai-alibaba-starter及其他相关库的支持:

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

    <!-- Spring AI Alibaba Starter -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>

        <artifactId>spring-ai-alibaba-starter</artifactId>

        <version>1.0.0-M3.1</version>

    </dependency>

</dependencies>

2. 应用程序属性配置

在application.properties或application.yml文件中设置通义大模型相关的API密钥以及默认聊天选项(如果有的话):

# application.properties
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}

3. 创建Controller层处理逻辑

接下来,定义一个控制器类ChatController,它将处理来自客户端的请求,并利用ChatClient实例来产生响应。请注意,这里也实现了CORS跨域资源共享策略。

import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import com.alibaba.cloud.ai.ChatClient;

@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*") // 允许所有来源的请求
public class ChatController {

    private final ChatClient chatClient;

    public ChatController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @GetMapping(value = "/steamChat")
    public Flux<String> chatSteam(@RequestParam String input, HttpServletResponse response) {
        response.setCharacterEncoding("UTF-8"); // 设置字符编码防止中文乱码
        return chatClient.prompt(input)
                .stream()
                .content();
    }
}

4. 测试您的应用程序

现在您可以启动Spring Boot应用程序,并尝试访问http://localhost:8080/ai/steamChat?input=您好这样的地址来验证是否能够得到预期的回答了。确保已经设置了正确的API KEY并且网络状况良好,以保证能够顺利连接到后端服务。

以上就是如何基于Spring Boot集成Spring AI Alibaba并构建一个简单对话服务的过程。这个例子展示了基本的功能实现方法;对于更复杂的应用场景,如自定义Prompt模板等高级特性,则可以参考更多资料链接中的详细文档说明。

构建基于React的流输出前端项目

基于React构建一个简单的支持流输出的前端项目,可以参考以下步骤。这个示例中,我们将创建一个能够与后端交互的应用程序,该应用程序通过发送请求到http://localhost:8080/ai/steamChat?input=…来接收数据流,并将接收到的信息实时展示给用户。

构建项目并填写代码

首先,你需要确保你的开发环境中已经安装了Node.js和npm。然后按照下面的步骤开始创建新的React应用:

  1. 初始化一个新的React应用:打开命令行工具,执行以下命令以创建一个新的React应用,并进入项目目录:
npx create-react-app frontend
cd frontend
npm install
  1. 编辑基础文件结构:
  • public/index.html: 这个HTML文件是你的React应用的基础页面模板。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Stream Chat App</title>

</head>

<body>
  <div id="root"></div>

</body>

</html>
    • src/index.js: 这个文件用于渲染React组件到DOM。
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);
    • src/App.js: 主应用组件。
import React from 'react';
import ChatComponent from './components/ChatComponent';

function App() {
  return (
    <div className="App">
      <ChatComponent />
    </div>

  );
}

export default App;
  1. 实现聊天组件:创建src/components/ChatComponent.js文件,在这里定义一个名为ChatComponent的功能性组件,它负责处理消息输入、发送以及显示从服务器接收的消息流。
import React, { useState } from 'react';

function ChatComponent() {
  const [input, setInput] = useState('');
  const [messages, setMessages] = useState('');

  const handleInputChange = (event) => {
    setInput(event.target.value);
  };

  const handleSendMessage = async () => {
    try {
      const response = await fetch(`http://localhost:8080/ai/steamChat?input=${input}`);
      if (!response.ok) throw new Error("Network response was not ok");
      
      const reader = response.body.getReader();
      const decoder = new TextDecoder('utf-8');
      let done = false;

      while (!done) {
        const { value, done: readerDone } = await reader.read();
        done = readerDone;
        const chunk = decoder.decode(value, { stream: true });
        setMessages((prevMessages) => prevMessages + chunk);
      }
      
      // 添加分隔符区分每次会话
      setMessages((prevMessages) => prevMessages + '\n\n=============================\n\n');
    } catch (error) {
      console.error('Failed to fetch:', error);
    }
  };

  const handleClearMessages = () => {
    setMessages('');
  };

  return (
    <div>
      <input type="text" value={input} onChange={handleInputChange} placeholder="Enter your message" />
      <button onClick={handleSendMessage}>Send</button>

      <button onClick={handleClearMessages}>Clear</button>

      <div>
        <h3>Messages:</h3>

        <pre>{messages}</pre>

      </div>

    </div>

  );
}

export default ChatComponent;

运行项目

完成上述配置后,可以通过运行以下命令启动你的React应用:

npm start

这将开启一个本地开发服务器,默认在浏览器中打开http://localhost:3000地址查看你的应用程序。此时,你可以输入消息并通过点击“Send”按钮向指定URL发送请求,从而测试是否能正确获取并显示返回的数据流。请注意,为使此功能正常工作,后端服务需要支持CORS(跨源资源共享)策略。

5分钟入门SpringAi - java快速接入国内大模型 Spring AI 快速接入让Java项目轻松添加AI功能,特别是通义千问的支持。通过Spring AI,开发者可以利用其统一接口特性来简化不同AI服务的切换过程,只需调整配置即可。Spring AI Alibaba专为阿里云的大模型如通义千问设计,使得接入这些服务变得异常简单。此框架完美地融入了现有的Spring生态系统,并支持面向对象编程,同时兼容Flux流输出,极大地促进了基于流的应用程序开发。本文可以让你快速学会怎么接国内大模型 阅读详情

相关推荐

JAVA与人工智能:开发未来的AI

Java在人工智能方向的发展

小蜜蜂vs码农 3198

Java语言可以开发人工智能吗

是的,Java语言可以开发人工智能。Java是一种多平台、面向对象的编程语言,具有良好的可移植性和丰富的类库。在人工智能领域,Java可以用来开发各种应用,如机器学习、自然语言处理等。 ...

weixin_42575505的博客 925

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

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

web18285482512的博客 2080

5分钟搞定:Spring AI支持SpringBoot快速构建人工智能AI应用_springai_springboot_AI应用

通过阅读这篇文章,你将了解Spring AI, 它是一个借鉴了langchain的设计理念,并结合Java的优势,为开发者提供易于替换实现的统一接口。 此外,文章还基于 Spring AI的 模型调用和Prompt模板 ,构建一个可操作的示例,让你可以快速的了解具体怎么在springboot的环境下 使用spring ai 来构建人工智能AI的应用

whisperzzza的博客 4518

IntelliJ IDEA 在 Java 人工智能开发中的应用

本博客的主要目的是全面介绍 IntelliJ IDEA 在 Java 人工智能开发中的应用。我们将探讨如何利用 IntelliJ IDEA 的强大功能来提高 Java 人工智能项目的开发效率和质量。范围涵盖了从基础的开发环境搭建到实际项目的开发过程,包括核心算法的实现、数学模型的应用以及项目的部署和优化等方面。本文将按照以下结构进行组织:首先介绍核心概念与联系,让读者了解 Java 和人工智能的基本原理和架构;接着详细讲解核心算法原理和具体操作步骤,并通过 Python 代码示例进行说明;

AI开发架构师 1204

用Java做AI开发_JAVA_AI_development

按照上述步骤操作,你就可以基于Spring Boot搭建一个简单的支持Prompt功能并通过HTTP GET请求提供聊天服务的应用程序了。整个过程中,主要涉及到了环境配置、依赖管理以及基本的服务端逻辑编写等环节。确保所有配置正确无误后启动应用,即可通过指定URL调用聊天服务。

whisperzzza的博客 1811

用JAVA写人工智能应用_JAVA_AI

Java编写AI应用,超详细简单,spring AI的诞生主要为了解决过去Java在处理AI相关任务时缺乏一个类似于Python中LangChain这样的高效框架的问题。随着GPT等大型语言模型的发展,对于能够便捷地与这些模型交互的需求日益增长。Spring团队基于此背景,结合了Java语言的特点和优势,开发出了一套高度抽象且易于集成的解决方案—Spring AI。

whisperzzza的博客 2793

Java与人工智能开发入门

Java提供了多种人工智能库和工具,例如Weka、OpenNLP、OpenCV和DL4J等,这些库和工具可以帮助开发人员构建和训练机器学习模型、执行自然语言处理、计算机视觉和深度学习等任务。在实战中,我们可以使用Java和OpenCV库来构建一个人脸识别系统,它可以检测人脸并将其保存到文件中,还可以显示检测到的人脸。这些库和工具可以帮助开发人员分析和处理图像,例如对象检测、人脸识别和图像分类等任务。强大的库:Java提供了许多常用的库和工具,这些库和工具可以帮助开发人员快速开发人工智能应用程序。

吃不胖. 1114

Java和Python,哪个更适合开发AI人工智能?

Java 比 Python 快——Java 是一种统计类型和编译语言,而 Python 是一种动态类型和解释语言,它决定了变量数据类型。Java 在编译期间执行类型检查,而 Python 在运行时执行,这增加了执行时间。因此,与 Python 相比,Java 的执行时间更短。因此,Java 在速度方面击败了 Python。

TSINGSEE青犀视频官方技术博客 5650

BEV感知技术全景解析:从纯视觉到多传感器融合的实战指南

本文全面解析了自动驾驶中的BEV感知技术,从纯视觉到多传感器融合的实战应用。文章深入探讨了BEV如何提供“上帝视角”,对比了IPM、Lift-Splat-Shoot及Transformer等核心实现范式,并详细阐述了多传感器融合(尤其是中融合)的工程实践与优势,为开发者提供了从理论到原型搭建的完整指南。

win55的博客 1141

北京绿盟科技安服实习生面经

记一次绿盟校招技术面经历,人生第一次面试,该说不说还是很紧张的,以下是技术面的一些问题,欢迎各位大佬在评论区补充纠正对于面试的问题,都应该自己下来深度去拓展学习,面试官问的问题刚好可以检测我们自己对某个模块的学习情况,借此更好的进行总结和学习。

qq_51690690的博客 3237

最适合人工智能开发的5种编程语言

自从去年,AlphaGo打遍天下棋手无对手,人工智能的风头就一直无人能及。在刚刚过去的IT领袖峰会上,BAT三位大佬都看好人工智能的未来发展。今年年初,百度就做了一个大动作,在医疗方面押宝人工智能,所以在这次峰会上李彦宏也发声称互联网是道开胃菜,人工智能才是主菜。人工智能是一个很广阔的领域,很多编程语言都可以用于人工智能开发,所以很难说人工智能必须用哪一种语言来开发...

qq_44929388的博客 6134

Ubuntu24安装MongoDB(解压版)

依据前面 Linux 发行版本的信息,选择你需要的版本,文件格式选择 tgz 格式,最后点击 Download(下载到你的电脑)或 点击 Copy link 左侧图标(复制下载链接在使用服务器下载)依据前面 Linux 发行版本的信息,选择你需要的版本,文件格式选择 tgz 格式,最后点击 Download(下载到你的电脑)或 点击 Copy link 左侧图标(复制下载链接在使用服务器下载)默认情况下,只能在本机访问 MongoDB,要想远程访问 MongoDB,需要修改配置文件。

rao991207823的博客 2022

用Java做人工智能_java AI development

Spring AI:简化Java大模型应用开发的框架当前Java调用大模型时缺乏优秀的AI应用框架,导致开发效率低下。Spring作为老牌Java应用框架厂商,推出了Spring AI来解决这个问题。它借鉴了LangChain的核心理念,并结合了Java面向对象编程的特性,为开发者提供了一套标准化接口,使得一次编写代码后可...

cnzzs的博客 935

初识Classic AUTOSAR开发工具链

在过去,软件和硬件之间具有很强的耦合性,阻碍了软件组件在不同硬件平台上的可移植性和重用性。而AUTOSAR作为汽车电子行业的标准,提供标准的软件接口定义,工程师可以根据需求将软件组件分配到汽车的ECU中,实现标准软件组件的可重用性。

怿星科技的博客 8096

ArcGIS Pro 拓扑编辑实战:从‘地图拓扑’到‘共享编辑’,手把手教你批量修改要素

本文详细介绍了ArcGIS Pro中的拓扑编辑功能,从地图拓扑配置到共享编辑技巧,手把手教你如何批量修改要素。通过实战案例展示拓扑编辑在城市规划、地籍管理等场景中的应用,显著提升编辑效率并减少拓扑错误,是现代GIS技术的重要生产力工具。

weixin_30500473的博客 505

【转型必看】Java到AI大模型,程序员的逆袭秘籍,转行人工智能不再是梦!

随着技术的不断进步,人工智能(AI)已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能,转型的优势,薪资对比,以及转型所需的知识和学习路线等。01总体来看,人工智能行业的薪资水平和职业发展前景都优于Java开发。对于正在考虑职业发展路径的个人,尤其是那些面临职业瓶颈或希望拓展技能的Java开发人员,转型到人工智能领域是一个值得考虑的选择。

datian1234的博客 2001

CDMamba安装配置Windows(50系列的显卡)

本人家里的显卡是RTX3050的,运行起来非常缓慢,大家可以参考上一篇文章,以下是用RTX5080配置的CDMamba,里面有一些库没有更新,因此会比较坑爹。就是pytorch已经更新了,搭配的是cuda12.8,但是cdmamba里的mmcv只更新到cuda12.1的版本,当然很多人会说那就向下兼容,但是笔者已经尝试了,会一直提示mmcv的问题。因此,索性直接不用mmcv。

hanfeng5268的博客 686

【转型必看】Java到AI,程序员的逆袭秘籍,转行人工智能不再是梦!

随着技术的不断进步,人工智能(AI)已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能,转型的优势,薪资对比,以及转型所需的知识和学习路线等。

2401_84206094的博客 1549

(9-2)离线强化学习:离线强化学习的主流方法

本文介绍了三种离线强化学习的主流约束策略优化方法:BCQ、CQL和Fisher-BRC,并通过CartPole环境进行性能比较。BCQ利用生成模型约束动作选择并引入扰动网络;CQL通过正则化Q值抑制对未见状态-动作对的高估;Fisher-BRC使用Fisher散度正则化策略分布。实验结果表明,三种方法各有优势,其中CQL表现最为稳定。文章还指出,为获得更好的性能,需要更大的数据集和更长的训练轮次。这些方法通过限制策略优化范围,有效提高了离线强化学习的稳定性和泛化能力。

码农三叔 1542

Qt基础之十九:进程与QProcess

进程就是一个程序的执行实例,也就是正在运行的程序。对操作系统来说,进程就是一个担当分配系统资源CPU时间、内存的实体。在Qt 中,我们使用QProcess来表示一个进程。这个类可以允许我们的应用程序启动一个新的外部程序,并且与这个程序进行通讯。当外部程序开始启动时,QProcess的状态为Starting;外部程序已经启动时,QProcess的状态为Running,并发送started()信号;当外部层序退出了,QProcess的状态为NotRunning(初始状态),并发送finished()信号。

草上爬的博客 1万+
上一篇: 硬核知识 | 一文搞懂人工智能、机器学习、深度学习的关系
下一篇: 【一起学习深度学习】 深度学习导航 | 快速复习笔记 | 知识点总结
深度学习机器学习
博客等级 码龄2年 495粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值