【小白向】Java--文心一言API调用

一、什么是API

        API(Application Programming Interface,应用程序编程接口)是一种定义软件组件之间如何交互的技术规范。它是一种软件中间件,使得不同的软件应用程序可以相互通信。API指定了请求的格式(如HTTP请求)以及响应的格式(如JSON或XML),使得一个应用程序可以请求另一个服务或系统的功能,并获得所需的响应数据。

        简而言之,API就像是一个菜单,它列出了服务提供者能提供哪些功能(“也就是菜单上的菜”),以及如何点这些“菜”(即如何发起请求)。当你向服务员说你要点哪些菜的时候,就相当于向他发送API请求,而再然后他把你点的菜给端上来,而你不需要知道这个菜是怎么做出来,怎么到服务员手中的。简单来说开发者可以根据这个“菜单”来开发自己的应用程序,无需关心服务内部的实现细节。

 二、文心一言API调用

        要想调用文心一言的API,首先我们需要在浏览器搜索,千帆大模型平台。这一步的意义就是为了获取API_KEY以及SECRET_KEY,这两个密钥在调用API时非常重要,他决定了你的调用是否能成功。

        我们打开千帆大模型平台。千帆大模型平台-百度智能云千帆

        登录自己的百度账号。登录完成后,向下翻一点,找到前往模型广场。

        之后进入到模型选择界面。

        我们可以看到,有非常多的模型,我们可以选择自己喜欢的,API调用的方法都是相同的,这里我们就选择文心一言做演示。

               

        我们点击左边的控件,选择应用接入。

        点击创建应用。

        

        我们填入应用名称,以及应用描述,并且将所有的服务全部勾选上。最后点击确定创建应用。

        创建成功后,我们就可以在我们的应用界面看到我们刚刚创建的文心一言了。

        这一步的作用就是为了获得我们的API_KEY和SECREAT_KEY,接下来我们就可以开始调用API了。

        首先,我们回到首页,点击左上角的服务支持。

        找到下面的自助服务,点击查看全部。

点击我们最近访问的AI。这里我们就选择文心一言。

点击进去后,我们需要做的第一步就是鉴权,也就是获取API_KEY以及SECRET_KEY,

        

在这里选择我们刚刚创建的应用。

选择完毕后,我们可以发现,我们的左上角已经显示了已鉴权。

        下面我们随便向AI发送一段对话。这里我发的就是你好。

        当发送完成后,我们就可以在左侧的调试列表,出现我们输入的信息。

        接着我们点击调试。

然后我们点击示例代码里的Java代码,他就能给出我们调取API代码的示例了。

        我们可以看到代码,其实他的原理就是通过发送POST请求进行对话,但现在我们可以发现,没有接收的功能,而他返回的JSON数据并没有被解析。因此我们需要解析它返回的json数据。以及,当前的示例只能传输固定的对话,”你好“,我们也需要对这里进行修改。

三、代码修改

        首先我们需要打开IDEA。如果不会安装IDEA可以去看我的另一篇CSDN。

【小白向】从零开的intellij IDEA安装教程-CSDN博客

我们新建一个项目。

选择储蓄位置,以及构建系统格式选择Maven。

       创建新项目。

我们按照示例代码重新构建代码。

首先我们需要添加我们所需的HTTP依赖以及JSON依赖,将我们的依赖添加到pom.xml文件中。

 <dependencies>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20210307</version>
        </dependency>
    </dependencies>

        添加完成后,我们点击右侧的同步Maven更改。等待它同步完成。

        接下来我们效仿官方给我们的示例,首先引入我们所需的头文件。

import okhttp3.*;
import org.json.JSONObject;

import java.io.*;

        其中okhttp库,是用于高效处理HTTP请求的库,因为我们需要向服务器发送POST请求,以及接收服务器返回的数据。

        org.json.JOSNObject,用于解析和生成JSON格式数据。由于我们向服务器发送POST请求,他们回传给我们的是JSON字符串。因此我们需要解析字符串,

        第三个是Java标准库中的输入输出(I/O)类,这里主要用于处理数据流,这里主要用来处理一些字节流,

        然后,我们就可以在创建的类里定义我们的API_KEY以及SECRET_KEY。

 public static final String API_KEY = "YOUR_API_KEY";
 public static final String SECRET_KEY = "YOUR_SECRET_KEY";

接着我们还需要创建一个全局唯一且线程安全的HTTP客户端,用来访问服务端。

static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();

我们看到他的调用示例。

 public static void main(String []args) throws IOException{
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "{\"messages\":[{\"role\":\"user\",\"content\":\"你好\"},{\"role\":\"assistant\",\"content\":\"你好!很高兴与你交流。如果你有任何问题或需要帮助,请随时告诉我,我会尽力为你提供支持。\"}],\"temperature\":0.95,\"top_p\":0.8,\"penalty_score\":1,\"enable_system_memory\":false,\"disable_search\":false,\"enable_citation\":false}");
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + getAccessToken())
                .method("POST", body)
                .addHeader("Content-Type", "application/json")
                .build();
        Response response = HTTP_CLIENT.newCall(request).execute();
        System.out.println(response.body().string());

    }

