Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 66|回复: 1

安卓 调用openai类库

[复制链接]

313

主题

449

帖子

2824

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2824
发表于 2025-6-18 17:59:57 | 显示全部楼层 |阅读模式
在安卓应用中调用OpenAI的API,你可以使用多种方法,最常见的是通过HTTP请求。OpenAI的API提供了多种服务,例如聊天机器人、文本生成、图像生成等。这里我将介绍如何在Android应用中通过HTTP请求调用OpenAI的API。

步骤 1: 添加网络权限
首先,你需要在你的Android项目的AndroidManifest.xml文件中添加网络访问权限:
  1. <uses-permission android:name="android.permission.INTERNET" />
复制代码


步骤 2: 添加HTTP客户端库
在Android中,你可以使用多种HTTP客户端库,如OkHttp、Retrofit等。这里我将展示如何使用OkHttp和Retrofit来实现。

使用OkHttp
添加OkHttp依赖

1、在build.gradle文件中添加OkHttp的依赖:
  1. implementation 'com.squareup.okhttp3:okhttp:4.9.0'
复制代码


2、编写HTTP请求代码:
  1. OkHttpClient client = new OkHttpClient();

  2. String url = "https://api.openai.com/v1/engines/text-davinci-003/completions";
  3. MediaType JSON = MediaType.get("application/json; charset=utf-8");

  4. RequestBody body = RequestBody.create(JSON, "{"prompt":"Your prompt here","max_tokens":7}");
  5. Request request = new Request.Builder()
  6.     .url(url)
  7.     .post(body)
  8.     .addHeader("Authorization", "Bearer YOUR_API_KEY")
  9.     .build();

  10. client.newCall(request).enqueue(new Callback() {
  11.     @Override
  12.     public void onFailure(Call call, IOException e) {
  13.         e.printStackTrace();
  14.     }

  15.     @Override
  16.     public void onResponse(Call call, Response response) throws IOException {
  17.         if (response.isSuccessful()) {
  18.             String responseData = response.body().string();
  19.             System.out.println(responseData);
  20.         } else {
  21.             System.out.println("Error: " + response.code());
  22.         }
  23.     }
  24. });
复制代码
具体改,要在RequestBody body里面做文章。比如:
  1. "model":"qwen3:30b",
  2. "prompt":"aloha, ai”,
  3. "stream":False
复制代码



回复

使用道具 举报

313

主题

449

帖子

2824

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2824
 楼主| 发表于 2025-6-18 18:12:41 | 显示全部楼层
在Java中对接OpenAI API并实现流式输出,可以通过使用OpenAI提供的流式API接口,并结合Java的异步编程特性来实现。下面是一个简要的实现步骤和示例代码。

实现步骤
‌创建OpenAI API客户端‌:
使用OpenAI提供的Java客户端库来创建API客户端实例。

‌配置流式输出‌:
在发送请求时,配置API以支持流式输出。

‌处理流式响应‌:
使用Java的异步编程特性(如CompletableFuture)来处理流式响应。

示例代码
以下是一个示例代码,展示了如何在Java中对接OpenAI API并实现流式输出:
  1. import com.openai.api.OpenAiService;
  2. import com.openai.api.model.CompletionRequest;
  3. import com.openai.api.model.CompletionResult;
  4. import com.openai.api.model.CompletionChoice;
  5. import java.util.concurrent.CompletableFuture;
  6. import java.util.concurrent.ExecutionException;

  7. public class OpenAIStreamOutput {

  8.     private static final String API_KEY = "your_api_key";
  9.     private static final OpenAiService service = new OpenAiService(API_KEY);

  10.     public static void main(String[] args) {
  11.         String prompt = "请帮我写一个Java的快速排序代码";
  12.         
  13.         // 创建流式输出请求
  14.         CompletableFuture<CompletionResult> future = service.createCompletion(
  15.             CompletionRequest.builder()
  16.                 .model("gpt-3.5-turbo")
  17.                 .prompt(prompt)
  18.                 .stream(true) // 开启流式输出
  19.                 .build()
  20.         );

  21.         // 处理流式响应
  22.         future.thenAccept(result -> {
  23.             for (CompletionChoice choice : result.getChoices()) {
  24.                 System.out.println(choice.getText());
  25.             }
  26.         }).exceptionally(ex -> {
  27.             ex.printStackTrace();
  28.             return null;
  29.         });

  30.         // 阻塞主线程,等待异步任务完成(仅用于示例,实际应用中应避免)
  31.         try {
  32.             future.get();
  33.         } catch (InterruptedException | ExecutionException e) {
  34.             e.printStackTrace();
  35.         }
  36.     }
  37. }
复制代码


说明
‌OpenAiService‌:
这是OpenAI提供的Java客户端库中的服务类,用于与OpenAI API进行交互。

‌CompletionRequest‌:
这是用于文本补全请求的模型类,可以设置模型ID、提示词等参数。

‌CompletableFuture‌:
Java 8引入的异步编程工具,用于处理异步操作的结果。

‌stream(true)‌:
在创建CompletionRequest时,设置stream参数为true以开启流式输出。

‌future.thenAccept‌:
当异步操作完成时,使用thenAccept方法来处理响应结果。

‌future.get()‌:
这是一个阻塞调用,用于等待异步任务完成并获取结果。在实际应用中,应避免在主线程中使用阻塞调用,以免阻塞程序执行。

请注意,上述代码仅用于演示目的,实际应用中应根据具体需求进行调整和优化。此外,由于OpenAI API的更新和变化,建议查阅最新的官方文档以获取最准确的信息。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-7-7 10:16 , Processed in 0.015222 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表