跳到主要内容

Payara Micro 集成

LangChain4j 可以无缝集成到 Payara Micro 应用中,利用 Jakarta EE 和 MicroProfile 的标准特性进行依赖注入与配置管理。

本指南演示如何创建 JAX-RS 资源,直接实例化并使用 LangChain4j 模型,同时由 MicroProfile Config 管理配置。

Maven 依赖

首先,在 pom.xml 中添加 langchain4j 核心依赖以及所需的具体模型集成模块:

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>21</maven.compiler.release>
<jakartaee-api.version>10.0.0</jakartaee-api.version>
<payara.version>6.2025.5</payara.version>
<version.langchain4j>1.18.1</version.langchain4j>
</properties>

<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>${version.langchain4j}</version>
</dependency>

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-google-ai-gemini</artifactId>
<version>${version.langchain4j}</version>
</dependency>

<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>${jakartaee-api.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>

配置多个模型

可以通过在 MicroProfile 配置文件(位于 src/main/resources/META-INF/microprofile-config.properties)中提供各模型对应的属性来配置多个 AI 模型,示例如下:

openai.api.key=${OPENAI_API_KEY}
openai.chat.model=gpt-4o-mini

google-ai-gemini.chat-model.api-key=${GEMINI_KEY}
google-ai-gemini.chat-model.model-name=gemini-2.0-flash-lite

deepseek.api.key=${DEEPSEEK_API_KEY}
deepseek.chat.model=deepseek-reasoner

实现聊天资源

在这种方法中,每个 JAX-RS 资源负责各自的 AI 模型实例。该模式会对每个提供商复用。

RestConfiguration 类扩展 jakarta.ws.rs.core.Application,并为所有 REST 端点定义基础路径 /api

import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;

@ApplicationPath("api")
public class RestConfiguration extends Application {
}

对于每个模型,都有一个 JAX-RS Resource 类,它会:

  • 使用 @Inject@ConfigProperty 注入配置属性。
  • 使用带有 @PostConstruct 注解的方法,在属性注入完成后构建模型实例。
  • 创建 @GET 端点以与模型交互。
@Path("openai")
public class OpenAiChatModelResource {

@Inject
@ConfigProperty(name = "openai.api.key")
private String openAiApiKey;

@Inject
@ConfigProperty(name = "openai.chat.model")
private String modelName;

private OpenAiChatModel chatModel;

@PostConstruct
public void init() {
chatModel = OpenAiChatModel.builder()
.apiKey(openAiApiKey)
.modelName(modelName)
.build();
}

@GET
@Path("chat")
@Produces(MediaType.TEXT_PLAIN)
public String chat(@QueryParam("message") @DefaultValue("Hello") String message) {
return chatModel.generate(message);
}
}

同样的模式也用于 GeminiChatModelResourceDeepSeekChatModelResource

请注意,后者复用了 OpenAiChatModel 类,仅将 baseUrl 改为 deepseek API,体现了该库的灵活性。

API 文档

示例项目包含 Swagger UI,可用于交互式浏览和测试 API 端点。

webapp 文件夹中的 index.html 文件将 Swagger UI 配置为加载 Payara Micro 在 /openapi 端点自动生成的 OpenAPI 规范:

openapi: 3.0.0
info:
title: Deployed Resources
version: 1.0.0
...

endpoints:
/:
- /api/deepseek/chat
- /api/gemini/chat
- /api/openai/chat
components: {}

运行示例应用

该项目配置为使用 Payara Micro Maven 插件运行。

前置条件:

  • Java SE 21+
  • Maven 执行环境

执行步骤

  1. 在项目根目录打开终端。
  2. 设置 API 密钥所需的环境变量。应用需要这些变量以向 AI 服务进行身份验证。你必须配置:
    • OPENAI_API_KEY
    • GEMINI_KEY
    • DEEPSEEK_API_KEY
  3. 执行以下 Maven 命令:mvn clean package payara-micro:start

服务器启动后,可以通过两种方式测试端点:

  1. 如果你使用 IntelliJ IDEA(Ultimate Edition)或其他具备类似功能的 IDE,可以直接从 .http 文件执行请求:

    a. 打开位于 src/test/resources/ 中的 test.http 文件。

    b. IDE 会在每个请求定义旁显示一个绿色的小“播放”图标:

    c. 点击要运行的请求旁的图标。API 的响应会直接显示在 IDE 的工具窗口中:

  2. 使用 AI 聊天界面

    在浏览器中访问 http://localhost:8080/。这将打开一个交互式**聊天页面**,你可以在浏览器中直接浏览和测试可用端点: