LLM 目前有两种 API 类型:
LanguageModels。它们的 API 非常简单 - 它们接受 aString作为输入并返回 aString作为输出。此 API 现已过时,取而代之的是聊天 API(第二种 API 类型)。
ChatLanguageModels。它们接受一个或多个ChatMessages 作为输入并返回一个AiMessage作为输出。 ChatMessage通常包含文本,但一些 LLM 还支持文本和 s 的混合Image。此类聊天模型的示例包括 OpenAIgpt-3.5-turbo和 Google 的gemini-pro。
LanguageModelLangChain4j 中将不再扩展对 s 的支持,因此在所有新功能中,我们都将使用ChatLanguageModelAPI。
ChatLanguageModel是 LangChain4j 中的低级 API,提供最强大的功能和灵活性。在介绍完基础知识后,我们将介绍高级 API(Chain和)。AiServices
除了ChatLanguageModel和 之外LanguageModel,LangChain4j 还支持以下类型的模型:
EmbeddingModel- 该模型可以将文本翻译成Embedding。
ImageModel- 该模型可以生成和编辑Image。
ModerationModel- 该模型可以检查文本是否包含有害内容。
ScoringModel- 该模型可以针对查询对多段文本进行评分(或排名),本质上确定每段文本与查询的相关性。这对 RAG 很有用。这些将在后面介绍。
现在,让我们仔细看看该ChatLanguageModelAPI。
public interface ChatLanguageModel {
String generate(String userMessage);
...
}
如您所见,有一种generate方法可以接受 aString作为输入并返回 aString作为输出,类似于LanguageModel。这只是一种便捷方法,因此您可以快速轻松地使用它,而无需将 包装String在 中UserMessage。
但实际的聊天 API 如下:
...
Response<AiMessage> generate(ChatMessage... messages);
Response<AiMessage> generate(List<ChatMessage> messages);
...
这些版本的generate方法以一个或多个ChatMessage作为输入。 ChatMessage是一个代表聊天消息的基本接口。
ChatMessage
目前有四种类型的聊天消息,每个消息的“来源”对应一种:
UserMessage:这是来自用户的消息。用户可以是您的应用程序的最终用户(人类)或您的应用程序本身。根据 LLM 支持的方式,UserMessage可以仅包含文本(String),或文本和/或图像(Image)。
AiMessage:这是由 AI 生成的消息,通常用于响应UserMessage。您可能已经注意到,generate 方法返回一个AiMessage包装在 中的Response。 AiMessage可以包含文本响应(String)或执行工具的请求(ToolExecutionRequest)。别担心,我们稍后会探索工具。
ToolExecutionResultMessage:这是的结果ToolExecutionRequest。我们稍后会详细介绍这一点。
SystemMessage:这是来自系统的消息。通常,您作为开发人员应该定义此消息的内容。通常,您会在此处写下有关 LLM 在此对话中的角色、其行为方式、以何种风格回答等的说明。LLM 被训练得比SystemMessage其他类型的消息更加关注,因此请小心,最好不要让最终用户自由定义或向其中注入一些输入SystemMessage。通常,它位于对话的开头。
现在我们知道了所有类型的ChatMessage,让我们看看如何在对话中结合它们。
UserMessage在最简单的情况下,我们可以在方法中提供一个 实例generate。这类似于该generate方法的第一个版本,它以String作为输入。这里的主要区别在于它现在返回的不是String,而是Response
UserMessage根据内容,创建 的方法有很多种。最简单的方法是new UserMessage(“Hi”)或UserMessage.from(“Hi”)。
多个ChatMessage
现在,为什么您需要提供多个ChatMessage而不是一个作为输入?这是因为 LLM 本质上是无状态的,这意味着它们不维护对话的状态。因此,如果您想支持多轮对话,您应该注意管理对话的状态。
假设你想构建一个聊天机器人。想象一下用户和聊天机器人(AI)之间的简单多轮对话:
用户:你好,我叫 Klaus
AI:您好,克劳斯,有什么可以帮您的吗?
用户:我叫什么名字?
人工智能:克劳斯
交互如下ChatLanguageModel:
UserMessage firstUserMessage = UserMessage.from(“Hello, my name is Klaus”);
AiMessage firstAiMessage = model.generate(firstUserMessage).content(); // Hi Klaus, how can I help you?
UserMessage secondUserMessage = UserMessage.from(“What is my name?”);
AiMessage secondAiMessage = model.generate(firstUserMessage, firstAiMessage, secondUserMessage).content(); // Klaus
如您所见,在generate方法的第二次调用中,我们不仅提供了单条消息secondUserMessage,还提供对话中的先前消息。
手动维护和管理这些消息非常麻烦。因此,存在的概念ChatMemory,我们将在下一节中进行探讨。
最后编辑:Jeebiz 更新时间:2024-08-18 23:53