当前位置: 首页 > 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...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...