个人总结 - LangChain4j应用(完结)

个人总结 - LangChain4j应用(完结)

github:

https://github.com/langchain4j/langchain4j/releases

官方文档:

https://docs.langchain4j.dev/intro

简要介绍:

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

Classification(分类)

  • 作用:对用户问题进行分类

    enum CustomerServiceCategory {
        订单状态,
        技术支持,
        用户反馈
    }
    
    public static void main(String[] args) {
        Map<CustomerServiceCategory, List<String>> examples = Map.of(
            CustomerServiceCategory.订单状态, Arrays.asList(
                "我的订单在哪里?",
                "更新一下发货状态。"
            ),
            CustomerServiceCategory.技术支持, Arrays.asList(
                "应用程序启动时崩溃。",
                "连接服务器出现问题。",
            ),
            CustomerServiceCategory.用户反馈, Arrays.asList(
                "服务很好,谢谢!",
                "客服需要改进。"
            )
        );
    
        // 使用预训练的嵌入模型
        EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
    
        // 创建分类器实例
        TextClassifier<CustomerServiceCategory> classifier = 
            new EmbeddingModelTextClassifier<>(embeddingModel, examples);
    
        // 对一条新消息进行分类
        List<CustomerServiceCategory> categories = classifier.classify("为什么应用程序这么慢?");
    
        // 输出分类结果
        System.out.println(categories); // [技术支持]
    }
    

Image Models(图像模型)

  • 生成图像

    //构建ImageModel模型
    ImageModel model = OpenAiImageModel.builder()
            .apiKey(ApiKeys.OPENAI_API_KEY)
            .modelName(DALL_E_3)
            .build();
    //生成图像
    Response<Image> response = model.generate("黄昏日落,日式动漫风格");
    System.out.println(response.content().url());
    
  • 将图像作为输入

    ChatLanguageModel model = OpenAiChatModel.builder()
            .apiKey(System.getenv("OPENAI_API_KEY")) 
            .modelName(GPT_4_VISION_PREVIEW)
            .maxTokens(50)
            .build();
    
    UserMessage userMessage = UserMessage.from(
            TextContent.from("你看到了什么?"),
    ImageContent.from("https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png")
    );
    
    Response<AiMessage> response = model.generate(userMessage);
    
    System.out.println(response.content().text());
    

Spring Boot 集成

  • 环境:需要 Java 17 和 Spring Boot 3.2。

  • 基本使用:

    • 导入依赖

      <dependency>
          <groupId>dev.langchain4j</groupId>
          <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
          <version>0.35.0</version>
      </dependency>
      
    • 可配置参数(根据模型提供商):

      #同步
      langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
      #流式
      langchain4j.open-ai.streaming-chat-model.api-key=${OPENAI_API_KEY}
      
      langchain4j.open-ai.chat-model.model-name=gpt-4o
      langchain4j.open-ai.chat-model.log-requests=true
      langchain4j.open-ai.chat-model.log-responses=true
      
    • 自动创建并装配一个 OpenAiChatModel 的实例(ChatLanguageModel 的实现):

      @RestController
      public class ChatController {
      
          ChatLanguageModel chatLanguageModel;
          StreamingChatLanguageModel streamingChatLanguageModel
      	//构造注入
          public ChatController(ChatLanguageModel chatLanguageModel,
                               StreamingChatLanguageModel streamingChatLanguageModel) {
              this.chatLanguageModel = chatLanguageModel;
              this.streamingChatLanguageModel = streamingChatLanguageModel;
          }
      
          @GetMapping("/chat")
          public String model(@RequestParam(value = "message", defaultValue = "Hello") String message) {
              return chatLanguageModel.generate(message);
          }
      }
      
  • 声明式AiServices

    • 引入依赖

      <dependency>
          <groupId>dev.langchain4j</groupId>
          <artifactId>langchain4j-spring-boot-starter</artifactId>
          <version>0.35.0</version>
      </dependency>
      
    • 定义一个AI接口,用@AiService修饰,也视为 Spring Boot @Service。

      当应用程序启动时,LangChain4j starter 将扫描 Classpath 并查找所有带有 @AiService 注解的接口。对于找到的每个 AI Service,它将组合该应用所拥有的LangChain4j 组件(如:StreamingChatLanguageModelChatMemoryProviderContentRetrieverRetrievalAugmentor)来创建此接口的实现,并将其注册为 bean:

      @AiService
      interface Assistant {
          @SystemMessage("你是个有礼貌的助理")
          String chat(String userMessage);
      }
      
  • Explicit Component Wiring

    • 作用:如果有多个 AiServices,并且希望将不同的 LangChain4j 组件连接到每个服务中,则可以使用显式连接模式 (@AiService(wiringMode = EXPLICIT)) 的组件。

    • 例子:

      • 配置

        # OpenAI
        langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
        langchain4j.open-ai.chat-model.model-name=gpt-4o-mini
        
        # Ollama
        langchain4j.ollama.chat-model.base-url=http://localhost:11434
        langchain4j.ollama.chat-model.model-name=llama3.1
        
      • 显式指定所有组件

        @AiService(wiringMode = EXPLICIT, chatModel = "openAiChatModel")
        interface OpenAiAssistant {
        
            @SystemMessage("You are a polite assistant")
            String chat(String userMessage);
        }
        
        @AiService(wiringMode = EXPLICIT, chatModel = "ollamaChatModel")
        interface OllamaAssistant {
        
            @SystemMessage("You are a polite assistant")
            String chat(String userMessage);
        }
        

