赞
踩
github地址:
https://github.com/langchain4j/langchain4j
首先介绍LangChain4j是什么:
LangChain4j 的目标是简化将 AI/LLM 功能集成到 Java 应用程序中。
可以看下官网介绍:
依赖地址如下:
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-open-ai</artifactId>
- <version>0.29.1</version>
- </dependency>
除了openAi,LangChain4j 还集成了多种LLMS,基本hugging face 热门的LLMS LangChain4j 都有兼容。
ChatLanguageModel接收多个CharMessages作为输入并返回的AiMessage,ChatLanguageModel属于LangChain4j的基础API,下面我们看下调用示例:
- public static void main(String[] args) {
- String me = "helloWord!";
- System.out.println("用户:" + me);
- OpenAiChatModel demo = OpenAiChatModel.withApiKey("demo");
- String content = demo.generate(me);
- System.out.println("AI:" + content);
- }
该示例通过generate方法将String作为输入并返回String类型的content作为输出。
注:这只是最简单的实现方式,OpenAiChatModel提供了多种属性用于灵活配置自己的LLM。
- OpenAiChatModel chatGlmChatModel = OpenAiChatModel.builder()
- // 模型地址
- .baseUrl("http://127.0.0.1:8305/v1/")
- // 模型key
- .apiKey("EMPTY")
- // 最大令牌数
- .maxTokens(1000)
- // 精确度
- .temperature(0d)
- // 超时时间
- .timeout(Duration.ofSeconds(3))
- // 模型名称
- .modelName("chat-gpt")
- // 重试次数
- .maxRetries(3)
- .build();
ChatMessage
1.
ChatMessage通过上面的方法,我们可以实现和AI和对话并得到AI输出的答案,但实际开发中generate实际接受的是ChatMessage类型的参数。
ChatMessage代表聊天消息的基本接口。
LangChain4j目前支持四种类型的聊天信息,每种类型对应消息的来源:
UserMessage:用户类型消息,可以包含文本(String)或者图像(Image)。
AiMessage:AI类型消息,通常是响应UserMessage,OpenAiChatModel的generate方法在接受到Message类型的消息时,会返回一个Reponse。
- UserMessage userForm = UserMessage.from("hello!");
- Response<AiMessage> generate = chatGlmChatModel.generate(userForm);
- System.out.println(generate);
ToolExecutionResultMessage:这是 ToolExecutionRequest 的结果。
SystemMessage:系统类型消息,作为开发人员在构建prompt的时候,需要提前引导LLM在这次对话中的角色、表现、风格等,LLM受过训练,它更关注SystemMessage类型的消息,所以SystemMessage类型的消息一般放在开头。
上面所演示的所有情况只是单轮对话的输入输出,如果想支持多轮对话,要注意的是管理对话的状态,假设您想构建一个聊天机器人。想象一下用户和聊天机器人 (AI) 之间的简单多轮对话:
交互状态如下所示:
- 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 还提供对话中之前的消息firstUserMessage。
但是手动管理和维护这些消息链非常麻烦,因此LangChain4j 提供了ChatMemory用来管理消息。
后续ChatMemory相关内容:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。