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

Java开发的AI应用框架简述——LangChain4j、Spring AI、Agent-Flex

LangChain4j

LangChain4j官网
star很多,文档齐全,在AI服务中,提供了丰富的功能,示例代码丰富。

简介

是一个功能丰富、易于使用的Java AI开发框架,特别适合需要快速集成和使用大型语言模型的Java开发者。
项目特点

  1. 多语言模型支持:
    ○ 支持多种大语言模型(LLM),包括OpenAI、Anthropic、Cohere等。
    ○ 提供了统一的API接口,使得切换不同的语言模型变得简单。
  2. 丰富的功能:
    ○ LLM访问:轻松调用不同的语言模型进行文本生成、对话等任务。
    ○ Prompt定义:提供了灵活的Prompt定义方式,支持动态生成和模板化。
    ○ Function Calling:支持调用外部函数,将AI模型与其他服务集成。
    ○ 记忆(Memory):支持会话记忆,保持对话上下文的连贯性。
    ○ Embedding:提供了文本嵌入功能,支持向量化表示。
    ○ Vector Store:支持向量存储,便于相似性搜索和推荐系统。
  3. 简洁的API设计:
    ○ 通过简洁的API设计,使得开发者可以快速上手,减少学习成本。
    ○ 示例代码简单明了,易于理解和使用。
  4. 框架集成:
    ○ 可以与Spring Boot等主流Java框架无缝集成,方便在现有项目中引入AI功能。
    ○ 提供了Spring Boot Starter,使得配置和使用更加方便。
  5. 社区和支持:
    ○ 文档:提供了详细的文档和示例代码,帮助开发者快速上手。
    ○ 社区:有活跃的社区和论坛,开发者可以在这里交流经验和解决问题。
    ○ 贡献:欢迎开发者贡献代码和提出改进建议,共同推动项目的持续发展。
应用场景

● 聊天机器人:构建能够进行自然对话的聊天机器人。
● 文本生成:生成文章、摘要、报告等文本内容。
● 情感分析:分析文本的情感倾向,用于市场调研和用户反馈分析。
● 翻译:提供多语言翻译功能。
● 推荐系统:基于用户行为和偏好,提供个性化推荐。

对Chians的理解不同

官方文档中表示:Chains 的概念源自 Python 的 LangChain(在引入 LCEL 之前)。其理念是Chain为每种常见用例(如聊天机器人、RAG 等)都提供一个 Chains。Chains 结合了多个低级组件并协调它们之间的交互。Chains 的主要问题是,如果您需要自定义某些内容,它们会过于死板。LangChain4j 仅实现了两个 Chains(ConversationalChain和ConversationalRetrievalChain),我们目前不打算添加更多 Chains。
提出了另一种解决方案,称为 AI Services,专为 Java 量身定制。 其理念是将与 LLM 和其他组件交互的复杂性隐藏在简单的 API 背后。
这种方法与 Spring Data JPA 或 Retrofit 非常相似:您声明性地定义具有所需 API 的接口,而 LangChain4j 提供实现此接口的对象(代理)。您可以将 AI Service 视为应用程序中服务层的一个组件。它提供AI服务。因此得名。
AI 服务处理最常见的操作:
● 格式化 LLM 的输入
● 解析 LLM 的输出
它们还支持更多高级功能:
● 聊天记忆
● 工具

AI 服务可用于构建有状态的聊天机器人,以促进来回交互,以及自动化隔离对 LLM 的每个调用的流程。
https://docs.langchain4j.dev/tutorials/ai-services#ai-services-1

springboot集成

Spring Boot应用程序
LangChain4j Spring Boot starter 大大简化了在 Spring Boot 应用程序中使用 AI 服务。
示例代码丰富。

Spring AI

Spring AI官网
Spring AI是2024年3月1日推出的,目前只有1.0.0版本。star4.9k,springboot版本要求3.2以上,jdk17及以上
版本更新不快,我6月份使用最新是0.8.1版本。

简介

《Spring AI》是Spring框架家族中的一个新成员,专门用于简化人工智能(AI)应用的开发。它借鉴了Spring框架的核心设计理念,提供了一个强大且灵活的平台,使得开发者可以更轻松地集成和使用各种AI服务和模型。以下是关于《Spring AI》的详细介绍,包括其特点、功能、应用场景和使用方法。

