文心一言&文心千帆大模型API资格、获取access_token,并使用SpringBoot接入文心一言API

前段时间,百度文心一言&文心千帆大模型开放了API调用的测试,接下来,教大家申请测试资格并接入文心千帆大模型的API。

# 一、文心一言&文心千帆的测试资格申请

## 1. 确保拥有一个[百度智能云](https://cloud.baidu.com/ "百度智能云")的账号

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b5e3fd5ad4174ea6bf5911610c3a81e4~tplv-k3u1fbpfcp-zoom-1.image)

右上角点击注册,内容如实填写并完成实名认证。

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4bf51efa0e60476c9e6a0b18700a3aed~tplv-k3u1fbpfcp-zoom-1.image)

 注册与认证详细内容不再赘述。

## 2. 文心千帆大模型资格申请

进入[文心一言&文心千帆大模型](https://cloud.baidu.com/product/wenxinworkshop "文心一言&文心千帆大模型")介绍页,点击申请体验

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e6651656992f46bcbec8e2f4a948dddc~tplv-k3u1fbpfcp-zoom-1.image)

会进入填写问卷页,没有什么技巧,如实填写问卷信息即可,记得每一项要尽量详细,然后点击提交,接下来等待即可。

已经申请通过的会显示我这个页面。

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bd99dca562f644e6990a64862e5b5e0e~tplv-k3u1fbpfcp-zoom-1.image)

 不出意外的话,接下来一天两天内你会收到如下短信

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/06b218151729496e8fe081a12c2581f5~tplv-k3u1fbpfcp-zoom-1.image)

收到信息代表你申请通过,并且会赠送一张20的券,可根据文档自行使用。

## 3.(可选,非必要)文心千帆控制台

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/67e9087769db418f8932c4df0da2b1ca~tplv-k3u1fbpfcp-zoom-1.image)

 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/da7c6856dc6745b3bbe0f8d13e0308b7~tplv-k3u1fbpfcp-zoom-1.image)

在这里你可以进行模型的体验与参数调节,具体功能请各位自行摸索。

# 二、获取文心千帆的access_token

众所都周知,百度的文心千帆大模型是通过access_key进行鉴权的,所以我们要调用API必须要申请一个access_key。

## 1.创建应用,获取API Key与Secret Key

 进入[文心千帆大模型控制台](https://console.bce.baidu.com/ai/#/ai/wenxinworkshop/overview/index "文心千帆大模型控制台"),点击创建应用。

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bcfbff1127b24e7f9ed856f5a28f569f~tplv-k3u1fbpfcp-zoom-1.image)

填写你要创建的应用信息,最下面还有个应用介绍,如实填写就好。

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7fd1b4725629448eaa7c1751a626894d~tplv-k3u1fbpfcp-zoom-1.image)

 创建成功后,左侧选择应用列表,里面可以看到刚刚创建的应用,里面包含了AppID、API Key、Secret Key(需点击显示),这些请务必不要泄露。

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8c732024fa45483aadd2bb6c028d0bb7~tplv-k3u1fbpfcp-zoom-1.image)

 我们需要API Key、Secret Key

## 2. 获取access_token

### **方法一:浏览器发送请求**

复制这两个Key,并替换下面链接的 [API Key] 与 [Secret Key] 

> https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[API Key]&client_secret=[Secret Key]

例如:

> https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=ad456sa4d5fhr5kfh&client_secret=df45d14g5xsdtsc

浏览器访问这个链接,你会得到一个json报文

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f1ce1f46e0da490aad4991f29e7c83bb~tplv-k3u1fbpfcp-zoom-1.image)

我们需要关心的是这两个键值对, expires_in 与 access_token 

**expires_in**:Access Token的有效期(秒为单位,默认有效期30天)

**access_token**:要获取的Access Token;

### 方法二:百度在线调试工具

[在线调试工具](https://console.bce.baidu.com/tools/#/api?product=AI&project=%E6%96%87%E5%BF%83%E5%8D%83%E5%B8%86%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%B9%B3%E5%8F%B0&parent=%E9%89%B4%E6%9D%83%E8%AE%A4%E8%AF%81%E6%9C%BA%E5%88%B6&api=oauth%2F2.0%2Ftoken&method=post "在线调试工具")

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7d9e41e4a95d4bb994dd5d8ae93c164a~tplv-k3u1fbpfcp-zoom-1.image)

左侧输入 API Key 与 Secret Key ,点击调试即可,参数与方法一一致。

### 方法三:编写发送请求

