今天想再完善一下做的微服务项目,想着再接入一个人工客服,于是学习了一下langchan4j的内容,未完

一、技术定位辨析:LangChain4j vs Spring AI vs OpenAI

  1. OpenAI:AI模型提供商 提供大语言模型API(如GPT-4o),是能力供给层。Java应用通过HTTP调用其接口,但需自行处理认证、请求组装和响应解析。
  2. LangChain4j轻量级集成框架

    • 模块化设计:通过langchain4j-{integration}-spring-boot-starter按需引入组件
    • 声明式接口:@AiService注解自动生成代理实现类
    • 核心价值:快速接入多模型(支持15+LLM提供商),降低集成复杂度 
  3. Spring AI企业级开发框架

    • Spring生态官方AI解决方案(2025年5月发布1.0)
    • 提供统一抽象层(如ChatClient),实现模型无缝切换
    • 企业级特性:安全、监控、结构化输出(POJO映射) 
   OpenAI (模型层)↑
LangChain4j / Spring AI (接入层)↑Your Java App (应用层)

二、LangChain4j集成OpenAI实战

步骤1:引入依赖
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId><version>1.0.0-beta3</version>
</dependency>
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId><version>1.0.0-beta3</version>
</dependency>

步骤2:配置application.properties
# 使用百炼平台(兼容OpenAI API)
langchain4j.open-ai.chat-model.base-url=https://bailian.aliyun.com
langchain4j.open-ai.chat-model.api-key=${ALI_API_KEY}
langchain4j.open-ai.chat-model.model-name=qwen-plus
步骤3:声明式AI服务接口
@AiService
public interface Assistant {@SystemMessage("你是一个专业的Java编码助手,用简洁代码回答问题")String explainCode(@UserMessage String question);
}

步骤4:在Controller中调用
@RestController
public class AIController {@AutowiredAssistant assistant;@GetMapping("/explain")public String explain(@RequestParam String codeSnippet) {return assistant.explainCode("解释这段代码:" + codeSnippet);}
}

技术亮点

  • 自动处理对话历史管理
  • 支持多模态输入(文本/图片) 

三、Spring AI集成OpenAI实战

步骤1:添加依赖
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>

步骤2:配置application.yaml
spring:ai:openai:api-key: ${OPENAI_API_KEY}chat:model: gpt-4o
步骤3:使用ChatClient调用
@RestController
public class ChatController {private final ChatClient chatClient;public ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}// 基础对话@GetMapping("/ask")public String ask(@RequestParam String question) {return chatClient.prompt().user(question).call().content();}// 结构化输出(自动JSON→POJO)@GetMapping("/analyze")public ProductAnalysis analyze(@RequestParam String productDesc) {return chatClient.prompt().user("分析产品特性:" + productDesc).call().entity(ProductAnalysis.class);}record ProductAnalysis(String name, List<String> features) {}
}

核心优势

  1. 内置企业级RAG管道(文档加载→分割→向量化→检索)
  2. 类型安全输出:LLM响应自动映射为Java对象
  3. 深度集成Spring生态:监控端点/actuator/ai实时跟踪AI调用 

四、框架对比与选型建议

特性LangChain4jSpring AI
设计理念轻量模块化企业级解决方案
学习难度低(注解驱动)中(需理解Spring AI概念)
RAG支持需手动组装组件开箱即用管道
多模型切换改依赖+配置即可统一API无感切换
监控能力依赖第三方原生Actuator集成
适用场景快速验证/轻量应用复杂企业系统

选型指南

  • 追求快速验证 → 选LangChain4j(30行代码完成接入)
  • 构建生产级AI应用 → 选Spring AI(企业特性+可观测性)
  • 需要多模型热切换 → Spring AI的ChatClient更优雅 

技术进步:两大框架正加速融合,Spring AI 1.1将支持LangChain4j组件互操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94416.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94416.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94416.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为光学设计面试题