关键特点
  1. 强大的生态系统:
    ○ Spring 生态:《Spring AI》继承了Spring框架的强大生态系统,可以与Spring Boot、Spring Data、Spring Security等其他Spring项目无缝集成。
    ○ 丰富的扩展:提供了大量的扩展和模块,支持多种AI服务和模型。
  2. 低门槛:
    ○ 简单的API:提供了简洁易用的API,使得开发者可以快速上手,减少学习成本。
    ○ 开箱即用:通过Spring Boot Starter,可以快速集成到现有的Spring项目中。
  3. 多语言模型支持:
    ○ 多种模型:支持多种大型语言模型(LLM),包括OpenAI的GPT系列、Anthropic的Claude、阿里云的Qwen等。
    ○ 统一接口:提供了统一的API接口,使得切换不同的语言模型变得简单。
  4. 丰富的功能:
    ○ LLM访问:轻松调用不同的语言模型进行文本生成、对话等任务。
    ○ Prompt定义:提供了灵活的Prompt定义方式,支持动态生成和模板化。
    ○ Function Calling:支持调用外部函数,将AI模型与其他服务集成。
    ○ 记忆(Memory):支持会话记忆,保持对话上下文的连贯性。
    ○ Embedding:提供了文本嵌入功能,支持向量化表示。
    ○ Vector Store:支持向量存储,便于相似性搜索和推荐系统。
  5. 反应式编程支持:
    ○ 反应式编程:支持反应式编程模型,可以构建高并发、低延迟的应用。
    ○ 非阻塞 I/O:使用非阻塞 I/O 操作,提高应用的响应能力和吞吐量。
  6. 安全性:
    ○ Spring Security:可以与Spring Security集成,提供强大的安全保护机制。
    ○ API密钥管理:支持API密钥的安全管理和使用。
应用场景

● 聊天机器人:构建能够进行自然对话的聊天机器人。
● 文本生成:生成文章、摘要、报告等文本内容。
● 情感分析:分析文本的情感倾向,用于市场调研和用户反馈分析。
● 翻译:提供多语言翻译功能。
● 推荐系统:基于用户行为和偏好,提供个性化推荐。
● 图像识别:支持图像识别和处理,适用于视觉相关的AI应用。

Agent-Flex

Agent-Flex官网
最近刚刚出炉的一个Java开发的AI应用框架,目前star不多才200+,可以看后续发展

简介

Agents-Flex 是一个 Java 开发的 AI 应用开发框架,是为了简化 AI 应用开发而生。 其灵感来源 LangChain、 LlamaIndex 以及作者作为一线 AI 应用开发工程师的最佳实践,提供了跨 AI 服务商的、可移植的、可编排、不限 Java 开发框架的 API 支持。
Agents-Flex 适用于聊天、图像生成、Embedding 模型、Function Calling 以及 RAG 应用、智能体编排等场景,支持同步以及流式(Stream)的 API 选择。

Agents-Flex 和其他框架对比

1、更具有普适性
相比 Spring-AI、LangChain4j 而言,Agents-Flex 更具有普适性。

  1. Spring-AI 要求的 JDK 版本必须是 JDK 17+,而 Agents-Flex 只需要 JDK 8+。
  2. Spring-AI 要求必须在 Spring 框架下使用,而 Agents-Flex 支持与任何的 JAVA 框架搭配使用,并提供了 spring-boot-starter 的支持。
  3. Spring-AI、LangChain4j 普遍不支持国内的大模型、Embedding 模型以及向量数据库,而 Agents-Flex 对国产服务支持友好。
    2、更简易的 API 设计
    使用 Agents-Flex 两行代码即可实现聊天功能
    2、更强大的智能体编排
    一个强大的 AI 应用,往往是需要灵活的编排能力来完成的, 相比 Agents-Flex 而言,Spring-AI、LangChain4j几乎没有编排的能力。
    Chain(执行链) 编排
    在 Agents-Flex 中,内置了 3 种不同的 Agents 执行链,他们分别是:
    ● SequentialChain:顺序执行链
    ● ParallelChain:并发(并行)执行链
    ● LoopChain:循环执行连
    而以上 3 种执行链中,每个又可以作为其他执行链的子链进行执行,从而形成强大而复杂的 Agents 执行链条。
