SpringAI与LangChain4j的智能应用-(实践篇4)

SpringAI 2.0与Langchain4j构建Java智能航空Agent实战 在AI应用快速落地的今天,RAG与工具调用成为大模型赋能业务的关键技术。检索增强生成(RAG)通过将企业知识库向量化,让模型基于事实回答;Tools机制则使模型能主动调用外部接口获取实时数据。两者结合Agent编排,即可构建具备自主规划能力的智能系统。然而,Java生态中完整的企业级Agent案例稀缺,SpringAI 2.0与Langchain4j的出现填补了这一空白。本文面向有Java基础的开发者,以航空服务为场景,讲解如何从零搭建涵盖航班查询工具、政策知识库问答和Agent自动编排的智能助手,提供可运 阅读详情

​参考文档

LangChain4j 中文文档 https://docs.langchain4j.info/

https://neo4j.com/labs/genai-ecosystem/spring-ai/

​https://java2ai.com/docs/dev/overview/

企业级存量系统智能化改造的具体步骤

企业级存量系统智能化改造(如接入AI能力、落地AIOps、实现智能业务决策)的核心是**“最小侵入、价值优先、分步落地、持续迭代”**,避免为了“智能化”重构系统,而是围绕业务痛点和运维效率,分阶段将AI能力融入现有体系。以下是可落地的具体步骤,覆盖从前期准备到上线运维的全流程:

一、前期准备阶段:明确目标+现状梳理(1-2周)

1. 核心目标定义(避免无目的改造)

  • 聚焦业务价值/运维效率:明确智能化要解决的核心问题(如“客服工单自动分类提效30%”“AIOps异常定位耗时从1小时缩至5分钟”);
  • 量化指标:制定可衡量的KPI(如AI根因定位准确率≥80%、智能推荐转化率提升5%);
  • 范围界定:划定改造边界(如仅改造“交易系统运维模块”,而非全系统;仅对接OpenAI,暂不接入本地大模型)。

2. 存量系统现状梳理

  • 技术栈盘点:梳理系统架构(微服务/单体)、核心框架(Spring Boot版本、中间件如ES/Redis)、语言版本、接口规范;
  • 痛点分析:
    • 运维痛点:如故障定位慢、告警风暴、人工操作多;
    • 业务痛点:如人工审核耗时、用户体验差、数据决策滞后;
  • 依赖关系梳理:明确核心链路(如交易系统→支付系统→数据库)、关键接口、数据流向,标记“不可动”的核心模块(如资金相关);
  • 数据资产盘点:梳理可用于AI的数据源(日志、监控指标、业务数据、知识库),评估数据质量(是否标准化、是否脱敏、是否有标签)。

3. 方案设计(聚焦最小可行方案MVP)

  • 技术选型:
    • AI框架:运维场景选SpringAI+LangChain4j(适配Spring生态),业务场景选FastAPI+大模型(灵活);
    • 数据层:复用现有数据库/中间件,新增AI专用存储(如向量库存知识库、时序库存监控数据);
  • 集成方式:优先选“非侵入式集成”(如接口调用、插件化、中间件代理),避免修改核心业务代码;
  • 风险评估:识别改造风险(如AI模型调用延迟影响核心交易、数据脱敏不达标),制定兜底方案(如AI服务故障时降级为人工流程)。

二、方案落地阶段:分步改造+价值验证(2-8周)

阶段1:数据层改造(智能化的基础,优先落地)

核心目标:让存量系统的“数据可被AI使用”
  1. 数据标准化:
    • 统一数据格式:如日志改为JSON格式(包含timestamp、service、level、content),监控指标遵循Prometheus规范;
    • 数据清洗:剔除无效数据、脱敏敏感信息(如手机号、银行卡号),补充缺失字段(如服务标签、环境标签);
  2. 数据接入:
    • 新增数据采集插件(如Filebeat采集日志、Micrometer埋点业务指标),复用现有采集通道(如ELK、Prometheus);
    • 搭建AI专用数据中间层(如向量数据库Chroma/PGVector存储运维知识库、时序数据库InfluxDB存储监控数据),避免直接读写业务库;
  3. 数据权限管控:
    • 新增AI数据访问权限规则(如运维AI仅能读取日志/指标,不能操作业务数据),对接企业统一权限系统(如LDAP)。
实操示例(存量Spring Boot系统):
// 非侵入式新增指标埋点(通过AOP,无需修改业务代码)
@Aspect
@Component
public class MetricAop {
    private final MeterRegistry meterRegistry;
    // 对核心接口新增超时率指标
    @Around("execution(* com.trade.controller.*.*(..))")
    public Object recordApiMetric(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long cost = System.currentTimeMillis() - start;
        // 记录超时率(复用Spring Boot Micrometer,无需改业务逻辑)
        if (cost > 1000) {
            meterRegistry.counter("api_timeout_count", "api", joinPoint.getSignature().getName()).increment();
        }
        return result;
    }
}

阶段2:AI能力集成(最小侵入,插件化接入)

