当前位置: 首页 > news >正文

《四种姿势用Java玩转AI大模型:从原生HTTP到LangChain4j》

  • 博客主页:天天困啊
  • 系列专栏:JavaWeb
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

引言

随着人工智能技术的飞速发展,大语言模型(LLM)已经从前沿技术逐渐走向实际应用。作为Java开发者,如何将这些强大的AI能力集成到我们的企业级应用中,成为了一个值得深入探讨的话题。本文将为您介绍四种不同的方式,帮助您在Java生态系统中轻松玩转AI大模型

在现代软件开发中,AI大模型的应用越来越广泛。本文将介绍四种主流的接入方式,帮助您在Java项目中高效地调用AI大模型,并通过具体示例展示如何实现与阿里云Qwen3模型的交互。

四种接入方式:

SDK接入:利用官方提供的软件开发工具包(SDK),这是最直接且便捷的集成方式。
HTTP接入:通过REST API发送HTTP请求来调用模型,适用于需要高度自定义的情况。
Spring AI:基于Spring框架的AI扩展,简化了AI功能的集成过程。
LangChain4j:一个专注于构建LLM应用的Java框架,提供了丰富的组件和工具。

我们平台选择阿里云百炼平台使用阿里云Qwen3模型作为示例,因为它对Java生态有良好的支持,易于与现有Java框架集成,而且也是最近新出的模型,更方面都很不错

1.SDK接入

SDK通常是官方直接提供的集成方式

我们首先要根据官方文档安装SDK,我们可以去Maven中央仓库中查找版本号、

打开项目在pom.xml文件中,添加以下的依赖

<dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><!-- 请将 'the-latest-version' 替换为最新版本号:https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java --><version>the-latest-version</version>
</dependency>

我们现在需要申请一个API的key,申请方式可阅读官方文档:大模型服务平台百炼控制台

示例代码

