大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构!
将大型语言模型集成到Java应用程序中,可以释放强大的功能,从智能自动化到复杂的对话界面,应有尽有。本指南探讨如何使用LangChain4j和OpenAI创建一个简单而基于CLI的Java应用程序。可以将其视为Java与AI/LLM集成的“Hello World”。
学习本教程需要满足几个先决条件:
- Java 21(此示例不依赖于特定的 JDK 发行版本,但您也可以使用最新版本)。
- 互联网连接方便与 OpenAI 的 API 进行通信。
- 用于身份验证的OpenAI API密钥。
获取OpenAI API密钥
获取OpenAI API非常简单。请按照以下步骤操作:
- 注册或登录。前往OpenAI并创建一个帐户,或者如果已有帐户,请登录。
- 导航到“API钥匙”部分。找到账户信息中心的“API钥匙”部分。
- 生成并安全存储您的API密钥。点击按钮即可生成新的API密钥。请务必将其存储在安全的位置,因为您将无法再次看到它。
设置您的环境
将您的API密钥安全地存储作为环境变量。具体操作方法取决于您使用的操作系统:
- 在Windows上,导航至:系统属性 > 用户仪表 > 添加 OPENAI\_API\_KEY。
- 在 macOS 或 Linux 上,将导出OPENAI\_API\_KEY='your-api-key'添加到您的 .bashrc 或 .zshrc 文件。
简单的 CLI 示例:Java 和 LLM 的“Hello World”
让我们从一个极简单的示例开始,演示如何通过命令行界面使用 Java 和 OpenAI 的 GPT 模型。此示例使用 Java 内置的 HTTP 客户端向 OpenAI 发送 API 请求。
package ca.bazlur;
import java.net.http.*;
import java.net.URI;
import java.time.Duration;
public class Main {
private static final String API_URL = "https://api.openai.com/v1/chat/completions";
public static void main(String[] args) throws Exception {
String apiKey = System.getenv("OPENAI_API_KEY");
if (apiKey == null || apiKey.isBlank()) {
System.err.println("Error: OPENAI_API_KEY environment variable not set.");
System.exit(1);
}
if (args.length == 0 || args[0].isBlank()) {
System.err.println("Error: Please provide a prompt.");
System.exit(1);
}
String prompt = args[0];
String requestBody = """
{
"model": "gpt-4",
"messages": [{"role": "user", "content": "%s"}],
"temperature": 0.7,
"max_tokens": 150
}
""".formatted(prompt);
try (HttpClient client = HttpClient.newHttpClient()) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(API_URL))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.timeout(Duration.ofSeconds(30))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("ChatGPT Response: " + response.body());
}
}
}
在上面的代码中,我们将请求主体构建为 JSON 字符串,并指定了模型 ( GPT-4 )、用户消息、温度和最大令牌数。模型参数指定要使用的 OpenAI 模型;GPT-4 是一个功能强大且用途广泛的选项。消息队列包含对话历史记录,角色指示发送者的消息。温度和令牌最大数用于控制输出关键。
温度参数的范围从0到1,它影响生成文本的随机性。较高的温度使得输出得以产生和不可预测性,而较低的温度则导致更保守和可预测的输出。例如,如果温度为0.2,询问“尽管给我讲个笑话”可能会产生一个经典的、有趣的笑话,而温度为1.0可能会产生一个更逻辑、更原创的答案,它可能不太连贯。
max\_tokens参数生成限制文本的长度,这对于控制成本和防止响应过长至关重要。如果将max\_tokens设置为50,则模型将生成不超过50个标记的响应。设置过低可能会导致响应过早断断,而设置过高可能会导致答案冗长或杂乱无章。
然后,我们创建了一个HttpClient来发送 API 请求,并构建了一个包含 API 端点、标头(Content-Type 和 Authorization )和请求正文的HttpRequest 。我们使用 client.send()发送了请求,搜索了响应,最后将响应正文打印到控制台。
以下是如何运行以下示例中的代码:
- 将代码保存为Main.java。
- 运行代码:java Main.java“多伦多的首都是哪里?”
我们得到以下输出:
{
"id": "chatcmpl-BDTz5FwsX1rAfcjQZYP64JBWuUopl",
"object": "chat.completion",
"created": 1742553223,
"model": "gpt-4-0613",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Toronto is a city, not a country, so it doesn't have a capital. It is the capital city of the province of Ontario in Canada.",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 14,
"completion_tokens": 31,
"total_tokens": 45,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": null
}
JSON有效负载包含用途、所用模型、创建时间以及来自助手的实际消息内容等信息。,我们可以使用JSON解析器对其进行解析,然后提取需要的内容。
与LangChain4j (OpenAI SDK)集成
虽然前面的示例演示了与 OpenAI API 交互的直接方法,但它涉及手动构建 HTTP 请求并解析 JSON 响应。这可能会变得繁琐且容易出错,尤其是在构建复杂的应用程序时。
Java 原生库 LangChain4j 简化了这个过程。它提供了一个高级、可解析的 API,用于与 OpenAI 的 GPT 模型等 LLM 进行交互,从而抽象出 API 调用的简单复杂性,使开发人员能够专注于应用程序的逻辑。
LangChain4J OpenAI 示例
让我们设置一个简单的 Maven 项目或 Gradle 项目,其中包含一些依赖项。Maven pom.xml文件中的内容如下:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.0.0-beta2</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.0.0-beta2</version>
</dependency>
或者,对于build.gradle:
implementation 'dev.langchain4j:langchain4j:1.0.0-beta2'
implementation 'dev.langchain4j:langchain4j-open-ai:1.0.0-beta2'
LangChain4j 示例
现在,让我们创建一个使用 LangChain4j 与 OpenAI 交互的 Java 类:
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
public class LLMExample {
public static void main(String[] args) {
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("gpt-4")
.temperature(0.7)
.maxTokens(150)
.build();
String response = model.chat("What is the capital of Toronto?");
System.out.println(response);
}
}
在该代码中,我们使用构建器模式创建了一个 OpenAiChatModel实例。我们设置了 API 密钥、模型名称、温度和最大令牌数。与前面的示例一样,温度参数会影响生成文本的随机性,生成更频繁、更可预测,或者增加但缺乏连贯性;而max\_tokens参数则作为一种成本控制措施,防止响应过长。您可以尝试使用这些参数来显着改变 LLM 的输出,并根据您的特定需求进行定制。
调用模型上的chat()方法传递用户的提示,该方法返回生成的文本,最后我们将响应打印到控制台。
要运行此示例,我们执行两个步骤:
- 将代码保存为Maven/Gradle 项目的src/main/java目录中的LLMExample.java 。
- 使用Maven编译并运行代码: mvncompile exec:java -Dexec.mainClass="LLMExample"
或者,要使用 Gradle运行它,请使用以下命令: ./gradlew run
您应该在控制台上看到来自 ChatGPT 的响应。
LangChain4j和其他AI模型
除了OpenAI之外,LangChain4j还支持与其他LLM集成,开发者可以尝试不同的LLM,并选择最符合自身需求的LLM。例如,如果我们想使用Google的Gemini API,我们可以调整代码以更改基本URL和模型名称,如下图:
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
public class LLMGeminiExample {
public static void main(String[] args) {
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey(System.getenv("GOOGLE_API_KEY"))
.baseUrl("https://generativelanguage.googleapis.com/v1beta/openai/")
.modelName("gemini-2.0-flash")
.temperature(0.7)
.maxTokens(150)
.build();
String response = model.chat("What is the capital of Toronto?");
System.out.println(response);
}
}
当然,您必须获取Gemini API密钥,您可以从Google AI Studio获取。确保将其存储在环境变量中。
另外,请注意,我们使用了相同的 OpenAI 模型。事实上,这是大多数模型的标准 SDK,因此我们可以统一使用它。
这些Java和OpenAI LLM示例的源代码可以在GitHub上找到。
Java、OpenAI 和 LLM 的下一步发展方向
现在您已经创建了第一个 Java 和 LLM 应用程序,您可以扩展此基本设置,探索层次的集成,并构建更复杂的 AI 应用驱动 Java 程序。以下是一些提供进一步探索的建议:
- 构建聊天机器人。创建一个简单的聊天机器人来回答用户关于特定主题的问题。
- 实现文本摘要。使用法学硕士学位(LLM)来总结长篇文章或文档。
- 创作创意内容。尝试使用法学硕士学位(LLM)创作作品、故事或代码。
- 探索不同的AI模型。尝试与其他LLM集成,例如Anthropic API。
通过一些练习和信心,您将准备好探索有关 Java 和 AI 的高级主题,包括优化和 Java 中的实际 LLM 实现。
原文地址:https://mp.weixin.qq.com/s/ojH_Pk8RIfD9x7fWsfo3NQ
本文由博客一文多发平台 OpenWrite 发布!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。