核心目标:将AI能力以“非侵入”方式融入存量系统
  1. AI服务封装:
    • 搭建独立的AI服务模块(如ai-service),封装大模型调用(SpringAI)、流程编排(LangChain4j)逻辑,对外提供标准化API;
    • 存量系统通过“接口调用”对接AI服务(如Feign、HTTP),核心业务代码无需引入AI依赖;
  2. 核心场景落地(MVP):
    • 优先选“高价值、低改造量”场景(如运维侧:日志异常AI分析;业务侧:工单自动分类);
    • 集成方式示例:
      • 运维场景:存量监控系统通过HTTP调用AI服务的“根因定位接口”,返回结果展示在原有监控面板;
      • 业务场景:存量客服系统新增“AI辅助回复”按钮,点击后调用AI服务生成回复草稿,人工确认后发送;
  3. 兜底逻辑开发:
    • AI服务故障时,自动降级为原有流程(如AI根因定位失败→触发人工排查流程);
    • 控制AI调用范围(如核心交易链路仅用AI做“辅助分析”,不做自动决策)。
实操示例(存量运维系统集成AI根因定位):
// 存量运维系统新增AI调用接口(非侵入,新增Controller)
@RestController
@RequestMapping("/ops/ai")
public class AiOpsController {
    @Autowired
    private AiServiceClient aiServiceClient; // 调用独立的AI服务
    @Autowired
    private OpsLogService opsLogService; // 存量日志服务

    // 存量系统调用AI根因定位,结果返回至原有运维面板
    @PostMapping("/locate")
    public Result<RootCauseVO> locateRootCause(@RequestParam String serviceName) {
        // 1. 从存量系统获取日志/指标数据
        String logContent = opsLogService.getRecentErrorLog(serviceName);
        // 2. 调用AI服务(非侵入,通过接口)
        RootCauseDTO aiResult = aiServiceClient.locate(serviceName, logContent);
        // 3. 转换为存量系统的VO,返回至原有前端
        RootCauseVO vo = ConvertUtils.aiResultToVo(aiResult);
        return Result.success(vo);
    }
}

阶段3:功能验证与调优(聚焦MVP,快速迭代)

  1. 灰度验证:
    • 选择非核心环境(如测试/预发)或小范围场景(如仅“交易系统”试点)验证AI能力;
    • 对比AI结果与人工结果(如AI根因定位vs运维人工定位、AI工单分类vs人工分类),统计准确率/效率;
  2. 参数调优:
    • 优化AI模型参数(如Prompt模板、温度值)、数据采集规则(如调整日志采集频率);
    • 优化集成方式(如AI调用延迟高→新增缓存、异步调用);
  3. 用户反馈收集:
    • 收集运维/业务人员的使用反馈(如“AI回复的处置建议不落地”“指标采集遗漏关键维度”),快速调整功能。

三、上线推广阶段:全量落地+流程适配(1-2周)

1. 全量上线准备

  • 运维保障:新增AI服务的监控(如调用成功率、延迟、模型输出异常率),接入存量监控告警体系;
  • 文档与培训:编写操作手册(如“如何使用AI辅助根因定位”),对使用人员做1-2次极简培训;
  • 应急预案:制定AI服务故障、数据泄露、结果错误的应急方案(如一键降级、数据回溯)。

2. 全量推广(分批次)

  • 先推广至“高意愿、低风险”团队(如运维团队先试用AIOps,再推广至业务团队);
  • 保留“人工+AI”双轨制(如AI生成的处置建议需人工确认,不直接执行),逐步提升自动化比例。

3. 流程适配

  • 优化现有工作流程(如运维故障处理流程新增“AI根因定位”步骤,客服工单流程新增“AI分类”节点);
  • 对接存量系统的审批/审计体系(如AI自动处置操作需纳入原有审计日志,符合企业合规要求)。

四、持续迭代阶段:数据驱动+价值放大(长期)

1. 数据闭环优化

  • 收集AI使用数据(如调用次数、准确率、业务提效数据),定期复盘KPI达成情况;
  • 将线下反馈、故障案例补充至AI知识库(如新增“数据库锁等待”故障案例,提升根因定位准确率)。

2. 功能扩展(基于价值优先级)

  • 从“辅助决策”向“有限自动决策”扩展(如低风险异常由AI自动处置,高风险仍需人工确认);
  • 扩展AI场景(如从“日志异常分析”扩展至“链路异常分析”,从“工单分类”扩展至“工单自动回复”)。

3. 技术架构升级

  • 逐步替换开源模型为企业私有化模型(如从OpenAI替换为通义千问/文心一言私有化部署);
  • 优化AI服务性能(如引入模型缓存、分布式部署,支撑更高并发);
  • 融合更多数据维度(如将业务数据、用户行为数据融入AI分析,提升决策精准度)。

五、关键注意事项(避免踩坑)

  1. 最小侵入原则:能通过接口调用、插件化实现的,绝不修改存量核心代码;能新增模块的,绝不重构原有模块;
  2. 价值优先:先落地“1个小场景+可量化价值”(如AI日志分析提效20%),再扩展,避免“大而全”的改造;
  3. 数据安全合规:存量系统的敏感数据(如用户信息、交易数据)必须脱敏后再输入AI模型,避免数据泄露;
  4. 避免过度依赖AI:核心场景(如资金操作、故障处置)保留人工兜底,AI仅做辅助;
  5. 复用现有生态:存量系统基于Spring生态的,优先用SpringAI集成AI能力,减少技术栈切换成本。