// 建议dashscope SDK的版本 >= 2.12.0import java.util.Arrays;
import java.lang.System;import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;public class SdkAi {private static final String API_KEY = "你的apiKey";public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {Generation gen = new Generation();Message systemMsg = Message.builder().role(Role.SYSTEM.getValue()).content("你是我的智能助手").build();Message userMsg = Message.builder().role(Role.USER.getValue()).content("你能用java给我写一个快排吗?").build();GenerationParam param = GenerationParam.builder()// 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx").apiKey(API_KEY)// 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models.model("qwen-plus").messages(Arrays.asList(systemMsg, userMsg)).resultFormat(GenerationParam.ResultFormat.MESSAGE).build();return gen.call(param);}public static void main(String[] args) {try {GenerationResult result = callWithMessage();System.out.println(JsonUtils.toJson(result));} catch (ApiException | NoApiKeyException | InputRequiredException e) {// 使用日志框架记录异常信息System.err.println("调用生成服务时出错: " + e.getMessage());}System.exit(0);}
}

输出示例

2.HTTP接入

有些编程语言对一些大模型平台不支持SDK,这个时候我们可以选择使用HTTP请求调用大模型

示例代码

package com.sun.hd;import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;public class HTTPClient {public static void main(String[] args) {String apiKey = "你的apiKey";// 构建请求URLString url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";// 构建请求体JSONObject requestBody = JSONUtil.createObj().set("model", "qwen-plus").set("messages", JSONUtil.createArray().set(JSONUtil.createObj().set("role", "system").set("content", "You are a helpful assistant.")).set(JSONUtil.createObj().set("role", "user").set("content", "你是谁?")));try {// 发送POST请求HttpResponse response = HttpRequest.post(url).header("Authorization", "Bearer " + apiKey).header("Content-Type", "application/json").body(requestBody.toString()).execute();// 输出响应结果System.out.println("Status: " + response.getStatus());System.out.println("Response: " + response.body());// 解析并输出AI的回答内容if (response.getStatus() == 200) {String responseBody = response.body();JSONObject jsonResponse = JSONUtil.parseObj(responseBody);// 提取AI的回答if (jsonResponse.containsKey("choices")) {JSONObject choice = jsonResponse.getJSONArray("choices").getJSONObject(0);JSONObject message = choice.getJSONObject("message");String aiResponse = message.getStr("content");System.out.println("AI回答的内容: " + aiResponse);}} else {System.err.println("请求失败,状态码: " + response.getStatus());}} catch (Exception e) {e.printStackTrace();}}
}

输出示例

3.SpringAI接入

1.引言

背景:简述 Spring 生态系统的发展历程,并引出 Spring AI作为其新成员的诞生
目的:解释 Spring AI 的主要目标,即简化 AI 功能与 Spring 应用的集成

2. Spring AI 的核心价值

简化 AI 集成
统一接口:Spring AI 提供了标准化的 API,使得开发者可以轻松地将不同的 AI 服务集成到 Spring 应用中
提高效率:通过封装复杂的 AI 操作,Spring AI 让开发者能够专注于业务逻辑,而不是底层技术细节

3. Spring AI 的关键特性

详细解析 Spring AI 的功能特性

3.1 跨 AI 供应商的可移植 API 支持

适用场景:适用于聊天、文本转图像和嵌入模型等场景
API 类型:支持同步和流式 API 选项
模型功能访问:可以访问特定于模型的功能

3.2 支持主流 AI 模型供应商

供应商列表:如 Anthropic、OpenAI、微软、亚马逊、谷歌和 Ollama 等
模型类型:包括聊天补全、嵌入、文本转图像、音频转录、文本转语音等

3.3 结构化输出

POJO 映射:将 AI 模型的输出映射到普通 Java 对象(POJO),便于数据处理

3.4 支持主流向量数据库

数据库列表:如 Apache Cassandra、Azure Cosmos DB、Elasticsearch、Milvus、PostgreSQL/PGVector 等

应用场景:适用于需要高效存储和检索向量数据的场景

3.5 跨向量存储供应商的可移植 API

SQL 元数据过滤 API:提供灵活的数据查询和过滤能力

3.6 工具/函数调用

客户端工具和函数:允许模型请求执行客户端工具和函数,实现更丰富的功能

3.7 可观测性

监控信息:提供与 AI 相关操作的监控信息,便于性能优化和问题排查

3.8 文档 ETL 框架

数据工程场景:适用于数据预处理和转换的场景

3.9 AI 模型评估工具

评估生成内容:帮助评估生成内容的质量并防范幻觉响应

3.10 Spring Boot 自动配置和启动器

简化集成:适用于 AI 模型和向量存储的快速集成

3.11 ChatClient API

流式 API:与 AI 聊天模型通信的流式 API,类似于 WebClient 和 RestClient API

3.12 Advisors API

封装生成式 AI 模式:转换发送至语言模型(LLM)和从语言模型返回的数据,提供跨模型的可移植性

3.13 支持聊天对话记忆和检索增强生成(RAG)

增强生成:通过记忆和检索机制,提升生成内容的相关性和准确性

依赖引入

<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M6.1</version>
</dependency>

示例代码

@Component
public class SpringAiClient implements CommandLineRunner {@Resourceprivate DashScopeApi.ChatModel dashscopeChatModel;@Overridepublic void run(String... args) throws Exception {AssistantMessage output = dashscopeChatModel.call(new Prompt("你好啊,我是天天困")).getResult().getOutput();System.out.println(output.getText());}
}

注意使用SpringAI应该使用jdk17版本及以上SpringBoot3版本

4.LangChain4接入


LangChain4j 是 LangChain 的 Java 实现,旨在为 Java 开发者提供一个强大的工具集,用于构建复杂的 LLM 应用。它支持多种 LLM,并提供了丰富的 API 和工具,方便开发者进行模型调用、对话管理等操作

LangChain4主要功能

模型调用:轻松调用各种 LLM,获取模型的预测结果
对话管理:管理多轮对话,维护对话状态
工具集成:集成外部工具和 API,扩展 LLM 的功能

LangChain4j 与 Spring AI 的比较

LangChain4j 和 Spring AI 都是用于构建 AI 应用的框架,它们有以下相似之处:
目标一致:都致力于简化 AI 应用的开发。
功能丰富:都提供了丰富的工具和抽象层,方便开发者使用。
然而,它们也有一些差异:
语言不同:LangChain4j 是 Java 实现,而 Spring AI 是 Spring 生态的一部分。
模型支持:LangChain4j 支持更多的社区模型,而 Spring AI 更注重与 Spring 生态的集成。

它的官方是没有支持阿里系列的大模型,我们只能使用社区版本的整合模型

我们可以去阅读官网文档看看他支持集成的模型列表

官方提供了DashScope大模型的集成方法

引入依赖:


<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-dashscope</artifactId><version>${latest version here}</version>
</dependency>

示例代码

public class LangChainAi {private static final String API_KEY = "";public static void main(String[] args) {ChatLanguageModel qwenModel = QwenChatModel.builder().apiKey(API_KEY).modelName("qwen-max").build();String result = qwenModel.chat("你好我是天天困");System.out.println(result);}
}

总结

这上述四种方式我自己是比较推荐实用Spring提供的,他是属于Spring生态,我们开发都离不开Spring的框架,而且他简单易上手,也可以实现一些复杂的功能开发

http://www.lryc.cn/news/611369.html

相关文章:

  • 如何在nuxt项目中进行meta信息注入
  • 【RabbitMQ】高级特性—消息确认详解
  • 探索设计模式的宝库:Java-Design-Patterns
  • Android UI 组件系列(十一):RecyclerView 多类型布局与数据刷新实战
  • MongoDB学习专题(二)核心操作
  • 《前端安全攻防》
  • java线程同步工具:`synchronized`、`ReentrantLock`与其他并发工具的对比与应用
  • Kafka自动消费消息软件(自动化测试Kafka)
  • python的高校班级管理系统
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-登录实现
  • SpringCloud学习------Gateway详解
  • 将普通用户添加到 Docker 用户组
  • 虚幻GAS底层原理解剖二 (GE)
  • 如何用分布式架构视角理解宇宙稳定性?从精细调参到微服务的类比思考
  • 天津大学2024-2025 预推免 机试题目(第二批)
  • 关于内核启动的optee: probe of firmware: optee failed with error -22 固件拉起失败的问题
  • 《软件测试与质量控制》实验报告四 性能测试
  • HPE磁盘阵列管理01——MSA和SMU
  • “Why“比“How“更重要:层叠样式表CSS
  • sql调优总结
  • 分布式选举算法:Bully、Raft、ZAB
  • 【深度学习新浪潮】TripoAI是一款什么样的产品?
  • ORACLE多表查询
  • GaussDB 常见问题-集中式
  • 【带root权限】中兴ZXV10 B863AV3.2-M_S905L3A处理器刷当贝纯净版固件教程_ROM包_刷机包_线刷包
  • Java set集合讲解
  • 最长连续序列(每天刷力扣hot100系列)
  • python学智能算法(三十三)|SVM-构建软边界拉格朗日方程
  • 利用 Radius Resource Types 扩展平台工程能力
  • avue---upload 图片上传