本文通过一个实际项目——智能文件助手(FileAgent)的三种不同实现方案,深度对比 Spring AI、LangChain4j 和 LangChain 三大主流 AI Agent 框架的技术特点、适用场景和开发体验。

文章关键词:Spring AI、LangChain4j、LangChain、AI Agent、智能助手、技术对比


一、项目背景

在 AI 大模型时代,构建一个能够理解用户意图、调用工具完成任务的 AI Agent 已成为企业应用开发的标配。我们以同一个需求场景为例:

需求:构建一个智能文件助手,支持文件读取、创建、编辑、删除、磁盘查看等操作,支持多轮对话和知识库检索。

这个看似简单的需求,实际上考验了三大 AI Agent 框架的核心能力:

  • 工具调用(Function Calling)
  • 上下文管理(Memory)
  • 多模态处理(文档解析)
  • 流式输出(Streaming)

二、三种实现方案概览

2.1 fileAgent(Spring AI 版)

技术栈

  • 框架:Spring Boot 3.2.5 + Spring Alibaba AI 1.0.0-M6.1
  • 语言:Java 17
  • 文档处理:Apache POI 5.2.5、PDFBox 2.0.30
  • Web框架:Spring MVC + Spring WebFlux(流式输出)

核心依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud.ai</groupId>
    <artifactId>spring-ai-alibaba-starter</artifactId>
    <version>1.0.0-M6.1</version>
</dependency>

2.2 langchain-fileagent(LangChain Python版)

技术栈

  • 框架:FastAPI + LangChain 1.x
  • 语言:Python 3.13
  • 文档处理:python-docx、openpyxl、PyPDF2、python-pptx
  • Web框架:FastAPI(原生异步)

核心依赖

fastapi==0.109.0
uvicorn[standard]==0.27.0
langchain==0.1.5
langchain-openai==0.0.5
pydantic==2.10.0
python-docx==1.1.0

2.3 langchain4j-fileagent(LangChain4j Java版)

技术栈

  • 框架:Spring Boot + LangChain4j
  • 语言:Java 17
  • 文档处理:Apache POI、PDFBox
  • Web框架:Spring MVC

三、核心能力对比

3.1 开发语言与生态

维度 Spring AI LangChain4j LangChain
开发语言 Java Java Python
生态成熟度 ⭐⭐⭐ 新兴 ⭐⭐⭐⭐ 快速成长 ⭐⭐⭐⭐⭐ 最成熟
社区活跃度 快速增长 活跃 非常活跃
学习曲线 中等(需Spring基础) 中等 较低(Python友好)
企业适用性 ⭐⭐⭐⭐⭐ 极佳 ⭐⭐⭐⭐ 好 ⭐⭐⭐ 中等

深度分析

  • Spring AI:作为 Spring 官方推出的 AI 框架,天然继承了 Spring 生态的所有优势。如果你已经在用 Spring Boot 开发微服务,那么 Spring AI 是最自然的选择。它的强类型、依赖注入、AOP 等企业级特性,使得代码可维护性极高。

  • LangChain4j:是 Python LangChain 的 Java 移植版本,但并非简单移植,而是针对 Java 特性进行了重构。它保留了 LangChain 的核心概念(Chains、Agents、Tools),但用 Java 的方式重新实现。适合需要在 Java 生态中使用 LangChain 理念的团队。

  • LangChain:Python 原生框架,拥有最丰富的文档、教程和社区支持。Python 的简洁语法使得快速原型开发非常容易,但部署到生产环境时需要考虑 Python 的性能和并发能力。

3.2 Agent 构建方式对比

Spring AI 版代码示例
@RestController
@RequestMapping("/api/agent")
public class AgentController {
    
    private final ChatClient chatClient;
    private final ToolCallbackProvider fileTools;
    
    @PostMapping("/chat")
    public Mono<ChatResponse> chat(@RequestBody ChatRequest request) {
        return chatClient.prompt()
            .user(request.getMessage())
            .tools(fileTools.getToolCallbacks())
            .stream()
            .chatResponse();
    }
}