六、示例:存量运维系统智能化改造(AIOps)落地路径

阶段具体动作耗时核心输出
前期准备梳理运维痛点(故障定位慢)、盘点日志/指标数据、定义KPI(定位耗时缩至5分钟)1周改造方案、数据标准化规范
数据层改造日志标准化、新增Prometheus指标采集、搭建向量库存运维知识库2周标准化数据采集体系、知识库
AI集成新增AI服务模块(SpringAI+LangChain4j)、存量系统调用AI根因定位接口2周AI根因定位功能(灰度版)
上线推广运维团队灰度试用、优化Prompt、全量上线、培训使用人员1周全量可用的AIOps辅助定位功能
持续迭代收集故障案例、优化模型、扩展至自动处置(低风险)长期定位准确率≥85%、自动处置率30%

总结

企业级存量系统智能化改造的核心不是“技术升级”,而是“价值升级”——以最小的改造成本解决核心痛点,通过“数据层→AI集成→验证→上线→迭代”的步骤,逐步将AI能力融入现有体系,避免为了智能化而智能化。关键是“小步快跑、价值可衡量、风险可控制”,让智能化改造真正服务于业务和运维效率提升。

拓展

非强Spring依赖项目中使用LangChain4j的完整指南

LangChain4j本身是无框架强依赖的纯Java库(核心仅依赖SLF4J等基础组件),并非只能在Spring项目中使用。对于非Spring项目(如纯Java SE、Java EE、Quarkus、Micronaut,甚至传统Servlet项目),核心思路是直接引入LangChain4j核心依赖,手动管理模型客户端、流程编排逻辑,替代Spring的自动配置/依赖注入,以下是具体落地步骤、示例和最佳实践。

一、核心前提:LangChain4j的无框架特性

LangChain4j的核心模块(langchain4j-core)仅依赖:

  • Java 8+
  • SLF4J(日志)
  • Jackson(JSON序列化)
    无任何Spring、Guice等框架依赖,所有核心能力(Chain编排、Prompt模板、工具调用、模型调用)均可通过“手动new对象”实现,这是在非Spring项目中使用的基础。

二、通用步骤(适配所有非Spring项目)

步骤1:引入依赖(Maven/Gradle)

无需引入任何Spring相关依赖,仅需引入LangChain4j核心包+对应大模型的适配包(如OpenAI、通义千问、本地模型如Llama3)。

Maven示例(纯Java项目)
<dependencies>
    <!-- LangChain4j核心包(必选) -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-core</artifactId>
        <version>0.32.0</version>
    </dependency>

    <!-- 可选:OpenAI适配包(对接商用大模型) -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-openai</artifactId>
        <version>0.32.0</version>
    </dependency>

    <!-- 可选:本地模型适配包(如Llama3,对接Ollama) -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-ollama</artifactId>
        <version>0.32.0</version>
    </dependency>

    <!-- 基础依赖(日志+JSON,非Spring项目需手动引入) -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>2.0.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
    </dependency>
</dependencies>
Gradle示例
dependencies {
    implementation 'dev.langchain4j:langchain4j-core:0.32.0'
    implementation 'dev.langchain4j:langchain4j-openai:0.32.0'
    implementation 'org.slf4j:slf4j-simple:2.0.9'
}

步骤2:手动初始化大模型客户端(替代Spring自动配置)

非Spring项目中无@Autowired,需手动创建模型客户端实例,核心是配置API Key、模型名称、请求参数(温度、超时等)。

示例1:对接OpenAI(商用模型)
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.openai.OpenAiChatModelBuilder;

public class ModelClientFactory {
    // 手动创建OpenAI客户端(单例模式,避免重复创建)
    public static OpenAiChatModel createOpenAiClient() {
        return new OpenAiChatModelBuilder()
                .apiKey("你的OpenAI API Key") // 从配置文件/环境变量读取,避免硬编码
                .modelName("gpt-4o")
                .temperature(0.1) // 运维/业务场景建议低温度,保证结果稳定
                .timeout(30_000) // 超时时间30秒
                .build();
    }
}
示例2:对接本地Ollama(Llama3,无网络依赖)
import dev.langchain4j.model.ollama.OllamaChatModel;
import dev.langchain4j.model.ollama.OllamaChatModelBuilder;

public class ModelClientFactory {
    public static OllamaChatModel createOllamaClient() {
        return new OllamaChatModelBuilder()
                .baseUrl("http://localhost:11434") // Ollama本地服务地址
                .modelName("llama3")
                .temperature(0.2)
                .build();
    }
}

步骤3:实现核心能力(Chain编排/Prompt模板/工具调用)

LangChain4j的核心能力(如Chain流程、Prompt模板)均通过纯Java代码实现,无需Spring注解,以下是3个核心场景示例。

场景1:基础Prompt模板+模型调用(极简场景)

适用于“文本生成、日志分析、工单分类”等简单场景,替代Spring项目中@Autowired注入模型的方式。

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.input.PromptTemplate;

public class SimpleAIAnalysisService {
    // 手动注入模型客户端(非Spring:直接new或工厂方法)
    private final ChatLanguageModel model = ModelClientFactory.createOpenAiClient();