16. 题目&#xff1a;设计一个用于机器视觉检测的光学系统时&#xff0c;如何保证在高速运动下成像的清晰度和稳定性&#xff1f;(出处&#xff1a;华为智能制造光学检测项目组招聘面试题)17. 题目&#xff1a;请说明在光学系统设计中&#xff0c;如何权衡景深和分辨率的关系&a…

vue3和react的异同点

这是一个前端领域非常核心的话题。Vue 3 和 React 都是极其优秀的现代前端框架&#xff0c;它们在理念和实现上既有相似之处&#xff0c;也有显著区别。 下面我将从多个维度详细对比它们的异同点。核心哲学与设计理念特性Vue 3React设计理念渐进式框架与 “救世主”声明式 UI 库…

assetbuddle hash 比对

1.测试 &#xff1a;当在预设上的数据有修改时&#xff0c;生成的ab也会有修改&#xff0c;具体到某个ab的.manifest里会有相应的变化&#xff0c;AssetFileHash 会修改 如图所示&#xff1a; ManifestFileVersion: 0 CRC: 2818930197 Hashes: AssetFileHash: serializedVersio…

Spring Boot `@Configuration` 与 `@Component` 笔记

Spring Boot Configuration 与 Component 笔记 1️⃣ 基本概念注解作用是否有代理适用场景Component标记普通组件&#xff0c;将类交给 Spring 容器管理❌ 没有 CGLIB 代理普通 Bean&#xff0c;工具类、过滤器、监听器等Configuration标记配置类&#xff0c;用来声明 Bean✅ 有…

二、JVM 入门——(三)栈

栈的定义 栈也是一块区域&#xff0c;用来存放数据的。栈也叫栈内存&#xff0c;主管Java程序的运行。 栈是私有的&#xff0c;是在线程创建时创建&#xff0c;所以它的生命期是跟随线程的生命期&#xff0c;线程结束栈内存也就释放。 因此对于栈来说不存在垃圾回收问题&…

深度学习入门第一课——神经网络实现手写数字识别

昨天我们讲了深度学习的大致框架&#xff0c;下面我们用深度学习网络来实现一个小项目——手写数字识别。完整代码import torch from torch import nn from torch.utils.data import DataLoader from torchvision import datasets from torchvision.transforms import ToTensor…

Vue中的scoped属性

理解&#xff1a; 在 .vue 文件中&#xff0c;scoped 是 <style> 标签的一个属性&#xff0c;作用是让样式只作用于当前组件&#xff0c;避免样式污染其他组件 scoped 让样式只在自己的组件内生效&#xff0c;不会影响到其他组件的同名元素 举例 没有 scoped 的情况&…

S2B2B系统哪个好,商淘云、数商云、金蝶云苍穹供应链批发哪个比较靠谱

在数字化商业浪潮汹涌的当下&#xff0c;S2B2B系统已成为众多企业优化供应链、提升运营效率、拓展业务版图的关键利器。从大型企业的复杂产业链协同&#xff0c;到中小企业对上下游资源的整合与把控&#xff0c;S2B2B系统的身影无处不在。但面对市场上层出不穷的各类S2B2B系统&…

利用3台机器搭建Kubernetes集群

文章目录1 机器准备修改主机名(可选)配置IP地址和主机名映射关闭防火墙关闭swap2 安装docker修改并更新软件源安装docker设置路由转发规则&#xff0c;并使配置生效安装 kubelet&#xff0c;kubeadm&#xff0c;kubectl3 初始化集群4 集群初始化5 work节点加入6 部署网络插件本…

C6.3:发射结交流电阻

当一个小交流电压加在发射结上&#xff0c;会产生发射极交流电流&#xff0c;该交流电流的大小取决于Q点位置&#xff0c;而曲线是弯曲的&#xff0c;所以Q点在曲线上的位置越高&#xff0c;发射极交流电流的峰值越大。发射极总电流是直流分量和交流分量叠加而成&#xff0c;即…

python中生成器

