第1章:LangChain4j的聊天与语言模型
本文主要介绍了LangChain4j中与语言模型和聊天模型相关的API。强调了ChatLanguageModel的重要性,并详细解释了如何通过ChatMessage管理多轮对话、支持多模态输入,以及如何利用Kotlin扩展进行异步处理。这些功能使得LangChain4j在构建聊天应用时更加灵活和强大。
本文主要介绍了LangChain4j中语言模型和聊天模型的使用方法,包括:
- 语言模型的两种API类型:LanguageModel和ChatLanguageModel。
- ChatLanguageModel的多轮对话和多模态支持。
- 如何通过ChatMessage管理对话状态。
- Kotlin扩展支持异步处理聊天交互。
这些内容为开发者提供了使用LangChain4j构建聊天应用的基础知识
1. 语言模型的两种API类型
LangChain4j支持两种语言模型(LLM)的API:
- LanguageModel:这种API非常简单,它接受一个字符串作为输入,并返回一个字符串作为输出。这种API正在逐渐被聊天API(第二种API类型)取代。
- ChatLanguageModel:这种API接受多个ChatMessage作为输入,并返回一个AiMessage作为输出。ChatMessage通常包含文本,但某些LLM还支持其他模态(例如图像、音频等)。例如,OpenAI的gpt-4o-mini和Google的gemini-1.5-pro就是支持这种多模态的聊天模型。
LangChain4j不再扩展对LanguageModel的支持,所有新功能都将使用ChatLanguageModel API。
其他模型类型
除了ChatLanguageModel和LanguageModel,LangChain4j还支持以下类型的模型:
- EmbeddingModel:将文本转换为嵌入向量。
- ImageModel:生成和编辑图像。
- ModerationModel:检查文本是否包含有害内容。
- ScoringModel:根据查询对多段文本进行评分或排名,用于检索增强生成(RAG)。
2. ChatLanguageModel API
ChatLanguageModel是LangChain4j中与语言模型交互的底层API,提供了最强大的功能和灵活性。它的核心方法是generate,可以接受一个或多个ChatMessage作为输入,并返回一个AiMessage。
ChatLanguageModel API的核心是generate方法,它接受一个或多个ChatMessage作为输入,并返回一个AiMessage。ChatMessage是一个基础接口,代表聊天消息,有以下几种类型:
- UserMessage:用户的消息,可以是应用的最终用户(人类)或应用本身。根据语言模型支持的模态,UserMessage可以包含文本或其他模态。
- AiMessage:AI生成的消息,通常是响应UserMessage的。generate方法返回的AiMessage被包装在Response中。AiMessage可以包含文本响应或工具执行请求(ToolExecutionRequest)。
- ToolExecutionResultMessage:工具执行请求的结果。
- SystemMessage:系统消息,通常由开发者定义,用于指示语言模型在对话中的角色、行为方式和回答风格等。语言模型会更关注SystemMessage,因此不应允许最终用户自由定义或注入内容。
- CustomMessage:自定义消息,可以包含任意属性,但只有支持该功能的ChatLanguageModel实现(目前只有Ollama)才能使用。
LLM会更关注SystemMessage,因此不要让用户随意修改或注入内容。
3. 多轮对话的管理
由于LLM本身是无状态的,因此需要开发者手动管理对话状态。例如,一个简单的多轮对话如下:
用户:你好,我叫Klaus。AI:你好Klaus,我能帮你什么?用户:我的名字是什么?AI:Klaus。
在ChatLanguageModel中,需要将之前的对话消息传递给generate方法,以维护对话上下文。例如:
UserMessage firstUserMessage = UserMessage.from("你好,我叫Klaus");AiMessage firstAiMessage = model.generate(firstUserMessage).content();UserMessage secondUserMessage = UserMessage.from("我的名字是什么?");AiMessage secondAiMessage = model.generate(firstUserMessage, firstAiMessage, secondUserMessage).content();
4. 多模态支持
UserMessage不仅可以包含文本,还可以包含其他类型的内容,如图像、音频、视频或PDF文件。UserMessage包含一个Content列表,Content是一个接口,有以下实现:
- TextContent:表示纯文本。
- ImageContent:表示图像,可以是远程图像的URL或Base64编码的二进制数据。
- AudioContent:表示音频内容。
- VideoContent:表示视频内容。
- PdfFileContent:表示PDF文件的二进制内容。
例如,发送文本和图像的代码如下:
UserMessage userMessage = UserMessage.from(TextContent.from("描述下面的图像"),ImageContent.from("https://example.com/cat.jpg")
);
Response<AiMessage> response = model.generate(userMessage);
5. Kotlin扩展
LangChain4j为Kotlin提供了扩展,支持异步处理聊天交互。例如:
- chatAsync:异步执行聊天请求,返回模型的回复。
- generateAsync:异步生成响应。
这些扩展利用Kotlin的协程功能,使应用程序能够以非阻塞方式处理聊天请求。
总结
本文主要介绍了LangChain4j中与语言模型和聊天模型相关的API。强调了ChatLanguageModel的重要性,并详细解释了如何通过ChatMessage管理多轮对话、支持多模态输入,以及如何利用Kotlin扩展进行异步处理。这些功能使得LangChain4j在构建聊天应用时更加灵活和强大。
导读说明:
这是LangChain开发智能体的系列文档,欢迎连读
- 第1章:LangChain4j的聊天与语言模型
- 第2章:如何基于LangChain4j实现聊天记忆
- 第3章:在LangChain中如何设置模型参数
- 第4章:在LangChain中如何实现响应式流(Response Streaming)
- 第5章:在LangChain中如何使用AI Services
- 第6章:基于LangChain如何开发Agents,附带客户支持智能体示例
- 第7章:在LangChain中如何调用函数Tools (Function Calling)
- 第8章:LangChain检索增强生成RAG–1概述
- 第8章:LangChain检索增强生成RAG–2.1Easy RAG实现
- 第8章:LangChain检索增强生成RAG–2.2Core RAG APIs
- 第8章:LangChain检索增强生成RAG–2.3Naive RAG
- 第8章:LangChain检索增强生成RAG–2.4Advanced RAG【高级RAG】
- 第9章:LangChain让大模型结构化输出
- 第9章:LangChain结构化输出-示例1(情感分析AI服务)
- 第9章:LangChain结构化输出-示例2(数字提取服务)
- 第9章:LangChain结构化输出-示例3(日期和时间提取服务)
- 第9章:LangChain结构化输出-示例4(基于大模型从自然语言中提取POJO)
- 第9章:LangChain结构化输出-示例5(基于大模型如何精确匹配POJO的字段)
- 第9章:LangChain结构化输出-示例6(设置系统消息和用户消息模版)
- 第10章:基于LangChain的综合实战[开发企业助手,查知识、查订单、表单登记…]