Payara Micro 集成
LangChain4j 可以无缝集成到 Payara Micro 应用程序中,利用 Jakarta EE 和 MicroProfile 的标准功能进行依赖注入和配置。
本指南演示了如何创建直接实例化和使用 LangChain4j 模型的 JAX-RS 资源,并通过 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.4.0</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 配置文件中为多个 AI 模型提供各自的属性,该配置文件位于 src/main/resources/META-INF/microprofile-config.properties
,例如:
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
实现 Chat 资源
在这种方式下,每个 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 资源类:
- 使用
@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);
}
}
同样的模式适用于 GeminiChatModelResource
和 DeepSeekChatModelResource
。
需要注意的是,DeepSeek 的实现复用了 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 执行环境
执行步骤
在项目根目录打开终端。
设置所需的 API key 环境变量,应用程序需要这些变量来验证 AI 服务:
- OPENAI_API_KEY
- GEMINI_KEY
- DEEPSEEK_API_KEY
执行以下 Maven 命令:
mvn clean package payara-micro:start
当服务器启动后,可以通过以下两种方式测试端点:
使用 IntelliJ IDEA(旗舰版)或其他支持类似功能的 IDE 直接从
.http
文件执行请求:a. 打开位于
src/test/resources/
的test.http
文件。b. IDE 会在每个请求定义旁边显示一个绿色的“运行”小图标:
c. 点击你想运行的请求旁边的图标,API 响应将直接显示在 IDE 的工具窗口中:
使用 AI Chat 界面
打开浏览器并访问 http://localhost:8080/。这会打开一个交互式 聊天页面,你可以在其中直接探索和测试可用端点: