自2023年初ChatGPT的兴起,人工智能(AI)领域经历了迅猛的发展,各类AI模型与应用如雨后春笋般涌现。尽管当前AI开发工具主要集中在Python和JavaScript语言的大型语言模型(LLM)库上,但在面向企业级(toB)的应用场景中,Java作为一种广泛采用的编程语言,其地位尤为显著。随着AI技术的不断成熟及硬件成本的有效降低,AI大模型在企业级应用中的普及成为必然趋势。因此,构建适用于Java生态系统的AI框架,以满足企业级开发的需求,已成为亟待解决的关键问题。
随着深度学习算法的进步和计算资源成本的下降,AI技术逐渐从学术研究走向工业实践,并深入影响了多个行业。特别是在企业级应用场景中,Java凭借其稳定性和丰富的生态系统,成为了开发复杂业务逻辑和服务端应用的首选语言。然而,在AI应用开发方面,相较于Python和JavaScript等语言,Java社区提供的专用AI框架相对匮乏,这在一定程度上限制了企业在利用AI技术进行创新时的选择空间。
本文旨在对比分析目前市场上两个主流的Java开源AI框架——Spring AI 和 LangChain4j,探讨它们的技术特点、适用场景以及未来发展的潜力。
一、Spring AI 框架
1、Spring AI是什么
Spring AI旨在简化包含人工智能功能的应用程序的开发,而不会产生不必要的复杂性。该项目从著名的 Python 项目(如 LangChain 和 LlamaIndex)中汲取灵感,但 Spring AI 并不是这些项目的直接移植。 该项目的成立理念是,下一波生成式 AI 应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在。
官方网站:https://docs.spring.io/spring-ai/reference/index.html
2、Spring AI 对prompt提示词的支持
在生成式 AI 中,创建提示是开发人员的一项关键任务。prompt提示词的质量和结构会显著影响 AI 输出的有效性。
在 Spring AI 中与 AI 模型交互的最低级别上,在 Spring AI 中处理提示有点类似于在 Spring MVC 中管理“视图”。 涉及使用动态内容的占位符创建大量文本。 然后,根据用户请求或应用程序中的其他代码替换这些占位符。 随着 Spring AI 的发展,它将引入更高级别的抽象来与 AI 模型交互。随着时间的推移,提示的结构在 AI 领域内不断发展。最初,提示是简单的字符串,随着时间的推移,它们逐渐包括特定输入的占位符。 OpenAI 通过在 AI 模型处理之前将多个消息字符串分类为不同的角色,为prompt引入了更多结构。
3、Spring AI 支持的聊天模型
Spring AI支持LLM聊天模型。通过聊天模型 API 使开发人员能够将 AI 驱动的聊天完成功能集成到其应用程序中。它利用预先训练的语言模型,例如 GPT (Generative Pre-trained Transformer),以自然语言生成对用户输入的类似人类的响应。
Spring AI 提供了一个复杂的系统来配置和使用聊天模型。 它允许在启动时设置默认配置,同时还提供了根据每个请求覆盖这些设置的灵活性。这种方法使开发人员能够轻松使用不同的 AI 模型并根据需要调整参数,所有这些都在 Spring AI 框架提供的一致界面中完成。
目前Spring AI支持聊天模型(Chat Model)有:
- Anthropic Claude
- Azure OpenAI
- Google VertexAI Gemini
- Groq (OpenAI-proxy)
- HuggingFace
- Mistral AI
- MiniMax
- Moonshot AI
- NVIDIA (OpenAI-proxy)
- OCI GenAI/Cohere
- Ollama
- OpenAI
- Perplexity (OpenAI-proxy)
- QianFan
- ZhiPu AI
- Watsonx.AI
- Amazon Bedrock
4、Spring AI 支持的Embedding模型
Embedding是文本、图像或视频的数字表示形式,用于捕获输入之间的关系。
Embedding的工作原理是将文本、图像和视频转换为浮点数数组(称为向量)。 这些矢量旨在捕获文本、图像和视频的含义。Embedding数组的长度称为向量的维数。通过计算两段文本的向量表示之间的数值距离,应用程序可以确定用于生成Embedding向量的对象之间的相似性。它的主要功能是将文本转换为数字向量,通常称为Embedding向量。这些Embedding对于各种任务(如语义分析和文本分类)至关重要。
以下是Spring AI支持的Embedding模型的实现:
- pring AI OpenAI Embeddings
- Spring AI Azure OpenAI Embeddings
- Spring AI Ollama Embeddings
- Spring AI Transformers (ONNX) Embeddings
- Spring AI PostgresML Embeddings
- Spring AI Bedrock Cohere Embeddings
- Spring AI Bedrock Titan Embeddings
- Spring AI VertexAI Embeddings
- Spring AI Mistral AI Embeddings
- Spring AI Oracle Cloud Infrastructure GenAI Embeddings
5、Spring AI 支持的其它类型模型
Spring AI除了支持chat模型、Embedding模型,还支持图像模型、语音模型等。
以下是Spring AI支持的图像模型的实现:
- OpenAI Image Generation
- Azure OpenAI Image Generation
- QianFan Image Generation
- StabilityAI Image Generation
- ZhiPuAI Image Generation
6、Spring AI 支持的向量数据库
向量数据库是一种特殊类型的数据库,在 AI 应用程序中起着至关重要的作用。在向量数据库中,查询不同于传统的关系数据库。 它们执行相似性搜索,而不是完全匹配。当给定一个向量作为查询时,向量数据库会返回与查询向量“相似”的向量。
向量数据库用于将数据与 AI 模型集成。 使用它们的第一步是将您的数据加载到向量数据库中。 然后,当要将用户查询发送到 AI 模型时,首先检索一组类似的文档。 然后,这些文档用作用户问题的上下文,并与用户的查询一起发送到 AI 模型。 这种技术被称为检索增强生成 (RAG)。
以下是Spring AI支持的向量数据库的实现:
- Azure Vector Search
- Apache Cassandra
- Chroma Vector Store
- Elasticsearch Vector Store
- GemFire Vector Store
- MariaDB Vector Store
- Milvus Vector Store
- MongoDB Atlas Vector Store
- Neo4j Vector Store
- OpenSearch Vector Store
- Oracle Vector Store
- PgVector Store
- Pinecone Vector Store
- Qdrant Vector Store
- Redis Vector Store
- SAP Hana Vector Store
- Typesense Vector Store
- Weaviate Vector Store
- SimpleVectorStore
7、Spring AI 支持检索增强生成 (RAG)
检索增强生成 (RAG) 是一种有助于克服大型语言模型局限性的技术。Spring AI 通过提供模块化架构来支持 RAG,该架构允许您自己构建自定义 RAG 流或通过 API 使用开箱即用的 RAG 流。Spring AI 包括一个 RAG 模块库,您可以使用这些模块来构建自己的 RAG 流。
另外,Spring AI 提供了类似于RAGFlow数据可视化处理的功能ETL。
提取、转换和加载 (ETL) 框架是检索增强生成 (RAG) 用例中数据处理的主干。ETL 管道编排从原始数据源到结构化向量存储的流程,确保数据处于最佳格式,以便 AI 模型进行检索。RAG 用例是文本,通过从数据主体中检索相关信息来提高生成输出的质量和相关性,从而增强生成模型的功能。
8、Spring AI 支持函数调用
在 AI 模型中集成函数支持,允许模型请求执行客户端函数,从而根据需要访问必要的信息或动态执行任务。
Spring AI 目前支持以下 AI 模型的函数调用:
- Anthropic Claude
- Azure OpenAI
- Google VertexAI Gemini
- Groq
- Mistral AI
- Ollama
- OpenAI
9、Spring AI 支持多模态
人类跨多种数据输入模式同时处理知识。 我们的学习方式、我们的体验都是多模式的。 我们不仅有视觉,只有音频和文本。
与这些原则相反,机器学习通常专注于为处理单一模态而量身定制的专用模型。 例如,我们为文本转语音或语音转文本等任务开发了音频模型,并为对象检测和分类等任务开发了计算机视觉模型。
然而,新一波多模态大型语言模型开始出现。 比如:包括 OpenAI 的 GPT-4o、Google 的 Vertex AI Gemini 1.5、Anthropic 的 Claude3 以及开源产品 Llama3.2、LLaVA 和 Balklava 能够接受多种输入,包括文本图像、音频和视频,并通过集成这些输入来生成文本响应。
Spring AI 目前支持的多模态模型有:
- Anthropic Claude 3
- AWS Bedrock Converse
- Azure Open AI (比如:GPT-4o models)
- Mistral AI (比如:Mistral Pixtral models)
- Ollama (比如:LlaVa, Baklava, Llama3.2 models)
- OpenAI (比如:GPT-4 and GPT-4o models)
- Vertex AI Gemini (比如:gemini-1.5-pro-001, gemini-1.5-flash-001 models)
10、Spring AI最新进展
Spring AI 1.0 的第五个里程碑版本提供了:孵化对模型上下文协议的支持;支持Zhipuai Embedding-3和Pixtral等模型;以及对MariaDB和Azure Cosmos DB 等矢量存储的支持。Spring AI 团队计划在 2025 年 1 月发布第六个里程碑版本,然后在最终 GA 版本之前发布一个候选版本。
二、LangChain4j开源框架
1、LangChain4j是什么
LangChain4j 的目标是简化将 LLM 集成到 Java 应用程序中的过程。
提供如下能力:
(1)统一 API:LLM 提供程序(如 OpenAI 或 Google Vertex AI)和嵌入(向量)存储(如 Pinecone 或 Milvus) 使用专有 API。LangChain4j 提供了一个统一的 API,以避免为每个 API 学习和实现特定的 API。 要试验不同的 LLM 或嵌入存储,您可以轻松地在它们之间切换,而无需重写代码。 LangChain4j 目前支持 15+ 个流行的 LLM 提供商和 20+ 个嵌入商店。
(2)综合工具箱:自 2023 年初以来,社区一直在构建许多由 LLM 提供支持的应用程序。 识别常见的抽象、模式和技术。LangChain4j 已将这些改进为一个即用型包。 我们的工具箱包括从低级提示模板、聊天内存管理和函数调用等工具 到 Agent 和 RAG 等高级模式。 对于每个抽象,我们提供了一个接口以及基于通用技术的多个即用型实现。 无论您是构建聊天机器人还是开发具有从数据摄取到检索的完整管道的 RAG, LangChain4j 提供了多种选择。
(3)许多例子:这些示例展示了如何开始创建各种 LLM 驱动的应用程序。 提供灵感并使您能够快速开始构建。
官方网站:LangChain4j | LangChain4j
开源地址:GitHub - langchain4j/langchain4j: Java version of LangChain
2、LangChain4j架构
LangChain4j 在两个抽象层次上运行:
- 低级别。在此级别,您可以最自由地访问所有低级组件,例如ChatLanguageModel等。 这些是 LLM 支持的应用程序的 “基元”。 您可以完全控制如何组合它们,但您需要编写更多的 glue 代码。
- 高级别。在此级别,您将使用 AI 服务等高级 API 与 LLM 进行交互。 它对您隐藏了所有的复杂性和样板。 您仍然可以灵活地调整和微调行为,但这是以声明方式完成的。
3、LangChain4j支持的LLM大模型
- Amazon Bedrock
- Anthropic
- Azure OpenAI
- ChatGLM
- DashScope
- GitHub Models
- Google AI Gemini
- Google Vertex AI Gemini
- Google Vertex AI PaLM 2
- Hugging Face
- Jlama
- LocalAI
- Mistral AI
- Ollama
- OpenAI
- Qianfan百度智能云千帆大模型
- Cloudflare Workers AI
- Zhipu AI
4、LangChain4j支持的向量数据库
- In-memory
- Astra DB
- Azure AI Search
- Azure CosmosDB Mongo vCore
- Azure CosmosDB NoSQL
- Cassandra
- Chroma
- ClickHouse
- Coherence
- Couchbase
- DuckDB
- Elasticsearch
- Infinispan
- Milvus
- MongoDB Atlas
- Neo4j
- OpenSearch
- Oracle
- PGVector
- Pinecone
- Qdrant
- Redis
- Tablestore
- Vearch
- Vespa
- Weaviate
5、LangChain4j支持函数调用
有一个概念称为 “tools” 或 “function calling”。 它允许 LLM 在必要时调用一个或多个可用工具,这些工具通常由开发人员定义。 工具可以是任何东西:Web 搜索、对外部 API 的调用或特定代码的执行等。 LLM 实际上不能自己调用该工具;相反,他们表达了意图 在其响应中调用特定工具(而不是以纯文本形式响应)。 然后,作为开发人员,我们应该使用提供的参数执行此工具并报告 工具执行的结果。
例如,我们知道 LLM 本身不太擅长数学。 如果您的使用案例涉及偶尔的数学计算,您可能希望为 LLM 提供“数学工具”。 通过在向 LLM 的请求中声明一个或多个工具, 然后,如果它认为合适,它可以决定调用其中一个。 给定一个数学问题和一组数学工具,LLM 可能会决定正确回答这个问题。 它应该首先调用提供的数学工具之一。
6、LangChain4j支持RAG
LLM 的知识仅限于它所训练的数据。 如果您想让 LLM 了解特定领域的知识或专有数据,您可以使用RAG(检索增强一代)。
LangChain4j 提供三种风格的 RAG:
- Easy RAG:开始使用 RAG 的最简单方法。
- Naive RAG:使用向量搜索的 RAG 的基本实现。
- 高级 RAG:一个模块化的 RAG 框架,允许执行其他步骤,例如 查询转换、从多个源检索和重新排名。
LangChain4j 提供了丰富的 API,让您轻松构建自定义 RAG 管道。
7、LangChain4j支持AI服务
由于 LLM 驱动的应用程序通常不仅需要一个组件,还需要多个组件协同工作 (例如,提示模板、聊天记忆、LLM、输出解析器、RAG 组件:嵌入模型和存储) 并且通常涉及多个交互,因此编排它们变得更加麻烦。
我们希望您专注于业务逻辑,而不是低级实现细节。 因此,目前 LangChain4j 中有两个高级概念可以帮助解决这个问题:AI 服务和链。
我们提出了另一种名为 AI 服务的解决方案,专为 Java 量身定制。 这个想法是将与 LLM 和其他组件交互的复杂性隐藏在简单的 API 后面。
这种方法与 Spring Data JPA 或 Retrofit 非常相似:您以声明方式定义一个具有所需 API 的接口, 而 LangChain4j 提供了一个实现此接口的对象(代理)。 您可以将 AI 服务视为应用程序中服务层的一个组件。 它提供 AI 服务。因此得名。
8、LangChain4j支持与Spring Boot集成
LangChain4j 为以下应用提供了Spring Boot Starter:
Spring Boot 启动器有助于创建和配置语言模型、嵌入模型、嵌入存储、 和其他核心 LangChain4j 组件。
要使用 Spring Boot Starter,请导入相应的依赖项。
Spring Boot Starter依赖项的命名约定为:。langchain4j-{integration-name}-spring-boot-starter
例如,对于 OpenAI (),依赖项名称将为:langchain4j-open-ailangchain4j-open-ai-spring-boot-starter
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.0.0-alpha1</version>
</dependency>
9、LangChain4j最新进展
经过 18 个多月的开发,LangChain4j1.0.0 的第一个alpha 版本功能:更新了ChatLanguageModel和StreamingChatLanguageModel接口,以支持额外的用例和新功能;以及Model Context Protocol的初始实现。该团队计划在 2025第一季度发布GA版本。
三、Spring AI和LangChain4j对比分析
1、 Spring AI
平台整合:作为Spring家族的一员,Spring AI继承了Spring Boot的微服务架构优势,支持快速构建可扩展的AI应用程序。
模型训练优化:内置高效的模型训练机制,包括但不限于分布式训练支持,有效缩短了模型迭代周期。
推理引擎灵活性:提供灵活的推理引擎配置选项,适应不同场景下的性能需求,同时增强了对多种硬件加速器的支持。
易于集成:简化了与现有Spring项目和其他第三方库之间的集成过程,降低了学习曲线,便于开发者迅速上手。
2、 LangChain4j
跨语言互操作性:LangChain4j致力于打破语言壁垒,通过统一API接口,实现了与其他编程语言及LLM服务间的无缝对接,极大地方便了多语言项目的协作开发。
异步任务处理:特别强调异步编程的支持,优化了大规模数据集处理时的任务调度效率,提升了整体系统响应速度。
高性能表现:针对特定应用场景进行了深度优化,在处理大规模并发请求或复杂计算任务时表现出色。
社区活跃度:拥有较为活跃的开源社区,促进了新特性的快速迭代和技术文档的完善更新。
3、Spring AI和LangChain4j适用场景
LangChain4j 特别适合用于构建需要快速原型设计、高度灵活性以及跨平台协作的AI应用,特别是在NLP、推荐算法和其他依赖于外部服务集成的场景下。
Spring AI更适合已经采用Spring框架体系构建的企业级应用,尤其是那些注重系统稳定性和安全性、寻求将AI能力无缝融入现有IT基础设施中的组织。它也适用于内部数据驱动型决策支持系统、个性化营销和服务优化等领域。
4、Spring AI和LangChain4j如何选择
对于Java企业级开发而言,选择哪个框架取决于具体的项目需求和技术栈现状:
如果您的团队已经在使用Spring生态系统的其他组件,并且您正在寻找一种方法来快速引入AI功能而不改变现有的开发模式,那么 Spring AI 可能是更好的选择。它提供的工具和功能可以直接嵌入到现有的Spring应用程序中,从而简化了开发流程,并充分利用了Spring框架的优点。
如果您更关注于探索不同的AI模型和服务,或者您的项目涉及到多个编程语言环境之间的协作,那么 LangChain4j 可能更适合。它的跨语言特性和对异步任务处理的支持可以帮助您更灵活地集成各种AI服务,并可能带来更高的性能优势。
最终的选择应基于项目的具体需求、团队的技术背景以及长远的发展规划。在某些情况下,结合两者的优势也可能是一个不错的选择,例如通过LangChain4j连接外部AI服务,同时使用Spring AI管理本地AI逻辑。
5、结论
综上所述,虽然Spring AI和LangChain4j均是优秀的Java开源AI框架,但它们各自侧重的技术方向有所不同。根据实际应用场景和技术要求的不同,开发者可以选择最适合自身需求的框架来加速AI项目的落地实施。未来,随着更多企业和开发者参与到这两个框架的建设中,预计它们将在功能丰富性和易用性方面取得更大的进步,共同推动Java语言在AI领域的广泛应用和发展,我们期待2025年Spring AI和LangChain4j框架GA版本的发布。
作者本人更看好Spring AI未来的发展潜力,毕竟Spring框架在Java语言领域是绝对的top1地位,拥有广泛的群众(程序员)基础和应用生态。