首页 > 编程语言 >LangChain4j LangChain集成Java

LangChain4j LangChain集成Java

时间:2024-06-22 23:55:08浏览次数:28  
标签:LangChain4j Java String AI LangChain 类型 OpenAiChatModel generate UserMessage

LangChain4j介绍

github地址
https://github.com/langchain4j
image

快速开始

引入依赖
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
    <version>0.31.0</version>
</dependency>
ChatLanguageModel
    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);
    }

image
该示例通过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

通过上面的方法,我们可以实现和AI和对话并得到AI输出的答案,但实际开发中generate实际接受的是ChatMessage类型的参数
image

ChatMessage代表聊天消息的基本接口。

消息类型

LangChain4j目前支持四种类型的聊天信息,每种类型对应消息的来源:

UserMessage:用户类型消息,可以包含文本(String)或者图像(Image)。

AiMessage:AI类型消息,通常是响应UserMessage,OpenAiChatModel的generate方法在接受到Message类型的消息时,会返回一个Reponse。

ToolExecutionResultMessage:这是 ToolExecutionRequest 的结果。

SystemMessage:系统类型消息,作为开发人员在构建prompt的时候,需要提前引导LLM在这次对话中的角色、表现、风格等,LLM受过训练,它更关注SystemMessage类型的消息,所以SystemMessage类型的消息一般放在开头。

 UserMessage userForm = UserMessage.from("hello!");
 Response<AiMessage> generate = chatGlmChatModel.generate(userForm);
 System.out.println(generate);

多个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

标签:LangChain4j,Java,String,AI,LangChain,类型,OpenAiChatModel,generate,UserMessage
From: https://www.cnblogs.com/fchhk-blog/p/18262893

相关文章

  • Java解析微信获取手机号信息
    在微信中,用户手机号的获取通常是通过微信小程序的getPhoneNumber接口来实现的。这个接口允许用户在授权后,将加密的手机号数据传递给开发者。由于隐私保护,微信不会直接提供用户的明文手机号,而是提供一个加密的手机号字符串和相应的解密密钥。以下是一个基于Java的示例,展示了如何接......
  • Java高手的30k之路|面试宝典|精通JVM(二)
    JVM基本结构类加载子系统:负责将.class文件加载到内存中,并进行验证、准备、解析和初始化。运行时数据区:包括堆(Heap)、方法区(MethodArea)、Java栈(JavaStack)、本地方法栈(NativeMethodStack)和程序计数器(ProgramCounterRegister)。执行引擎:包括解释器(Interpreter)、即时编译器......
  • Java脚本实现在微信聊天框发消息
    最近,有读者问Java脚本如何实现在微信聊天框发消息。首先,需要明确一点:由于微信的安全限制和封闭性,直接使用Java(或任何其他外部编程语言)来控制在微信聊天框中发送消息是不可行的。微信没有提供公开的API来允许外部程序直接与其交互。但是,如果我们的目标是创建一个可以与微信集成的......
  • Java高手的30k之路|面试宝典|精通网络编程
    基础概念OSI和TCP/IP在高级Java开发面试中,关于OSI模型和TCP/IP模型的理解是非常重要的。以下是这两个网络模型及其各层功能的详细解释:OSI模型OSI(OpenSystemsInterconnection)模型是一个概念性框架,用于理解和设计网络通信的不同层次。它分为七层,每层都有特定的功能。......
  • Java脚本实现在微信聊天框发消息
    最近,有读者问Java脚本如何实现在微信聊天框发消息。首先,需要明确一点:由于微信的安全限制和封闭性,直接使用Java(或任何其他外部编程语言)来控制在微信聊天框中发送消息是不可行的。微信没有提供公开的API来允许外部程序直接与其交互。但是,如果我们的目标是创建一个可以与微信集成......
  • 一、若依--P2--P5【黑马程序员Java最新AI+若依框架项目开发新方案视频教程,基于RuoYi-V
    学习视频【黑马程序员Java最新AI+若依框架项目开发新方案视频教程,基于RuoYi-Vue3前后端分离版本,从前端到后端再到AI智能化应用全通关】https://www.bilibili.com/video/BV1pf421B71v/?p=6&share_source=copy_web&vd_source=3949d51b57b2891ea14d6e51c792bef6P2:前端框架搭......
  • java面试题--基础上
    一、说说&和&&的区别?作为运算符:&将二进制的每一位进行与运算作为逻辑运算符:两者都是与,&&如果左边为假则终止右边运算,即短路运算。&则需要把两边的比较执行完。二、int和Integer的区别int是Java的基本数据类型,而Integer是int的包装类int直接存储整数值,而Integer是一个对象,包含......
  • 2024年华为OD机试真题-生成哈夫曼树-(C++/Java/python)-OD统一考试(C卷D卷)
    题目描述给定长度为n的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于1。请完成一个函数,根据输入的数字数组,生成哈夫曼树,并将哈夫曼树按照中序遍历输出。为了保证输出的二叉树中序遍历结果统一,增加以下限制:二叉树节点中,左节点权值小于右节点......
  • java环境配置
    原文:https://edu.csdn.net/skill/java/java-4ddfc05dbbe54300905f404c1ed1b4f9?category=462&typeId=19824前言为什么写这篇文章呢,因为我不想再去百度搜别人的文章了,所以自己写一篇以作记录。一、准备工作JDK8下载地址JDK11下载地址在这里插入图片描述下载好之后双击exe文......
  • java设计模式--装饰器模式
    装饰器模式是一种结构型设计模式,它允许你动态地向对象添加额外的行为。装饰器模式通过将对象包装在一个装饰器类中,以提供额外的功能,而不是修改原始对象的结构。装饰器模式主要解决的问题是在不改变现有对象结构的情况下,动态地添加功能或修改行为。它可以避免使用子类继承的方式引......