当前位置: 首页 > news >正文

小程序引入deepseek

首先需要申请key: 地址

deepseek文档地址

使用wx.request获取数据

    const task = wx.request({url: 'https://api.deepseek.com/chat/completions',method: 'POST',responseType: 'text',headers: {'Content-Type': 'application/json','Authorization': 'Bearer YOUR_API_KEY'},dataType: 'text', // 或 'json'enableChunked: true,data: {messages: [{ role: 'user', 'content'}]},success: async function(res) {const systemInfo = Taro.getSystemInfoSync()// 兼容企微小程序不能使用onChunkReceived钩子的情况if (systemInfo.environment === 'wxwork') {if (res.data) {const infoList = res.data.match(/data:\s*(\{[^}]*\})/g)let data = ''Taro.hideLoading()for (let index = 0; index < infoList.length; index++) {await new Promise(resolve => setTimeout(resolve, 80))const jsonStr = infoList[index].replace(/^data:\s*/, '')data += JSON.parse(jsonStr).contentthat.setState({ deepSeekData: data })if (index === infoList.length - 1) {that.setState({disabled: false})}}}}}})let bl = truetask.onChunkReceived((chunk) => {const chunkText = SimpleTextDecoder(chunk.data); // 解码当前分块const regList = chunkText.match(/data:\s*(\{[^}]*\})/g)let deepSeekData = ''if (chunkText.indexOf('data: [DONE]') > -1) {request.post('admin/TransferStoreDeepseek', {transfer_store_id: this.state.transferInfo.id,deepseek: this.state.deepSeekData})this.setState({disabled: false})} else {if (!regList) returnregList.forEach((item) => {if (bl) {Taro.hideLoading()bl = false}const jsonStr = item.replace(/^data:\s*/, '')try {deepSeekData += JSON.parse(jsonStr).content} catch (e) {console.error('解析JSON失败:', e, '原始数据:', jsonStr)return null}})this.setState({ deepSeekData: this.state.deepSeekData += deepSeekData });}});

渲染数据

使用markdown-it插件

npm install markdown-it@12.3.2
import { Button, View, RichText, Input } from '@tarojs/components';
import { parseMarkdownToHtml } from '@/utils/markdownParser';
import { filterHtmlForRichText } from '@/utils/htmlFilter';
import { SimpleTextDecoder} from '@/utils/SimpleTextDecoder';<RichText nodes={filterHtmlForRichText(parseMarkdownToHtml(this.state.deepSeekData))} />
配置markdown
// utils/markdownParser.js
import markdownIt from 'markdown-it'
// 初始化 markdown-it 实例
const md = new markdownIt({html: false,        // 允许解析 HTML 标签breaks: true,      // 保留换行符linkify: true,     // 自动转换 URL 为链接typographer: true  // 启用智能标点替换
});// Markdown 转 HTML
export function parseMarkdownToHtml(mdText) {return md.render(mdText);
}
标签处理
// utils/htmlFilter.js
export function filterHtmlForRichText(html) {// 转换不支持的标签(示例:表格转 div 布局)let safeHtml = html.replace(/<table>/g, '<div class="table">').replace(/<\/table>/g, '</div>').replace(/<tr>/g, '<div class="tr">').replace(/<\/tr>/g, '</div>').replace(/<td>/g, '<div class="td">').replace(/<\/td>/g, '</div>').replace(/<h1>/g, '<h1 class="h1">').replace(/<h3>/g, '<h3 class="h3">').replace(/<ul>/g, '<ul class="ul">').replace(/<li>/g, '<li class="li">').replace(/<ol>/g, '<ol class="ol">').replace(/<strong>/g, '<strong class="strong">')// 移除危险标签(如 script)safeHtml = safeHtml.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '');return safeHtml;
}
UTF-8 解码
// utils/htmlFilter.js
// 
export function SimpleTextDecoder (buffer) {let str = '';const uint8Array = new Uint8Array(buffer);for (let i = 0; i < uint8Array.length; i++) {str += String.fromCharCode(uint8Array[i]);}return decodeURIComponent(escape(str)); // UTF-8 解码
}
样式处理
  .h1 {font-size: 40px;}.h3 {font-size: 32px;line-height: 50px;}.ul, .ol {padding-left: 36px;}.strong {font-weight: normal;}

相关文章:

  • 青岛国瑞数据采集网关软件平台:工业互联的智能基石——安全、高效、开放,驱动企业数字化转型
  • ubuntu 端口复用
  • 在 Spring Boot 中使用 JSP
  • 深度学习姿态估计实战:基于ONNX Runtime的YOLOv8 Pose部署全解析
  • [蓝桥杯]三体攻击
  • 上门预约行业技术方案全解析:小程序、App还是H5?如何选择?
  • P10909 [蓝桥杯 2024 国 B] 立定跳远
  • 数据驱动的智驾十年 特斯拉、Momenta合流闯进Robotaxi卫冕之战
  • OrCAD X Capture CIS设计小诀窍系列第二季--03.如何在Capture中输出带有目录和元器件信息的PDF
  • vue2中使用jspdf插件实现页面自定义块pdf下载
  • 32 C 语言字符处理函数详解:isalnum、isalpha、iscntrl、isprint、isgraph、ispunct、isspace
  • ReLU 激活函数:重大缺陷一去不复返!
  • 卫朋:AI 硬件产品怎么做?——小智AI原理解析
  • 视觉前沿算法复现环境配置1——2025CVPR风格迁移网络SaMam
  • QEMU/KVM “unsupported machine type“ 错误深度解析与修复指南
  • 基于LocalAI与cpolar技术协同的本地化AI模型部署与远程访问方案解析
  • Matlab | matlab常用命令总结
  • 关于 smali:4. Smali 实战:修改行为 / 注入逻辑
  • STM32中自动生成Flash地址的方法
  • 上传、下载功能 巧实现
  • 艺麟盛世可以做网站推广吗/网站建设的数字化和互联网化
  • 商家在网站做淘宝客会给佣金吗/站长之家网站介绍
  • 建网站找汉狮/搜索引擎优化排名工具
  • 单网页网站如何做/百度地图疫情实时动态
  • 临朐网站建设咨询/宁波网站推广方式
  • 网站程序模板下载/自己如何制作一个网页