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

asp.net 4.5在医院自助系统中使用DeepSeek帮助医生分析患者报告

环境:

  1. asp.net 4.5
  2. Visual Studio 2015
  3. 本地已经部署deepseek-r1:1.5b

涉及技术

  1. ASP.NET MVC框架用于构建Web应用程序。
  2. 使用HttpWebRequest和HttpWebResponse进行HTTP请求和响应处理。
  3. JSON序列化和反序列化用于构造和解析数据。
  4. SSE(服务器发送事件)用于向客户端推送实时更新。

完成显示效果如下 (患者信息是AI生成的,非真实信息)

在这里插入图片描述

1、在前端界面(cshtml)使用SSE技术向后端传送患者报告的路径。

<!-- 根据系统环境获取PDF文件路径 -->
@{string pdffilepath = datas.ReportFile;}
<div class="deepseek-title">      <!-- DeepSeek输入框 --><h4 class="title3">DeepSeek分析</h4>
</div>
<div class="deepseek-textarea"><textarea class="text-box" id="outputTextarea" readonly></textarea> <!-- 第二行文本框 --><button class="text-button" id="reparseButton">重新解析报告</button> <!-- 新增按钮 -->
</div>
<script>var textarea = document.getElementById('outputTextarea');var reparseButton = document.getElementById('reparseButton');var source;// 初始化SSE连接的函数function startEventSource() {// 如果已有连接,先关闭if (source) {source.close();}// 创建新的SSE连接source = new EventSource('@Url.Action("StreamAI", "DeepSeek", new { pdfPath = pdffilepath })');// 接收数据并更新textareasource.onmessage = function(event) {if (event.data.includes("换1行")) {textarea.value += event.data.replace("换1行", "\n"); // 替换为一个换行符} else if (event.data.includes("换2行")) {textarea.value += event.data.replace("换2行", "\n\n"); // 替换为两个换行符} else {textarea.value += event.data; // 无特殊标记,按原数据添加}// 自动滚动到最新内容//textarea.scrollTop = textarea.scrollHeight; // 恢复滚动功能};// 错误处理source.onerror = function() {console.log('SSE 连接错误');source.close();};}// 页面加载时初次启动SSEstartEventSource();// 按钮点击事件:清空文本框并重新解析reparseButton.addEventListener('click', function() {textarea.value = ''; // 清空文本框startEventSource(); // 重新建立SSE连接});
</script>
<style>.title3{margin: 30px 20px 0px 20px;margin-top:10px;}.text-box {margin: 10px 20px;width: 540px;height: 260px;font-size: 15px;outline:0px;border: 2px solid rgba(228,228,228,1);   border-radius: 4px;line-height: 25px; /* 设置行距像素 */}.text-button{margin: 20px 20px 0px 20px;width: 140px;height: 30px;background-color: #FFC107;font-size: 18px;color: white;font-family:SourceHanSansCN-Regular;border: 0px;border-radius: 4px;outline: 0;cursor: pointer; /* 到达按钮旁边时显示手 */}
</style>

2、后端接收到传递过来的患者报告路径,进行解析,然后发送给DeepSeek分析,DeepSeek分析的内容实时使用Response.Write()推送至前端。

DeepSeekController.cs

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Web.Mvc;
using Newtonsoft.Json;namespace *********
{public class DeepSeekController : Controller{public ActionResult StreamAI(string pdfPath){// 提取 PDF 文本string pdfText = DeepSeekHelper.ExtractTextFromPdf(pdfPath);if (string.IsNullOrEmpty(pdfText)){return Content("PDF文件不存在或无法读取", "text/event-stream");}// 设置 SSE 响应头Response.ContentType = "text/event-stream";Response.Headers.Add("Cache-Control", "no-cache");Response.Headers.Add("Connection", "keep-alive");// 构造 AI 请求数据var requestData = new{model = "deepseek-r1:1.5b",prompt = $"请以专业医生的身份,对以下患者报告进行详细分析,并提供医学建议:{pdfText}请按照以下结构输出:影像/检查结果分析:详细解读报告中的影像表现或检查结果,结合医学知识说明异常情况及其可能的临床意义。诊断建议:根据分析结果,提出初步诊断方向(如疾病名称或疑似病因)。请确保内容准确、专业,并符合临床实践规范",stream = true};string jsonContent = JsonConvert.SerializeObject(requestData);byte[] byteArray = Encoding.UTF8.GetBytes(jsonContent);HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:11434/api/generate");request.Method = "POST";request.ContentType = "application/json";request.ContentLength = byteArray.Length;try{using (Stream dataStream = request.GetRequestStream()){dataStream.Write(byteArray, 0, byteArray.Length);}//string linestrs = "";try{using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())using (Stream responseStream = response.GetResponseStream())using (StreamReader reader = new StreamReader(responseStream)){string line;while ((line = reader.ReadLine()) != null){if (!string.IsNullOrEmpty(line)){dynamic result = JsonConvert.DeserializeObject(line);if (result != null && result.response != null){string responseText = result.response.ToString();string processedText = DeepSeekHelper.RegexLine(responseText);if (processedText.Contains("\n\n")){processedText = processedText.Replace("\n\n", "换2行");}else if (processedText.Contains("\n")){processedText = processedText.Replace("\n\n", "换1行");}//linestrs += processedText;//推送数据到客户端Response.Write($"data: {processedText}\n\n");Response.Flush();}}}}}catch (WebException ex){Response.Write($"data: 错误:{ex.Message}\n\n");Response.Flush();}}catch{try{// 返回自定义错误信息Response.Write($"data: 错误:请配置本地DeepSeek,或者启动相关服务。\n\n");Response.Flush();}catch{}}return new EmptyResult();}}
}

DeepSeekHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
using System.Text;
using System.Net;
using System.Text.RegularExpressions;
using System.Threading;
using Newtonsoft.Json;namespace *******
{public static class DeepSeekHelper{/// <summary>/// 读取PDF文件获取PDF中的文字/// </summary>/// <param name="pdfPath"></param>/// <returns></returns>public static string ExtractTextFromPdf(string pdfPath){string pdfPath2 = pdfPath.Replace("_1.png", ".pdf");if (!File.Exists(pdfPath2)){Console.WriteLine("PDF文件不存在!");return "";}PdfReader reader = new PdfReader(pdfPath2); // 直接创建PdfReader对象string strs = "";for (int page = 1; page <= reader.NumberOfPages; page++){ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();string currentText = PdfTextExtractor.GetTextFromPage(reader, page, strategy);strs += currentText;}reader.Close(); // 手动关闭PdfReader对象return strs;}/// <summary>/// 处理DeepSeek返回的字符串/// </summary>/// <param name="responseText"></param>/// <returns></returns>public static string RegexLine(string responseText){// 使用正则表达式去掉 <think> 和 </think> 标签responseText = Regex.Replace(responseText, @"<\/?think>", "\n");// 去掉开头的换行符responseText = responseText.TrimStart('\r', '\n');return responseText;}}
}

总结

  1. 前端技术:HTML、JavaScript(使用EventSource实现SSE)。
  2. 后端技术:C# ASP.NET MVC、HTTP请求/响应处理、JSON处理。
  3. 通信技术:SSE用于服务器向客户端推送实时数据。
  4. 功能:实现了一个可以解析PDF文件内容,通过AI服务进行医学报告分析,并将结果实时推送给前端显示的应用程序。

相关文章:

asp.net 4.5在医院自助系统中使用DeepSeek帮助医生分析患者报告

环境&#xff1a; asp.net 4.5Visual Studio 2015本地已经部署deepseek-r1:1.5b 涉及技术 ASP.NET MVC框架用于构建Web应用程序。使用HttpWebRequest和HttpWebResponse进行HTTP请求和响应处理。JSON序列化和反序列化用于构造和解析数据。SSE&#xff08;服务器发送事件&#xf…...

HeyGem.ai 全离线数字人生成引擎加入 GitCode:开启本地化 AIGC 创作新时代

在人工智能技术飞速演进的时代&#xff0c;数据隐私与创作自由正成为全球开发者关注的焦点。硅基智能旗下开源项目 HeyGem.ai 近日正式加入 GitCode&#xff0c;以全球首个全离线数字人生成引擎的颠覆性技术&#xff0c;重新定义人工智能生成内容&#xff08;AIGC&#xff09;的…...

密码协议与网络安全——引言

三个基本概念 计算机安全&#xff08;Computer Security&#xff09;&#xff1a;对于一个自动化的信息系统&#xff0c;采取保护措施确保信息系统资源&#xff08;包括硬件、软件、固件、信息、数据和通信&#xff09;的保密性、完整性和可用性。 网络安全&#xff08;Netwo…...

springboot实现调用百度ocr实现身份识别+二要素校验

一、技术选型 OCR服务&#xff1a;推荐使用百度AI 二、实现 1.注册一个服务 百度智能云控制台https://console.bce.baidu.com/ai-engine/ocr/overview/index?_1742309417611 填写完之后可以获取到app-id、apiKey、SecretKey这三个后面文件配置会用到 2、导入依赖 <!-- …...

MATLAB 控制系统设计与仿真 - 28

MATLAB状态空间控制系统分析 - 极点配置 就受控系统的控制律的设计而言,由状态反馈极点配置和输出反馈极点配置。 状态反馈极点配置问题就是:通过状态反馈矩阵K的选取,使闭环系统的极点,即(A-BK)的特征值恰好处于所希望的一组给定闭环极点的位置。 另外,线性定常系统可…...

JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南&#xff0c;你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像 解压出.img文件并记下它在计算机上的…...

加速还是安全?CDN与群联云防护的本质差异与适用场景

一、核心功能定位对比 维度传统CDN群联云防护核心目标内容加速&#xff08;降低延迟、提升访问速度&#xff09;安全防护&#xff08;抵御DDoS/CC攻击、隐藏源站&#xff09;技术重心缓存优化、边缘节点分发流量清洗、AI行为分析、加密隧道主要能力静态资源缓存、负载均衡攻击…...

简单理解机器学习中top_k、top_p、temperature三个参数的作用

在机器学习中&#xff0c;top_k、top_p 和 temperature 是用于控制生成模型&#xff08;如语言模型&#xff09;输出质量的参数&#xff0c;尤其在文本生成任务中常见。然而&#xff0c;网上文章很多很全&#xff0c;但大多晦涩难懂&#xff0c;今天我们来用最简单的语言谈谈它…...

Java面试黄金宝典6

1. 什么是 CAS 原理&#xff1a; CAS &#xff08;Compare-And-Swap&#xff09;是一种硬件级别的原子操作指令&#xff0c;在 Java 并发编程中常被用于实现无锁算法。其核心逻辑是&#xff1a;在进行数据更新时&#xff0c;会先将内存位置 V 的值与预期原值 A 进行比较&#x…...

【深度学习新浪潮】AI ISP技术与手机厂商演进历史

本文是关于AI ISP(人工智能图像信号处理器)的技术解析、与传统ISP(图像信号处理器)的区别、近三年研究进展,以及各大手机厂商在该领域演进历史的详细报告。本报告综合多个权威来源的信息,力求全面、深入地呈现相关技术发展脉络与行业动态。 第一部分:AI ISP的定义及与传…...

C语言基础08

内容提要 数组 排序算法&#xff1a;冒泡排序 二维数组 字符数组 数组 冒泡排序 排序思想&#xff08;向前冒泡&#xff09; 一次只排好一个数&#xff0c;针对n个数&#xff0c;最差情况需要n-1次就可以排好 每次排序假定第一个元素是最大或者最小&#xff0c;用第一个…...

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法 已经弃用的版本&#xff08;Version 10.3-2021.10&#xff09;&#xff1a;gcc-arm-none-eabi&#xff1a;https://developer.arm.com/downloads/-/gnu-rmArm GNU Toolchain当前版本&#xff1a;https://developer.a…...

1.angular介绍

初級使用视频添加链接描述 angular工具 angular.module(‘名’, [依赖模块]) 模块 angular.bind(*) : 修改this指向 angualr.copy() // a angular.copy(a, b) —a完全覆盖了b,c就是a angular.extend(a, b) a里面集成了b属性 angular.isArray angular.isDate angular.isDefin…...

java项目40分钟后token失效问题排查(40分钟后刷新页面白屏)

项目40分钟后token失效问题排查&#xff08;40分钟后刷新页面白屏&#xff09; 经过我 对比失效前token 可以正常访问接口&#xff0c;失效后的token 不能访问系统&#xff0c; 得出结论&#xff0c;我系统对接第三方 sso 系统&#xff0c;token 失效时间 在他们那边配置&…...

音频进阶学习二十——DFT离散傅里叶变换

文章目录 前言一、FT、FS、DTFT、DFS1.FT和FS2.DTFT和DFS 二、DFT定义1.对于DFT的理解1&#xff09;DTFT和DFT2&#xff09;DFS和DFT3&#xff09;有限长序列和周期序列 2.圆周卷积1&#xff09;线性卷积2&#xff09;圆周卷积 三、频率采样和插值恢复1.频率采样的影响2.频率采…...

【Rust】集合的使用——Rust语言基础16

文章目录 1. 前言2. Vector2.1. 构建一个 vector2.2. 获取 vector 中的元素2.3. 遍历 vector2.4. 使用枚举来储存多种类型 3. String3.1. 新建字符串3.2. 更新字符串3.3. 字符串的内部结构3.3.1. 字符串如何访问内部元素&#xff1f;3.3.2. 字节、标量值和字形簇 3.4. 字符串 s…...

centos 7 部署ftp 基于匿名用户

在 CentOS 7 上搭建基于匿名用户的 FTP 服务&#xff0c;可按以下步骤进行&#xff1a; 1. 安装 vsftpd 服务 vsftpd 是一款常用的 FTP 服务器软件&#xff0c;可使用以下命令进行安装&#xff1a; bash sudo yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash …...

Apache SeaTunnel脚本升级及参数调优实战

最近作者针对实时数仓的Apache SeaTunnel同步链路&#xff0c;完成了双引擎架构升级与全链路参数深度调优&#xff0c;希望本文能够给大家有所启发&#xff0c;欢迎批评指正&#xff01; Apache SeaTunnel 版本 &#xff1a;2.3.9 Doris版本&#xff1a;2.0.6 MySQL JDBC Conne…...

算法 | 优化算法比较

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 优化算法 ‌一、主流优化算法分类‌1‌、传统梯度类算法‌2‌、启发式算…...

破局 MySQL 死锁:深入理解锁机制与高效解决方案

死锁的原理 1. 什么是死锁&#xff1f; 当 多个事务 在并发执行时&#xff0c;每个事务都 持有其他事务需要的锁&#xff0c;同时又在 等待对方释放锁&#xff0c;导致所有事务都无法继续执行的状态&#xff0c;称为 死锁&#xff08;Deadlock&#xff09;。 2. 死锁的四个必要…...

学习记录-cssjs-综合复习案例(二)

目录 商城复合案例功能实现&#xff08;二&#xff09;商城首页实现步骤1.准备工作2. 搭建html框架3. 编写js代码 完整实例代码完整项目心得 商城复合案例功能实现&#xff08;二&#xff09; 使用html&#xff0c;css&#xff0c;基于bootstrap框架以及媒体查询搭建响应式布局…...

使用 JDBC 插入数据并获取自动生成的主键(如 MySQL 的 AUTO_INCREMENT 或 Oracle 的序列) 的完整示例代码,包含详细注释

以下是使用 JDBC 插入数据并获取自动生成的主键&#xff08;如 MySQL 的 AUTO_INCREMENT 或 Oracle 的序列&#xff09; 的完整示例代码&#xff0c;包含详细注释&#xff1a; import java.sql.*;public class GeneratedKeysExample {// 数据库连接参数private static final St…...

图解AUTOSAR_CP_EEPROM_Abstraction

AUTOSAR EEPROM抽象模块详细说明 基于AUTOSAR标准的EEPROM抽象层技术解析 目录 1. 概述 1.1 核心功能1.2 模块地位2. 架构概览 2.1 架构层次2.2 模块交互3. 配置结构 3.1 主要配置容器3.2 关键配置参数4. 状态管理 4.1 基本状态4.2 状态转换5. 接口设计 5.1 主要接口分类5.2 接…...

汇川EASY系列之以太网通讯(MODBUS_TCP做从站)

汇川easy系列PLC做MODBUS_TCP从站,不需要任何操作,但是有一些需要知道的东西。具体如下: 1、汇川easy系列PLC做MODBUS_TCP从站,,ModbusTCP服务器默认开启,无需设置通信协议(即不需要配置),端口号为“502”。ModbusTCP从站最多支持31个ModbusTCP客户端(ModbusTCP主站…...

QT 图表(拆线图,栏状图,饼状图 ,动态图表)

效果 折线图 // 创建折线数据系列// 创建折线系列QLineSeries *series new QLineSeries;// series->append(0, 6);// series->append(2, 4);// series->append(3, 8);// 创建图表并添加系列QChart *chart new QChart;chart->addSeries(series);chart->setTit…...

基于vue框架的在线影院系统a079l(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,电影,电影类别,电影库 开题报告内容 基于Vue框架的在线影院系统开题报告 一、研究背景与意义 随着文化娱乐产业的蓬勃发展&#xff0c;电影院作为人们休闲消遣的重要场所&#xff0c;其管理效率和服务质量直接影响着顾客的观影体…...

vscode/cursor中python运行路径设置 模块导入问题

vscode/cursor中python运行路径设置 ## 文件路径设置 问题描述 pycharm的项目用cursor运行&#xff0c;出现目录找不到 后来利用 os.getcwd()&#xff0c;经过打印调试发现是IDE的本身配置问题 pycharm中&#xff0c;os.getcwd()默认打开当前脚本所在目录 vscode/cursor中…...

OpenCV图像拼接(1)概述

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 此图说明了在Stitcher类中实现的拼接模块流程。使用该类&#xff0c;可以配置/移除某些步骤&#xff0c;即根据特定需求调整拼接流程。流程中的所…...

NFS 安装与测试

NFS 安装与测试 服务器 # NFS 共享目录 mkdir -p ${HOME}/Share/nfs && sudo chown -R nobody:nogroup ${HOME}/Share/nfs# 安装 NFS Server sudo apt install nfs-kernel-server# 配置 NFS 目录 sudo cp -arf /etc/exports /etc/exports.bak sudo tee -a /etc/exports…...

深度学习与传统算法在人脸识别领域的演进:从Eigenfaces到ArcFace

一、传统人脸识别方法的发展与局限 1.1 Eigenfaces&#xff1a;主成分分析的经典实践 算法原理 Eigenfaces是基于主成分分析&#xff08;PCA&#xff09;的里程碑式方法。其核心思想是将人脸图像视为高维向量&#xff0c;通过协方差矩阵计算特征向量&#xff08;即特征脸&…...