Java Ai大模型学习(未完)
探索大模型世界_什么是大模型

大模型(Large Model),通常是指参数量非常庞大的深度学习模型,特别是在自然语言处理(NLP)、计算机视觉(CV)等领域中,模型参数数量达到数十亿甚至数千亿的规模。
大模型的特点

特点
- 庞大的参数量
- 海量的数据训练
- 强大的计算能力

大模型的分类

- 语言大模型:专注于解析和理解文本
- 视觉大模型:擅长图像识别和分析
- 多模态大模型:则能够综合处理包括文本、图像和音频在内的多种数据类型
按照应用领域的不同,大模型主要可以分为 L0、L1、L2 三个层级

L0(高中生):通用模型,知识面广,但不够深入,能做基础工作。
L1(大学生):行业模型,针对某个领域有深入理解,能解决更复杂的问题,但还有限制。
L2(研究生):垂直模型,专注于一个领域,深度专业,能够处理高难度、细节化的问题。
大语言模型LLM的应用场景
-
智能客服与聊天机器人
-
内容创作与生成
-
翻译与多语言处理
-
文档摘要与信息提取
-
搜索与推荐系统
-
情感分析与情感计算
-
代码自动化与开发辅助
探索大模型世界_Java AI 开发工具

为了弥补Java开发者在AI领域的工具短板,市面上已经出现了几款针对Java的AI开发工具。
LangChain4J
- 提供标准化API,支持超过15个主流大模型提供商和嵌入存储,
- 提供工具箱,从低级提示词模板到高级AI服务,适合构建聊天机器人和检索增强生成(RAG)管道。
- 社区支持活跃,能够快速整合最新的AI技术,便于Java开发者将AI功能集成到现有项目中。
Spring Al
- 深度集成到Spring框架中,Java开发者可以轻松将AI功能嵌入到现有Spring项目中。
- 尽管Spring Al仍处于发展阶段,尚未发布正式版本,但其凭借Spring生态系统,具备了极强的扩展性和集成能力。
Spring AI Alibaba
- 提供多种大模型服务对接能力,包括主流开源与阿里云通义大模型服务(百炼)等
- 支持的模型类型包括聊天、文生图、音频转录、文生语音等

对比
| LangChain4J | Spring AI | Spring AI Alibaba | |
|---|---|---|---|
| 功能成熟度 | 功能全面,适合大规模AI应用 | 发展中,功能有待完善 | 功能全面,适合大规模AI应用 |
| 集成能力 | 支持多种LLM和嵌入存储,适合多样化场景 | 集成到Spring项目中,扩展性强 | 集成到Spring项目中,扩展性强 |
| 社区支持 | 社区活跃,反馈迅速 | 项目正在成长,API变更较大 | 社区活跃 |
| 兼容性 | Java8 + | Java17 + SpringBoot3 | JDK 要求 17 及以上版本 |
ava AI 开发工具_介绍LangChain4j

介绍
LangChain4j 是一个专为Java开发者设计的开源库,旨在简化将大型语言模型(LLM)集成到Java应用程序中的过程。它于2023年初开发,灵感来源于Python和JavaScript的LLM库,特别是为了填补Java领域在这一方面的空白。
LangChain4j 的核心功能
- 统一API:LangChain4j 提供统一 API,避免了学习和实现每个 API 的特定 API。
- 全面的工具箱:该框架包含多种工具,从低级的提示模板、聊天记忆管理到高级模式(如AI服务和RAG)。
- 大量的示例:LangChain4j提供大量的使用示例,与 Quarkus 和 Spring Boot 的集成等。
能干什么
- 集成了 15+个 语言大模型 15+ LLM providers
- 集成了 15+个 向量数据库 15+ embedding (vector) stores
- 集成了 10+个 嵌入模型 10+ embedding models
- 集成了 4个 图片大模型 4 cloud and local image generation models
- 集成了 2个 评分重排名模型 2 scoring (re-ranking) models
- 集成 1个 OpenAI 审核模型(检测prompt与响应是否有有害内容)
- 支持文本和图像作为输入(多模态)
- 更高层次的抽象,针对复杂的场景更方便集成。 AI Services
- 支持提示词模板、聊天记忆、聊天持久化、聊天记忆淘汰算法(消息窗口和令牌窗口) chat memory
- 支持同步/流式响应,支持常见 Java 类型和自定义 POJO 的输出解析器
- 支持工具(函数调用)Tools (function calling), 动态工具(执行动态生成LLM的代码)
- 支持检索增强生成技术 RAG (Retrieval-Augmented-Generation)

LangChain4j支持的LLMs

Java AI 开发工具_Langchain4j入门示例
介绍
如何通过低级 API 接入阿里百炼平台的通义模型 qwen-max。通过使用 LangChain4j 框架,开发者可以轻松调用该模型并集成到 Java 应用中。

