AI大模型教程
一起来学习

【小白向】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文件中。

 com.squareup.okhttp3okhttp4.12.0org.jsonjson20210307

        添加完成后,我们点击右侧的同步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–文心一言API调用

相关推荐: C语言_数据结构_栈

引言 栈秉持着后进先出原则,在数组栈和链式栈中,很明显数组栈具有很大优势,那么接下来我们就用数组栈来实现栈的功能。 1. 前置准备 2. 初始化 3. 压栈 4. 出栈 5. 判断栈里是否为空 6. 返回栈顶元素 7. 返回栈内元素个数 8. 销毁 本章完~文…

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 【小白向】Java--文心一言API调用
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们