当我开始学习 AI大型语言模型LLMs) 的旅程时,我偶然发现了 Java 库 LangChain4j。我深入研究并开始学习提示工程嵌入向量存储等概念。我受到启发,采取亲身实践的方法并开发一个 AI 驱动的应用程序。

在这篇博文中,我将向您介绍使用 OpenAI、LangChain4jSpring Boot 和 React
构建 AI 驱动应用程序的步骤。我还将分享我在此过程中学到的一些经验教训。如果您想跟随,可以在我的 GitHub 仓库 nickdala/piggy-bank-langchain4j 中找到代码。

您需要遵循什么

我们将使用 GitHub CodeSpaces 来运行应用程序。GitHub CodeSpaces 是一个基于云的开发环境,可在浏览器中运行。它使您可以完全在云中进行开发。要继续操作,您将需要:

您还可以使用自己的开发环境来运行应用程序。以下是 Hilla 对开发环境的要求。

  •  Java 17 或更高版本
  •  节点 18 或更高版本
  • 支持 Java 和 TypeScript 的 IDE — IntelliJ Ultimate 和 VS Code 都是不错的选择

生成 OpenAI API 密钥

您需要创建一个 OpenAI API 密钥来运行该应用程序。您可以在此处创建_秘密 API 密钥_。

  1. 单击 API 密钥链接。
    openai-api-key
  2. 单击“创建新的密钥”按钮。
    openai-api-key-create
  3. 为密钥命名。
  4. 单击“创建密钥”按钮。
  5.  复制 API 密钥。
    openai-api-key-secret

我们要建造什么

示例应用程序称为“存钱罐”。这是一个简单的 Spring Boot 和 React 应用程序,用于模拟银行。

Piggy Bank 是使用 Hilla 用 Java 编写的。之所以选择 Hilla Web 框架,是因为它汇集了 Spring Boot 和 React 的强大功能。它允许您使用单个代码库构建全栈 Web 应用程序。

为简单起见,该应用程序涵盖以下用例。

  • _银行助理_可以查看客户列表
  • _银行助理_可以点击客户来查看他们的账户
  • 账户可以_开立_或_关闭_

最后,我们将集成 OpenAI 的 GPT-3 API,允许客户通过 AI 驱动的聊天机器人关闭他们的账户。

 构建和部署

生成示例的最简单方法是使用 GitHub CodeSpaces。您还可以使用 dev 容器在本地构建示例或使用您自己的开发环境。

若要使用 CodeSpaces 生成示例,请按照以下步骤操作。

  1. 导航到 GitHub 仓库 nickdala/piggy-bank-langchain4j
  2. 单击“代码”按钮。
  3. 单击“Codespaces”选项卡。
  4. 单击“在主屏幕上创建代码空间”按钮。


open-with-codespaces

这将创建一个 GitHub Codespace 并克隆存储库。Codespace 准备就绪后,您将看到以下内容。


codespace-ready

接下来,我们需要在 application.properties 文件中设置 OpenAI API 密钥。为此,请导航到 src/main/resources/application.properties 并设置属性 langchain4j.chat-model.openai.api-key


application-properties

最后,我们可以构建并运行应用程序。在 Codespaces 终端中运行以下命令。

这将生成并运行应用程序。新的浏览器窗口将与存钱罐应用程序一起自动启动。

下面是应用程序外观的 UI。


piggy-bank

使用 AI 驱动的聊天机器人关闭帐户

要关闭帐户,请单击“聊天”菜单。这将推出一个人工智能驱动的聊天机器人。聊天机器人会问您一系列问题以关闭帐户。

这是与聊天机器人的对话示例。


piggy-bank-chatbot

向聊天机器人提供您要关闭的帐户的 ID。关闭帐户后,请在 UI 中进行验证。

很酷,对吧?
emoji-sunglasses

开始使用LangChain4j

现在让我们来看看我们如何将LangChain4j整合到我们的应用程序中。

 Maven 依赖性

第一步是将 LangChain4j 依赖项添加到 Spring Boot 应用程序的 pom.xml 文件中。

1
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-spring-boot-starter</artifactId> <version>0.24.0</version> </dependency>

在 application.properties 中包含 OpenAI API 密钥

接下来,我们需要在 application.properties 文件中设置 OpenAI API 密钥。为此,请导航到 src/main/resources/application.properties 并设置属性 langchain4j.chat-model.openai.api-key

1
langchain4j.chat-model.openai.api-key=<your-openai-api-key>

应用程序如何与 OpenAI 交互

现在我们已经启动并运行了应用程序,让我们来看看它是如何工作的。我们将深入探讨以下主题。

  • 大型语言模型 (LLMs)
  •  提示工程
  •  LangChain4j 工具

什么是大型语言模型 (LLMs)

大型语言模型 (LLMs) 是一类在大量文本上训练的新型 AI 模型。这些模型旨在理解和生成类似人类的文本。在 Piggy Bank 应用程序中,AI 驱动的聊天机器人会生成个性化文本来关闭帐户。但是如何LLM产生文本呢?让我们来看看这个过程。

 提示工程

系统消息有助于设置 LLM的行为。正确构建的系统消息将有助于LLM产生所需的响应。

让我们看一下我们用来关闭帐户的系统消息。在界面CustomerSupportAgent中,我们有以下@SystemMessage

1
public interface CustomerSupportAgent { @SystemMessage({ """ You are a customer support agent of a bank named 'Piggy Bank Assistant'. Ask the customer how you can help them. The only thing you can assist the customer with is closing an account. If the customer wants to close their account, you MUST first offer them a deal to stay. If they still want to close their account, just close it and provide a polite response. If you don't know how to help the customer, ask your supervisor for help. """ }) String chat(String message); }

让我们仔细看看聊天机器人使用的系统消息。

  • 第一句话设定了对话的上下文。上下文是客户正在与名为 Piggy Bank Assistant 的银行的客户支持代理交谈。
  • 预期是客户只能关闭其帐户。
  • 在关闭帐户之前,支持代理将提供一项保留交易。
  • 帐户关闭后,支持代理将礼貌地回应。

这与其说是一门科学,不如说是一门手艺。需要一些反复试验才能获得正确的系统消息。系统消息是从 获得所需响应的关键LLM。作为练习,尝试更改提示,看看聊天机器人如何响应。

LangChain4j 代理和工具

代理用于告诉要执行LLM哪些操作。在链中,一系列动作是硬编码的。另一方面,代理利用语言模型作为推理引擎来确定要采取哪些行动以及以何种顺序执行。
工具用于帮助LLM执行操作。它们是代理可用于执行操作的方法。

AccountTools 类中,我们有以下@Tool注释。

1
public class AccountTools { @Tool("Close account by id") public boolean closeAccount(long accountId) { accountService.closeAccount(accountId); return true; } @Tool("Finds the customer by id") public CustomerRecord findCustomerById(long customerId) { return customerService.findCustomertById(customerId); } }

@Tool 注释用于定义聊天机器人的工具。提供工具的正确描述非常重要。这将有助于确定LLM使用哪个工具。

 清理

请确保在完成后删除 GitHub Codespace。为此,请单击“Codespaces”选项卡,然后单击“删除”按钮。

 要点

OpenAILangChain4j 使构建 AI 驱动的应用程序变得更加容易。我们使用 LangChain4j 代理工具来帮助执行LLM所需的操作。我们还使用 Prompt Engineering 来帮助产生LLM所需的响应。综上所述,我们将一个聊天机器人集成到我们的应用程序中,该机器人能够关闭帐户。

 资源