Java实现OpenAI功能的完整教程 – wiki基地

Java实现OpenAI功能的完整教程

OpenAI 提供了一系列强大的 AI 模型,如 GPT 系列,可用于各种任务,包括文本生成、代码生成、翻译、摘要等。本教程将详细介绍如何在 Java 项目中集成 OpenAI API,并实现各种功能。

1. 准备工作

1.1 获取 OpenAI API 密钥

要使用 OpenAI API,您需要一个 API 密钥。请按照以下步骤获取:

  1. 创建 OpenAI 账户: 访问 OpenAI 官网 (https://openai.com/) 并创建一个账户。
  2. 获取 API 密钥: 登录后,进入 API 密钥页面 (https://platform.openai.com/api-keys),点击 “Create new secret key” 创建一个新的密钥。请务必妥善保管您的密钥,不要泄露给他人。

1.2 选择 Java OpenAI 客户端库

有多个 Java 库可以与 OpenAI API 进行交互。以下是一些常用的选择:

  • OpenAI Java (官方库): 虽然OpenAI官方没有明确发布Java库,但是有一个由社区维护的非常受欢迎的库openai-java,它是由Theo Kanning维护的。
  • 的其他第三方库: 您可以在GitHub上找到其他一些第三方库。

本教程将使用openai-java库,因为它功能全面、文档完善且易于使用。

1.3 创建 Java 项目

您可以使用任何您喜欢的 IDE(如 IntelliJ IDEA、Eclipse 或 NetBeans)创建一个新的 Java 项目。

1.4 添加 Maven 依赖 (或 Gradle)

在您的项目 pom.xml 文件中添加 openai-java 库的依赖:

“`xml

com.theokanning.openai-java
service
0.18.2


com.theokanning.openai-java
client
0.18.2


com.theokanning.openai-java
api
0.18.2

“`

如果您使用 Gradle,请在 build.gradle 文件中添加以下依赖:

gradle
implementation 'com.theokanning.openai-java:service:0.18.2'
implementation 'com.theokanning.openai-java:client:0.18.2'
implementation 'com.theokanning.openai-java:api:0.18.2'
// 请使用最新版本

重要提示: 请定期检查Maven仓库或Github以获取openai-java库的最新版本。

2. 基本用法示例

以下是一个简单的示例,演示如何使用 openai-java 库向 OpenAI API 发送请求并获取响应:

“`java
import com.theokanning.openai.completion.CompletionRequest;
import com.theokanning.openai.service.OpenAiService;

public class OpenAiExample {

public static void main(String[] args) {
    String apiKey = "YOUR_OPENAI_API_KEY"; // 替换为您的 API 密钥
    OpenAiService service = new OpenAiService(apiKey);

    CompletionRequest completionRequest = CompletionRequest.builder()
            .model("text-davinci-003") // 选择模型
            .prompt("写一个关于Java的比喻") // 输入提示
            .maxTokens(50)  //设置最大token数
            .temperature(0.7) //设置随机性
            .build();

    service.createCompletion(completionRequest).getChoices().forEach(choice -> {
        System.out.println(choice.getText());
    });
}

}
“`

代码解释:

  1. YOUR_OPENAI_API_KEY 将此占位符替换为您在 OpenAI 网站上获取的实际 API 密钥。
  2. OpenAiService 这是 openai-java 库的核心类,用于与 OpenAI API 进行交互。您需要使用您的 API 密钥实例化它。
  3. CompletionRequest 此类用于构建发送到 OpenAI API 的请求。您可以通过设置各种参数来自定义请求,例如:
    • model:要使用的 OpenAI 模型的名称,例如 “text-davinci-003″、”gpt-3.5-turbo”、”gpt-4” 等。请参阅 OpenAI 文档以获取可用模型列表及其功能。
    • prompt:您提供给模型的文本提示。
    • maxTokens:生成的响应中允许的最大令牌数。
    • temperature: 控制生成文本的随机性, 值越高,文本越随机。
  4. service.createCompletion(completionRequest) 此方法向 OpenAI API 发送请求并返回一个 CompletionResult 对象。
  5. getChoices().forEach(...) CompletionResult 对象包含一个 choices 列表,每个 choice 代表一个生成的响应。我们使用 forEach 循环遍历这些选择并打印生成的文本。

运行结果 (示例):

Java 就像一艘大型货船,它可能不像跑车那样轻便快捷,但它能够承载大量的货物(数据和应用程序),并且在各种港口(平台)上都能稳定运行。

3. 深入了解 OpenAI API 的功能

3.1 文本生成 (Completions)

文本生成是 OpenAI API 最常用的功能之一。您可以使用它来:

  • 生成文章、故事、诗歌等创意文本。
  • 撰写不同类型的电子邮件、信件、报告等。
  • 创建聊天机器人对话。
  • 进行文本摘要、翻译等。

示例:生成一篇关于人工智能的文章

“`java
import com.theokanning.openai.completion.CompletionRequest;
import com.theokanning.openai.service.OpenAiService;

public class ArticleGenerator {

public static void main(String[] args) {
    String apiKey = "YOUR_OPENAI_API_KEY";
    OpenAiService service = new OpenAiService(apiKey);

    CompletionRequest completionRequest = CompletionRequest.builder()
            .model("text-davinci-003")
            .prompt("写一篇关于人工智能的未来的文章,包括其潜在的优势和风险。")
            .maxTokens(500) // 增加最大token数
            .temperature(0.8) // 稍微增加随机性
            .build();

    service.createCompletion(completionRequest).getChoices().forEach(choice -> {
        System.out.println(choice.getText());
    });
}

}
“`

3.2 聊天 (Chat Completions)

gpt-3.5-turbogpt-4 模型针对聊天场景进行了优化。您可以使用它们来构建聊天机器人、虚拟助手等。

示例:简单的聊天机器人

“`java
import com.theokanning.openai.completion.chat.ChatCompletionRequest;
import com.theokanning.openai.completion.chat.ChatMessage;
import com.theokanning.openai.completion.chat.ChatMessageRole;
import com.theokanning.openai.service.OpenAiService;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ChatBot {

public static void main(String[] args) {
    String apiKey = "YOUR_OPENAI_API_KEY";
    OpenAiService service = new OpenAiService(apiKey);
    Scanner scanner = new Scanner(System.in);

    List<ChatMessage> messages = new ArrayList<>();
    messages.add(new ChatMessage(ChatMessageRole.SYSTEM.value(), "你是一个友好的助手。"));

    while (true) {
        System.out.print("You: ");
        String userInput = scanner.nextLine();
        messages.add(new ChatMessage(ChatMessageRole.USER.value(), userInput));

        ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest
                .builder()
                .model("gpt-3.5-turbo")
                .messages(messages)
                .build();

        ChatMessage responseMessage = service.createChatCompletion(chatCompletionRequest).getChoices().get(0).getMessage();
        messages.add(responseMessage);
        System.out.println("AI: " + responseMessage.getContent());
    }
}

}
“`

代码解释:

  • ChatCompletionRequest 用于构建聊天完成请求。
  • ChatMessage 表示聊天消息。它包含 role(角色)和 content(内容)属性。
    • role 可以是 system(系统消息,用于设置助手的行为)、user(用户消息)或 assistant(助手消息)。
    • content 是消息的文本内容。
  • 对话历史: 在循环中维护一个messages列表,用来存储对话历史, 以便模型可以理解上下文.

重要提示: 使用聊天模型时,务必注意控制对话的长度,因为模型有上下文长度限制(例如,gpt-3.5-turbo 的限制为 4096 个令牌)。您可能需要实现机制来截断或总结较长的对话历史。

3.3 图像生成 (Image Generation)

OpenAI 的 DALL-E 模型可以根据文本描述生成图像。

示例:生成一张“一只猫坐在月球上”的图片

“`java
import com.theokanning.openai.image.CreateImageRequest;
import com.theokanning.openai.service.OpenAiService;

public class ImageGenerator {

public static void main(String[] args) {
    String apiKey = "YOUR_OPENAI_API_KEY";
    OpenAiService service = new OpenAiService(apiKey);

    CreateImageRequest createImageRequest = CreateImageRequest.builder()
            .prompt("一只猫坐在月球上")
            .n(1) // 生成图片的数量
            .size("1024x1024") // 图片尺寸
            .build();

    service.createImage(createImageRequest).getData().forEach(image -> {
        System.out.println(image.getUrl()); //获取并打印图片链接
    });
      // 可以使用其他库 (例如 java.awt.Desktop 或第三方图片处理库) 来下载和显示图片.
}

}
“`

代码解释:
* CreateImageRequest: 用于创建图像生成请求
* prompt: 描述您想要生成的图片.
* n: 生成图片的数量.
* size: 图片的尺寸.
* getData(): 获得包含图片链接的列表.

3.4 其他功能

OpenAI API 还提供了其他功能,包括:

  • Embeddings(嵌入): 将文本转换为向量表示,可用于语义搜索、聚类等任务。
  • Fine-tuning(微调): 在您自己的数据集上微调 OpenAI 模型,以提高其在特定任务上的性能。
  • Moderation(审核): 检测文本是否包含敏感或不安全的内容。
  • Speech to text (语音转文本): 使用 Whisper 模型将音频转换为文本.
  • Text to speech (文本转语音): 将文本转换为逼真的语音.

有关这些功能的详细信息,请参阅 OpenAI 官方文档。

4. 错误处理

在使用 OpenAI API 时,可能会遇到各种错误。以下是一些常见的错误处理方法:

  • 检查 API 密钥: 确保您的 API 密钥正确且未过期。
  • 处理异常: 使用 try-catch 块捕获 OpenAiHttpException 等异常,并根据错误代码进行处理。

“`java
import com.theokanning.openai.OpenAiHttpException;
import com.theokanning.openai.completion.CompletionRequest;
import com.theokanning.openai.service.OpenAiService;

public class ErrorHandlingExample {

public static void main(String[] args) {
    String apiKey = "YOUR_OPENAI_API_KEY";
    OpenAiService service = new OpenAiService(apiKey);

    CompletionRequest completionRequest = CompletionRequest.builder()
            .model("text-davinci-003")
            .prompt("这是一个测试")
            .maxTokens(10)
            .build();

    try {
        service.createCompletion(completionRequest).getChoices().forEach(choice -> {
            System.out.println(choice.getText());
        });
    } catch (OpenAiHttpException e) {
        System.err.println("OpenAI API Error: " + e.getMessage());
        System.err.println("HTTP Status Code: " + e.statusCode);
        if (e.error != null) {
            System.err.println("Error Code: " + e.error.getCode());
            System.err.println("Error Message: " + e.error.getMessage());
        }
       //其他处理逻辑
    } catch (Exception e) {
         System.err.println("An unexpected error occurred: " + e.getMessage());
    }
}

}
“`

  • 速率限制: OpenAI API 有速率限制。如果您的请求过于频繁,可能会收到 429 错误。您可以使用指数退避等策略来处理速率限制。
  • 输入验证: 在发送请求到OpenAI之前, 验证用户输入, 防止注入攻击等.

5. 最佳实践

  • 保护您的 API 密钥: 不要将 API 密钥硬编码在您的代码中,也不要将其提交到版本控制系统(如 Git)。使用环境变量或配置文件来存储密钥。
  • 优化提示: 编写清晰、具体的提示可以获得更好的结果。尝试不同的提示,看看哪种效果最好。
  • 控制成本: OpenAI API 的使用是按令牌计费的。请注意您的令牌使用情况,并根据需要优化您的请求。
  • 遵守 OpenAI 的使用政策: 在使用 OpenAI API 时,请务必遵守 OpenAI 的使用政策。
  • 日志记录: 记录请求和响应, 以便调试和监控.

6. 总结

本教程详细介绍了如何在 Java 项目中集成 OpenAI API,并实现各种功能,包括文本生成、聊天、图像生成等。希望本教程能帮助您开始使用 OpenAI 的强大功能,并在您的 Java 项目中构建令人惊叹的 AI 应用!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部