
LangChain4j 是一个专为 Java 开发者设计的框架,其目的在于简化构建与大型语言模型(LLMs)相关的应用程序。它为开发者提供了一系列工具和抽象概念,借助这些,开发者能够迅速打造出由 LLM 驱动的复杂应用,像聊天机器人、智能助手以及文档分析工具等。
核心功能:
工作流程:
在 pom.xml 中导入指定大模型对应的依赖
如 openAI
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.0.0-beta3</version>
</dependency>
所有支持的大模型:https://docs.langchain4j.info/integrations/language-models/
这里我们使用国内的阿里的大模型 DataScope(通义千问)
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
<version>${latest version here}</version>
</dependency>
大模型目前有两种 API 的形式:
ChatLanguageModel 是 LangChain 中较底层的 API(没什么封装,但是最灵活,随你怎么封装)
AI Services 更为高级
除了 ChatLanguageModel 和 LanguageModel 外,LangChain4j 还支持以下类型的模型:
EmbeddingModel - 这种模型可以将文本转换为 Embedding。ImageModel - 这种模型可以生成和编辑 Image。ModerationModel - 这种模型可以检查文本是否包含有害内容。ScoringModel - 这种模型可以对查询的多个文本片段进行评分(或排名), 本质上确定每个文本片段与查询的相关性,这对 RAG 很有用public interface ChatLanguageModel {
//接受 string 输入,返回 string 输出
String chat(String userMessage)
//接口一个或多个 ChatMessage 作为输入,并以 ChatResponse 作为输出
ChatResponse chat(ChatMessage... messages);
ChatResponse chat(List<ChatMessage> messages);
//自定义请求作为输入
ChatResponse chat(ChatRequest chatrequest)
}
ChatMessage 接口内置五种实现类型:
ChatLanguageModel 实现使用(目前只有 Ollama)。下面示例展示了如何与 ChatLanguageModel 进行交互:
UserMessage firstUserMessage = UserMessage.from("Hello,my name is Klaus");
AiMessage firstAiMessage = model.chat(firstUserMessage).aiMessage(); // Hi Klaus,how can I help you?
UserMessage secondUserMessage = UserMessage.from("What is my name?");
AiMessage secondAiMessage = model.chat(firstUserMessage,firstAiMessage,secondUserMessage).aiMessage(); // Klaus
https://docs.langchain4j.info/tutorials/chat-memory
记忆 != 历史
手动维护和管理 ChatMessage 是很麻烦的。 因此,LangChain4j 提供了 ChatMemory 抽象以及多种开箱即用的实现。
ChatMemory 可以作为独立的低级组件使用, 或者作为高级组件(如 AI 服务)的一部分。
ChatMemory 作为 ChatMessage 的容器(由 List 支持),具有以下额外功能:
淘汰一些消息非常必要:
LangChain 提供的两种开箱即用的实现:
MessageWindowChatMemory,作为滑动窗口运行, 保留最近的N条消息,并淘汰不再适合的旧消息。 然而,由于每条消息可能包含不同数量的令牌, MessageWindowChatMemory主要用于快速原型设计。TokenWindowChatMemory, 它也作为滑动窗口运行,但专注于保留最近的N个令牌, 根据需要淘汰旧消息。 消息是不可分割的。如果一条消息不适合,它会被完全淘汰。 TokenWindowChatMemory需要一个Tokenizer来计算每个 ChatMessage中的令牌数。使用阿里大模型,前往大理云百炼大模型服务平台 获取 API KEY