    // 日志异常分析(AIOps核心场景)
    public String analyzeLog(String logContent) {
        // 1. 定义Prompt模板(标准化,可复用)
        PromptTemplate promptTemplate = PromptTemplate.from("""
                分析以下运维日志,输出2部分内容:
                1. 异常类型(仅一句话);
                2. 处理建议(仅1-2句);
                日志内容:{{logContent}}
                """);

        // 2. 填充模板参数
        String prompt = promptTemplate.apply(logContent);

        // 3. 调用模型(纯Java方法调用)
        return model.generate(prompt);
    }

    // 测试入口(纯Java SE程序)
    public static void main(String[] args) {
        SimpleAIAnalysisService service = new SimpleAIAnalysisService();
        String log = "2025-12-25 10:05:00 ERROR - MySQL connection timed out after 3000ms";
        String result = service.analyzeLog(log);
        System.out.println("AI分析结果:\n" + result);
    }
}
场景2:Chain流程编排(复杂场景)

适用于“多步骤推理、根因定位”等场景,替代Spring项目中基于注解的Chain编排,手动构建SequentialChain。

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.chain.ConversationalChain;
import dev.langchain4j.chain.sequential.SequentialChain;
import dev.langchain4j.model.input.PromptTemplate;

public class RootCauseLocateService {
    private final ChatLanguageModel model = ModelClientFactory.createOllamaClient();

    // 根因定位:拆分为「数据整合→异常类型判定→根因推理」3个Step
    public String locateRootCause(String serviceName, String logContent, String metricData) {
        // Step1:异常类型判定
        PromptTemplate step1Template = PromptTemplate.from("""
                判定服务{{serviceName}}的异常类型:
                日志:{{logContent}}
                指标:{{metricData}}
                仅输出异常类型(如数据库超时/线程池耗尽)
                """);
        String step1Prompt = step1Template.apply(serviceName, logContent, metricData);
        String exceptionType = model.generate(step1Prompt);

        // Step2:根因推理(基于Step1结果)
        PromptTemplate step2Template = PromptTemplate.from("""
                异常类型:{{exceptionType}}
                服务名:{{serviceName}}
                输出核心根因+1句话验证方法
                """);
        String step2Prompt = step2Template.apply(exceptionType, serviceName);
        String rootCause = model.generate(step2Prompt);

        // 组装最终结果(手动编排,替代SequentialChain注解)
        return "异常类型:" + exceptionType + "\n根因+验证方法:" + rootCause;
    }

    // 测试:纯Java调用
    public static void main(String[] args) {
        RootCauseLocateService service = new RootCauseLocateService();
        String result = service.locateRootCause(
                "trade-service",
                "ERROR - MySQL query timeout",
                "CPU:90%,接口超时率:8%"
        );
        System.out.println("根因定位结果:\n" + result);
    }
}
场景3:工具调用(AI调用业务接口)

适用于“AI主动查数据库、调接口”等场景,非Spring项目中手动注册工具类,无需@Tool注解(或兼容注解)。

import dev.langchain4j.agent.tool.Tool;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;

// 1. 定义工具类(业务接口:查询订单数据)
public class OrderTool {
    // 标记为工具方法(非Spring项目仍需@Tool注解,LangChain4j核心识别)
    @Tool("查询指定用户的订单数量")
    public int queryOrderCount(String userId) {
        // 模拟调用存量系统的订单接口(非Spring:JDBC/HttpURLConnection调用)
        return userId.equals("1001") ? 5 : 0;
    }
}

// 2. AI调用工具(纯Java实现)
public class AIToolCallService {
    private final ChatLanguageModel model = ModelClientFactory.createOpenAiClient();

    public String aiQueryOrder(String userQuestion) {
        // 手动创建Agent,绑定工具类
        return dev.langchain4j.agent.AgentExecutor.builder()
                .chatLanguageModel(model)
                .tools(new OrderTool()) // 注册工具
                .build()
                .execute(userQuestion);
    }

    // 测试:AI自动调用订单查询工具
    public static void main(String[] args) {
        AIToolCallService service = new AIToolCallService();
        // 用户问题:“查询用户1001的订单数量”
        String result = service.aiQueryOrder("查询用户1001的订单数量");
        System.out.println("AI调用工具结果:" + result);
        // 预期输出:"用户1001的订单数量为5"
    }
}

步骤4:配置管理(替代Spring的application.yml)

非Spring项目中需手动管理配置(如API Key、模型参数),推荐2种方式:

方式1:属性文件(.properties)
# ai-config.properties
openai.api.key=sk-xxx
openai.model.name=gpt-4o
ollama.base.url=http://localhost:11434

读取配置:

import java.io.FileInputStream;
import java.util.Properties;

public class ConfigLoader {
    private static final Properties props = new Properties();

    static {
        try {
            props.load(new FileInputStream("ai-config.properties"));
        } catch (Exception e) {
            throw new RuntimeException("加载配置失败", e);
        }
    }

    public static String get(String key) {
        return props.getProperty(key);
    }
}

