uniapp 對接deepseek

廢話不多說直接上代碼

// 小程序專用流式服務 
export const streamChatMiniProgram = (messages, options = {secret: ""
}) => {return new Promise((resolve, reject) => {// 構建請求數據 const requestData = {model: 'deepseek-chat',messages,stream: true,max_tokens: 2048,temperature: 0.7};// 平臺特定配置const requestConfig = {url: 'https://api.deepseek.com/v1/chat/completions',method: 'POST',header: {'Accept-Charset': 'utf-8','Content-Type': 'application/json','Authorization': `Bearer ${options.secret}`},data: JSON.stringify(requestData),// responseType: 'text',enableChunked: true, // 關鍵配置:啟用分塊傳輸// enableHttp2: true,timeout: 30000};// 跨平臺適配 // #ifdef MP-WEIXIN || MP-QQ requestConfig.enableChunked = true;// #endif // #ifdef MP-ALIPAY || MP-BAIDU requestConfig.enableChunked = false;// #endif // 發起請求 const requestTask = wx.request({...requestConfig,// 分塊數據接收處理 chunked: requestConfig.enableChunked,success: (res) => {if (res.statusCode !== 200) {reject(new Error(`API錯誤: ${res.statusCode}`));}},fail: (err) => {reject(new Error(`請求失敗: ${err.errMsg}`));}});try {// requestTask.onHeadersReceived((chunk)=>{// 	console.log("onHeadersReceived")// })// requestTask.onProgressUpdate((chunk)=>{// 	console.log("onProgressUpdate")// })// const decoder = new TextDecoder('utf-8') // 顯式指定UTF-8requestTask.onChunkReceived((chunk) => {try {if (!requestTaskMap.get(requestTask.uniqueId)) {return;}// 緩沖區初始化為空字符串 let buffer = '';buffer += utf8Decode(chunk.data) //decoder.decode(chunk.data,  { stream: true });// String.fromCharCode.apply(null, new Uint8Array(chunk.data));// SSE格式解析 const lines = buffer.split('\n');buffer = '';for (const line of lines) {if (line.trim() === '') continue;if (line.startsWith('data:')) {const dataStr = line.replace('data:', '').trim();// 結束標記處理 if (dataStr === '[DONE]') {resolve(fullResponse);return;}// 解析JSON內容 try {const data = JSON.parse(dataStr);if (data.choices?.[0]?.delta?.content) {const content = data.choices[0].delta.content;fullResponse += content;// 實時事件通知 uni.$emit('deepseek_stream_update', {partial: content,full: fullResponse});}} catch (e) {console.error('JSON 解析錯誤', e);uni.$emit('deepseek_stream_update', {partial: 'JSON 解析錯誤',e,full: 'JSON 解析錯誤',e});}}}} catch (err) {uni.$emit('deepseek_stream_update', {partial: JSON.stringify(err),full: JSON.stringify(err)});}});} catch (err) {uni.$emit('deepseek_stream_update', {partial: JSON.stringify(err),full: JSON.stringify(err)});}// 存儲任務引用以便中斷 console.log("requestTask=", requestTask)requestTaskMap.set(requestTask.uniqueId, requestTask);let fullResponse = '';});
};export function utf8Decode(buffer) {let uint8 = new Uint8Array(buffer);let str = '';let i = 0;while (i < uint8.length) {const byte = uint8[i++];// 單字節字符 (0-127)if (byte < 0x80) {str += String.fromCharCode(byte);}// 雙字節字符 else if ((byte & 0xE0) === 0xC0) {const byte2 = uint8[i++];str += String.fromCharCode(((byte & 0x1F) << 6) | (byte2 & 0x3F));}// 三字節字符(支持中文)else if ((byte & 0xF0) === 0xE0) {const byte2 = uint8[i++];const byte3 = uint8[i++];str += String.fromCharCode(((byte & 0x0F) << 12) |((byte2 & 0x3F) << 6) |(byte3 & 0x3F));}// 四字節字符(簡單兼容)else if ((byte & 0xF8) === 0xF0) {i += 3; // 跳過后續字節str += ''; // 替換字符占位}}return str;
}
// 請求任務管理器 
const requestTaskMap = new Map();
// 中斷指定請求
export const abortStreamRequest = (requestId) => {const task = requestTaskMap.get(requestId);if (task) {task.abort();requestTaskMap.delete(requestId);}
};
// 中斷所有請求
export const abortAllRequests = () => {requestTaskMap.forEach(task => {task.abort()});requestTaskMap.clear();
};

調用

async startStream() {if (!this.message) {return;}const userMessage = {id: Date.now(),role: 'user',content: this.message};this.messages.push(userMessage);this.message = ""// 構建對話歷史 const messages = this.messages.map(m => ({role: m.role,content: m.content}));this.currMessage = {content: "",role: "assistant",thinking: true}this.messages.push(this.currMessage)// 發起流式請求this.loading = trueconst response = await streamChatMiniProgram(messages, {secret: this.deepSeekSecret});this.loading = falsethis.currMessage = undefinedthis.$nextTick(()=>{this.scrollBottom()})}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83908.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83908.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83908.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Softhub軟件下載站實戰開發(四):代碼生成器設計與實現

文章目錄 Softhub軟件下載站實戰開發&#xff08;四&#xff09;&#xff1a;代碼生成器設計與實現1.前言 &#x1f4dc;2.技術選型3.架構概覽 &#x1f3d7;?3.1 架構概覽3.2 工作流程詳解 4.核心功能實現 ?4.1 配置管理系統4.2 數據庫表結構解析4.3 模板渲染引擎4.4 智能類…

鴻蒙組件通用屬性深度解析:從基礎樣式到高級定制的全場景指南

一、引言&#xff1a;通用屬性 —— 構建視覺體驗的核心語言 在鴻蒙應用開發體系中&#xff0c;組件的視覺呈現與交互體驗主要通過通用屬性系統實現。這些屬性構成了從基礎樣式定義&#xff08;尺寸、顏色&#xff09;到復雜交互控制&#xff08;動畫、布局&#xff09;的完整…

選擇與方法專欄(9) 職場內篇: 是否要跳出舒適圈?如何處理犯錯?

合集文章 一個中科大差生的8年程序員工作總結_8年工作經驗 程序員-CSDN博客 選擇與方法專欄&#xff08;1&#xff09;職場外篇&#xff1a;謹慎的選擇城市、行業、崗位-CSDN博客 選擇與方法專欄&#xff08;2&#xff09;職場外篇&#xff1a; 每個時代都有自己的機遇-CSDN…

DCM4CHEE ARCHIVE LIGHT 源代碼解析(1)-前言

系列文章目錄 DCM4CHEE ARCHIVE LIGHT 源代碼解析(1)-前言DCM4CHEE ARCHIVE LIGHT 源代碼解析(2)-STOWRS文章目錄 系列文章目錄概述一、項目結構1、下載解壓代碼2、IntelliJ IDEA加載源代碼二、編譯發布1、編譯 dcm4chee-arc-ear 項目2、編譯 dcm4chee-arc-ui2 項目寫在結尾概…

基于DeepSeek-R1-Distill-Llama-8B的健康管理助手微調過程

基于DeepSeek-R1-Distill-Llama-8B的健康管理助手微調過程 本次創新實訓項目的主要任務是利用DEEPSEEK提供的開源模型&#xff0c;通過微調技術&#xff0c;實現一個專注于健康管理與醫療咨詢的人工智能助手。本文詳細記錄我們如何對DeepSeek-R1-Distill-Llama-8B模型進行微調…

TI 毫米波雷達走讀系列—— 3DFFT及測角

TI 毫米波雷達走讀系列—— 3DFFT及測角 測角原理 —— 角度怎么測測角公式 —— 角度怎么算相位差測角基本公式為什么是3DFFT1. 空間頻率與角度的對應關系2. FFT的數學本質&#xff1a;離散空間傅里葉變換 測角原理 —— 角度怎么測 本節內容解決角度怎么測的問題&#xff0c…

圖解JavaScript原型:原型鏈及其分析 02 | JavaScript圖解

? ? 任何函數既可以看成一個實例對象又可以看成一個函數 作為一個實例對象其隱式原型對象指向其構造函數的顯式原型對象 作為一個函數其顯式原型對象指向一個空對象 任何一個函數其隱式原型對象指向其構造函數的顯式原型對象 任何一個函數是 Function 函數創建的實例&…

自定義View實現K歌開始前歌詞上方圓點倒計時動畫效果

在上一篇KRC歌詞解析原理及Android實現K歌動態歌詞效果介紹了動態歌詞的實現,我們繼續完善一下。在K歌場景中,一些歌曲前奏很長,用戶不知道什么時候開始唱,這時一般在歌詞上方會有一個圓點倒計時的效果來提醒用戶開始時間,如下圖:開始唱之前,圓點會逐個減少,直至圓點全…

ffmpeg subtitles 字幕不換行的問題解決方案

使用ffmpeg在mac下處理srt中文字幕可以自動換行&#xff0c;linux環境下不換行直接超出視頻區域了 這是因為在mac環境下的SimpleText 渲染器自動處理了文本&#xff0c;而linux無法處理。 mac&#xff1a; linux&#xff1a; 方案&#xff1a; ?&#xff1a;網上找到的方案…

Trino入門:開啟分布式SQL查詢新世界

目錄 一、Trino 是什么 二、核心概念與架構解析 2.1 關鍵概念詳解 2.2 架構剖析 三、快速上手之安裝部署 3.1 環境準備 3.2 安裝步驟 3.2.1 下載軟件包 3.2.2 安裝軟件包 3.2.3 啟動服務 3.2.4 驗證服務 3.2.5 安裝 Trino 客戶端 3.3 目錄結構說明 四、實戰演練&…

EFK架構的數據安全性

EFK架構&#xff08;Elasticsearch Filebeat Kibana&#xff09;的數據安全性需通過?傳輸加密、訪問控制、存儲保護?三層措施保障&#xff0c;其核心風險與加固方案如下&#xff1a; 一、數據傳輸安全風險與加固 ?明文傳輸風險? Filebeat → Elasticsearch 的日…

2025年滲透測試面試題總結-安全服務工程師(駐場)(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 安全服務工程師(駐場) 1. 挖過的一些漏洞&#xff08;舉例說明&#xff09; 2. 滲透測試的思路&#xff08…

C++ 編譯流程詳解:從源碼到可執行文件

C 編譯流程是將人類可讀的源代碼轉換為計算機可執行的二進制文件的過程。這個過程可以分為四個核心階段&#xff1a;預處理、編譯、匯編和鏈接。每個階段都有明確的任務&#xff0c;共同確保代碼正確轉換為可執行程序。 一、預處理&#xff08;Preprocessing&#xff09; 預處…

CentOS7 安裝最新版 Docker

在 CentOS 7 上安裝最新版 Docker&#xff0c;可以按照以下步驟操作&#xff1a; 1. 卸載舊版本 Docker&#xff08;如有&#xff09; 如果之前安裝過舊版 Docker&#xff0c;需要先卸載&#xff1a; yum remove docker docker-client docker-client-latest docker-common do…

網絡安全相關知識

一、網絡安全基礎 1. CIA三元組 (Confidentiality, Integrity, Availability) 機密性 (Confidentiality)&#xff1a;確保信息只能由授權人員查看&#xff0c;防止信息泄露。加密技術&#xff08;如AES、RSA&#xff09;通常用于保護機密性。 完整性 (Integrity)&#xff1a;…

每天一個前端小知識 Day 4 - TypeScript 核心類型系統與實踐

TypeScript 核心類型系統與實踐 1. 為什么前端面試中越來越重視 TypeScript&#xff1f; 復雜業務場景需要強類型保障穩定性&#xff1b;更好的 IDE 支持和智能提示&#xff1b;降低線上 bug 概率&#xff1b;成熟的工程團隊都在使用&#xff1b;對于 React/Vue 項目維護可讀性…

uni-app插件,高德地圖、地圖區域繪制、定位打卡

介紹 高德地圖、地圖區域繪制、定位打卡 示例 默認 &#xff08;展示地圖&#xff0c;是否可以打卡&#xff09; <template><view class"container"><map-positioning-punch:clock-in-area"clockInArea":refresh-timeout"refreshT…

_mm_aeskeygenassist_si128 硬件指令執行的操作

根據Intel的文檔&#xff0c;_mm_aeskeygenassist_si128 指令執行以下操作&#xff1a; result[31:0] SubWord(RotWord(temp)) xor Rcon; result[63:32] SubWord(RotWord(temp)); result[95:64] SubWord(RotWord(temp)) xor Rcon; result[127:96] SubWord(RotWord(temp…

爬蟲技術:數據獲取的利器與倫理邊界

一、爬蟲技術的原理與架構 爬蟲技術的核心是模擬人類瀏覽網頁的行為&#xff0c;通過程序自動訪問網站&#xff0c;獲取網頁內容。其基本原理可以分為以下幾個步驟&#xff1a;首先&#xff0c;爬蟲程序會發送一個 HTTP 請求到目標網站的服務器&#xff0c;請求獲取網頁數據。…

TortoiseSVN 下載指定版本客戶端及對應翻譯(漢化)包

訪問官方網站 打開瀏覽器,進入 TortoiseSVN 官方網站:https://tortoisesvn.net/ ,這是獲取官方版本最權威的渠道。 進入下載頁面 在官網首頁,找到并點擊 Downloads(下載)選項,進入下載頁面。 選擇版本 在下載頁面中,會展示最新版本的下載鏈接。如果需要指定版本,向下…