Logging

  • LangChain4j 使用 SLF4J 进行日志记录

  • 确保依赖项中有一个 SLF4J 日志记录,例如 Logback:

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.5.8</version>
    </dependency>
    
  • 创建model时设置 logRequests(true) 和 logResponses(true) 来启用对 LLM 的每个请求和响应的日志记录:

    OpenAiChatModel.builder()
        ...
        .logRequests(true)
        .logResponses(true)
        .build();
    
  • Spring Boot配置日志方式:

    langchain4j.open-ai.chat-model.log-requests = true
    langchain4j.open-ai.chat-model.log-responses = true
    logging.level.dev.langchain4j = DEBUG
    logging.level.dev.ai4j.openai4j = DEBUG
    

Observability

  • 定义:ChatLanguageModel 和 StreamingChatLanguageModel 的某些实现允许配置 ChatModelListener 以侦听以下事件:向 LLM 提出的请求、LLM 的回应、错误

  • 这些事件包括以下属性:

    • Request:Model、Temperature、Top P、Max Tokens、Messages、Tools
    • Response:ID、Model、Token Usage、Finish Reason、Assistant Message
  • 示例:

    ChatModelListener listener = new ChatModelListener() {
    
        @Override
        public void onRequest(ChatModelRequestContext requestContext) {
            ChatModelRequest request = requestContext.request();
            Map<Object, Object> attributes = requestContext.attributes();
            ...
        }
    
        @Override
        public void onResponse(ChatModelResponseContext responseContext) {
            ChatModelResponse response = responseContext.response();
            ChatModelRequest request = responseContext.request();
            Map<Object, Object> attributes = responseContext.attributes();
            ...
        }
    
        @Override
        public void onError(ChatModelErrorContext errorContext) {
            Throwable error = errorContext.error();
            ChatModelRequest request = errorContext.request();
            ChatModelResponse partialResponse = errorContext.partialResponse();
            Map<Object, Object> attributes = errorContext.attributes();
            ...
        }
    };
    
    ChatLanguageModel model = OpenAiChatModel.builder()
            .apiKey(System.getenv("OPENAI_API_KEY"))
            .modelName(GPT_4_O_MINI)
        	//配置listener
            .listeners(List.of(listener))
            .build();
    
    model.generate("给我讲一个和Java有关的笑话");
    

Integrations(集成)

  • 定义:与各模型提供商的API集成,相关文档:https://docs.langchain4j.dev/category/integrations
  • 包括:
    • Language Models
    • Embedding Models
    • Embedding Stores
    • Image Models
    • Document Models
    • Document Parsers
    • Scoreing(Reranking)Models
    • Code Execution Engines
    • Frameworks
    • Web Search Engines
### 回答1: cw2015chbd是一种应用于电路中的集成电路芯片。该芯片具有多种功能和应用。 首先,cw2015chbd可以实现电池电量监测。它通过监测电池的电流、电压和温度等参数,可以精确地测量电池的电量。这样,我们就可以及时了解电池的剩余电量,避免因电量不足而影响设备的正常运行。 其次,cw2015chbd还可以实现电池充电管理。它可以根据电池的实际情况,通过动态调节电流和电压,实现对电池的快速充电或合理充电。这样,不仅可以提高充电效率和充电速度,还可以延长电池的使用寿命。 此外,cw2015chbd还具有过电流和过温保护功能。当电路中出现过大的电流或温度超过安全范围时,芯片会自动切断电源,以保护电路和设备的安全。 另外,cw2015chbd还可以实现对电路中其他元件的监测和控制。它可以测量电路中的电流和电压等参数,以实现对其他元件的电流和电压进行调控。这样,我们可以根据需要,对电路中的其他元件进行精确控制,提高整个电路系统的稳定性和性能。 总之,cw2015chbd是一款功能强大的集成电路芯片,可以用于电池电量监测、电池充电管理、过电流与过温保护以及对其他元件的监测和控制。它在电路应用领域具有重要的作用,为电路的安全和稳定运行提供了保障。 ### 回答2: CW2015CHBD是一种应用广泛的电路。它是一款高精度的电池电流检测芯片,常用于便携式电子设备的电池管理系统中。 CW2015CHBD具有多项优点。首先,它具有较高的精度和稳定性,能够准确地检测电池的充电和放电电流,帮助用户了解电池的状态。其次,它具有低功耗特性,能够延长电池使用时间。此外,CW2015CHBD还支持多种充电模式,如常规充电和快速充电模式,以满足不同需求。 CW2015CHBD的应用范围广泛。它可以应用于手机、平板电脑、相机等各种便携式电子设备中,帮助用户实时监测电池状态,以便及时充电或更换电池。同时,CW2015CHBD也适用于电动车或储能系统中,用于电池管理和保护,确保电池的安全和提高整体系统的效率。 总的来说,CW2015CHBD是一款应用广泛的电路,具有高精度、低功耗和多种充电模式的特点。它在电池管理系统中扮演重要的角色,能够帮助用户了解电池状态并确保整体系统的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

艾露z

谢谢侬!

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

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

打赏作者

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

抵扣说明:

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

余额充值