接入 deepseek 实现AI智能问诊
1. 准备工作
-
注册 DeepSeek 账号
-
前往 DeepSeek 官网 注册账号并获取 API Key。
-
-
创建 UniApp 项目
-
使用 HBuilderX 创建一个新的 UniApp 项目(选择 Vue3 或 Vue2 模板)。
-
-
安装依赖
-
如果需要在 UniApp 中使用 HTTP 请求,推荐使用
uni.request(UniApp 内置)或axios(需额外安装)。
-
2. 实现代码
2.1 在 pages/index/index.vue 中实现问诊功能
<template><view class="container"><!-- <view class="nav"><image src="../../static/images/back.png" @tap="toMenu"></image><text>问医生</text></view> --><statement ref="dialog"></statement><view class="chat_area" id="test" ref="chatbox"><view class="current_time" v-show="chatList.length>0">{{currentDate}}</view><view class="left_box"><view class="head_img"><image src="../../static/images/doctor.png"></image></view><view class="content_box"><view class="content post"><view>我是您的AI医生小迦,很高兴为您解答。</view><view>您可以这样问我:</view><view class="post_request"><view v-for="(item,index) in postRequest" :key="index"><text class="active" @click="tapQuestion(item)">{{item.id}}.{{item.text}}</text></view></view><!-- <u-read-more showHeight="200"><rich-text :nodes="item.msg"></rich-text></u-read-more> --><!-- {{item.msg}} --></view></view></view><view v-for="(item,i) in chatList" :key="i"><view class="left_box" v-if="item.role == 'assistant'"><view class="head_img"><image src="../../static/images/doctor.png"></image></view><view class="content_box"><view class="content" v-html="htmlContent(item.content)"><!-- <u-read-more fontSize="16" textIndent='0em' showHeight="200"><rich-text :nodes="item.msg"></rich-text></u-read-more> --></view></view></view><view class="right_box" v-if="item.role == 'user'"><view class="content_box"><view class="content" >{{item.content}}</view></view><view class="head_img"><image :src="userImg==''?nullImg:userImg"></image></view></view></view><u-loading-icon text="小迦正在思考中..." textSize="16" :show="showLoading"></u-loading-icon></view><view class="input_tab"><view class="statement">成都XXXX科技有限责任公司©<text @tap="exemptStatement">免责声明</text></view><view class="input_com"><view class="left"><image src="../../static/images/HOT.png"></image><input placeholder="请输入问题" v-model.trim="userQuesion" cursor-spacing="30rpx"></input></view><view class="send_btn" @tap="sendMsg">发送</view></view></view></view>
</template><script>import statement from "../../components/askForComponents/statement.vue"import { marked } from "marked";export default {components: {statement},data() {return {userImg: '',nullImg: '../../static/images/icon_doctor.png',showLoading: false,postRequest: [{id: 1,text: '乳腺BIRADS分级是什么?',},{id: 2,text: '乳房胀痛怎么办?',},{id: 3,text: '乳腺癌有没有征兆?'}],chatList: [],userQuesion: '',robotAnswer: '',currentDate: '',domHeight: 0,messages: [{role: "system",content: "你是一名专业的全科医生对医疗面面俱到的AI医生小迦,请无论什么时候都不要忘了自己的身份,你是AI医生小迦,不是AI辅助;当患者询问你问题的时候,能全面细致并且礼貌的回答或为患者解决问题,当患者询问你任何与无关医疗的问题时,你会礼貌的拒绝回答。",},],}},onLoad(option) {let userInfo = getApp().globalData.userInfo;// console.log("userInfo",userInfo)this.userImg = userInfo.personInfo.avatar;//获取热门问题并自动发送// console.log("option=======>", option)if (!option.questionText) returnthis.userQuesion = option.questionTextthis.sendMsg()},watch: {'chatList.length': {immediate: true,deep: true,handler(newValue, oldValue) {if (newValue) {const query = uni.createSelectorQuery().in(this)query.select('#test').boundingClientRect(data => {// console.log("data", data)this.domHeight = data.height}).exec()}}},domHeight(newVal, oldVal) {if (newVal) {uni.pageScrollTo({scrollTop: this.domHeight,duration: 100})}}},mounted() {this.$refs.dialog.open('center')let myDate = new Date()this.currentDate = (myDate.getHours() + '').padStart(2, '0') + ':' + (myDate.getMinutes() + '').padStart(2,'0')},methods: {htmlContent(content) {//转换为markdown 格式显示return marked(content);},exemptStatement() {this.$refs.dialog.open('center')},tapQuestion(item) {this.send(item.text)},// 新对话async send(val) {this.showLoading = truelet messages = {role: 'user',content: val}this.chatList.push(messages)this.messages.push(messages)var that = thisconsole.log('==========开始诊断=======');await uni.request({url: "https://api.deepseek.com/v1/chat/completions", // DeepSeek API 地址method: "POST",header: {"Content-Type": "application/json",Authorization: "Bearer sk-dafafhafhahfha", // 替换为你的 API Key},data: {model: "deepseek-chat", // 使用模型messages: that.messages},success: (res) => {messages = {role: 'assistant',content: res.data.choices[0].message.content}that.chatList.push(messages)that.messages.push(messages)that.showLoading = falseconsole.log('诊断结果:', res.data);},fail: (err) => {console.error('请求失败:', err);messages = {role: 'assistant',content: '服务器繁忙,请稍后再试。'}that.chatList.push(messages)that.messages.push(messages)that.showLoading = false}});},sendMsg() {this.send(this.userQuesion)this.userQuesion = nullthis.robotAnswer = null}}}
</script><style lang="scss">.container {padding: 28rpx;}.nav {height: 80rpx;width: 100%;background-color: #ffffff;display: flex;align-items: center;position: fixed;top: 0;left: 0;z-index: 999;image {margin: 0 20rpx;width: 40rpx;height: 40rpx;}text {color: #838383;font-size: 40rpx;}}.chat_area {padding-bottom: 200rpx;// padding-top: 60rpx;.current_time {display: flex;justify-content: center;font-size: 20rpx;color: #9d9d9d;}.left_box,.right_box {display: flex;.head_img {width: 90rpx;height: 90rpx;margin: 20rpx 0;image {width: 90rpx;height: 90rpx;border-radius: 50%;}}.content_box {margin: 20rpx;color: #5a5a5a;background-color: #e5e5e5;padding: 20rpx;border-radius: 8rpx;.post {}.content {text-align: justify;font-size: 30rpx;max-width: 460rpx;white-space: normal;word-wrap: break-word;.post_request {// text-indent: 2em;color: #996699;display: flex;flex-direction: column;.active:active {width: 100%;background-color: #FFFFFF;opacity: 0.6;}}}}}.right_box {display: flex;justify-content: flex-end;}.right_box>.content_box {background-color: #1b1263;color: #FFFFFF;}}.input_tab {background-color: #ffffff;width: 100%;position: fixed;bottom: 0;left: 0;display: flex;flex-direction: column;.statement {margin: 0 auto;font-size: 20rpx;color: #838383;text {color: #1b1263;text-decoration: underline;}}.input_com {display: flex;justify-content: space-between;padding: 20rpx;margin: 20rpx;.left {width: 500rpx;max-width: 500rpx;border: 2rpx solid #e3e3e3;display: flex;align-items: center;image {width: 20rpx;height: 20rpx;margin: 0 20rpx;}input {width: 100%;font-size: 24rpx;}}.send_btn {padding: 20rpx 40rpx;color: #FFFFFF;border-radius: 8rpx;background-color: #1b1263;}}}
</style>
2.2 实现效果

3. 示例说明
3.1 单轮对话(仅 user 角色)
如果不需要设置系统指令,可以只传递 user 角色的消息:
messages: [{role: "user",content: "我最近三天持续发烧38.5度,伴有咳嗽",},
];
3.2 多轮对话(包含 system 和 user 角色)
如果需要设置系统指令,可以包含 system 角色:
messages: [{role: "system",content: "你是一名专业的全科医生,请根据患者描述进行问诊。",},{role: "user",content: "我最近三天持续发烧38.5度,伴有咳嗽",},
];
3.3 多轮对话(包含历史记录)
如果需要支持多轮对话,可以将历史记录添加到 messages 中:
messages: [{role: "system",content: "你是一名专业的全科医生,请根据患者描述进行问诊。",},{role: "user",content: "我最近三天持续发烧38.5度,伴有咳嗽",},{role: "assistant",content: "请问您是否有其他症状,如喉咙痛或头痛?",},{role: "user",content: "还有喉咙痛,但没有头痛。",},
];
4. 代码示例
4.1 单轮对话
methods: {async getDiagnosis() {const response = await uni.request({url: "https://api.deepseek.com/v1/chat/completions",method: "POST",header: {"Content-Type": "application/json",Authorization: "Bearer your_api_key_here",},data: {model: "medical-model-1.0",messages: [{role: "user",content: this.userInput,},],},});if (response.statusCode === 200) {this.diagnosisResponse = response.data.choices[0].message.content;}},
},
4.2 多轮对话
data() {return {conversationHistory: [], // 对话历史};
},
methods: {async getDiagnosis() {// 添加用户输入到对话历史this.conversationHistory.push({role: "user",content: this.userInput,});const response = await uni.request({url: "https://api.deepseek.com/v1/chat/completions",method: "POST",header: {"Content-Type": "application/json",Authorization: "Bearer your_api_key_here",},data: {model: "medical-model-1.0",messages: this.conversationHistory,},});if (response.statusCode === 200) {const assistantReply = response.data.choices[0].message.content;// 添加助手回复到对话历史this.conversationHistory.push({role: "assistant",content: assistantReply,});this.diagnosisResponse = assistantReply;}},
},
5. 注意事项
-
system角色的作用-
用于设置对话的背景或指令。
-
如果不需要,可以省略。
-
-
user角色的必要性-
必须包含
user角色的消息,否则 API 无法生成回复。
-
-
对话历史长度
-
每次请求都会消耗 token,因此需要控制对话历史的长度。
-
可以通过截断历史记录或设置最大 token 数来优化。
-
-
多轮对话的实现
-
将每次的用户输入和助手回复添加到
messages中。 -
确保对话历史的顺序正确。
-
6. 总结
-
必须包含
user角色,用于传递用户输入。 -
system角色可选,用于设置对话背景。 -
多轮对话需要将历史记录添加到
messages中。
相关文章:
接入 deepseek 实现AI智能问诊
1. 准备工作 注册 DeepSeek 账号 前往 DeepSeek 官网 注册账号并获取 API Key。 创建 UniApp 项目 使用 HBuilderX 创建一个新的 UniApp 项目(选择 Vue3 或 Vue2 模板)。 安装依赖 如果需要在 UniApp 中使用 HTTP 请求,推荐使用 uni.requ…...
用AVFrame + AVPacket 完成accede编码和直接用ffmpeg命令行实现acc编码的对比
在使用 FFmpeg 进行 AAC 音频编码时,可以选择两种方式:通过编程接口(如 AVFrame 和 AVPacket)实现 AAC 编码,或者直接使用 FFmpeg 命令行工具。这两种方式各有特点,适用于不同的场景。以下是对两种方法的详细分析,包括它们的区别、优缺点以及适用场景。 一、通过 AVFram…...
计算机网络笔记再战——理解几个经典的协议6——TCP与UDP
目录 先说端口号 TCP 使用序号保证顺序性和应答来保证有效性 超时重传机制 TCP窗口机制 UDP 路由协议 协议分类:IGP和EGP 几个经典的路由算法 RIP OSPF 链路状态数据库(LSDB) LSA(Link State Advertisement࿰…...
【AI】在Ubuntu中使用docker对DeepSeek的部署与使用
这篇文章前言是我基于部署好的deepseek-r1:8b模型跑出来的 关于部署DeepSeek的前言与介绍 在当今快速发展的技术环境中,有效地利用机器学习工具来解决问题变得越来越重要。今天,我将引入一个名为DeepSeek 的工具,它作为一种强大的搜索引擎&a…...
openssl使用
openssl使用 提取密钥对 数字证书pfx包含公钥和私钥,而cer证书只包含公钥。提取需输入证书保护密码 openssl pkcs12 -in xxx.pfx -nocerts -nodes -out pare.key提取私钥 openssl rsa -in pare.key -out pri.key提取公钥 openssl rsa -in pare.key -pubout -ou…...
《语义捕捉全解析:从“我爱自然语言处理”到嵌入向量的全过程》
首先讲在前面,介绍一些背景 RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索与语言生成模型的技术,通过从外部知识库中检索相关信息,并将其作为提示输入给大型语言模型ÿ…...
HIVE如何注册UDF函数
如果注册UDF函数的时候报了上面的错误,说明hdfs上传的路径不正确, 一定要用下面的命令 hadoop fs -put /tmp/hive/111.jar /user/hive/warehouse 一定要上传到上面路径,这样在创建函数时,引用下面的地址就可以创建成功...
VsCode创建VUE项目
1. 首先安装Node.js和npm 通过网盘分享的文件:vsCode和Node(本人电脑Win11安装) 链接: https://pan.baidu.com/s/151gBWTFZh9qIDS9XWMJVUA 提取码: 1234 它们是运行和构建Vue.js应用程序所必需的。 1.1 Node安装,点击下一步即可 …...
x64、aarch64、arm与RISC-V64:详解四种处理器架构
x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…...
如何使用iframe来渲染ThingsBoard仪表盘
1、概述 当我们在使用ThingsBoard的时候,有时候需要再自己的前端项目中展示大屏,thingsboard的仪表盘是可以来做大屏的,虽然界面达不到非常的美观,但是对比之前的版本,现在的版本仪表盘做了很多的优化了。可以实现将thingsboard的仪表板嵌入到自己的vue界面中作为大屏显示…...
退格法记单词(类似甘特图)
退格法记单词,根据记忆次数或熟练程度退格,以示区分,该方法用于短时高频大量记单词: explosion爆炸,激增 mosquito蚊子granary粮仓,谷仓 offhand漫不经心的 transient短暂的slob懒惰而邋遢的…...
计算 MySQL 表行的成本是多少?
当计算表中的所有行时,将使用什么索引?好吧,MySQL文档文档对此提供了一个直接的答案,引用: InnoDB 通过遍历最小的可用二级索引来处理 SELECT COUNT(*) 语句除非索引或优化器提示指示优化器使用…...
Pygame介绍与游戏开发
提供pygame功能介绍的文档:Pygame Front Page — pygame v2.6.0 documentation 基础语法和实现逻辑 与CLI不同,pygame提供了图形化使用界面GUI(graphical user interface)基于图像的界面可以创建一个有图像和颜色的窗口 要让py…...
webpack配置方式
1. 基本配置文件 (webpack.config.js)(导出一个对象) 最常见的方式是通过 webpack.config.js 文件来配置 Webpack,导出一个对象。你可以在这个文件中导出一个配置对象,指定入口、输出、加载器、插件等。 // webpack.config.js m…...
10. k8s二进制集群之Kube Scheduler部署
在开始之前需要准备什么?创建kube-scheduler证书请求文件【即证书的生成⓵】根据上面证书配置文件生成kube-scheduler证书【即证书的生成⓶】创建与关联kube-scheduler配置文件(为后面生成系统服务做准备)创建kube-scheduler服务配置文件【准备系统服务⓵】创建kube-schedul…...
java实现8583报文解析技术详解
文章目录 概要整体架构流程技术名词解释技术细节小结概要 ISO 8583协议是金融交易系统中广泛使用的通信协议,用于规范报文的格式和数据交换。解析8583报文是实现金融交易系统的关键技术之一。本文将详细介绍8583报文解析的核心实现,重点关注解析算法和关键代码逻辑。 8583报…...
k8s服务发现有哪些方式?
在 Kubernetes 中,服务发现是指如何让应用程序在集群内互相找到并通信。Kubernetes 提供了多种服务发现的方式,适应不同的使用场景。以下是 Kubernetes 中常见的服务发现方式: 1. 环境变量(Environment Variables) 概…...
【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程
超详细的 SQL Server Management Studio (SSMS) 下载、安装、连接数据库配置及卸载教程 SQL Server Management Studio (SSMS) 是微软提供的图形化管理工具,主要用于连接、管理和开发 SQL Server 数据库。以下是详细的 SSMS 下载、安装、连接数据库以及卸载的完整教…...
[ESP32:Vscode+PlatformIO]添加第三方库 开源库 与Arduino导入第三方库的区别
前言 PlatformIO与Arduino在添加第三方库方面的原理存在显著差异 在PlatformIO中,第三方库的使用是基于项目(工程)的。具体而言,只有当你为一个特定的项目添加了某个第三方库后,该项目才能使用该库。这些第三方库的文…...
音频文件格式——AAC、OGG和FLAC
3.AAC文件格式 3.1 封装格式解析 高级音频编码 (Advanced Audio Coding) 是一种用于有损数字音频压缩的音频编码标准。它被设计为 MP3 格式的继承者,在相同比特率下通常可以获得比 MP3 更高的音质。AAC有两种封装格式: ADIF&am…...
Bun 六天完成从 Zig 到 Rust 重写,AI 重写软件大趋势下速度与质量难题待解
Zig 版 Bun 被判“死刑”2026 年 5 月 11 日,Bun 创始人 Jarred Sumner 在 X 上发推文称,“Bun v1.3.14 将于明日发布。如果我们合并 Rust 重写版本,这将是 Zig 的最后一个版本”,宣告了 Zig 版 Bun 的终结。四年前,Bu…...
3分钟学会在Windows电脑安装安卓应用:APK Installer完全指南
3分钟学会在Windows电脑安装安卓应用:APK Installer完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows电脑无法直接运行安卓应用而烦恼…...
MCP Jenkins Intelligence:基于AI的Jenkins智能运维与效率提升实践
1. 项目概述:当Jenkins遇上AI,DevOps的“副驾驶”来了如果你和我一样,每天都要和Jenkins打交道,盯着那些流水线看构建状态、查失败日志、分析性能瓶颈,那你肯定也幻想过:要是能像聊天一样问它问题就好了。比…...
第67篇:Vibe Coding时代:FastAPI + LangGraph 审批台实战,解决高风险 Agent 操作人工确认体验差的问题
第67篇:Vibe Coding时代:FastAPI + LangGraph 审批台实战,解决高风险 Agent 操作人工确认体验差的问题 一、问题场景:Agent 需要人工确认,但用户不知道该确认什么 前面我们已经做过人工确认: approval = APPROVED / REJECTED但真实平台中,审批不能只是一个字符串。 当…...
专利撰写难、公开不规范,patent-disclosure-skill:一站式专利公开技巧工具,搞定专利文书规范撰写难题
在知识产权越来越受重视的当下,不管是科研人员、技术开发者,还是企业知识产权相关从业者,在专利相关工作中,总会遇到各种各样的棘手问题。 很多人深耕技术研发,好不容易做出创新成果,可一到专利公开、文书梳…...
四川全行业 APP 开发服务商参考
随着四川各行业数字化进程加快,APP 开发覆盖政务、电商、教育、生活服务、企业管理等多元场景,市场服务商在行业适配、技术能力、服务保障上各有侧重。本文结合多行业落地案例、技术全面性、交付稳定性、运维支持能力,整理全行业适配的 APP 开…...
2026年DLL修复工具深度测评:免费解决DLL缺失的可行方案
电脑运行办公软件、打开大型游戏时,经常弹出XXX.dll 缺失、无法找到入口点、无法加载动态链接库等报错窗口?相信绝大多数 Windows 用户都遇到过这种糟心情况:好好的程序突然打不开,游戏双击没任何反应,重装软件不起作用…...
ARM调试器AXD核心功能与实战技巧详解
1. ARM调试器AXD核心功能解析作为一名嵌入式开发工程师,我使用AXD调试器已有八年时间。这款ARM官方调试工具在处理器底层调试方面表现出色,尤其擅长处理各种复杂的内存访问问题和执行流程异常。AXD最突出的特点是其精细化的执行控制和全面的调试信息展示…...
NoFences完整指南:免费开源工具彻底解决Windows桌面杂乱问题
NoFences完整指南:免费开源工具彻底解决Windows桌面杂乱问题 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为杂乱的Windows桌面图标而烦恼吗?No…...
SwiftUI原生集成ChatGPT API:从架构设计到流式响应实战
1. 项目概述:一个原生的Swift版ChatGPT客户端最近在折腾iOS和macOS上的AI应用开发,发现了一个挺有意思的开源项目:alfianlosari/ChatGPTSwift。简单来说,这是一个用纯SwiftUI构建的、直接调用OpenAI官方API的ChatGPT客户端。它不是…...