[在线调试工具](https://console.bce.baidu.com/tools/#/api?product=AI&project=%E6%96%87%E5%BF%83%E5%8D%83%E5%B8%86%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%B9%B3%E5%8F%B0&parent=%E9%89%B4%E6%9D%83%E8%AE%A4%E8%AF%81%E6%9C%BA%E5%88%B6&api=oauth%2F2.0%2Ftoken&method=post "在线调试工具")

这里面有每种语言的例程,可以直接复制修改。

# 三、接入文心一言API

[官方文档](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/jlil56u11 "官方文档")

官方文档提供了四个模型,其中ErnieBot就是我们熟悉的文心一言,我们以这个为例,其他的与之类似或相同。

作为Java程序员,我就分别以一个 Java 程序和 SpringBoot 应用为例介绍怎么接入。

## 方法一:原生接入(不推荐)

按照官方文档,使用Hutool的HttpUtils工具类或者是其他的Http客户端接入,这样可以获得最大的自由度,但是即为麻烦,并且流式返回处理较为复杂,需使用Flux响应式来做,比较麻烦,我用一个原生Java程序演示一下:

```java

public static void main(String[] args) {

        String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions";

        String accessToken = "你的access_token";

        HashMap<String, String> msg = new HashMap<>();

        msg.put("role", "user");

        msg.put("content", "请介绍一下你自己");

        ArrayList<HashMap> messages = new ArrayList<>();

        messages.add(msg);

        HashMap<String, Object> requestBody = new HashMap<>();

        requestBody.put("messages", messages);

        String response = HttpUtil.post(url + "?access_token=" + accessToken, JSONUtil.toJsonStr(requestBody));

        System.out.println(response);

    }

```

输出内容:

```json

{

    "id": "as-mibg24yygj",

    "object": "chat.completion",

    "created": 1690270732,

    "result": "您好,我是文心一言,英文名是ERNIE Bot。我能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。",

    "is_truncated": false,

    "need_clear_history": false,

    "usage": {

        "prompt_tokens": 8,

        "completion_tokens": 49,

        "total_tokens": 57

    }

}

```

##  方法二:使用spring-boot-starter

**项目开源地址:**[https://github.com/gemingjia/gear-wenxinworkshop-starter](https://github.com/gemingjia/gear-wenxinworkshop-starter "https://github.com/gemingjia/gear-wenxinworkshop-starter")

1. 创建一个 SpringBoot 3.x应用程序(starter用的JDK17),选择JDK17及以上。 

2. 引入maven坐标:

```xml

<dependency>

  <groupId>io.github.gemingjia</groupId>

  <artifactId>gear-wenxinworkshop-starter</artifactId>

  <version>0.0.3.2</version>

</dependency>

```

3. 新建一个Controller

```java

@RestController

public class ChatController {

    // 要调用的模型的客户端

    @Resource

    private ErnieBotClient ernieBotClient;

    // 单次对话

    @PostMapping("/chat")

    public BaseResponse<String> chatSingle(String msg) {

        ChatResponse response = ernieBotClient.chatSingle(msg);

        return BaseResponse.success(response.getResult());

    }

    // 连续对话

    @PostMapping("/chats")

    public BaseResponse<String> chatCont(String msg) {

        String chatUID = "test-user-1001";

        ChatResponse response = ernieBotClient.chatCont(msg, chatUID);

        return BaseResponse.success(response.getResult());

    }

    // 流式返回,单次对话

    @PostMapping(value = "/stream/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)

    public BaseResponse<Flux<ChatResponse>> chatSingleStream(String msg) {

        Flux<ChatResponse> chatResponseFlux = ernieBotClient.chatSingleOfStream(msg);

        return BaseResponse.success(chatResponseFlux);

    }

    // 流式返回,连续对话

    @PostMapping(value = "/stream/chats", produces = MediaType.TEXT_EVENT_STREAM_VALUE)

    public BaseResponse<Flux<ChatResponse>> chatContStream(String msg, String msgUid) {

        Flux<ChatResponse> chatResponseFlux = ernieBotClient.chatContOfStream(msg, msgUid);

        return BaseResponse.success(chatResponseFlux);

    }

}

```

```java

@Data

public class BaseResponse<T> implements Serializable {

    private int code;

    private T data;

    private String message;

    public static <T> BaseResponse<T> success(T data) {

        BaseResponse<T> resp = new BaseResponse<>();

        resp.setData(data);

        resp.setCode(HttpStatus.OK.value());

        return resp;

    }


    public static <T> BaseResponse<T> error(int errorCode, String message) {

        BaseResponse<T> resp = new BaseResponse<>();

        resp.setCode(errorCode);

        resp.setMessage(message);

        return resp;

    }

}

```

4. 运行起来,发送请求试一下

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/420e0a4394a0490581c2cb48a67e77fd~tplv-k3u1fbpfcp-zoom-1.image)

这是ErnieBot模型的演示,此外starter还提供了ErnieBotClient、ErnieBotTurboClient、Bloomz7BClient 三中模型的客户端,可自行选择使用。

如果这个starter帮助您节省了一部分的时间,还请点个star哦~

 **项目开源地址&文档:**[https://github.com/gemingjia/gear-wenxinworkshop-starter](https://github.com/gemingjia/gear-wenxinworkshop-starter "https://github.com/gemingjia/gear-wenxinworkshop-starter")

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容