// 改造模型工厂:从配置读取
public class ModelClientFactory {
    public static OpenAiChatModel createOpenAiClient() {
        return new OpenAiChatModelBuilder()
                .apiKey(ConfigLoader.get("openai.api.key"))
                .modelName(ConfigLoader.get("openai.model.name"))
                .build();
    }
}
方式2:环境变量(推荐,企业级)
public class ModelClientFactory {
    public static OpenAiChatModel createOpenAiClient() {
        return new OpenAiChatModelBuilder()
                .apiKey(System.getenv("OPENAI_API_KEY")) // 从环境变量读取
                .modelName("gpt-4o")
                .build();
    }
}

三、不同非Spring项目的适配细节

1. 纯Java SE项目(无任何框架)

  • 核心:直接按上述示例,通过main方法启动,模型客户端单例化(避免重复创建);
  • 日志:引入slf4j-simple,无需配置日志框架;
  • 依赖:仅需LangChain4j核心+模型适配包,无额外依赖。

2. Java EE/Servlet项目(Tomcat/Jetty)

  • 初始化时机:在ServletContextListener中初始化模型客户端(全局单例);
  • 示例:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import dev.langchain4j.model.chat.ChatLanguageModel;

public class AIModelListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // 初始化模型客户端,存入ServletContext(全局可用)
        ChatLanguageModel model = ModelClientFactory.createOpenAiClient();
        sce.getServletContext().setAttribute("aiModel", model);
    }
}

// Servlet中使用
public class AIAnalysisServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        // 从ServletContext获取模型客户端
        ChatLanguageModel model = (ChatLanguageModel) getServletContext().getAttribute("aiModel");
        // 调用模型处理请求
        String logContent = req.getParameter("logContent");
        String result = model.generate("分析日志:" + logContent);
        resp.getWriter().write(result);
    }
}

3. Quarkus/Micronaut项目(轻量级框架)

  • 依赖注入:使用框架原生DI(如Quarkus的@Inject、Micronaut的@Singleton)替代Spring;
  • 示例(Quarkus):
import jakarta.enterprise.context.ApplicationScoped;
import dev.langchain4j.model.chat.ChatLanguageModel;

// 1. 单例模型客户端
@ApplicationScoped
public class AIModelProducer {
    @Produces
    public ChatLanguageModel createModel() {
        return ModelClientFactory.createOllamaClient();
    }
}

// 2. 业务服务中使用(Quarkus原生DI)
@ApplicationScoped
public class QuarkusAIService {
    private final ChatLanguageModel model;

    // 构造器注入(替代Spring的@Autowired)
    public QuarkusAIService(ChatLanguageModel model) {
        this.model = model;
    }

    public String analyzeLog(String log) {
        return model.generate("分析日志:" + log);
    }
}

四、最佳实践(非Spring项目)

1. 模型客户端单例化

  • 避免频繁创建模型客户端(如OpenAiChatModel),通过工厂类+单例模式管理,减少资源消耗;
  • 示例:
public class ModelClientFactory {
    // 懒汉单例
    private static volatile ChatLanguageModel openAiModel;

    private ModelClientFactory() {} // 私有构造,禁止new

    public static ChatLanguageModel getOpenAiModel() {
        if (openAiModel == null) {
            synchronized (ModelClientFactory.class) {
                if (openAiModel == null) {
                    openAiModel = new OpenAiChatModelBuilder()
                            .apiKey(System.getenv("OPENAI_API_KEY"))
                            .build();
                }
            }
        }
        return openAiModel;
    }
}

2. 异常处理(替代Spring的全局异常)

public class AIService {
    private final ChatLanguageModel model = ModelClientFactory.getOpenAiModel();

    public String safeGenerate(String prompt) {
        try {
            return model.generate(prompt);
        } catch (Exception e) {
            // 降级逻辑:AI调用失败时返回默认结果/触发人工处理
            System.err.println("AI调用失败:" + e.getMessage());
            return "AI分析失败,请人工处理";
        }
    }
}

3. 避免过度封装

  • 非Spring项目无需模仿Spring的“Service/Controller”分层,按业务逻辑极简封装;
  • 核心逻辑(如Chain编排)直接写在业务类中,减少冗余。

4. 兼容存量系统

  • 调用存量系统接口时,优先用原生Java方式(JDBC、HttpURLConnection、OkHttp),避免引入额外框架;
  • 工具调用时,直接复用存量系统的DAO/Service类,无需适配Spring Bean。

五、核心总结

非强Spring依赖项目中使用LangChain4j的核心是:

  1. 依赖极简:仅引入LangChain4j核心+模型适配包,无需Spring;
  2. 手动初始化:通过工厂类创建模型客户端,替代Spring自动配置;
  3. 纯Java编排:Chain流程、Prompt模板、工具调用均通过原生Java代码实现,无需Spring注解;
  4. 配置自研:通过属性文件/环境变量管理配置,替代Spring的yml配置;
  5. 单例+降级:保证模型客户端单例,增加异常降级逻辑,适配非Spring项目的运维特性。

这种方式既保留了LangChain4j的核心能力(流程编排、工具调用),又完全适配非Spring项目的技术栈,是企业级存量系统(如传统Java EE、纯Java SE)智能化改造的最优路径。

