从零开发短视频电商 Java开发者的AI大模型(LLM)应用开发和设计-LangChain4j

慈云数据 8个月前 (03-12) 技术支持 138 0

文章目录

    • 简介
    • 示例
      • 1.添加依赖
      • 2.设置OpenAI API 密钥
      • 3.创建模型的实例并开始交互
      • 功能
      • 实践
        • 爬取网页并embedding
        • HuggingFace在线API集成
        • 加载离线model

          简介

          Github:

          • https://github.com/langchain4j

          • https://github.com/langchain4j/langchain4j

          • https://github.com/langchain4j/langchain4j-embeddings

          • https://github.com/langchain4j/langchain4j-examples

            Java版langchain, 利用LLMs的力量增强你的java应用程序

            该项目的目标是简化 AI/LLM 功能到 Java 应用程序的集成。

            可以通过以下方式实现:

            • 一个简单且连贯的抽象层,旨在确保您的代码不依赖于具体实现,例如 LLM providers, embedding store providers,等。这允许轻松替换组件。
            • 上述抽象的多种实现,为您提供了多种 LLMs 和嵌入存储可供选择。
            • LLM 之上的一系列热门功能,例如:
              • 获取您自己的数据 own data(文档、代码库等)的能力,允许LLM 根据您的数据采取行动和做出响应。
              • 用于将任务(动态定义)委托给LLM的自主代理 agents ,LLM将努力完成这些任务。
              • 提示模板 Prompt templates 可帮助您获得最高质量的 LLM 回复。
              • 记忆Memory 为LLM提供您当前和过去对话的背景信息。
              • 用于接收来自 LLM 的响应的结构化输出,具有所需的结构(如 Java POJO)。
              • “AI 服务”,用于在简单的 API 背后声明性地定义复杂的 AI 行为。
              • 减少常见用例中对大量样板代码的需求的链 Chains 。
              • 自动调节以确保LLM的所有输入和输出都不会有害。

                这个更像是一个大的框架,给你从头到尾梳理了个标准的流程,我认为是一个很大的解决方案

                Spring Boot 3 的支持

                兼容性:Java8 或更高, Spring Boot: 2 or 3

                示例

                1.添加依赖

                    dev.langchain4j
                    langchain4j-open-ai
                    0.24.0
                
                

                2.设置OpenAI API 密钥

                String apiKey = System.getenv("OPENAI_API_KEY");
                

                可以用自己的秘钥,不过要收费。

                OpenAI(付费)或 HuggingFace(免费)

                建议使用 OpenAI LLM(gpt-3.5-turbo和gpt-4),因为它们是迄今为止最有能力且价格合理的。

                也可以使用免费提供的 API 密钥demo来测试 OpenAI。

                即 String apiKey = "demo"

                3.创建模型的实例并开始交互

                OpenAiChatModel model = OpenAiChatModel.withApiKey(apiKey);
                String answer = model.generate("Hello World!");
                System.out.println(answer); // Hello! How can I assist you today?
                

                功能

                AI服务:

                • 简单模式
                • 带有记忆功能
                • 带有工具支持
                • 带有流式处理
                • 带有检索器
                • 带有自动审核
                • 带有结构化输出、结构化提示等功能

                  与OpenAI和Azure OpenAI集成的功能:

                  • 聊天(同步 + 流式 + 函数)
                  • 完成(同步 + 流式)
                  • 嵌入

                    与Google Vertex AI集成的功能:

                    • 聊天
                    • 完成
                    • 嵌入

                      与HuggingFace Inference API集成的功能:

                      • 聊天
                      • 完成
                      • 嵌入

                        与LocalAI集成的功能:

                        • 聊天(同步 + 流式 + 函数)
                        • 完成(同步 + 流式)
                        • 嵌入

                          与DashScope集成的功能:

                          • 聊天(同步 + 流式)
                          • 完成(同步 + 流式)
                          • 嵌入

                            聊天记忆

                            持久性聊天记忆

                            与文档进行聊天

                            与Astra DB和Cassandra集成

                            与Chroma集成

                            与Elasticsearch集成

                            与Milvus集成

                            与Pinecone集成

                            与Redis集成

                            与Vespa集成

                            与Weaviate集成

                            内存嵌入存储(可持久化)

                            结构化输出

                            提示模板

                            结构化提示模板

                            LLM响应的流式传输

                            文件系统和通过URL加载txt、html、pdf、doc、xls和ppt文档

                            将文档拆分为段落

                            • 按段落、行、句子、单词等:

                            • 递归

                            • 带有重叠

                              标记计数估算(以便您可以预测您将支付多少)

                              实践

                              爬取网页并embedding

                              // 从url拉取html
                              // loaders 有from WebUrl,s3,file
                              Document document = UrlDocumentLoader.load("https://www.baidu.com", DocumentType.HTML);
                              // 通过 css选择器 抽取内容和标题
                              Map metadataCssSelectors = new HashMap();
                              metadataCssSelectors.put("title", ".title");
                              HtmlTextExtractor transformer = new HtmlTextExtractor("#content", metadataCssSelectors, false);
                              Document transformedDocument = transformer.transform(document);
                              // 
                              String title = transformedDocument.metadata("title");
                              log.debug("title: {}", title);
                              // splitter 文档拆分为段
                              // 按段,特殊字符,句子,定长
                              DocumentSplitter splitter = new DocumentBySentenceSplitter(500, 0);
                              List segments = splitter.split(transformedDocument);
                               // embedding
                              for (TextSegment segment : segments) {
                                   String text = segment.text();
                                  // embedding
                                   Float[] xxx = textEmbeddingService.embed(text, ModelTypeEnum.BERT_EN_UNCASED_L4);
                              

                              HuggingFace在线API集成

                              为什么用HuggingFace的在线API,就是因为免费,哈哈哈!!!

                              对于嵌入(embedding),我们建议使用HuggingFace MTEB 排行榜中的模型之一。您必须找到最适合您的特定用例的一种。

                              以下是获取 HuggingFace API 密钥的方法:

                              • 在https://huggingface.co上创建一个帐户
                              • 前往https://huggingface.co/settings/tokens 生成新的访问令牌

                                引入依赖

                                    dev.langchain4j
                                    langchain4j-hugging-face
                                    0.24.0
                                
                                

                                推理示例

                                  EmbeddingModel embeddingModel = HuggingFaceEmbeddingModel.builder()
                                                .accessToken(System.getenv("HF_API_KEY"))
                                                .modelId("sentence-transformers/all-MiniLM-L6-v2")
                                                .waitForModel(true)
                                                .timeout(ofSeconds(60))
                                                .build();
                                        Response response = embeddingModel.embed("Hello, how are you?");
                                        System.out.println(response);
                                

                                加载离线model

                                针对加载离线model这块,底层依赖onnxruntime + djl.api

                                    dev.langchain4j
                                    langchain4j-embeddings
                                    0.24.0
                                
                                

                                证据在langchain4j-embeddings依赖的pom:

                                
                                    com.microsoft.onnxruntime
                                    onnxruntime
                                    1.16.2
                                
                                
                                
                                     ai.djl
                                     api
                                     0.25.0
                                
                                

                                示例代码

                                1.首先自己去huggingface或其他站点下载开源的onnx模型到本地

                                例如:https://huggingface.co/bert-base-uncased

                                2.加载本地onnx模型,并进行推测。

                                String text = "Let's demonstrate that embedding can be done within a Java process and entirely offline.";
                                // path  "C:/Users/laker/Downloads/model.onnx"
                                EmbeddingModel embeddingModel = new OnnxEmbeddingModel("/home/me/model.onnx");
                                Embedding inProcessEmbedding = embeddingModel.embed(text).content();
                                System.out.println(inProcessEmbedding);
                                

                                官方也提供了几个带onnx文件的jar,里面内置了onnx文件,你就不需要再下载了。

                                • https://github.com/langchain4j/langchain4j-embeddings

                                  在这里插入图片描述

                                  根据需要的模型引入依赖。

                                      dev.langchain4j
                                      langchain4j-embeddings-bge-small-zh
                                      0.24.0
                                  
                                  

                                  推理的示例代码

                                  // EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
                                  EmbeddingModel embeddingModel = new BgeSmallZhEmbeddingModel();
                                  Embedding inProcessEmbedding = embeddingModel.embed(text).content();
                                  System.out.println(inProcessEmbedding);
                                  
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon