引言:
DeepSeek,作為一款先進的自然語言處理模型,以其強大的文本理解和生成能力著稱。它能夠處理復雜的文本信息,進行深度推理,并快速給出準確的回應。DeepSeek模型支持流式處理,這意味著它可以邊計算邊輸出,而不必等待整個生成過程結束后再輸出結果,大大縮短了用戶的等待時間。通過流式輸出,DeepSeek模型可以在處理過程中實時地將結果發送給小程序,小程序前端則能夠立即接收到這些數據,并在視圖中動態展示出來。這樣,用戶就可以邊等待邊看到已經接收到的結果,大大提升了用戶體驗。
本文中的DeepSeek模型為火山方舟(字節跳動火山引擎)中的DeepSeek大模型,當前可以免費使用。
一、注冊火山引擎賬號,創建API Key和model(接入點ID)
請參考之前的文章:微信小程序調用火山方舟(字節跳動火山引擎)中的DeepSeek大模型
二、小程序調用API,并流式輸出
const requestTask=wx.request({method: 'POST',url: 'https://ark.cn-beijing.volces.com/api/v3/chat/completions',header: {'Content-Type': 'application/json', 'Authorization': 'Bearer API Key' //Authorization值為“Bearer API Key”},data: {"model": "xxx", //model值為接入點ID(model)"messages": [{"role": "user","content": "你是DeepSeek模型嗎?",}],stream: true, //是否以流的形式輸出生成的內容},enableChunked: true //開啟transfer-encoding chunked
});requestTask.onChunkReceived(res => {//在微信開發者工具和真機上接收到的對象格式是不同的,以下代碼是針對不同格式進行解碼處理let type=Object.prototype.toString.call(res.data);let text;if(type ==="[object Uint8Array]")text=decodeURIComponent(escape(String.fromCharCode(...res.data)))if(type ==="[object ArrayBuffer]"){let uint8Array = new Uint8Array(res.data);text=decodeURIComponent(escape(String.fromCharCode(...uint8Array)))}//將解碼后的文本分割成字符串數組,數組中的每個元素就是即時接收到的流式文本let list = text.split('\n');for (var i = 0; i < list.length; i++) {if (list[i]) {if (list[i].trim().search(/^data.*\}$/) > -1) { //過濾掉空行和其他不規則數據行let delta = JSON.parse(list[i].substring(6)).choices[0].delta;//如果開啟了“深度思考”,返回的對象中delta.reasoning_content為深度思考內容,//delta.content為主體應答內容let content = delta.reasoning_content ? delta.reasoning_content : delta.content;console.log(content);}if (list[i] == 'data: [DONE]') {requestTask.abort();}}}
});