为了账号安全,请及时绑定邮箱和手机立即绑定

基于LangChain4j和Oracle Database 23ai的检索增强生成(RAG)应用详解

Oracle数据库23ai

由 Juarez Junior(来自 https://twitter.com/juarezjunior)。

介绍

你可能已经听说了,Oracle 发布了 Oracle Database 23c,这是一个免费且功能完整的 Oracle 数据库,也是业内领先的产品。

Oracle Database 23c 现在包含了使用 AI 向量的语义搜索特性。这些功能称为 Oracle AI 向量搜索,包括一个新的向量数据类型、向量索引,以及向量搜索 SQL 操作符,这些功能让 Oracle 数据库能够将文档、图片和其他非结构化数据的语义信息存储为向量,并利用这些向量快速创建 生成式 AI 应用程序。

这些新功能还支持一种名为检索增强生成(RAG)的技术,这是一种突破性的生成式AI,它结合大型语言模型(LLM)和业务数据,提供更准确和更相关的自然语言问题的答案,从而回答自然语言问题。

Oracle 23ai数据库

请看看这篇博客,以更深入地了解Oracle AI向量搜索的强大之处——What Is Vector Search? The Ultimate Guide

这篇文章不会教你所有关于LangChain4J (一个语言链项目)的知识。不过,LangChain4j 是一个简化将大规模语言模型集成到 Java 应用程序中的库。它允许你创建 AI 服务,并实现若干生成式AI的应用场景,比如 RAG、工具、链、聊天完成、多模态等等。

最后但同样重要的是,我认为 OpenAI 根本无需多做介绍。几乎每个人都知道它,以及它的热门作品——ChatGPT。我将向你展示如何使用 LangChain4J 和 OpenAI 提供的嵌入模型和聊天模型进行互动。

这篇博客文章提供了一个快速入门指南,教你如何使用LangChain4J、Oracle Database 23ai及其JDBC驱动程序和OpenAI来构建RAG应用。废话不多说,让我们开始吧!

条件
Oracle Database 23ai

注:Oracle Database 23ai 是指 Oracle 公司推出的数据库版本,其中“23ai”是该版本的特定标识符。

如果你查看下载链接,你会看到它是以 Linux x64 RPM 安装文件(OL8 或 RHEL8)的形式提供的。所以,如果你是一名使用 Windows 和 macOS 的 Java 开发者,你可能想知道如何测试这个软件。

好消息是,该容器镜像可以在 Oracle 容器注册表 (OCIR) 找到,您可以使用它来安装并进行功能测试。让我们简单快速地在 Windows 上试一试。为此,请先运行下面的 docker pull 命令:

    docker pull container-registry.oracle.com/database/free:latest

拉取Oracle数据库的免费容器镜像。

现在你可以运行下面的命令来确认是否正确拉取,如下所示:

docker images

例如:

docker images

Oracle Database 23ai—容器镜像

然后,在 Windows 命令行(CMD)中输入以下命令:

运行下面的 Docker 命令来启动容器,并请将 `<your_password>` 替换为您的实际密码:

docker run -d -p 1521:1521 -e ORACLE_PWD=<your_password> -v oracle-volume:/opt/oracle/oradata container-registry.oracle.com/database/free:latest # Oracle 数据库免费版镜像地址

将上面看到的 < your password> 替换为你选择的密码。上面这条命令将启动一个新的持久化数据库容器(数据将被保存在容器的整个生命周期中)。

如果一切顺利的话,你可以运行命令 docker ps -al 来确认你的容器实例如预期正常启动。

容器状态:正在启动

请注意,当STATUS字段显示为“健康”时,Oracle数据库23ai就可以用了,如下。

容器状况,状态良好

如果你想通过设置环境变量来支持你的连接详情,例如用户名、密码和其他变量,还有一些额外的配置选项。你也可以查看你可能想使用的特定数据库用户的更多细节,如_SYS、SYSTEM、PDBADMIN等用户的更多细节。

如果您想探索这些选择,请查看容器映像在 Oracle 容器注册表 (OCIR) 的官网页面。

现在你的数据库已经安装好了!我们现在来从 SQL Developer 和 Java 两个工具访问它吧!

连接 Oracle Database 23ai 免费的

下一步是连接到Oracle数据库23ai并运行所需的DDL脚本。请参阅该博客文章中的说明,该文章详细说明了如何使用IntelliJ IDEA工具来完成此步骤。

或者,你也可以使用Oracle SQL Developer,这是一个免费的工具,可以使传统或云环境中的Oracle数据库开发和管理过程变得简单,或者使用你更喜欢的任何其他工具。

连接你的 DB 23ai Free 实例,运行 DDL 脚本。

现在,你必须连接上 DB 23ai Free 数据库实例,并执行这个 DDL 脚本 langchain4j-oracle.sql 以创建我们示例的 LangChain4J 应用程序所需的表格。

如前所述,打开Oracle SQL Developer工具,从下面的Gist复制DDL脚本,然后点击运行语句的按钮来执行它。

请留意,OracleDBUtils.java 类包含 Oracle 数据库的连接细节。请根据您的实际环境调整相关值。

OracleDBUtils.java 类 — JDBC 连接信息

确保用户名和密码符合Oracle对数据库密码的要求。否则,在脚本执行过程中会遇到错误。如上所示,将其设置为环境变量。

LangChain4J 应用 (App)

本文不会涵盖所有与LangChain4J相关的内容。

然而,LangChain4j 是一个简化将大规模语言模型集成到 Java 应用程序中的库。它允许您创建 AI 服务,并实现多种生成式 AI 用例,例如 RAG、工具、链、聊天补全、多模态等。

关于这个主题,网上有很多教程和指南,包括官方的 LangChain4J GitHub 仓库([点击这里](https://github.com/langchain4j/langchain4j))。

我们的主要目标是向您展示如何正确地使用LangChain4J、OpenAI及Oracle AI向量搜索服务等技术,正确地实现一个GenAI RAG应用。

我们将概述代码示例的主要组件,让你了解它会做什么。

以下是链接到GitHub上的Java文件,您可以在此处查看源代码:LangChain4JOpenAiBasicChat.java

第一个场景是一个简单的测试程序,它将允许你与OpenAI进行简单的聊天互动。基本上,我们会问一些关于博客作者的问题,比如,得到一个不准确的回答,因为OpenAI并不了解这位作者。因此,我们需要引入RAG用例,并使用包含更多关于博客作者信息的PDF文件,来丰富互动内容。

LangChain4JOpenAiBasicChat.java

它就出错啦。

第二个场景主要涉及主要的应用程序组件基于LangChain4J,具体而言是实现了一个必需的OracleEmbeddingStore Java接口,以及Oracle AI的向量搜索功能的Oracle Database 23ai。

代码示例链接 — 应用程序组件

Oracle数据库AI语言链Java文件 该链接指向一个与Oracle数据库集成AI技术相关的Java文件。

这个类是我们 Retrieval-Augmented Generation (RAG) 核心实现的一部分,也是启动最终应用的主入口点(主方法)。

另外,它使用了一个位于/src/main/resources文件夹中的PDF文件《Juarez Barbosa Junio.pdf》。这个文件支持在没有RAG(检索和生成)的情况下搜索作者与从其在线个人资料中获取一些信息后的搜索之间的对比。

它通过执行以下四个基本任务来支持RAG的实施(检索和检索增强)。
(原文最后一个句号建议保留以区分句子或段落,但由于此翻译为句子的一部分,故省略句号。)

根据专家建议,最终翻译为:
它通过执行以下四个基本任务来支持RAG的实施(检索和检索增强)。

  • 获取需要摄入并转换为向量形式存储的PDF文件
  • 提取PDF文件中的内容
  • 初始化OpenAI的嵌入模型以支持后续的嵌入操作
  • 根据需求初始化向量存储

OracleDb23aiLangChain4JOpenAiRag.java (这是一个Oracle数据库相关的Java文件,位于GitHub上的一个开源项目中)

OracleEmbeddingStoreIngestor.java (Oracle嵌入式存储导入器Java文件) 该文件位于此链接中。此文件名为“嵌入式存储导入器”,用于处理嵌入式存储的导入操作。

这个类将创建一个Ingestor组件,该组件使用EmbeddingModel生成嵌入向量,并使用相关EmbeddingStore实现(例如Oracle)生成嵌入向量。

OracleEmbeddingStoreIngestor.java

OracleEmbeddingStore.java。这是一个Java文件,位于GitHub上的一个项目中。

为Oracle Database 23ai提供dev.langchain4j.store.embedding.EmbeddingStore(注:此处为原英文术语)的实现,支持Oracle AI向量搜索机制和Oracle Database向量存储功能及其相关向量嵌入的信息。

OracleEmbeddingStore.java

工具类

我们代码示例中剩余的类仅作为辅助和工具,帮助实现RAG的一般流程。

启动 LangChain4J 吧。

切换到你的项目的根目录,然后像平常一样运行下面的 Maven 命令。例如:

转到 <YOUR_WORKSPACE_ROOT_DIRECTORY>\langchain4j-oracle  
cd <YOUR_WORKSPACE_ROOT_DIRECTORY>\langchain4j-oracle  
运行 Maven 清理和打包命令  
mvn clean package   

注意:这些命令用于切换到指定的目录,并执行 Maven 清理和打包操作。

选择主类后,用你喜欢的IDE运行它。我们这里用调试模式运行,只是为了学习。

首先,登记模型的名称和尺寸。

接着,PDF内容被记录了。

然后,你会看到我们将初始化Oracle嵌入式存储加载器组件。

接下来,它会加载这个PDF文件。

接着是嵌入相关的步骤。

要确认这一点,你可以运行下面的 SQL 查询来查看实际的向量嵌入情况,以验证是否符合预期。

最终将进行一次向量相似度搜索。

最后但同样重要,给出了一个更有意义的答案回应。

结尾

就这样。你现在可以使用LangChain4J、OpenAI、JDBC以及Oracle Database 23 AI来创建你的应用了!

希望你喜欢这篇博客。很快我会分享更多使用不同GenAI库和框架的例子。敬请关注!

参考

Oracle数据库23ai(点击此处查看文档)

LangChain4J

Oracle Database 免费版 23ai — 容器图像
链接地址: https://container-registry.oracle.com/ords/ocr/ba/database/free.

Oracle® 数据库JDBC Java API 参考手册,版本23ai

Oracle JDBC 驱动程序 23 (23.4.0.24.05) — Maven Central

Oracle JDBC在Maven中央仓库的开发者指南(https://www.oracle.com/uk/database/technologies/maven-central-guide.html

借助 Oracle 数据库开发 Java 应用程序

Oracle 开发人员和 OCI 免费层

加入我们的Oracle Developers Slack频道来讨论Java、JDK、JDBC、GraalVM、使用Spring Boot、Helidon、Quarkus、Micronaut的微服务架构、反应式流处理、云、DevOps、IaC等其他话题!

在 Oracle Cloud 上构建、测试和部署您的应用程序 — 免费!免费访问 OCI 免费套餐

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消