当构建完你HTTP客户端后,我们就可以通过OkHttp发送HTTP POST请求到文心一言的接口,

 MediaType mediaType = MediaType.parse("application/json");

以及他在后面构建了请求体,里面就有我们要给它发的话,以及一些特殊的参数,这是非常重要的,不同的AI开发的接口他们的请求体之间都有差异,因此我们要根据实际情况来进行分析。

        为了更加直观的看出他的请求体里都有些什么,我们可以单独封装一个方法来处理message数组。

static String getAIresponse() throws IOException {
        
       // 1. 构建完整的 messages 数组(示例包含对话上下文)
        JSONArray messagesArray = new JSONArray();

        // 添加用户消息
        JSONObject userMessage = new JSONObject();
        userMessage.put("role", "user");
        userMessage.put("content", "你好,今天天气如何?");
        messagesArray.put(userMessage);

        //构建 messages 数组
        JSONObject requestbody = new JSONObject();
        requestbody.put("messages", messagesArray);
        requestbody.put("temperature", 0.95);
        requestbody.put("top_p", 0.8);
        requestbody.put("penalty_score", 1);
        requestbody.put("enable_system_memory", false);
        requestbody.put("disable_search", false);
        requestbody.put("enable_citation", false);


        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, requestbody.toString());
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + getAccessToken())
                .method("POST", body)
                .addHeader("Content-Type", "application/json")
                .build();
        Response response = HTTP_CLIENT.newCall(request).execute();
        String responseBody = response.body().string();
        JSONObject jsonResponse = new JSONObject(responseBody);
        return jsonResponse.getString("result");
        }

这里面就包含了结构体发送,以及json数据处理的全过程,我们可以单独看看,message数组与之前的对比,会发现类容差不多,而且直观了不少。

        而且我们可以注意到,他的一些必要参数,我们也必须加入到结构体中,否则发送过去AI不会回复。

最后我们需要鉴权,直接将他的代码复制过来就行。

 static String getAccessToken() throws IOException {
        MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
        RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + API_KEY
                + "&client_secret=" + SECRET_KEY);
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/oauth/2.0/token")
                .method("POST", body)
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .build();
        Response response = HTTP_CLIENT.newCall(request).execute();
        return new JSONObject(response.body().string()).getString("access_token");
    }

这时我们点击运行程序。会发现他输出Timeout。

这是因为他回复的内容较长,因此他的响应时间也变成了,因此我们需要手动增加他的响应时长。

在前面构建客服端中直接将响应时间增加30秒即可。

 static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder()
            .readTimeout(30, TimeUnit.SECONDS)    // 读取超时时间30秒
            .build();

这次我们在运行程序,等待一会儿。就可以看到在控制台输出信息,至此我们调取文心一言的API就完成了。

### Java文心一言集成 #### Maven依赖引入 为了实现Java应用程序与百度文心一言API的交互,需先在`pom.xml`文件中加入相应的Maven依赖项。这可以通过添加来自Maven Central仓库中的官方SDK来完成[^3]。 ```xml <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>x.x.x</version> <!-- 版本号应替换为最新版本 --> </dependency> ``` #### 配置密钥信息 接着,在Spring Boot风格的应用程序里,可以在`application.yml`或`application.properties`文件内设置API访问所需的认证参数: ```yaml gear: wenxin: api-key: your-api-key secret-key: your-secret-key ``` 上述配置允许开发者轻松管理不同环境下的敏感数据而无需硬编码到源码之中[^2]。 #### 初始化客户端并发起请求 下面是一个简单的例子展示怎样通过Java代码调用百度文心提供的自然语言处理服务之一——比如情感分析接口。此过程涉及创建AipClient实例以及发送HTTP POST请求给指定端点。 ```java import com.baidu.aip.nlp.AipNlp; public class WenXinExample { public static final String APP_ID = "your-app-id"; public static final String API_KEY = System.getenv("WENXIN_API_KEY"); public static final String SECRET_KEY = System.getenv("WENXIN_SECRET_KEY"); private static AipNlp client; static { // 初始化一个AipNlp对象 client = new AipNlp(APP_ID, API_KEY, SECRET_KEY); // 可选:设置连接超时时间 client.setConnectionTimeoutInMillis(2000); // 可选:设置读取超时时间 client.setSocketTimeoutInMillis(60000); } /** * 调用情感倾向分析方法 */ public void analyzeSentiment(String text) { JSONObject response = client.sentimentClassify(text); if (response.containsKey("error_code")) { System.out.println("Error occurred while analyzing sentiment."); System.out.println(response.toString()); } else { Integer sentiment = response.getJSONObject("result").getInteger("sentiment"); switch (sentiment) { case 0 -> System.out.println("Negative Sentiment Detected!"); case 1 -> System.out.println("Neutral Sentiment Detected!"); case 2 -> System.out.println("Positive Sentiment Detected!"); default -> throw new IllegalStateException("Unexpected value: " + sentiment); } } } } ``` 这段代码展示了如何利用百度AI平台上的NLP工具集来进行基本的情感分类操作。实际应用场景可能更加复杂,具体取决于所选用的服务类型及其输入输出格式的要求[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值