Java生态AI应用开发:SpringAI与Langchain4j构建RAG与Agent实战 在大模型应用加速落地的今天,Java开发者正迎来全新的AI工程化机遇。Spring Boot作为企业级服务治理的成熟底座,正通过SpringAI与Langchain4j这类框架,将大模型接入从繁琐的HTTP调用与JSON拼接,抽象为可注入的Bean与声明式接口。工具调用(Tool Calling)让模型能够触达实时业务数据,检索增强生成(RAG)则解决了私有知识库动态更新的引用溯源难题,而Agent编排则将两者协同调度,形成完整决策链路。以航空客服智能体为例,从航班状态查询、行李异常处理到退改签政策问答,清 阅读详情

相关推荐

深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?

首先介绍 AI 时代 Java 开发框架选择背景,接着对比两者功能特性(Spring AI 的生态集成与标准化设计、LangChain4j 的多模型适配与提示工程)、应用场景(企业级系统改造与创新产品开发)、开发体验(学习成本与调试工具)、生态扩展(Spring 商业支持与 LangChain4j 开源社区)、性能安全(企业级优化与自主安全实现)及成本趋势(短期投入、长期回报与技术演进),最后给出选型建议与混合架构方案。

博客 5442

搞AI不必非得转学python了,SpringAi(spring版的langchain)来了

spring官方于3月1日发布springAI,java世界的Langchain框架。令人惊喜的2个特性,绝对是java程序的大福利!!!

weixin_44535385的博客 4440

AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)

本文围绕 AI 大模型展开,介绍了其定义、特征、国内外优秀模型及分类,给出开发者学习与选型建议,还讲解了项目后端初始化及通过 SDK、HTTP、SpringAI、langchain4j 接入大模型的方式,并对比其优缺点,提及本地搭建调用参考。

Varin 2812

Spring-AI vs LangChain4J:Java生态的AI框架选型指南

最近在搞AI相关的项目,发现Java生态下有两个比较主流的框架:Spring-AI和LangChain4J。说实话,刚开始我也挺纠结选哪个,毕竟两个看起来都挺不错的。今天就来聊聊这两个框架的区别,以及在实际项目中怎么选。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 4万+

CMakeTestCCompiler.cmake错误解决

CMakeTestCCompiler.cmake错误解决欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近编译项目的时候,遇到一个cmake的错误,具体错误信息如下: /path-to-pr

昨夜星辰的博客 2万+

开源实战 | 基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程

本文详细介绍了基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程,涵盖从基础概念到实战技巧的各个环节。通过SolidWorks建模、Matlab运动学实现及轨迹优化策略,展示了如何实现高精度轨迹规划,适用于摄影、医疗等领域的机器人应用。

weixin_28331555的博客 401

SpringAI与LangChain4j的智能应用-(理论篇4)

SpringAI是“AI的Spring管家”,管接入、管管控、管融合,适合企业级项目;LangChain4j是“AI的流程包工头”,管拆解、管编排、管联动,适合复杂AI场景;配合用就“SpringAI打基础,LangChain4j做流程”,职责分清、别重复造轮子,新手也能快速落地AI功能。不用贪多,先把这两个框架的核心思想吃透,再动手写两行代码。SpringAI的底层是“集成思维”,核心教我们如何把新能力(AI)融入成熟生态,解决工程化、企业级的问题;

Coder_Boy_的博客 1149

海外最新AI营销AI销售书籍推荐AI营销培训讲师AI销售培训讲师人工智能营销培训师人工智能销售培训师AI赋能营销培训AI赋能销售培训企业AI营销内训企业AI销售内训AI营销课程讲师AI销售课程讲师

专栏|AI营销与AI销售实战 · 第46期在这个人类与算法共舞的时代,销售,已经不是你我熟悉的那个“打电话、见客户、做PPT”的老行当了。你还以为销售是“打感情牌”?错了,情感要继续,但方式已经升级。你还以为AI只是“写写文案”?错了,文案只是皮毛,真正的杀器,是思维方式的重构,是认知地图的重绘。首先,我们需要明确一个事实:AI并不会消灭销售这个职业,但它必然会重新定义销售的本质。在销售领域,真正的制胜之道不是简单地采用AI工具,而是的能力。

Akibfrycc的博客 1100

SpringAI与LangChain4j的智能应用-(实践篇)

本文比较了SpringAI和LangChain4j在AIOps日志分析场景下的实现方式。SpringAI通过标准化接口快速集成AI能力,适合简单场景的快速接入;LangChain4j则将任务拆解为可编排步骤,支持灵活扩展。SpringAI更侧重与Spring生态的无缝集成,而LangChain4j强调流程的可扩展性和步骤化处理。在AIOps场景中,SpringAI适合单一AI能力调用,LangChain4j则更适合需要多步骤编排的复杂流程。

Coder_Boy_的博客 1085

游戏市场销售数据抓取:使用Python爬虫获取游戏市场上的销售情况和玩家反馈

在本文中,我们使用Python爬虫抓取了多个游戏平台上的销售数据、玩家反馈和游戏动态。通过使用requests和Selenium,我们能够有效地获取静态和动态网页数据,并利用pandas进行数据处理和存储。如果您有更具体的需求,可以扩展此爬虫以抓取更多的数据,进行深度分析或实现更复杂的可视化功能。数据抓取是一项非常强大的技术,它不仅能够帮助游戏开发者优化产品,还能帮助营销团队理解玩家需求,提升市场竞争力。