特点

  • 使用 Spring 的 @RestController 和响应式编程(WebFlux)
  • 工具通过 ToolCallbackProvider 注入
  • 流式输出天然支持(Mono<ChatResponse>
LangChain Python 版代码示例
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from app.tools.file_tools import file_tools

llm = ChatOpenAI(model="qwen-turbo", temperature=0.7)

agent = create_agent(
    llm, 
    file_tools, 
    system_prompt="你是一个智能文件助手..."
)

def chat(message: str, session_id: str) -> str:
    response = agent.invoke({
        "messages": [HumanMessage(content=message)]
    })
    return response.get("output", "无回复")

特点

  • 代码非常简洁直观
  • create_agent 一步创建 Agent
  • 工具直接传入列表
  • 异步支持良好(配合 FastAPI)
LangChain4j 版代码示例
AiServices aiServices = AiServices.builder(ChatAssistant.class)
    .chatLanguageModel(chatModel)
    .tools(fileTools)
    .chatMemoryProvider(memoryProvider)
    .build();

ChatAssistant assistant = aiServices.build();

String response = assistant.chat(message);

特点

  • 使用 Builder 模式构建
  • 通过接口定义 Agent 行为(ChatAssistant
  • 类型安全,编译期检查
  • 与 Spring 生态集成良好

3.3 工具定义方式

Spring AI
@Tool(description = "读取文件内容")
public String readFile(@ToolParam(name = "filePath") String filePath) {
    // 实现...
}
LangChain Python
@tool
def read_file(file_path: str, max_length: int = None) -> str:
    """读取文件内容"""
    # 实现...
LangChain4j
@Tool("读取文件内容")
public String readFile(@P("文件路径") String filePath) {
    // 实现...
}

对比分析

特性 Spring AI LangChain Python LangChain4j
注解方式 @Tool + @ToolParam @tool 装饰器 @Tool + @P
类型安全 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐
参数描述 通过注解属性 通过 docstring 通过 @P 注解
IDE支持 极好 一般
学习成本 最低 中等

3.4 上下文管理(Memory)

Spring AI
// 使用 Spring AI 的 MessageWindowChatMemory
ChatMemory chatMemory = MessageWindowChatMemory.builder()
    .id(sessionId)
    .maxMessages(10)
    .build();

chatClient.prompt()
    .user(request.getMessage())
    .system("你是一个助手...")
    .tools(fileTools.getToolCallbacks())
    .advisors(advisor -> advisor.param("chatMemory", chatMemory))
    .call();
LangChain Python
# 手动管理会话消息列表
def _get_session_messages(self, session_id: str) -> List[BaseMessage]:
    if session_id not in self.session_memories:
        return []
    return self.session_memories[session_id]

# 保存消息
messages.append(HumanMessage(content=message))
messages.append(AIMessage(content=result))
self.session_memories[session_id] = messages
LangChain4j
ChatMemory chatMemory = MessageWindowChatMemory.builder()
    .id(sessionId)
    .maxMessages(10)
    .chatMemoryStore(new InMemoryChatMemoryStore())
    .build();

对比

特性 Spring AI LangChain Python LangChain4j
API设计 通过 Advisor 机制 手动管理或使用 LangChain Memory 通过 ChatMemoryProvider
灵活性 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
开箱即用 ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
持久化支持 可自定义 Store 需手动实现 内置多种 Store

3.5 流式输出

Spring AI(原生支持)
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatResponse> streamChat(@RequestParam String message) {
    return chatClient.prompt()
        .user(message)
        .stream()
        .chatResponse();
}
LangChain Python(需手动实现)
# FastAPI 中使用生成器
@app.post("/stream")
async def stream_chat(message: str):
    async for chunk in agent.stream({"messages": [...]}):
        yield f"data: {json.dumps(chunk)}\n\n"
LangChain4j
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamChat(String message) {
    return Flux.create(sink -> {
        chatModel.generateStreaming(messages, new StreamingResponseHandler() {
            @Override
            public void onNext(String token) {
                sink.next(token);
            }
            @Override
            public void onComplete(Response response) {
                sink.complete();
            }
        });
    });
}

对比

特性 Spring AI LangChain Python LangChain4j
API简洁度 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐
响应式支持 原生 WebFlux 需配合 FastAPI 需配合 WebFlux
回调机制 无需 异步迭代器 回调接口
性能 极佳

3.6 文档处理

框架 支持格式 性能
Spring AI / LangChain4j Apache POI 5.2.5、PDFBox 2.0.30 .docx, .xlsx, .pptx, .pdf ⭐⭐⭐⭐⭐ 企业级
LangChain Python python-docx, openpyxl, PyPDF2, python-pptx .docx, .xlsx, .pdf, .pptx ⭐⭐⭐⭐ 优秀

关键差异

  • Java 版(Spring AI / LangChain4j):Apache POI 是业界标准,功能最强大,支持旧格式(.doc, .xls),但内存占用较大
  • Python 版(LangChain):库更轻量,API 更简洁,但对旧格式支持有限,大文件处理需注意内存

四、性能与资源消耗

4.1 启动时间

方案 首次启动 热重启 内存占用
Spring AI ~15-20s ~5s ~500MB
LangChain4j ~12-18s ~4s ~450MB
LangChain Python ~3-5s ~2s ~150MB

4.2 并发能力

方案 单机 QPS 线程模型 适用场景
Spring AI ~500-1000 虚拟线程/响应式 高并发企业应用
LangChain4j ~500-1000 线程池 中高并发
LangChain Python ~200-500 异步IO 中低并发、快速迭代

4.3 部署复杂度

方案 Docker 镜像大小 依赖管理 CI/CD 友好度
Spring AI ~200MB(JRE) Maven(简单) ⭐⭐⭐⭐⭐
LangChain4j ~200MB(JRE) Maven(简单) ⭐⭐⭐⭐⭐
LangChain Python ~500MB(含依赖) pip(中等) ⭐⭐⭐⭐

五、开发体验对比

5.1 代码量对比(同等功能)

以"实现一个文件读取工具"为例:

Spring AI(~20行)
@Tool(description = "读取文件内容")
public String readFile(@ToolParam(name = "filePath") String filePath) {
    try {
        Path path = Path.of(filePath);
        if (!Files.exists(path)) {
            return "文件不存在: " + filePath;
        }
        return Files.readString(path, StandardCharsets.UTF_8);
    } catch (Exception e) {
        log.error("读取文件失败", e);
        return "读取失败: " + e.getMessage();
    }
}
LangChain Python(~15行)
@tool
def read_file(file_path: str, max_length: int = None) -> str:
    """读取文件内容"""
    try:
        path = Path(file_path)
        if not path.exists():
            return f"文件不存在: {file_path}"
        content = path.read_text(encoding='utf-8')
        return f"文件内容:\n{content}"
    except Exception as e:
        return f"读取失败: {str(e)}"
LangChain4j(~20行)
@Tool("读取文件内容")
public String readFile(@P("文件路径") String filePath) {
    try {
        Path path = Paths.get(filePath);
        if (!Files.exists(path)) {
            return "文件不存在: " + filePath;
        }
        return new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
    } catch (Exception e) {
        log.error("读取文件失败", e);
        return "读取失败: " + e.getMessage();
    }
}

结论:Python 版本最简洁,Java 版本代码量相近,但 Java 有更好的类型安全和 IDE 支持。

5.2 调试体验

维度 Spring AI LangChain4j LangChain Python
IDE 支持 IntelliJ IDEA 极佳 IntelliJ IDEA 好 VSCode/PyCharm 好
断点调试 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
日志系统 SLF4J/Logback SLF4J/Logback logging/loguru
错误追踪 堆栈清晰 堆栈清晰 堆栈较长
热更新 Spring DevTools 支持 FastAPI reload

六、选型建议

6.1 何时选择 Spring AI?

推荐场景

  • 团队已有 Spring Boot 技术栈
  • 需要企业级特性(安全、事务、监控)
  • 高并发、高可用要求
  • 需要与现有微服务无缝集成
  • 长期维护的大型项目

不推荐场景

  • 快速原型验证
  • 团队不熟悉 Java/Spring
  • 资源受限的环境(如边缘设备)

6.2 何时选择 LangChain4j?

推荐场景

  • 需要在 Java 中使用 LangChain 理念
  • 团队既想享受 LangChain 的灵活性,又需要 Java 的类型安全
  • 从 Python LangChain 迁移到 Java
  • 需要兼容现有的 Java 微服务架构

不推荐场景

  • 追求最快的开发速度
  • 团队主要使用 Python
  • 项目规模很小

6.3 何时选择 LangChain Python?

推荐场景

  • 快速原型开发和实验
  • 数据科学、机器学习团队
  • 需要最丰富的社区资源和教程
  • 脚本化、自动化任务
  • 学术研究和教学

不推荐场景

  • 高并发生产环境
  • 需要严格类型安全
  • 团队主要使用 Java
  • 企业级大规模部署

七、技术趋势展望

7.1 Spring AI

优势

  • Spring 官方支持,生态整合度高
  • 与 Spring Cloud、Spring Security 等无缝集成
  • 企业级特性完善(监控、追踪、安全)
  • 社区快速增长(阿里云、VMware 共同推动)

挑战

  • 相对年轻,部分高级功能仍在完善
  • 文档和示例不如 LangChain 丰富
  • 需要等待 Spring AI 1.0 正式版

7.2 LangChain4j

优势

  • Java 生态的 LangChain 最佳选择
  • 类型安全,编译期检查
  • 与 Spring Boot 集成良好
  • 活跃的社区和持续更新

挑战

  • 功能更新速度略慢于 Python 原版
  • 部分高级功能尚未实现
  • 文档需要进一步完善

7.3 LangChain Python

优势

  • 最成熟的 AI Agent 框架
  • 最丰富的文档、教程和社区
  • 快速迭代,新功能最先推出
  • 与其他 Python 生态(如 Pandas、NumPy)集成好

挑战

  • Python 在生产环境的性能和并发能力有限
  • 类型安全较弱
  • 版本更新频繁,API 可能变动

八、实战案例:智能文件助手

8.1 项目对比

项目 仓库 代码行数 开发周期
fileAgent(Spring AI) d:\aiwork\fileAgent ~800行 2周
langchain-fileagent(LangChain Python) d:\aiwork\langchain-fileagent ~600行 1.5周
langchain4j-fileagent(LangChain4j) 规划中 - -

8.2 功能对齐

三个项目实现了相同的核心功能:

  • ✅ 文件读取、创建、编辑、删除
  • ✅ 磁盘和目录查看
  • ✅ 多轮对话上下文管理
  • ✅ 知识库文档检索
  • ✅ Web 聊天界面
  • ✅ 流式输出

8.3 架构对比

┌─────────────────────────────────────────────────────────────┐
│                      用户请求                                │
└────────────────────┬────────────────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────────────────┐
│                     Web 层                                   │
│  ──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │ Spring MVC   │  │ Spring MVC   │  │  FastAPI     │       │
│  │ + WebFlux    │  │              │  │              │       │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘       │
│         │                 │                  │               │
│  ┌──────▼───────┐  ┌──────▼───────┐  ┌──────▼───────┐       │
│  │ Spring AI    │  │ LangChain4j  │  │  LangChain   │       │
│  │ ChatClient   │  │ AiServices   │  │  create_agent│       │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘       │
│         │                 │                  │               │
│  ──────▼───────┐  ──────▼───────┐  ┌──────▼───────┐       │
│  │ ToolCallback │  │ @Tool        │  │ @tool        │       │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘       │
│         │                 │                  │               │
│  ┌──────▼───────┐  ┌──────▼───────┐  ┌──────▼───────┐       │
│  │ Apache POI   │  │ Apache POI   │  │ python-docx  │       │
│  │ PDFBox       │  │ PDFBox       │  │ PyPDF2       │       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
└─────────────────────────────────────────────────────────────┘

九、总结

9.1 一句话总结

  • Spring AI:企业级 AI 应用的首选,与 Spring 生态无缝集成
  • LangChain4j:Java 开发者的 LangChain 体验,类型安全与灵活性的平衡
  • LangChain Python:AI 快速开发的利器,生态最丰富,迭代最快

9.2 核心决策树

你的团队主要使用什么语言?
│
├─ Java
│  ├─ 已在使用 Spring Boot?
│  │  ├─ 是 → 选择 Spring AI ✅
│  │  └─ 否 → 考虑 LangChain4j ✅
│  └─ 需要极致开发速度?
│     └─ 是 → 也可以考虑 LangChain Python
│
└─ Python
   └─ 选择 LangChain Python ✅

9.3 未来建议

  1. 短期:根据团队技术栈选择最合适的框架
  2. 中期:关注 Spring AI 1.0 正式版发布
  3. 长期:考虑多框架支持,根据场景灵活切换

十、参考资料

10.1 官方文档

  • Spring AI:https://spring.io/projects/spring-ai
  • LangChain4j:https://docs.langchain4j.dev/
  • LangChain:https://python.langchain.com/

10.2 项目代码

  • fileAgent(Spring AI版):https://gitee.com/mobuhan/fileagent
  • langchain-fileagent(LangChain Python版):https://gitee.com/mobuhan/langchain-fileagent

10.3 延伸阅读

  • 《Spring Boot 3 实战》
  • 《LangChain 实战指南》
  • 《AI Agent 设计与实现》

附录:快速对比表

特性 Spring AI LangChain4j LangChain Python
语言 Java Java Python
框架基础 Spring Boot Spring Boot / 独立 独立
类型安全 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
学习曲线 ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
企业适用 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐
开发速度 ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐
社区成熟 ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
并发能力 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
文档丰富 ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
推荐指数 ⭐⭐⭐⭐(Java企业) ⭐⭐⭐⭐(Java灵活) ⭐⭐⭐⭐⭐(Python快速)

🎯 核心观点:没有绝对的好坏,只有适合与否。选择框架时,应综合考虑团队技术栈、项目规模、性能要求和长期维护成本。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