- 本文字数:约 8200 字 预计阅读时间:35 分钟
一、框架全景解析:LangChain4j 与 SpringAI 核心架构
1.1 框架起源与定位
LangChain4j:由 LangChain 社区推出的 Java 版本实现,旨在为 Java 开发者提供与 Python 版 LangChain 相似的功能体验。官方定位为 "Java ecosystem for working with LLMs",专注于提供灵活的 LLM 交互抽象和链式调用能力(来源:LangChain4j 官方文档)。
SpringAI:Spring 生态官方推出的 AI 集成框架,定位为 "Apply AI principles to Spring applications",致力于将 AI 能力无缝融入 Spring 生态,提供与 Spring Boot、Spring Cloud 等组件的自然集成(来源:SpringAI 官方 GitHub 仓库)。
1.2 核心架构对比
1.3 生态系统与集成能力
LangChain4j 的优势在于:
- 与主流 LLM 提供商的广泛兼容性
- 灵活的链式处理机制
- 丰富的记忆实现策略
- 轻量级设计,可集成到任何 Java 应用
SpringAI 的优势在于:
- 与 Spring 生态(Spring Boot、Spring Cloud 等)深度集成
- 基于 Spring 的依赖注入和自动配置机制
- 统一的客户端抽象,简化多模型切换
- 与 Spring Data 等组件的自然融合
二、环境搭建:从零开始的 AI 集成准备
2.1 开发环境要求
- JDK 17+(推荐 Amazon Corretto 17 或 Oracle JDK 17)
- Maven 3.8 + 或 Gradle 7.5+
- Spring Boot 3.2+(如使用 Spring 生态)
- 一个或多个 LLM API 密钥(如 OpenAI、Anthropic 等)
2.2 项目初始化与依赖配置
2.2.1 LangChain4j 项目配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>langchain4j-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<langchain4j.version>0.24.0</langchain4j.version>
<lombok.version>1.18.30</lombok.version>
<commons-lang3.version>3.14.0</commons-lang3.version>
</properties>
<dependencies>
<!-- LangChain4j核心依赖 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-core</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- OpenAI集成 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-openai</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- 内存存储 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-memory</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<!-- Apache Commons Lang -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<!-- Spring Context (可选,用于依赖注入) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.2</version>
</dependency>
</dependencies>
</project>
2.2.2 SpringAI 项目配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>spring-ai-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-ai.version>0.8.1</spring-ai.version>
<lombok.version>1.18.30</lombok.version>
<commons-lang3.version>3.14.0</commons-lang3.version>
</properties>
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Spring AI Starter -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-openai</artifactId>
<version>${spring-ai.version}</version>
</dependency>
<!-- Spring AI Vector Store (可选) -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-pinecone-store</artifactId>
<version>${spring-ai.version}</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<!-- Apache Commons Lang -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<!-- Spring Boot Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<!-- Spring AI仓库 -->
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
2.3 配置文件设置
2.3.1 LangChain4j 配置(application.yml)
langchain4j:
openai:
api-key: ${OPENAI_API_KEY:your-api-key-here}
model-name: gpt-3.5-turbo
temperature: 0.7
memory:
max-messages: 10
retention-policy: RECENT
2.3.2 SpringAI 配置(application.yml)
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY:your-api-key-here}
chat:
model: gpt-3.5-turbo
temperature: 0.7
embedding:
model: text-embedding-ada-002
vectorstore:
pinecone:
api-key: ${PINECONE_API_KEY:your-pinecone-key}
environment: gcp-starter
index-name: demo-index
三、LangChain4j 实战:构建智能问答服务
3.1 核心组件解析
LangChain4j 的核心组件围绕 "链 (Chain)" 的概念设计,主要包括:
- LanguageModel:LLM 交互的核心接口
- PromptTemplate:模板引擎,用于构建提示词
- Memory:对话记忆组件,支持上下文管理
- Chain:链式处理器,用于组合多个操作
- Tool:外部工具调用接口