用【Java】调用百度千帆大模型并提供流式接口【SSE】响应

这篇具有很好参考价值的文章主要介绍了用【Java】调用百度千帆大模型并提供流式接口【SSE】响应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代码参考:

千帆API流式调用:PHP、JS、Nodejs、Python、Java、C# 、Go流式示例代码 - 百度智能云千帆社区本文旨在提供一个全面的指南,涵盖了在PHP、JS、Nodejs、Python、Java、C# 中流式调用千帆API的关键技巧和最佳实践。不论您是初学者还是有经验的开发者,相信这里的内容都能帮助您提升https://cloud.baidu.com/qianfandev/topic/268202

效果演示:

java 怎么实现调用千帆模型流式输出数据,LLM,百度千帆大模型,SSE流式响应接口,java,dubbo,开发语言

API服务:

接口地址:

V1版本:https://apis.ydxiaoshuai.cn/xai/rest/llm/baidu/qianfan/chat?accessToken=ACCESSTOKEN&prompt=PROMPT

V2版本使用WebFlux:https://apis.ydxiaoshuai.cn/xai/rest/llm/baidu/qianfan/v2/chat?accessToken=ACCESSTOKEN&prompt=PROMPT

请求方式:GET

参数替换:

替换ACCESSTOKEN为自己的

替换PROMPT为自己要提问的问题

注意:服务器带宽有限,请不要恶意攻击

Java-Controller代码:

/**
     * 发送问题
     *
     * @param apiKey - 用于获取token的apiKey
     * @param secretKey - 用于获取token的secretKey
     * @param accessToken - 接口token
     * @param prompt - 用于权限验证,从服务接口认证信息中获取
     * @return 百度千帆的回答
     */
    @GetMapping(value = "/baidu/qianfan/chat")
    public void baiduQianfanChat(@RequestParam(value ="apiKey",required = false) String apiKey,
                                 @RequestParam(value ="secretKey",required = false) String secretKey,
                                 @RequestParam(value ="accessToken",required = false) String accessToken,
                                 @RequestParam(value ="prompt",required = false) String prompt,
                                 HttpServletResponse res) throws Exception {
        LiteLLMResult bean = new LiteLLMResult();
        QianFanResponseDTO responseDTO = new QianFanResponseDTO();
        log.info("【百度千帆-prompt内容】:{}", prompt);
        // 响应流
        res.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_EVENT_STREAM_VALUE);
        res.setCharacterEncoding("UTF-8");
        res.setHeader(HttpHeaders.PRAGMA, "no-cache");
        ServletOutputStream out = null;
        String REQ_URL = null;
        try {
            out = res.getOutputStream();
            if (StrUtil.isEmpty(prompt)) {
                bean.fail("无效问题,请重新输入",500);
                out.write(JSON.toJSONString(bean).getBytes());
                return;
            }
            okhttp3.MediaType mediaType = okhttp3.MediaType.parse(MediaType.APPLICATION_JSON_VALUE);
            QianFanChatBean requestBean =  QianFanUtil.getRequestData(prompt);
            requestBean.setStream(true);
            RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(requestBean));
            boolean flag = StrUtil.isEmpty(apiKey)||StrUtil.isEmpty(secretKey);
            if(flag && StrUtil.isNotEmpty(accessToken)){
                 REQ_URL = QianFanUtil.API_URL.replace("ACCESS_TOKEN",accessToken);
            }else if(StrUtil.isNotEmpty(apiKey)&&StrUtil.isNotEmpty(secretKey)){
                 REQ_URL = QianFanUtil.API_URL.replace("ACCESS_TOKEN",QianFanUtil.getAccessToken(apiKey,secretKey));
            }else{
                bean.fail("apiKey|secretKey|accessToken参数为空,请检查",500);
                out.write(JSON.toJSONString(bean).getBytes());
                return;
            }
            Request request = new Request.Builder()
                    .url(REQ_URL)
                    .method(Method.POST.toString(), body)
                    .addHeader(Header.CONTENT_TYPE.getValue(), MediaType.APPLICATION_JSON_VALUE)
                    .build();
            Response response = QianFanUtil.HTTP_CLIENT.newCall(request).execute();
            try (ResponseBody responseBody = response.body()) {
                if (responseBody != null) {
                    try (BufferedReader reader = new BufferedReader(responseBody.charStream())) {
                        String line;
                        while ((line = reader.readLine()) != null) {
                            String result = line.replace("data: ", "");
                            if(StrUtil.isNotEmpty(result)){
                                QianFanResponseBean qianFanResponseBean = JSON.parseObject(result,QianFanResponseBean.class);
                                responseDTO.setContent(qianFanResponseBean.getResult());
                                bean.success("执行成功",responseDTO);
                                out.write(JSON.toJSONString(bean).getBytes());
                                out.flush();
                                //防止返回内容重复或错误。暂停一下
                                Thread.sleep(100);
                            }
                        }
                    }finally {
                        responseBody.close();
                        response.close();
                        QianFanUtil.HTTP_CLIENT.connectionPool().evictAll();
                        QianFanUtil.HTTP_CLIENT.dispatcher().executorService().shutdown();
                        QianFanUtil.HTTP_CLIENT.newCall(request).cancel();
                    }
                }
            }
        } catch (Exception e) {
            bean.fail("系统内部错误,请联系管理员",500);
            out.write(JSON.toJSONString(bean).getBytes());
            return;
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                bean.fail("系统内部错误,请联系管理员",500);
                out.write(JSON.toJSONString(bean).getBytes());
                return;
            }
        }
    }