核心模块

LLMs大语言模型
Memory记忆
Embedding嵌入
Store存储
Document文档
Agent智能体
Chain执行链

结论

Java端的AI能力主要是在2024年出现的,出现的过程中吸收了之前大量AI相关开源框架的设计经验与考虑了它们应用上的弊端。
能力方面基本满足,但迭代更新频率不快。虽然文档丰富,但使用的人相对于python这几个流行框架来说还是太少。
后续会重点关注上面三个框架发展,从目前来看LangChain4j的能力方面更强,文档更丰富、使用人群更多。

相关文章:

Java开发的AI应用框架简述——LangChain4j、Spring AI、Agent-Flex

LangChain4j LangChain4j官网 star很多,文档齐全,在AI服务中,提供了丰富的功能,示例代码丰富。 简介 是一个功能丰富、易于使用的Java AI开发框架,特别适合需要快速集成和使用大型语言模型的Java开发者。 项目特点 …...

【算法day2】无重复字符的最长子串 两数之和

无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 https://leetcode.cn/problems/longest-substring-without-repeating-characters/ class Solution { public:int lengthOfLongestSubstring(string s) {int sub_length …...

HarmonyOS:基于hmrouter实现Page的生命周期监听

前言:在使用ArkTs语言写鸿蒙的App中,我们发现Page的生命周期函数,如下: 页面的生命周期(32) onPageShow:页面显示触发(页面特有) onPageHide:页面隐藏触发(页面特有) onBackPress:当用户点击返回按钮时…...

DeepSeek + 飞书多维表格搭建你的高效工作流

众所周知,大模型DeepSeek擅长于处理大规模语言模型推理任务,特别是在成本降低和思维链推理方面表现出色‌,我们一般把大模型必做我们的大脑,但是一个人不能只有大脑,还需要其他输入输出以及操作支配的眼耳鼻嘴手足等。…...

uniapp+<script setup lang=“ts“>使用 uni.$emit和uni.$on全局传递数据

注意: 在A页面直接使用 uni.$emit(changeCategoryKey, childCategory)传递,在B页面使用 uni.$on(changeCategoryKey, (val) > {console.log(val, 取值);});只在组件传递有效,页面跳转后是无效的 跳转页面使用的传递数据的方法如下&…...

综合使用pandas、numpy、matplotlib、seaborn库做数据分析、挖掘、可视化项目

目录 1.结构化数据挖掘 1.1依赖库导入和数据读取 1.2各品牌机型及售价统计 1.3视频录制规格与价格关联性分析 2.结构化数据预处理 2.1筛选特征 2.2特征标签归一化及编码 1.结构化数据挖掘 1.1依赖库导入和数据读取 导入必要的依赖库,读取 csv 格式数据集转化为 Data…...

docker中kibana启动后,通过浏览器访问,出现server is not ready yet

问题:当我在浏览器访问kibana时,浏览器给我报了server is not ready yet. 在网上试了很多方法,都未能解决,下面是我的方法: 查看kibana日志: docker logs -f kibana从控制台打印的日志可以发现&#xff…...

十、Redis 主从复制:原理解析、配置实践与优化策略

Redis 主从复制:原理解析、配置实践与优化策略 Redis 作为高性能的 NoSQL 数据库,主从复制(Master-Slave Replication) 是其核心特性之一。主从复制用于数据冗余、读负载分担、故障恢复,是 Redis 构建高可用架构的基础。本文将深入解析 Redis 主从复制的配置方法、复制机…...

使用JMeter(组件详细介绍+使用方式及步骤)