生成器是根据算法生成数据的一种机制&#xff0c;每次调用生成器只生成一个值&#xff0c;可以节省大量内存生成器推导式gg ( i * 2 for i in range(5))print(gg)print(next(gg)) # 0 print(next(gg)) # 2 print(next(gg)) # 4 print(next(gg)) # 6 print(next(gg)) # 8yield…

【RAGFlow代码详解-28】部署和基础设施

Docker 部署架构 RAGFlow 使用多阶段 Docker 构建过程和 Docker Compose 编排进行部署。该系统支持完整和轻量级部署变体。 多阶段 Docker 构建构建过程由 Dockerfile 2-214中定义的三个阶段组成&#xff1a; 基础阶段 &#xff1a;使用系统依赖项、ML 模型和运行时环境设置 Ub…

【prism】Prism 弹窗在 ViewModel 中控制大小的实践总结

好 &#x1f44d; 这个思路非常适合写成一篇 实用型博客&#xff0c;主题就是 “Prism 弹窗如何在 ViewModel 中控制窗口大小”。我帮你整理了一篇文章草稿&#xff0c;你可以直接拿去修改/发布。Prism 弹窗在 ViewModel 中控制大小的实践总结 在 WPF 中使用 Prism 的 IDialogS…

项目管理进阶——研发项目立项管理制度

为使公司研究开发(以下简称研发)项目的管理工作规范化、程序化、充分调度研发人员的积极性,提高研发成果的产出率和成果转化率,特制定管理办法。 一、 研发项目的立项: 原则上公司部设立基础研究项目。研发项目的重点放在符合市场需要。能很快转化成产品,或对现有生产工…

CMake构建学习笔记20-iconv库的构建

1. 构建 iconv是一个用于在不同字符编码&#xff08;如 UTF-8、GBK、ISO-8859-1 等&#xff09;之间进行转换的开源库。笔者在《c中utf8字符串和gbk字符串的转换》这篇文章中介绍过如何在Windows下实现utf8字符串和gbk字符串的转换&#xff0c;不过该实现是基于Win32 API的&am…

STM32的Sg90舵机

1.舵机到底要的是什么信号&#xff1f;想象舵机就像一个“听秒表的工人”&#xff1a;这个工人每隔 20ms 就抬头看看秒表一次。秒表上的 高电平持续多久&#xff0c;他就把这个时间当成“指令角度”。高 1ms → 转到最左&#xff08;0&#xff09; 高 1.5ms → 转到中间&#x…

动态带宽扩展(DBE):下一代Wi-Fi性能提升的关键技术

动态带宽扩展(DBE):下一代Wi-Fi性能提升的关键技术 引言 在无线通信技术快速发展的今天,用户对网络带宽和传输速率的需求呈指数级增长。为了满足这种需求,IEEE 802.11标准不断演进,引入了多项创新技术。其中,动态带宽扩展(Dynamic Bandwidth Expansion, DBE) 作为80…

Seaborn数据可视化实战:Seaborn数据可视化基础-从内置数据集到外部数据集的应用

Seaborn数据集探索与图表绘制实践 学习目标 通过本课程&#xff0c;你将学习如何使用Seaborn库中的内置数据集&#xff0c;了解如何加载这些数据集&#xff0c;并掌握使用这些数据集绘制图表的基本方法。此外&#xff0c;你还将学习如何导入外部数据集&#xff0c;并在Seaborn中…

漫谈《数字图像处理》之经典空域边缘检测Canny与LOG

在《数字图像处理》的图像分割领域&#xff0c;Canny 边缘检测与 LOG&#xff08;高斯拉普拉斯&#xff09;边缘检测是两款极具代表性的先进空域算法。不同于深度学习驱动的方法&#xff0c;它们通过对图像像素的直接计算提取边缘&#xff0c;下面用更贴近日常认知的语言&#…

抢红包案例加强版

加join的功能是保证线程全部运行完毕&#xff0c;之后好统计构造器刚开始为空列表&#xff0c;利用这个方法返回每个成员列表&#xff08;把每个员工弄成一个列表里面写他们抢到的红包大小&#xff0c;索引代表抢到的个数。&#xff09;