小智医疗-大模型对话系统
(1)创建一个Maven项目(2)添加SpringBoot相关依赖(3)创建配置文件(在resources下创建配置文件application.properties,构建web服务访问端口)(4)创建启动类(5)启动启动类(访问http:~~~.html)查看是否可以正常运行。如果你暂时没有密钥,也可以使用LangChain4j 提供的演示密钥,这个密钥是免费的,有使用配额限制,且仅限于 gpt-
·
1、LangChain4j入门
LangChain4j的基本概念:
LangChain4j 的目标是简化将大语言模型(LLM - Large Language Model)集成到 Java 应用程序中的过程。
LangChain4j的主要功能:
与大型语言模型和向量数据库的便捷交互:通过统一的应用程序编程接口(API),可以轻松访问所有主要的商业和开源大型语言模型以及向量数据库,使你能够构建聊天机器人、智能助手等应用。
专为 Java 打造:借助Spring Boot 集成,能够将大模型集成到ava 应用程序中。大型语言模型与 Java 之间实现了双向集成:你可以从 Java 中调用大型语言模型,同时也允许大型语言模型反过来调用你的 Java 代码。
智能代理、工具、检索增强生成(RAG):为常见的大语言模型操作提供了广泛的工具,涵盖从底层的提示词模板创建、聊天记忆管理和输出解析,到智能代理和检索增强生成等高级模式。
创建SpringBoot项目流程:
(1)创建一个Maven项目(2)添加SpringBoot相关依赖(3)创建配置文件(在resources下创建配置文件application.properties,构建web服务访问端口)(4)创建启动类(5)启动启动类(访问http:~~~.html)查看是否可以正常运行
2、对接deepseek大模型
LangChain4j库结构:
LangChain4j 具有模块化设计,包括:
1. langchain4j-core 模块,它定义了核心抽象概念(如聊天语言模型和嵌入存储)及其 API 。
2. 主 langchain4j 模块,包含有用的工具,如文档加载器、聊天记忆实现,以及诸如人工智能服务等 高层功能。
3. 大量的 langchain4j-{ 集成 } 模块,每个模块都将各种大语言模型提供商和嵌入存储集成到LangChain4j 中。你可以独立使用 langchain4j-{ 集成 } 模块。如需更多功能,只需导入 langchain4j 依赖项即可。
在 LangChain4j 中, DeepSeek 和 GPT 一样也使用了 OpenAI 的接口标准,因此也使用 OpenAiChatModel 进行接入
#DeepSeek
langchain4j.open-ai.chat-model.base-url = https : //api.deepseek.com
langchain4j.open-ai.chat-model.api-key = ${DEEP_SEEK_API_KEY}
#DeepSeek-V3
langchain4j.open-ai.chat-model.model-name = deepseek-chat
#DeepSeek-R1 推理模型
#langchain4j.open-ai.chat-model.model-name=deepseek-reasoner
# 阿里百炼平台
langchain4j.community.dashscope.chat-model.api-key = ${DASH_SCOPE_API_KEY}
langchain4j.community.dashscope.chat-model.model-name = qwen-max
接入大模型流程:
(1)添加LangChain4j相关依赖(2)创建测试用例: 接入任何一个大模型都需要先去申请apiKey。如果你暂时没有密钥,也可以使用LangChain4j 提供的演示密钥,这个密钥是免费的,有使用配额限制,且仅限于 gpt-4o-mini 模型。(3)springboot整合
3、AiServices
什么是AiService:
AIService使用面向接口和动态代理的方式完成程序的编写,更灵活的实现高级功能。在LangChain4j中我们使用AIService完成复杂操作。底层组件将由AIService进行组装。AIService可处理最常见的操作: 为大语言模型格式化输入内容,解析大语言模型的输出结果 。它们还支持更高级的功能: 聊天记忆 Chat memory ,工具 Tools ,检索增强生成 RAG。
AiServices的底层原理:
AiServices 会 组装Assistant接口以及其他组件 ,并使用反射机制创建一个实现 Assistant 接口的 代理对象 。 这个代理对象会处理输入和输出的所有转换工作。在这个例子中,chat 方法的输入是一个字符串,但是大 模型需要一个 UserMessage 对象。所以,代理对象将这个字符串转换为 UserMessage ,并调用聊天语言模型。chat 方法的输出类型也是字符串,但是大模型返回的是 AiMessage 对象,代理对象会将其转换为字符串。 简单理解就是:代理对象的作用是输入转换和输出转换。
@Test
public void testChat() {
//创建AIService
Assistant assistant = AiServices.create(Assistant.class, qwenChatModel);
//调用service的接口
String answer = assistant.chat("Hello");
System.out.println(answer);
}
public static <T> T create(Class<T> aiService, ChatLanguageModel chatLanguageModel) {
return builder(aiService).chatLanguageModel(chatLanguageModel).build();
}
default String chat(String userMessage) {
ChatRequest chatRequest = ChatRequest.builder().messages(new ChatMessage[]{UserMessage.from(userMessage)}).build();
ChatResponse chatResponse = this.chat(chatRequest);
return chatResponse.aiMessage().text();
}
AiServices的工作流程:
1、引入依赖
<!--langchain4j高级功能-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
</dependency>
2、创建接口
package com.atguigu.java.ai.langchain4j.assistant;
public interface Assistant {
String chat(String userMessage);
}
3、测试用例
@SpringBootTest
public class AIServiceTest {
@Autowired
private QwenChatModel qwenChatModel;
@Test
public void testChat() {
//创建AIService
Assistant assistant = AiServices.create(Assistant.class, qwenChatModel);
//调用service的接口
String answer = assistant.chat("Hello");
System.out.println(answer);
}
}
也可以在Assistant接口上添加@AiService注解
package com.atguigu.java.ai.langchain4j.assistant;
//因为我们在配置文件中同时配置了多个大语言模型,所以需要在这里明确指定(EXPLICIT)模型的beanName
(qwenChatModel)
@AiService(wiringMode = EXPLICIT, chatModel = "qwenChatModel")
public interface Assistant {
String chat(String userMessage);
}
测试用例中,可以直接注入Assistant对象
@Autowired
private Assistant assistant;
@Test
public void testAssistant() {
String answer = assistant.chat("Hello");
System.out.println(answer);
}
4、聊天记忆 Chat memory
创建测试类发现目前的接入方式,大模型是没有记忆的
更多推荐



所有评论(0)