LangChain4j + 低阶 和 高阶 API的详细说明
是 LangChain4j 中与 LLM 交互的低级 API,提供最大的能力和灵活性。还有一个高级 API(编写 Controller ,如下,其实就是跟我们编写的第一个连接大模型的 Hello World 是一样的。这只是一个便捷方法,让您可以快速轻松地进行试验,而无需将。),我们将在介绍完基础知识后再讨论。如您所见,有一个简单的。配置对应大模型的配置类。现在,让我们仔细看看。
LangChain4j + 低阶 和 高阶 API的详细
https://docs.langchain4j.dev/tutorials/chat-and-language-models/
LLM 目前有两种 API 类型:
LanguageModel
。它们的 API 非常简单 - 接受String
作为输入并返回String
作为输出。 这种 API 现在正在被聊天 API(第二种 API 类型)所取代。- ChatModel。这些接受多个
ChatMessage
作为输入并返回单个AiMessage
作为输出。ChatMessage
通常包含文本,但某些 LLM 也支持其他模态(例如,图像、音频等)。 这类聊天模型的例子包括 OpenAI 的gpt-4o-mini
和 Google 的gemini-1.5-pro
。
LangChain4j 不会再扩展对 LanguageModel
的支持, 因此在所有新功能中,我们将使用 ChatModel API。
ChatModel
是 LangChain4j 中与 LLM 交互的低级 API,提供最大的能力和灵活性。 还有一个高级 API(AI 服务),我们将在介绍完基础知识后再讨论。
除了 ChatModel
和 LanguageModel
外,LangChain4j 还支持以下类型的模型:
EmbeddingModel
- 这种模型可以将文本转换为Embedding
。ImageModel
- 这种模型可以生成和编辑Image
。ModerationModel
- 这种模型可以检查文本是否包含有害内容。ScoringModel
- 这种模型可以对查询的多个文本片段进行评分(或排名), 本质上确定每个文本片段与查询的相关性。这对 RAG 很有用。 这些将在后面介绍。
现在,让我们仔细看看 ChatModel
API。
public interface ChatModel {
String chat(String userMessage);
...
}
如您所见,有一个简单的 chat
方法,它接受 String
作为输入并返回 String
作为输出,类似于 LanguageModel
。 这只是一个便捷方法,让您可以快速轻松地进行试验,而无需将 String
包装在 UserMessage
中。
LangChain4j在两个抽象层(低阶 / 高阶)提供不同的 api
- LangChain4j 在两个抽象层次上运行:
- 低层次。在这个层次上,您拥有最大的自由度和访问所有低级组件的权限,如 ChatModel,、UserMessage
、AiMessage
、EmbeddingStore
、Embedding
等。 这些是您的 LLM 驱动应用程序的"原语"。 您可以完全控制如何组合它们,但需要编写更多的粘合代码。
- 高层次。在这个层次上,您使用高级 API(如 AI 服务)与 LLM 交互, 它隐藏了所有复杂性和样板代码。 您仍然可以灵活地调整和微调行为,但是以声明式方式完成。
low level 低阶
ChatModel 接口如下的默认实现的方法:
ChatModel提供的--种极其简便的方法:如下:
default String chat(String userMessage) {
ChatRequest chatRequest = ChatRequest.builder()
.messages(UserMessage.from(userMessage))
.build();
ChatResponse chatResponse = chat(chatRequest);
return chatResponse.aiMessage().text();
}
@GetMapping(value = "/langchain4j/hello")
public String hello(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)
{
String result = chatModel.chat(prompt);
System.out.println("通过langchain4j调用模型返回结果:\n"+result);
return result;
}
high level 高阶
low level 低阶 API 的使用
导入相关的依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--langchain4j-open-ai 基础-->
<!--所有调用均基于 OpenAI 协议标准,实现一致的接口设计与规范LangChain4j 提供与许多 LLM 提供商的集成
从最简单的开始方式是从 OpenAI 集成开始https://docs.langchain4j.dev/get-started -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
<!--langchain4j 高阶-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
配置对应大模型的配置类。
package com.rainbowsea.langchain4j02lowhighapi.config;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Date 2025-05-27 22:04
* @Description: 知识出处 https://docs.langchain4j.dev/get-started
*/
@Configuration
public class LLMConfig
{
@Bean(name = "qwen")
public ChatModel chatModelQwen()
{
return OpenAiChatModel.builder()
.apiKey(System.getenv("aliQwen_api"))
.modelName("qwen-plus")
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.build();
}
/**
* @Description: 知识出处,https://api-docs.deepseek.com/zh-cn/
*/
@Bean(name = "deepseek") // 可以在根据@Resoure(name = "deepseek") 导入不同的实体类
public ChatModel chatModelDeepSeek()
{
return
OpenAiChatModel.builder()
.apiKey(System.getenv("deepseek_api"))
.modelName("deepseek-chat")
//.modelName("deepseek-reasoner")
.baseUrl("https://api.deepseek.com/v1")
.build();
}
}
编写 Controller ,如下,其实就是跟我们编写的第一个连接大模型的 Hello World 是一样的
启动测试:
更多推荐
所有评论(0)