2201_76125261的博客 1307

C# Winform使用Monaco打造代码编辑器

本文介绍了如何在Winform项目中集成Monaco代码编辑器。通过NuGet安装WebView2控件,创建monaco-editor.html文件加载编辑器,并实现与C#代码的交互。关键步骤包括:初始化WebView2环境、配置Monaco编辑器参数、设置代码变更监听事件以及处理C#与JavaScript之间的通信。注意事项提示了依赖库安装问题的解决方法。该方案实现了功能完整的代码编辑器,支持代码自动保存和实时显示功能。

遇见--专栏 346

SpringAI与LangChain4j的智能应用-(理论篇)

SpringAI与LangChain4j是Java生态中两大AI框架,各有侧重。SpringAI深度集成Spring生态,适合企业级应用智能化改造,典型场景包括电商评论分析、金融风控和医疗影像分析,能无缝对接Spring事务管理和权限控制。LangChain4j强调灵活性和多模型适配,适用于智能客服动态切换模型、代码生成工作流等创新型场景。选型需考虑技术栈(Spring优先选SpringAI)、核心诉求(灵活扩展选LangChain4j)和团队背景。二者也可结合使用,用SpringAI处理企业级集成,Lan

Coder_Boy_的博客 935

107.在 Vue 3 中使用 OpenLayers 实现视图联动功能

是一个非常强大的 Web 地图渲染库,支持多种地图数据格式和交互操作。在 Vue 3 中,我们可以利用。绑定到真实的 DOM 元素上,我们就可以用它们来初始化 OpenLayers 地图。来封装和管理 OpenLayers 地图的状态,从而更高效地开发地图应用。,即两个地图窗口共享同一个视图(View),从而实现同步缩放、拖动等操作。这可以确保 Vue 组件销毁时,OpenLayers 也正确销毁地图实例。,并且它们会同步缩放和拖动,达到地图联动的效果。这样,无论你拖动哪个地图,另一个都会同步变化。

小彭的博客 1938

SpringAI与LangChain4j的智能应用-(实践篇3)

本文介绍了一个企业级AIOps平台的核心实现方案,采用Spring Boot 3.x + Vue3技术栈,聚焦AIOps核心闭环流程:数据采集→异常检测→根因定位→自动处置。系统采用模块化设计,后端包含通用模块、核心业务模块和API网关,前端基于Vue3构建核心功能页面。核心流程实现了指标/日志采集、规则+AI异常检测、多源融合根因定位和分级自动处置功能,通过代码示例展示了指标采集和异常检测的关键实现。该系统优先保证核心链路可运行,剔除非核心功能,为AIOps实践提供精简而高效的参考方案。

Coder_Boy_的博客 666

uni-app - 刘海屏(Iphone X)底部横杠(——)白色区域块(安全距离处更改颜色)解决方案

场景:因为要做无tabbar页面,所以在配置文件中取消底部导航栏。取消后,iPhoneX(刘海屏)底部就出现如下图所示白色安全区域问题:这个问题,是因为uni-app默认会为iPhoneX(刘海屏)留出安全距离,这个安全距离的背景色就是白色。所以,如果你将页面颜色设置为其他颜色,就会与默认白色冲突。有2个不同的解决方案(原生占位),虽然原理是一样,但使用的场景不同,请根据您的需求来采纳。

🏆 前端领域优质创作者 1万+

黑猫带你学UFS协议第8篇:UFS电气特性详解(Power、CLK、Reset等)

UFS强制支持secure mode。UFS设备可能会存储个人或者公司的信息,UFS提供把数据永久从设备上移除的功能,并且保证对存储介质进行逆向恢复数据也恢复不回来原有数据。安全模式是以逻辑单元为单位进行应用的,不同的逻辑单元可以有不同的安全模式。由于UFS设备的存储介质不同,所以把数据安全从存储介质上移除方式会有不同,spec提供了三种通用的移除方法,UFS设备至少支持其中一种。● 对存储的位置进行一次擦除操作。● 对存储的位置使用单一字符(比如0xAA)覆盖写,然后进行擦除。.........

黑猫奥利奥的博客 4074

SpringAI与LangChain4j的智能应用-(实践篇2)

摘要:企业级AIOps核心流程包含数据采集、异常检测、根因定位、自动处置和复盘优化5大阶段。数据采集需覆盖指标、日志、链路、告警4类数据,通过Prometheus、ELK、SkyWalking等组件实现标准化采集。异常检测采用规则+AI双检模式,结合静态阈值和大模型分析降低误报率。整个流程需满足企业级可观测性、稳定性和可审计要求,通过分层技术架构和动态配置实现智能运维闭环。(149字)

Coder_Boy_的博客 1158

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SpringAI与LangChain4j的智能应用-(理论篇2)