LiteLLMResult

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class LiteLLMResult extends BaseResponseBean {
    /**
     * 具体参数
     **/
    private XingHuoResponseDTO data;

    public LiteLLMResult success(String message, XingHuoResponseDTO data) {
        this.message = message;
        this.code = CommonConstant.SC_OK_200;
        this.data = data;
        return this;
    }
    public LiteLLMResult fail(String message, Integer code) {
        this.message = message;
        this.code = code;
        return this;
    }
    public LiteLLMResult error(String message) {
        this.message = message;
        this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
        return this;
    }
}

BaseResponseBean

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BaseResponseBean implements Serializable {
    private static final long serialVersionUID = 1L;
    private static final long timestamps = System.currentTimeMillis();
    /**
     * 返回处理消息
     */
    public String log_id = timestamps+"-"+IdUtil.fastSimpleUUID();
    /**
     * 返回处理消息
     */
    public String message = "ok";
    /**
     * 返回处理消息
     */
    public String message_zh = "操作成功!";
    /**
     * 返回代码
     */
    public Integer code = 200;

    /**
     * 时间戳
     */
    public long timestamp = timestamps;

    /**
     * 作者
     */
    public String author = "小帅丶";

}

QianFanResponseDTO

@Data
public class QianFanResponseDTO{
    private String uId;
    private String content;
    private String chatId;
}

Nginx配置SSE

在自己域名反向代理的location下面配置即可文章来源地址https://www.toymoban.com/news/detail-856673.html

		 proxy_buffering off;
		 proxy_cache off;
		 proxy_set_header Connection '';
		 chunked_transfer_encoding off;  # 开启分块传输编码
		 tcp_nopush on;  # 开启TCP NOPUSH选项,禁止Nagle算法
		 tcp_nodelay on;  # 开启TCP NODELAY选项,禁止延迟ACK算法
		 # SSE事件流
         add_header Content-Type text/event-stream;
         add_header Cache-Control no-cache;

到了这里,关于用【Java】调用百度千帆大模型并提供流式接口【SSE】响应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 百度智能云“千帆大模型平台”升级:大模型最多,Prompt模板最全

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 前言 一、千帆大模型平台 二、体验分享 2.1服务申请 2.2Prompt模板 2.3Prompt模板的使用

    2024年02月14日
    浏览(48)
  • 百度智能云千帆大模型平台黑客马拉松报名开启!

    创造是生成式 AI 的核心。无论是智能导购带来的线上购物体验升级,还是主图生成带来的素材生产效率提升,又或是游戏场景的快速设置、智能 NPC 的全新交互、数字广告的精准推荐和个性化定制,亦或者是为学生提供更符合真实的口语练习环境,生成式 AI 这一人工智能的范

    2024年02月06日
    浏览(60)
  • 百度文心千帆大模型平台:企业级大模型服务的新航标

    随着人工智能和大数据的快速发展,大模型平台正越来越受到各大企业和个人开发者的青睐。本文将以百度最新推出的文心千帆大模型平台为例,深入分析其在国家战略布局,经济发展趋势,市场变化动向和技术研发周期等方面的影响和应用。同时,也将深入探讨其当前所面

    2024年02月15日
    浏览(50)
  • 百度智能云“千帆大模型平台”最新升级:接入Llama 2等33个模型!

    今年3月,百度智能云推出“千帆大模型平台”。作为全球首个一站式的企业级大模型平台,千帆不但提供包括文心一言在内的大模型服务及第三方大模型服务,还提供大模型开发和应用的整套工具链,能够帮助企业解决大模型开发和应用过程中的所有问题。 本次千帆大模型

    2024年02月14日
    浏览(49)
  • 学习笔记|百度文心千帆大模型平台测试及页面交互简易代码

    目前百度文心一言的内测资格申请相当拉胯,提交申请快3个月,无任何音讯。不知道要等到什么时候。 百度适时开放了百度文心千帆大模型平台,目前可以提交申请测试,貌似通过的很快,已取得测试申请资格,可以用起来。 申请测试网址 获得测试资格后的页面是这样的:

    2024年02月15日
    浏览(50)
  • 百度智能云千帆大模型平台再升级,SDK版本开源发布!

    📫作者简介: 小明java问道之路 , 2022年度博客之星全国TOP3 ,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。          📫 热衷分享,喜欢原

    2024年02月05日
    浏览(49)
  • 百度智能云:千帆大模型平台接入Llama 2等33个大模型,上线103个Prompt模板

      大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的

    2024年02月13日
    浏览(38)
  • 百度智能云千帆大模型平台2.0来了!从大模型到生产力落地的怪兽级平台!!

    目录 前言  最佳算力效能为企业降低门槛 最多大模型,最多数据集为企业保驾护航 企业级安全对于企业来说是硬性要求 普通人或许感知不明显,但是对于企业而言,身处AI时代,是否选择投资大模型,是否拥抱人工智能提高企业生产力,一直以来都是一个严肃的话题;从年

    2024年02月09日
    浏览(49)
  • 如何申请文心一言&文心千帆大模型API调用资格、获取access_token,并使用SpringBoot接入文心一言API

    前段时间,百度文心一言文心千帆大模型开放了API调用的测试,接下来,教大家申请测试资格并接入文心千帆大模型的API。 右上角点击注册,内容如实填写并完成实名认证。  注册与认证详细内容不再赘述。 进入文心一言文心千帆大模型介绍页,点击申请体验 会进入填写问

    2024年02月15日
    浏览(47)
  • 【千帆大模型】——使用Baidu Comate插件使用

    我们需要再Comate的首页先申请试用,申请后会发一个Key到你的手机,收到短信后就可以去授权了。  下载Comate,在拓展中搜索【comate】即可,点击安装后我们需要应用到所有配置文件,操作如下图。 默认是没有授权的,我们需要去授权。 这里就得用到Key了。 在安装完成后,

    2024年03月19日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包