个人总结 - LangChain4j应用(1)

个人总结 - LangChain4j应用(1)

github:

Releases · langchain4j/langchain4j · GitHub

官方文档:

Introduction | LangChain4j

简要介绍:

LangChain4j是一个旨在简化大语言模型(LLMs)与Java应用程序集成的框架。

Chat and Language Models:

  • LanguageModel: 最简单的聊天模型,简单的接收字符串,不做附加处理而生成回答(LangChain4j不支持)

  • ChatLanguageModel:接受单个或多个 ChatMessages 作为输入,并返回 AiMessage 作为输出。

    /**
    Response 包含:
    1.内容(AiMessage)
    2.有关生成的元信息。首先,它包括 TokenUsage,它包含有关输入(messages)包含的令牌数、作为输出生成的令牌数以及总数(输入 + 输出)的统计信息。可以此信息来计算对 LLM 的给定调用的费用。
    3.FinishReason,这是一个枚举,其中包含生成停止的各种原因。如果 LLM 决定自行停止生成,它将是 FinishReason.STOP。
    */
    Response<AiMessage> generate(ChatMessage... messages);
    Response<AiMessage> generate(List<ChatMessage> messages);    
    • ChatMessage的类型:

      • UserMessage:这是来自用户的消息。包含文本,但某些LLM也支持文本和图像的混合

      • AiMessage:这是由 AI 生成的消息,响应 UserMessage。generate 方法返回包装在 Response 中的 AiMessage。AiMessage 可以包含文本响应 (String) 或执行工具的请求 (ToolExecutionRequest)。

      • ToolExecutionResultMessage:ToolExecutionRequest 的结果。

      • SystemMessage:定义AI的系统角色信息。

  • EmbeddingModel : 此模型可以将文本转换为 Embedding,用于RAG。

  • ImageModel : 此模型可以生成和编辑图像

  • ModerationModel : 此模型可以检查文本是否包含有害内容。

  • ScoringModel: 此模型可以根据query对多段文本进行评分(或排名),来确定每段文本与query的相关性。用于RAG。

Chat Memory(聊天内存)

  • 不同于History保留整个历史记录,而是根据内部算法保留关键信息

  • 消息淘汰:超过LLM 一次可以处理的token数量时会进行消息淘汰

    • MessageWindowChatMemory :保留 N 条最近的消息。

    • TokenWindowChatMemory:保留 N 个最新的令牌。由于信息是不可分割的。如果消息不合适,则会将其完全淘汰。MessageWindowChatMemory 需要一个 Tokenizer 来计算每个 ChatMessage 中的令牌。

  • 消息持久化:可通过实现ChatMemoryStore接口自定义消息持久化

  • //自定义持久化机制
    class PersistentChatMemoryStore implements ChatMemoryStore {
            //memoryId 用于区分多个用户的对话。getMessages()方法应返回给定memoryId关联的所有消息。
            @Override
            public List<ChatMessage> getMessages(Object memoryId) {}
            //在添加新的 UserMessage 、 AiMessage 或淘汰消息时执行,messages不包括被淘汰的消息
            @Override
            public void updateMessages(Object memoryId, List<ChatMessage> messages) {}
            //
            @Override
            public void deleteMessages(Object memoryId) {}
    }
    ​
    ChatMemory chatMemory = MessageWindowChatMemory.builder()
            .id("12345")
            .maxMessages(10)
            //指定自定义的持久化机制
            .chatMemoryStore(new PersistentChatMemoryStore())
            .build();

Model Parameters(模型参数)

  • model参数具体含义由model厂商提供,以下是常见的参数配置:

    • model:模型名称(例如:gpt-4o)

    • temperature:介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定性。

    • max_tokens:聊天完成时可以生成的最大令牌数量。

    • n:为每条输入消息生成n个输出选项。

    • top_p:类似temperature,但倾向于选择下一个token的范围大小,比如设置top_p为0.1,那么model只会从累积概率的前10%的tokens中选择下一个token,如果你设置的 top_p 值较高,就有更大的范围来选择下一个token。

  • 创建模型的方式:

    • Static Factory:仅接受强制参数(例如 API 密钥)其他参数设置为默认值。

      OpenAiChatModel model = OpenAiChatModel.withApiKey("demo");

    • Builder:自由配置

      OpenAiChatModel model = OpenAiChatModel.builder()
              .apiKey("demo")
              .modelName("gpt-4")
              .temperature(0.3)
              .timeout(ofSeconds(60))
              .logRequests(true)
              .logResponses(true)
              .build();
    • SpringBoot配置文件:只有OpenAi支持

      langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}

Response Streaming(流式响应)

  • 对于ChatLanguageModel和LanguageModel接口,有相应的StreamingChatLanguageModel和StreamingLanguageModel接口

    StreamingChatLanguageModel model = OpenAiStreamingChatModel.builder()
        .apiKey(System.getenv("OPENAI_API_KEY"))
        .modelName(GPT_4_O_MINI)
        .build();
    String userMessage = "xxx";
    model.generate(userMessage, new StreamingResponseHandler<AiMessage>() {
        //生成下一个token时被调用
        @Override
        public void onNext(String token) {}
    ​
        //当 LLM 完成生成时:调用 onComplete(Response<T> response)。这里,对于 StreamingChatLanguageModel,T 代表 AiMessage,String 代表 StreamingLanguageModel。 Response 对象包含完整的响应
        @Override
        public void onComplete(Response<AiMessage> response) {}
    ​
        @Override
        public void onError(Throwable error) {
            error.printStackTrace();
        }
    });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾露z

谢谢侬!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值