Maven 依赖配置
首先,需要在项目中引入以下 Maven 依赖,用于集成 LangChain4j 与 DashScope:
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<!-- 加载bom 后,所有langchain4j引用不需要加版本号 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-bom</artifactId>
<version>0.35.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
YML 配置文件
在项目的 application.yml 中设置所使用的通义模型 qwen-max,以下是示例配置:
langchain4j:
open-ai:
chat-model:
# 课程测试 KEY,需要更换为实际可用 KEY
api-key: sk-xx
model-name: qwen-xxx
# 百炼兼容OpenAI接口规范,base_url为https://dashscope.aliyuncs.com/compatible-mode/v1
base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
logging://日志功能
requests: true
responses: true
logging:
level:
dev.langchain4j: DEBUG //日志的级别
代码实现
使用以下代码,快速启动一个基于 LangChain4j 和 Spring Boot 的 Java 应用,集成并调用阿里百炼平台的通义大语言模型。
/**
* 用于处理与通义模型的交互请求测试。
*/
@RestController
public class ChatController {
@Autowired
private ChatLanguageModel chatLanguageModel;
/**
* 聊天
* @param message
* @return
*/
@GetMapping("/ai/generate")
public String testChat(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message){
String generate = chatLanguageModel.generate(message);
return generate;
}
}
Java AI 开发工具_LangChain4j 高级API
创建子项目模块
创建子模块langchain4j_chatapi

Maven 依赖配置
在pom.xml中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
配置模型元信息
新建LLMConfig文件,配置 ChatLanguageModel 提供模型元信息。
@Bean
public ChatLanguageModel chatLanguageModel() {
return OpenAiChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_KEY"))
.modelName("qwen-turbo")
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.build();
}
编写控制器
@RestController
public class ChatController {
@Autowired
ChatLanguageModel chatLanguageModel;
@GetMapping("/ai/generate")
public String testChat(String msg){
String generate = chatLanguageModel.generate(msg);
System.out.println(generate);
return generate;
}
}
Java AI 开发工具__LangChain4j 高级LLM API
为了简化开发,LangChain4j提供了高层API,使开发者能够更专注于业务逻辑,而无需关注底层实现细节。高层API中,AiService 用于定义一个集成大模型的服务。
定义AI Service
/**
* AI 助手接口
*/
public interface ChatAssistant {
/**
* 聊天
* @param message
* @return {@link String}
*/
String chat(String message);
}
注入模型
/**
* 大模型配置
*/
@Configuration(proxyBeanMethods = false)
public class LLMConfig
{
@Bean
public ChatLanguageModel chatLanguageModel() {
return OpenAiChatModel.builder()
// .apiKey(System.getenv("sk-46aeef92a70d4a86bc04e6c9d04d9db1"))
.apiKey("sk-46aeef92a70d4a86bc04e6c9d04d9db1")
.modelName("qwen-plus")
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.build();
}
@Bean
public ChatAssistant chatAssistant() {
return AiServices.builder(ChatAssistant.class)
.chatLanguageModel(chatLanguageModel())
.build();
}
}
测试功能
@RestController
public class ChatController {
@Autowired
private ChatAssistant chatAssistant;
/**
* 测试高级LLM API
* @param msg
* @return
*/
@GetMapping("/ai/chatassistant")
public String testChat2(String msg){
String response = chatAssistant.chat(msg);
return response;
}
}
Java AI 开发工具_LangChain4j日志配置
日志配置 (Logging)
LangChain4j 使用 SLF4J 作为日志接口,支持集成各种日志后端,如 Logback 或 Log4j。
Spring Boot 环境
在 Spring Boot 集成时,可以通过 application.yml 文件配置日志级别:
langchain4j.open-ai.chat-model.log-requests = true
langchain4j.open-ai.chat-model.log-responses = true
logging.level.dev.langchain4j = DEBUG
logging.level.dev.ai4j.openai4j = DEBUG
监控
LangChain4j 提供了一些语言模型(如 ChatLanguageModel 和 StreamingChatLanguageModel),支持通过 ChatModelListener 监听以下事件:
- 请求到达 LLM
- LLM 返回的响应
- 错误处理
重试机制 (Retry Configuration)
LangChain4j 支持重试配置,可用于处理失败的请求。可以通过 maxRetries 来配置重试逻辑,指定重试次数和延迟等参数:
ChatLanguageModel model = OpenAiChatModel.builder() .maxRetries(5) // 设置重试策略 .build();
超时配置 (Timeout Configuration)
对于超时配置,可以通过 timeout 设置请求的超时时间:
ChatLanguageModel model = OpenAiChatModel.builder() .timeout(Duration.ofSeconds(10)) // 设置10秒超时 .build();
Java AI 开发工具_流式输出

介绍
LLM 每次生成一个标记,因此许多 LLM 提供商都提供逐个标记流式传输响应的方法,而不是等待生成整个文本。这显著改善了用户体验,因为用户无需等待未知的时间,几乎可以立即开始阅读响应。
流式响应处理
StreamingResponseHandler 接口流式响应的关键接口是 StreamingResponseHandler。它允许开发者定义在响应生成过程中的各个事件的处理逻辑。
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-reactor</artifactId>
<version>0.35.0</version>
</dependency>
</dependencies>
Java AI 开发工具_视觉理解
创建子模块
langchain-4j_image

Maven依赖
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
更多推荐



所有评论(0)