laravel对接百度智能云 实现智能机器人

创建API Key和 Secret Key进入网址:百度智能云千帆大模型平台

如下图操作:

填写完毕点击确认后,即可得到sk和ak

后端接口实现代码:

复制代码
  //调用百度智能云第三方机器人接口
    public function run($text) {
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-4.0-8k-0104?access_token={$this->getAccessToken()}",
            CURLOPT_TIMEOUT => 30,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER  => false,
            CURLOPT_SSL_VERIFYHOST  => false,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS =>'{
                               "messages":
                                    [
                                        {
                                             "role":"user",
                                             "content":'.'"'.$text.'"'.'
                                        }
                                    ],
            "temperature":0.8,
            "top_p":0.8,
            "penalty_score":1,
            "disable_search":false,
            "enable_citation":false,
            "enable_trace":false
            }',

            CURLOPT_HTTPHEADER => array(
                'Content-Type: application/json'
            ),

        ));

        $response = curl_exec($curl);
        curl_close($curl);
        return $response;
    }

    /**
     * 使用 AK,SK 生成鉴权签名(Access Token)
     * @return string 鉴权签名信息(Access Token)
     */
    private function getAccessToken(){
        $config = config('services.lev');
        $curl = curl_init();
        $postData = array(
            'grant_type' => 'client_credentials',
            'client_id' => '你的ak',
            'client_secret' => '你的sk'
        );
        curl_setopt_array($curl, array(
            CURLOPT_URL => 'https://aip.baidubce.com/oauth/2.0/token',
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_SSL_VERIFYPEER  => false,
            CURLOPT_SSL_VERIFYHOST  => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POSTFIELDS => http_build_query($postData)
        ));
        $response = curl_exec($curl);
        curl_close($curl);
        $rtn = json_decode($response);
        return $rtn->access_token;
    }

    public function info_request()
    {
        $text = request()->get('content');
        $rtn = (new LevitatefSphereController())->run($text);
        return $rtn;
    }

    public function levitated()
    {
        return view('levitated_view');
    }

页面HTML代码:

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Simple Chat Box</title>
    <link rel="stylesheet" href="{{ asset('static/levitated-css.css') }}" />
    <style>
        body {
            overflow-y: hidden; /* 隐藏垂直滚动条 */
        }
        #box {
            width: 1000px;
            height: 100%;
            margin: 0px auto;
            /*position: relative;*/
        }
        #chat-box {
            width: 900px;
            height: 670px;
            overflow: auto;
            border: 1px solid #ccc;
            border-radius: 10px 10px 0px 0px;
            padding: 8px;
            background-color: #ffffff;
        }
        #message-input{
            width: 916px;
            height: 110px;
            border: 1px solid #ccc;
            /*pointer-events:none;*/
            border-top:none;
            /*position: absolute;*/
            border-radius: 0px 0px 10px 10px;
            background-color: #ffffff;
        }
        #btn{
            /*width: 80px;*/
            border-radius: 10px;
            border: none;
            background-color: #8a57ea;
            color: #ffffff;
            margin-left: 820px;
            /*position: absolute;*/
            position: relative;
            bottom: 45px;
            padding: 10px 20px;
        }
        .input-div{
            width: max-content;
            padding: 10px 20px;
            border-radius: 8px 8px 0px 8px;
            float : right;
            color: #ffffff;
            margin: 10px;
        }
        .answer-div{
            width: 700px;
            padding: 10px 20px;
            border-radius: 0px 10px 10px 10px;
            /*float : left;*/
            clear: both;
            margin: 10px;
        }
        .loading {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(255, 255, 255, 0.8);
            z-index: 9999;
            text-align: center;
            padding-top: 20%;
            font-size: 24px;
            color: #333;
        }

        .logo{
            width: 40px !important;
            height: 40px !important;

        }

    </style>
</head>
<body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="box">
    <div id="chat-box"></div>

    <div  onfocus="divFocusMess()" onclick="divClickMess()" onblur="divBlurMess()"  contenteditable = "true" tabindex="0" id="message-input" onkeydown="handleEnter(event)" onkeyup="keyup(event)" style="word-break: break-word;"></div>
    <button onclick="sendMessage()" id="btn" >提问</button>
    <div class="loading" id="loading">正在加载中 请耐心等待...</div>