JSON操作符 在我们使用请求时,经常会遇到JSON格式的请求体,所以在介绍组件之前我会将介绍部分操作符,在进行操作时是很重要的 Operator Description $ 表示根元素 当前元素 * 通配符,所有节点 .. 选择所有符合条件的节点 .name 子元素,name是子元素名称 [start:e…...

lamp平台的应用

一.lamp介绍 网站: 静态网站 动态网站 【php语言 .php结尾的文件】 作用:运行php语言编写的动态网站应用 lamp LinuxApache【负责解析静态资源】MySQL【负责存储网站产生的数据】PHP【负责解析动态资源】 如上图所示,是lamp平台中三…...

蓝桥杯4T平台(串口打印电压值)

知识点:串口(单片机发送数据)按键ADC 题目 配置 代码 adc.c uint16_t getadc2(void) {uint16_t adc0;HAL_ADC_Start(&hadc2);adcHAL_ADC_GetValue(&hadc2);return adc; } adc.h uint16_t getadc2(void); main.c #include "lcd.h" #include…...

使用ASIWebPageRequest库编写Objective-C下载器程序

使用 ASIWebPageRequest 库编写 Objective-C 下载器程序是一个简单且高效的方式来处理 HTTP 请求。在 ASIHTTPRequest 和 ASIWebPageRequest 中,ASIWebPageRequest 是专门用于下载网页及其资源的库。 1. 安装 ASIWebPageRequest 首先,你需要安装 ASIHT…...

代码随想录算法训练营 | 图论 | 孤岛总面积、沉没孤岛

101. 孤岛的总面积//思路大概是先计算面积&#xff0c;然后如果有接触路面就返回false。可能稍微多余算了太多无用面积。 #include<bits/stdc.h> using namespace std; void sum(vector<vector<bool>>& finded,const vector<vector<int>>&a…...

迷你世界脚本出生点接口:Spawnport

出生点接口&#xff1a;Spawnport 彼得兔 更新时间: 2023-04-26 10:19:56 具体函数名及描述如下: 序号 函数名 函数描述 1 getSpawnPoint(...) 获取默认出生点 2 setSpawnPoint(...) 设置出生点位置 3 getChunkValidSpawnPos(...) 获取区块有效刷新点…...

双链路提升网络传输的可靠性扩展可用带宽

为了提升网络传输的可靠性或增加网络可用带宽&#xff0c; 通常使用双链路冗余备份或者双链路聚合的方式。 本文介绍几种双链路网络通信的案例。 5GWiFi冗余传输 双Socket绑定不同网络接口&#xff1a;通过Android的ConnectivityManager绑定5G蜂窝网络和WiFi的Socket连接&…...

Pytest测试用例执行跳过的3种方式

文章目录 1.前言2.使用 pytest.mark.skip 标记无条件跳过3.使用 pytest.mark.skipif 标记根据条件跳过4. 执行pytest.skip()方法跳过测试用例 1.前言 在实际场景中&#xff0c;我们可能某条测试用例没写完&#xff0c;代码执行时会报错&#xff0c;或者是在一些条件下不让某些…...

【蓝桥杯】每天一题,理解逻辑(3/90)【Leetcode 快乐数】

闲话系列&#xff1a;每日一题&#xff0c;秃头有我&#xff0c;Hello&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;,我是IF‘Maxue&#xff0c;欢迎大佬们来参观我写的蓝桥杯系列&#xff0c;我好久没有更新博客了&#xff0c;因为up猪我寒假用自己的劳动换了…...

深度学习Save Best、Early Stop

一、Save Best 今天的大模型&#xff0c;在训练过程中可能会终止&#xff0c;但是模型其实是可以接着练的&#xff0c;假设GPU挂了&#xff0c;可以接着训练&#xff0c;在原有的权重上&#xff0c;训练其实就是更新w&#xff0c;如果前面对w进行了存档&#xff0c;那么可以从…...

数据库与存储优化

一、MySQL深度优化 索引优化 B树索引结构 结构特点&#xff1a; 平衡多路搜索树&#xff0c;所有数据存储在叶子节点&#xff0c;非叶子节点仅存键值和指针。叶子节点通过双向链表连接&#xff0c;支持范围查询高效遍历。 优势&#xff1a; 减少磁盘IO&#xff08;高扇出&#…...

Android15请求动态申请存储权限完整示例

效果: 1.修改AndroidManifest.xml增加如下内容: <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-perm...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...