LangChain4j的Chain机制通过模块化设计将AI任务拆解为可复用的步骤链,支持顺序或并行执行。核心包括Step(最小执行单元)、Input/Output(数据传递)、Context(共享容器)和Executor(流程控制器)。主要提供两种链类型:SimpleSequentialChain实现线性任务(如代码生成流程:需求解析→代码生成→优化),SequentialChain支持多输入输出的复杂场景(如电商推荐系统)。通过链式编排,开发者能灵活构建AI工作流,实现从简单到复杂的任务自动化处理。代码示

Coder_Boy_的博客 895

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

AI超级智能体教程(三)---程序调用AI大模型的四种方式(SpringAI+LangChain4j+SDK+HTTP)

1.安装SDK(查看文档) 2.创建API-key 3.项目引入灵积大模型 4.HTTP接入的方式 5.SpringAI引入 5.1添加依赖 5.2添加配置 5.3测试代码 6.LangChain4j引入 6.1依赖引入 6.2测试提问

大学成长道路上的探索经历与点滴思考,与君共勉,共筑成长。 2171

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SpringAI与LangChain4j的智能应用-(理论篇3)

SpringAI快速入门指南 SpringAI通过标准化抽象层和Spring生态融合,简化AI集成。环境搭建需Spring Boot 3.2+和Java 17+,引入核心依赖和Starter(如OpenAI/Ollama)。配置文件中定义模型参数和监控端点。核心接口ChatClient提供统一调用方式,支持多模型切换(@Qualifier)和上下文对话(Prompt构建)。进阶功能包括Prompt模板化(Mustache语法)实现动态参数填充,提升代码复用性。

Coder_Boy_的博客 837

第一章.干货干货!!!Langchain4j对接AI大模型-开发自己的智能体

在人工智能技术迅猛发展的今天,大型语言模型(LLM)已成为推动技术创新的核心引擎。从ChatGPT到Gemini,从Claude到文心一言,这些强大的AI模型正在重塑我们与计算机交互的方式,也为开发者提供了前所未有的机遇。然而,如何将这些前沿技术真正落地到实际应用中,构建出真正智能、实用的AI代理(Agent),仍是许多开发者面临的挑战。Java作为企业级应用开发的主流语言,在全球拥有庞大的开发者生态和丰富的应用场景。

墨家巨子@俏如来 2928

AI大模型实用(四)Java快速实现智能体整理(LangChain4j实现智能小工具)

系统提示词是设置 AI 模型行为规则和角色定位的隐藏指令,用户通常不能直接看到。系统 Prompt 相当于给 AI 设定人格和能力边界,也就是告诉 AI “你是谁?对于每个找到的 AI 服务,它将使用应用程序上下文中的所有 LangChain4j 组件创建此接口的实现,并将其注册为一个 bean。2、最大限度的调用函数工具:@UserMessage 我们通过提示词,让大模型尽量考虑调用我们的需求。:可把它看作标准 Spring Boot的 @Service,但带有 AI 功能。定义:QaService。

我的E家 474

【SpringAI 介绍】

摘要: 本文介绍了SpringAI框架的核心特性与应用场景。SpringAI作为AI集成框架,支持提示词工厂、对话拦截、对话记忆、Tool工具调用、RAG技术下的ETL处理等功能,帮助企业快速接入大模型并实现业务API互联。文章对比了SpringAI与LangChain4j的生态差异,并探讨了大模型选型策略,推荐自研、云端及开源模型(如Qwen3、DeepSeek)的适用场景。SpringAI凭借与Spring生态的无缝集成和易用性,成为企业AI集成的优选方案。

明志の博客 919

SpringAI vs LangChain4j实战对比:阿里云灵积大模型接入到底选哪个?

本文从Java开发者视角,实战对比了SpringAI与LangChain4j两大框架接入阿里云灵积大模型的核心差异。SpringAI定位为Spring生态的AI集成层,配置驱动、开箱即用,适合快速集成;LangChain4j则是功能丰富的AI应用编排框架,组件化设计更擅长构建复杂的工具调用、RAG及智能体工作流。文章结合具体代码示例,为不同技术栈和项目复杂度的团队提供了清晰的选型指南。

milk5的博客 695

12. AI面试题之 SpringAI Alibaba

1. 你们项目技术选型的时候为什么会使用SpringAlAlibaba框架?它和SpringAl或Langchain4j有什么区别?2. SpringAlAlibaba程序如何调用百炼可视化智能体?4. 如何在SpringAlAlibaba程序中调用百炼云知识库?3. 为什么要在程序中调用百炼平台云知识库?5. SpringAl Alibaba 如何实现结构化输出?

Karen博客 199

Ai应用学习笔记

本文介绍了AI应用的多种部署方式(本地、在线和云服务器)及其优缺点,详细讲解了四种AI大模型开发方案(纯prompt问答、Agent+函数调用、RAG检索增强生成和模型微调),并对比了SpringAi和LangChain4j两种开发框架。文章还提供了SpringAi快速入门指南,包括依赖配置、模型设置、客户端实现和实际操作方法,最后提到了使用Advisor接口实现AI会话历史功能。整体涵盖了AI应用开发的核心知识点和实用技术方案。

yuhui2331的博客 1913
上一篇: SpringAI与LangChain4j的智能应用-(实践篇3)
下一篇: 基于SpringAI的智能平台基座开发-(一)
Coder_Boy_
博客等级 码龄10年 2804粉丝 819原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值