</div>
<script>
    var chatbox = document.getElementById("chat-box");
    var message = document.getElementById('message-input').innerHTML;
    if(message == ''){
        document.getElementById('message-input').innerHTML = '输入消息';
    }
    function divClickMess(){ //点击时为空
        document.getElementById('message-input').innerHTML = '';
    }
    function divBlurMess(){ //失焦时设置为输入信息
        document.getElementById('message-input').innerHTML = '输入消息';
    }
    function divFocusMess(){ //聚焦时为空
        document.getElementById('message-input').innerHTML = '';
    }
    // function divSelMess(){
    //     document.getElementById('message-input').innerHTML = '';
    // } onselect="divSelMess()"

    function scrollToBottom() {
        chatbox.scrollTop = chatbox.scrollHeight;
    }
    window.onload = function() {
        var chatbox = document.getElementById("chat-box");
        chatbox.scrollTop = chatbox.scrollHeight;
    }
    function sendMessage() {
        //获取输入框内容
        var message = document.getElementById('message-input').innerHTML;

        var chatBox = document.getElementById('chat-box');
        // 清除输入框的内容
        document.getElementById('message-input').innerHTML = '';
        // 在聊天框中添加消息
        chatBox.innerHTML += '<div class="input-div" style="background-color: #8a57ea;">' + message + '</div><div style="clear: both"></div>';
        document.getElementById('loading').style.display = 'block';
        document.getElementById('message-input').innerHTML = '';
        // 在这里处理加载完成后的操作,例如显示答案等
        $.ajax({
            url:'info_request',//请求的路由接口
            data:{content:message},//传值
            type:'get',//接口类型
            dataType:'json',
            success:function (res){
                var result = res.result;
                document.getElementById('loading').style.display = 'none';
                //将返回的答案展示在页面上
                chatBox.innerHTML += '<img class="logo" src="{{asset('static/images/levitated.png')}}"><div class="answer-div"  style="background-color: #f8f8f8">' + result.replace(/\n/g, '<br>') + '</div>';
                //自动展示最新,将滚轮滑动至最下方
                if (chatbox.scrollHeight - chatbox.scrollTop - chatbox.clientHeight > 10) {
                    scrollToBottom();
                }
            }
        })
    }

    function handleEnter(event) {
        // 检查按下的键是否是回车键
        if(event.key === "Enter") {
            // 可以在这里添加其他的逻辑处理
            var message = document.getElementById('message-input').innerHTML;
            var chatBox = document.getElementById('chat-box');
            // 清除输入框的内容
            document.getElementById('message-input').innerHTML = '';

            // 在聊天框中添加消息
            chatBox.innerHTML += '<div class="input-div" style="background-color: #8a57ea;">' + message + '</div><div style="clear: both"></div>';
            document.getElementById('loading').style.display = 'block';
            document.getElementById('message-input').innerHTML = '';
            // 在这里处理加载完成后的操作,例如显示答案等
            $.ajax({
                url:'info_request',//请求的路由接口
                data:{content:message},//传值
                type:'get',//接口类型
                dataType:'json',
                success:function (res){
                    var result = res.result;
                    // 停止加载
                    document.getElementById('loading').style.display = 'none';
                    //将返回的答案展示在页面上
                    chatBox.innerHTML += '<img class="logo" src="{{asset('static/images/levitated.png')}}"><div class="answer-div"  style="background-color: #f8f8f8">' + result.replace(/\n/g, '<br>') + '</div>';
                    //自动展示最新,将滚轮滑动至最下方
                    if (chatbox.scrollHeight - chatbox.scrollTop - chatbox.clientHeight > 10) {
                        scrollToBottom();
                    }
                }

            })
            event.preventDefault(); // 阻止 Enter 键的默认行为
            return false;
        }

    }

</script>

</body>
</html>
相关推荐
JaguarJack8 小时前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo8 小时前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack1 天前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay2 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954482 天前
CTF 伪协议
php
BingoGo4 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack4 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo5 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack5 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack6 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端