0


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

文章目录

简介

Github:

Java版

langchain

, 利用LLMs的力量增强你的java应用程序。

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

可以通过以下方式实现:

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

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

Spring Boot 3 的支持

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

示例

1.添加依赖

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.24.0</version></dependency>

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,fileDocument document =UrlDocumentLoader.load("https://www.baidu.com",DocumentType.HTML);// 通过 css选择器 抽取内容和标题Map<String,String> metadataCssSelectors =newHashMap<>();
metadataCssSelectors.put("title",".title");HtmlTextExtractor transformer =newHtmlTextExtractor("#content", metadataCssSelectors,false);Document transformedDocument = transformer.transform(document);// String title = transformedDocument.metadata("title");
log.debug("title: {}", title);// splitter 文档拆分为段// 按段,特殊字符,句子,定长DocumentSplitter splitter =newDocumentBySentenceSplitter(500,0);List<TextSegment> segments = splitter.split(transformedDocument);// embeddingfor(TextSegment segment : segments){String text = segment.text();// embeddingFloat[] xxx = textEmbeddingService.embed(text,ModelTypeEnum.BERT_EN_UNCASED_L4);

HuggingFace在线API集成

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

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

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

引入依赖

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-hugging-face</artifactId><version>0.24.0</version></dependency>

推理示例

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

加载离线model

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

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-embeddings</artifactId><version>0.24.0</version></dependency>

证据在

langchain4j-embeddings

依赖的pom:

<!-- 使用这个加载onnx模型 --><dependency><groupId>com.microsoft.onnxruntime</groupId><artifactId>onnxruntime</artifactId><version>1.16.2</version></dependency><!-- 使用这里内置的分词器等 --><dependency><groupId>ai.djl</groupId><artifactId>api</artifactId><version>0.25.0</version></dependency>

示例代码

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 =newOnnxEmbeddingModel("/home/me/model.onnx");Embedding inProcessEmbedding = embeddingModel.embed(text).content();System.out.println(inProcessEmbedding);

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

在这里插入图片描述

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

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-embeddings-bge-small-zh</artifactId><version>0.24.0</version></dependency>

推理的示例代码

// EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();EmbeddingModel embeddingModel =newBgeSmallZhEmbeddingModel();Embedding inProcessEmbedding = embeddingModel.embed(text).content();System.out.println(inProcessEmbedding);

本文转载自: https://blog.csdn.net/abu935009066/article/details/134975293
版权归原作者 lakernote 所有, 如有侵权,请联系我们删除。

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

还没有评论