Java 微服务 AI 集成:LangChain4j 与 SpringAI

发布于:2025-08-30 ⋅ 阅读:(22) ⋅ 点赞:(0)
  • 本文字数:约 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:外部工具调用接口