type
status
date
slug
summary
tags
category
icon
password

感想

本次实习的主要工作围绕联影公司的各类文本解析任务展开。
公司部署了多种开源大模型,在公司内部提供网页版服务和API调用服务。在这里,大模型除了满足日常使用需求外,还被用于体系文档审核,能高效处理工业生产过程中产生的各种审核文档。通过大模型接近人类的理解能力,系统能够灵活应对文档中的各种非标准化情况,像人一样理解文档想要表达的本质含义。

对事后补救类型的工作必要性的反思

在参与这些工作的过程中,我对其必要性产生了深入思考。诚然,目前的硬编码方式确实无法很好地识别和处理非标准化文档,使用大模型能够有效解决这个问题。但深究其根源,许多文档的不规范本质上是由于数据收集方式的落后导致的。如果能够在源头上改进——比如提供标准化模板、使用专业的问卷收集软件——其实都能从根本上解决这些问题。
这让我联想到了数据处理的"事前规划"与"事后补救"现象。我们使用大模型处理的正是后处理过程,这类似于学术研究中的两种模式:一种是提前规划好实验设计,实验完全为特定目的服务,整个流程非常顺畅;另一种是基于已完成的实验去撰写论文,需要在既有数据中挖掘价值,这就相对困难。这种"事后补救"现象有其存在的必要性——善后工作本身也需要人力投入,通过自动化能够显著提升效率。从公司运营的角度看,这种效率提升带来的价值是实实在在的。

大模型在医学领域的应用思考

这次实习让我对大模型在医学领域的应用有了更深层的思考。在本次实习中,大模型的应用主要体现在一般工业场景。而在之前参与的一些学术会议中,我了解到大模型在智能问诊、病历管理等领域已有诸多应用。那么,对于更深层次的疾病诊断,大模型的作用又体现在哪里呢?
"事后补救"现象实际上揭示了一个也许更深层的问题:信息的原始形态与可计算形态之间的鸿沟。在联影的文档处理场景中,这个鸿沟表现为非结构化文本与结构化数据之间的转换;而在脑机接口领域,这个鸿沟则表现为神经信号与意图识别之间的映射。 脑机接口面临的挑战更为根本——我们无法像改进文档模板那样去"规范化"大脑的信号输出。每个人的神经活动模式都是独特的,这种个体差异性不是缺陷,而是生物系统的本质特征。这就要求我们的系统必须具备适应性理解能力,而不仅仅是模式匹配能力。
那么能否通过大模型来增强脑电信号识别的鲁棒性,使得不同人的信号都能够很好的识别呢?目前是比较困难的,毕竟二者相比,文档处理是人已经先验理解的,而脑电中的很多我们还不能直接读懂,Prompt自然也无从谈起…… 比较可行的思路是——将大模型的上下文理解能力与脑机接口的实时信号处理结合。当脑机接口捕获到模糊的神经信号时,大模型可以基于上下文推断最可能的意图,就像它现在处理不规范文档一样。这种也称的上是一种多模态融合。

对自身研究项目的新认识

这次实习也让我对自己研究项目的本质有了新的思考。我意识到,自动化评估本质上是一种数字孪生技术,个性化评估的核心就是将人体进行动态孪生——即在数字空间中构建物理实体的精确模型表示。按照这个思路,当我们想要实现自动化评估时,本质上是基于采集的运动数据构建行为模型,然后判断运动能力在该行为模型中的表现结果。
因此,如果能够基于采集的数据,完成对患者行为模型(数学方程)的精确构建,将会更加接近问题的本质。我们目前使用的机器学习方法正是在尝试线性地模拟这个过程,而深度学习则是尝试通过非线性方式构建更复杂的模型,以更好地捕捉人体运动的复杂性。
而运动评估是对人体物理行为的数字孪生,BCI则是在尝试构建认知过程的数字孪生。这涉及三个递进的层次:
  1. 信号层孪生:将神经电信号精确复制到数字空间(前端采样)
  1. 模式层孪生:识别和重建神经活动的时空模式(分类模型)
  1. 意图层孪生:理解并预测认知意图的形成过程(编码解码能够闭环的程度才算是数字孪生)
这里的关键洞察是:深度学习的非线性建模能力可能更接近大脑的实际工作方式。大脑本身就是一个高度非线性的动态系统,线性方法只能捕捉其局部特征(非线性的案例就比如transformer等架构的注意力机制,某种程度上模拟了大脑的选择性注意过程)

技术技能提升

在技术层面,这次实习让我精进了Docker、PyInstaller、OpenAI API等工具的使用,技术熟练度得到了显著提升。虽然这些看似都是工具层面的进步,但对未来的研究和开发工作都有重要意义。另外,我还学会了构建类MCP(Model Context Protocol)的框架。虽然其本质是API调用和Prompt工程的结合,但这种系统化的思维方式和架构设计能力,相信在未来的工作中会发挥重要作用。
 

实习工作总结

实习背景

在本次实习期间,我参与了一个技术驱动的项目,涉及容器化技术、文本处理、人工智能模型集成以及前端仪表盘开发等多个领域。我的主要职责是优化现有系统功能、开发新模块以及解决技术实现中的实际问题。通过完成多项任务,我深入学习并实践了Docker、Python、LLM(大语言模型)以及前端开发相关技术,提升了解决复杂问题的能力。

主要任务与成果

1. Docker封装(Pandoc Server)

任务描述:负责将pandoc_server的代码及运行环境打包为Docker容器(pandoc_server_container),确保环境一致性和可移植性。
工作内容
  • 配置Dockerfile,定义了Pandoc服务所需的依赖和运行环境。
  • 优化容器构建流程,确保镜像轻量化并符合生产环境要求。
  • 测试容器在不同环境下的兼容性,确保服务稳定运行。成果:成功生成了高效的pandoc_server_container,简化了部署流程,提升了系统的可维护性。

2. 多文本服务Docker集成

任务描述:将5个子功能的文本服务集成到一个统一端口,解决Python环境和相关库版本冲突的问题。
工作内容
  • 分析各子功能依赖的Python版本和库需求,制定版本兼容方案。
  • 采用“clone再删除”的策略精简库依赖,减少镜像体积。
  • 解决部分库因无白名单无法联网安装的问题,通过本地调用文件配置环境。
  • 测试并上传集成后的环境,确保服务稳定运行。成果:成功实现5个子功能在单一端口的集成运行,优化了资源使用并提升了系统的可扩展性。

3. 基于LLM的鲁棒性文档预处理方案

任务描述:搭建类MCP(Model Context Protocol)框架,定义统一的文档处理交互规则,设计并实现3个Agent协同工作。
工作内容
  • Agent1:开发文档读取模块,支持docxpdf格式,提取三部分内容:
    • 默认字段(key
    • 处理函数名称(method
    • 各字段对应的内容(content
  • Agent2:实现methodkey的错误检测与修正功能,确保输出结果的准确性。
  • Agent3(可选):集成LLM,优化content内容,修正开头和结尾的无效部分,提升文档处理的鲁棒性。
  • 定义统一的交互协议,规范Agent间的协作流程。成果:成功搭建了一个高效的文档预处理框架,显著提高了文档处理的自动化程度和准确性,为后续LLM应用奠定了基础。

4. Python Streamlit打包

任务描述:将前端仪表盘的Python代码(基于Streamlit)打包为可执行的exe文件,并实现自动化环境配置。
工作内容
  • 使用PyInstaller将Streamlit应用及其依赖打包为exe文件,确保跨平台运行。
  • 开发自动化脚本(bat文件),实现虚拟环境的自动配置和打包流程。
  • 测试打包后的仪表盘在不同操作系统中的稳定性。成果:生成了可独立运行的仪表盘程序,简化了部署流程,降低了用户的技术门槛。

5. 仪表盘白名单功能添加

任务描述:修改前端仪表盘代码,添加白名单配置状态显示功能。
工作内容
  • 分析现有仪表盘代码,定位白名单相关的逻辑。
  • 修改前端界面,添加白名单启用状态及列表展示功能。
  • 测试功能在不同场景下的显示效果,确保用户体验流畅。成果:仪表盘新增白名单状态显示功能,提升了系统的透明性和用户交互体验。

技能收获

通过本次实习,我在以下方面取得了显著提升:
  • 容器化技术:深入掌握了Docker的配置、优化与部署,理解了容器化技术在生产环境中的应用。
  • Python开发:熟练使用Python进行环境管理、自动化脚本开发和前端应用(Streamlit)开发。
  • 人工智能与LLM:通过搭建类MCP框架,积累了基于大语言模型的文档处理经验,掌握了Agent设计和协作逻辑。
  • 问题解决能力:在解决版本冲突、库依赖和白名单限制等复杂问题时,锻炼了分析和调试能力。
  • 团队协作:通过与团队沟通需求、测试和部署,增强了跨部门协作和项目管理能力。

个人反思

本次实习让我从理论走向实践,深刻体会到技术开发中细节和整体优化的重要性。在面对版本冲突和环境限制等挑战时,我学会了通过系统化的分析和创新方法解决问题。同时,我也意识到持续学习和适应新技术的重要性,未来我将进一步深入学习容器化、AI框架和前端开发技术,以应对更复杂的项目需求。

Task 1 DBL PDF 解析服务开发

1.1 任务概述

开发基于 PaddleOCR v3 的 PDF 解析服务,实现对 DBL 格式 PDF 文件的自动化文本识别与结构化数据提取。

1.2 项目时间规划

项目周期: 2025年7月1日 - 2025年7月15日
工期: 15个工作日

1.3 部署环境配置

  • 服务器地址: 10.6.12.221
  • 部署路径: /mnt/iso/tyj_workspace/OCR
  • 环境管理: 使用 Conda 进行环境管理
  • 重要提醒: 环境变更时必须使用 conda create 命令复制环境后再进行修改,严禁直接修改现有环境

1.4 技术实现要求

核心功能规范

  1. OCR 解析引擎
      • 使用 PaddleOCR v3 作为核心解析引擎
      • 支持 PDF 文件的批量处理
      • 保证文本识别的准确性和完整性
  1. 数据处理流程
      • PDF 文档转换为图像格式
      • 使用 PaddleOCR 进行文本识别
      • 在每个解析文本块后添加标识符 [IMAGE_MASK]
      • 生成对应的 JPG 图像文件并保存至服务器
  1. 图像管理
      • 每个 [IMAGE_MASK] 标签对应一个 JPG 图像文件
      • 图像文件按解析顺序存储,确保序列不乱序
      • 图像存储路径记录在返回数据中

1.5 API 接口规范

返回数据结构

json
{ "img_list": ["图像文件服务器路径列表"], "title_name": ["文件实际名称"] * len(text_content), "text_content": ["完整解析数据列表"] }

字段说明

  • img_list (Array): 存储解析生成的 JPG 图像在服务器上的完整路径,按顺序排列
  • title_name (Array): 原始 PDF 文件名称,数组长度与 text_content 保持一致
  • text_content (Array): 完整的文本解析结果,包含 [IMAGE_MASK] 标识符

1.6 质量保证

  • 服务端开发:实现稳定的 HTTP 服务接口
  • 客户端测试:开发配套的测试客户端,确保服务功能完整性
  • 部署验证:在目标服务器上完成部署并通过全面测试

Task 2 Pandoc 服务 Docker 容器化

2.1 任务概述

将现有的 Pandoc 服务进行 Docker 容器化,提高服务的可移植性和部署效率。

2.2 项目时间规划

项目周期: 2025年7月1日 - 2025年7月8日
工期: 8个工作日

2.3 技术环境配置

基础环境

  • Conda 环境: qw_vl_mil2
  • 服务文件路径: /mnt/iso/cri_dtl_workspace/rag_update/pandoc_server.py
  • Docker 构建目录: /mnt/iso/cri_dtl_workspace/rag_update/pandoc_docker_make

2.4 Docker 化实施要求

容器化步骤

  1. 环境迁移
      • 基于 qw_vl_mil2 Conda 环境创建 Docker 镜像
      • 确保所有依赖包正确安装和配置
  1. 服务配置
      • 将 pandoc_server.py 集成到 Docker 容器中
      • 配置容器内的服务启动脚本
  1. 端口管理
      • 重要提醒: 由于原服务正在运行中,Docker 容器需要使用不同的端口号
      • 需要修改 pandoc_server.py 中的端口配置
      • 建议端口映射策略,避免与现有服务冲突

构建要求

  • 生成轻量化的 Docker 镜像
  • 确保容器启动的稳定性和可靠性
  • 提供完整的容器运行文档和命令示例

2.5 交付成果

  • 完整的 Dockerfile 和相关配置文件
  • Docker 镜像构建脚本
  • 容器部署和运行说明文档
  • 端口配置变更记录

Task 3 子功能的文本服务集成

任务描述:将5个子功能的文本服务集成到一个统一端口(9035),解决Python环境和相关库版本冲突的问题,并优化镜像体积。
工作内容

集成方法

  • 服务封装:将每个子功能封装为独立函数,统一集成到main_server.py中,通过传入函数名称作为参数实现动态调用。
    • 对于除mineru外的服务,直接通过脚本封装为函数。
    • 对于mineru,尝试直接调用容器内脚本,但因缺失magic_pdf库导致报错。最终通过调用服务端口的方式,在已有客户端基础上封装为函数,成功实现集成。
  • 端口统一:将5个子功能的服务统一映射到端口9035,确保接口一致性和调用效率。

问题解决

  • 版本冲突
    • 各子功能使用的Python版本和库版本不一致(例如,paddlex依赖Python 3.8,fitz依赖Python 3.10),导致兼容性问题,如初始化异常、函数调用失败等。
    • 尝试以Pandoc的Python 3.10环境(qw_vl_mli2)为基础兼容其他库,但paddlex在初始化OCR时因字体下载被服务器拦截而失败,且存在numpy等基础库的兼容问题。
    • 尝试使用OCR的Python 3.8环境(OCR2),但fitz(PyMuPDF)因同名库冲突导致文件读取异常。
    • 解决方案:放弃使用fitz,改用PyPDF2和pdf2image组合实现PDF转JPG功能,经测试与原始结果一致。
  • Mineru问题
    • mineru服务因容器内缺少magic_pdf库无法直接调用脚本。
    • 最终通过调用服务端口的方式解决,避免直接依赖容器内脚本。
  • 库精简
    • 采用“clone再删除”策略精简不必要库,减少镜像体积。
    • 通过逐一排查依赖关系,删除未使用的库(如torch),但保留关键依赖(如paddle、nvidia、faiss等)。
    • 解决paddlex初始化OCR时因字体下载被拦截的问题,通过本地配置文件和模型文件上传绕过限制。
    • 精简后环境从12GB减至9GB,主要占用空间的库包括:
      • paddle(4.22GB)
      • nvidia(3.00GB)
      • faiss(109.83MB)
      • opencv_contrib_python.libs(89.34MB)
      • opencv_python.libs(88.97MB)

Docker打包

  • 尝试方案
    • 方案一:导出requirements.txt并重新安装,但paddlex初始化OCR时因字体下载被拦截失败。
    • 方案二:从本地打包环境后上传,包含OCR配置文件、本地模型文件等,确保完整性。
  • 系统依赖
    • 安装必要的系统依赖(如libcuda.so.1以支持GPU、libjpeg-dev、libpng-dev等),避免运行时库缺失问题。
    • 具体依赖包括:
    • 成果
      • 成功生成镜像unified_service:latest(IMAGE ID: cb8e5f4b347d,大小:28.3GB)。
      • 通过命令docker run --gpus all -d -p 9035:9035 --name unified_service_container unified_service启动容器,进程名为unified_service_container,端口号为9035。
      • 镜像经测试稳定运行,支持所有子功能的集成调用。
    成果:成功实现5个子功能在单一端口的集成运行,解决了版本冲突和库依赖问题,优化了镜像体积,提升了系统的可扩展性和稳定性。

    Task 4 基于LLM的鲁棒性文档预处理方案

    任务描述

    开发一个基于大语言模型(LLM)的文档预处理方案,用于从docx和pdf等格式文档中提取目标信息(如测试用例的ID、Title、Description),并以JSON格式输出。目标是通过LLM提升预处理的鲁棒性,解决传统规则依赖方式在字段名称变化、格式变异(如换行、表格转纵向列表)时的失效问题,确保输出高准确率、完整且格式正确,同时避免模型幻觉导致的错误。

    问题分析

    当前examples目录下的脚本(如test_cds_uts_check.py、test_cos_uts_check.py)依赖固定规则(如字段名、格式、表格结构)进行信息提取,存在以下问题:
    • 字段变化:字段名称或格式变化(如换行符、表格转列表)导致提取失败。
    • 部分case遗漏:固定字段提取忽略文中其他case内容。
    • 缺乏鲁棒性:无法适应复杂或非标准格式的文档。
    改进目标
    • 利用LLM自动适应字段名、格式和结构变化。
    • 确保技术文档的高准确率(原文一致、提取完整、格式正确)。
    • 通过对比验证和兜底机制,严防LLM幻觉导致的错误。

    工作内容

    1. Case内容查找优化

    • 问题:现有代码依赖固定字段提取文本范围,易因字段变化导致匹配失败或遗漏部分case。
    • 改进:依据文末需求列表查找并拼接case内容,使用库如python-docx和mammoth+html2text以支持复杂格式解析。

    2. 类MCP框架设计

    • 目标:定义统一的交互规则(Model Context Protocol),规范代码与LLM的信息传递逻辑,确保流程可控。
    • 实现
      • 设计标准化的字段格式和方法调用方式。
      • 预设多场景处理函数(如horizontal_table、vertical_table),应对格式变体(如字段名同义词、表格/清单差异)。
      • 定义默认字段库(key,如ID、Title、Description),作为LLM提取的基准,确保输出一致性。

    3. LLM处理逻辑

    • 字段处理
      • LLM自主判断字段是否需变更,若文档字段与默认key差异,识别语义关联。
      • 变更时强制返回新字段名,并记录映射关系。
    • 方法选择
      • LLM基于文档格式分析,从预设函数中选择匹配方法,禁止生成新方法以避免流程失控。
    • 特殊情形
      • 若文档格式超出预设方法覆盖范围(如混合表格和清单),LLM识别不适用原因,代码端记录警告日志。
      • LLM将原文本转换为可处理格式,替代原始输入后调用对应函数。
    • 错误处理
      • 若LLM返回结果无法执行,采集错误信息并反馈,重新获取LLM建议。
    • 验证与兜底
      • 对比硬编码结果与LLM输出,验证效果。
      • 使用LLM二次验证结果。
      • 不确定内容标记为“需进一步处理”。

    4. Agent搭建

    构建了一个类MCP框架,包含三个Agent,协同完成文档预处理:
    • Agent1:读取docx和pdf文档,返回三部分内容:
      • key:提取字段(如ID、Title、Description),支持多case,识别语义关联并记录映射。
      • method:选择预设处理函数(如horizontal_table)。
      • content:以字典存储各key对应内容。
      • 实现
        • 使用OpenAI API,设计Prompt(包含任务、要求、案例模块),实现格式化输出key、method、content。
        • 修改Prompt以支持错误修正,解决格式化失败或函数无法处理的问题。
        • 整合处理函数,完成key提取与方法选择。
    • Agent2:修正method和key错误。
      • 输入:Agent1的LLM结果(fields)和硬编码结果(result),均为字典格式(如{"ID": "DS936035", "Title": "DS_PSS_EXAM_PA_Modify"})。
      • 处理
        • 按字段分批次输入LLM(字符限制10000,至少包含一个对象),分析差异并修正硬编码结果。
        • 输出processed_result(修正结果)和verification(修改说明)。
        • 解决文件过大问题:更换模型(QwenLong-L1-32B),分批次输入。
      • 诊断:对比前3个对象,检查method错误(如horizontal_table应为vertical_table)或key不全导致的空结果,反馈错误给LLM重新识别。
      • 代码示例
      • Agent3(可选):修正content部分,移除无效内容(如页头、页尾、图片标题)。
        • 输入:Agent1的fields["content"]和硬编码result,分批并行输入(162批次,字符限制10000)。
        • 处理:LLM理解key-content关系,甄别无效内容,保留有意义部分,尤其关注过长内容。
        • 输出:修正后的result_assist3,保存为JSON至./outputs。

      5. 测试与结果

      • 测试案例:处理CDS文档(88002023-CDS-AII-01.docx):
        • Agent1输出:
          • key:["ID", "Title", "Description", "UT", "Rearranged", "PRA", "Status", "Rearranged Reason"]
          • method:horizontal_table
          • content:3个case(ID:DS910907、DS1460318、DS1406362)详细信息。
        • Agent2诊断:发现method错误(应为vertical_table),修正后输出JSON。
        • 最终提取8个ID,保存至./outputs/agent_test/88002023-CDS-AII-01.json。
      • 问题与解决
        • 初始method错误导致部分结果为空,通过Agent2反馈LLM重新识别。
        • 文件内容过大,采用分批次输入和更换模型(Qwen3-235B-2507)解决。
      • 待完成
        • 完善case提取逻辑,确保完整提取所有case。
        • 测试更多文档,验证JSON输出与硬编码结果一致性。
        • 进一步验证流程稳定性(无报错、结果正确)。

      6. To Do List

      理解任务需求及代码仓
      完善case提取逻辑(使用python-docx、mammoth+html2text)
      集成OpenAI API
      设计Prompt,支持格式化输出
      提取LLM输出的key、method、content并替换代码内容
      测试JSON输出与硬编码结果匹配
      在Prompt中增加错误修正机制
      进一步验证流程和结果准确性

      成果

      成功搭建基于LLM的类MCP框架,包含3个Agent协同工作,实现文档预处理的鲁棒性提升。测试中成功提取8个测试用例ID,纠正method错误,输出JSON格式结果,显著提高处理复杂格式文档的能力,减少规则依赖,增强系统适应性。

      技术收获

      • LLM应用:掌握Prompt设计、语义关联识别、错误修正机制。
      • 文档处理:熟练使用python-docx、mammoth等库处理复杂文档。
      • 问题解决:通过分批处理和模型优化解决大文件问题,提升系统稳定性。

      Task 5 Python Streamlit打包

      任务描述

      将基于Streamlit的Python应用(task_dashboard.py)及其运行环境打包为可独立运行的exe文件,确保用户无需配置环境即可运行。同时,开发自动化脚本(bat文件)实现虚拟环境配置和打包流程的自动化。核心挑战在于Streamlit应用的运行方式(通过streamlit run而非直接python执行)以及依赖库的兼容性问题。

      工作内容

      1. 打包尝试与问题分析

      • 目标:将task_dashboard.py及其依赖打包为exe,支持Windows环境运行,隐藏控制台窗口。
      • 难点
        • Streamlit应用通过streamlit run task_dashboard.py运行,常规打包工具(如PyInstaller)无法直接识别Streamlit依赖。
        • Conda虚拟环境与PyInstaller的兼容性问题,导致DLL处理异常。
        • 部分依赖(如streamlit)未被自动检测,需手动配置。

      2. 打包方案探索

      思路一:使用PyInstaller

      • 步骤
          1. 确保task_dashboard.py位于项目根目录,所有依赖已安装。
          1. 执行命令:
              • -onefile:打包为单一exe文件。
              • -windowed:隐藏控制台窗口,适合GUI应用。
          1. 解决Streamlit依赖未被检测问题:
              • 创建hooks/hook-streamlit.py:
                • 修改task_dashboard.spec,在Analysis部分添加:
                  • 使用命令重新打包:
            • 问题
              • 打包失败,报错:
                • 原因:PyInstaller无法正确识别Streamlit的元数据和依赖。

              思路二:使用cx_Freeze

              • 步骤
                • 安装cx_Freeze:
                • 问题:未提供具体测试结果,尝试未成功。

                思路三:使用auto-py-to-exe

                • 步骤
                  • 安装auto-py-to-exe:
                  • 问题:生成exe后运行闪退,未能解决。

                  思路四:使用Nuitka

                  • 步骤
                    • 执行命令:
                      • Nuitka尝试下载编译工具链(如MinGW),但因网络问题失败:
                      • 问题:网络限制导致工具链下载失败,Nuitka编译未完成。

                      3. 最终方案

                      • 核心问题
                        • Streamlit库未被主流打包工具正确识别,需手动添加依赖。
                        • Conda虚拟环境与PyInstaller的DLL处理不兼容。
                      • 解决方案
                        • 切换环境:放弃Conda环境,改用原生Python的venv虚拟环境,确保DLL处理一致。
                        • 手动配置依赖:在task_dashboard.spec中添加Streamlit相关依赖,确保打包完整。
                        • 打包命令:使用PyInstaller重新打包,生成可运行exe。
                      • 成果
                        • 生成的exe文件可直接运行Streamlit仪表盘,无需额外环境配置。
                        • 后续代码更新只需替换task_dashboard.py,无需重新安装依赖。

                      4. 新需求:自动化虚拟环境配置与打包

                      • 目标:通过bat脚本实现虚拟环境创建、依赖安装和exe打包的自动化。
                      • 实现
                        • 开发bat脚本,包含以下步骤:
                            1. 创建venv虚拟环境。
                            1. 安装Streamlit及相关依赖(numpy, pandas, matplotlib, etc.)。
                            1. 执行PyInstaller打包,包含Streamlit依赖配置。
                        • 上传脚本及说明文档至:
                        • 成果:自动化脚本成功实现一键配置与打包,简化开发与部署流程。

                        成果

                        • 成功将Streamlit应用打包为独立exe文件,支持无环境运行。
                        • 开发自动化bat脚本,实现虚拟环境配置和打包流程的自动化,上传至指定仓库并附说明文档。

                        技术收获

                        • 打包技术:掌握PyInstaller配置,学会处理Streamlit等复杂依赖的打包问题。
                        • 环境管理:理解Conda与原生Python环境的差异,熟练使用venv解决兼容性问题。
                        • 自动化脚本:通过bat脚本实现环境配置和打包自动化,提升开发效率。

                        Task 6 Streamlit仪表盘中添加白名单

                        任务描述

                        在现有Streamlit仪表盘中添加白名单管理功能,支持显示和修改当前系统的白名单配置,包括用户白名单和部门白名单。目标是提升系统的透明性和用户交互体验,确保管理员能够直观地查看和动态调整白名单设置。

                        工作内容

                        1. 显示白名单配置

                        • 功能目标:
                          • 在仪表盘界面中展示当前系统中白名单功能的启用状态(开启/关闭)以及对应的白名单列表(用户和部门)。
                        • 实现:
                          • 修改前端代码,添加白名单状态显示区域,展示以下内容:
                            • 用户白名单启用状态(usr_whitelist_enable)及用户列表(usr_whitelist)。
                            • 部门白名单启用状态(dept_whitelist_enable)及部门列表(department_whitelist)。
                          • 使用Streamlit组件(如st.write或st.table)渲染白名单数据,确保界面清晰、直观。
                          • 测试不同场景(白名单启用/禁用、空列表、非空列表)下的显示效果,确保用户体验流畅。

                        2. API设计

                        • 后端API:
                          • 设计并实现两个GET请求接口,用于获取用户和部门白名单配置。
                          • API 1: 获取用户白名单配置
                            • URL: /admin/config/usr
                            • 请求类型: GET
                            • 功能: 返回用户白名单的启用状态和用户列表。
                            • 返回数据格式示例:
                            • API 2: 获取部门白名单配置
                              • URL: /admin/config/dept
                              • 请求类型: GET
                              • 功能: 返回部门白名单的启用状态和部门列表。
                              • 返回数据格式示例:
                            • 实现:
                              • 集成后端API到仪表盘前端,通过HTTP请求(使用requests库)获取白名单数据。
                              • 确保API返回数据格式规范,处理异常情况(如空数据或请求失败)。

                            3. 修改白名单配置

                            • 功能目标:
                              • 支持在仪表盘中动态修改用户白名单和部门白名单(添加/删除用户或部门,切换启用状态)。
                            • 实现:
                              • 在仪表盘界面添加交互组件(如st.text_input、st.multiselect或st.checkbox),允许管理员编辑白名单列表和启用状态。
                              • 开发后端API(未提供具体接口,推测为POST请求)支持更新白名单配置。
                              • 实现前端与后端的联动:
                                • 用户通过界面提交修改,触发POST请求更新后端配置。
                                • 更新后重新调用GET接口刷新界面显示。
                              • 测试修改功能,确保数据一致性(前端显示与后端存储同步)及操作稳定性。

                            成果

                            • 成功在仪表盘中添加白名单管理功能,支持显示用户和部门白名单的启用状态及列表内容。
                            • 实现两个后端API(/admin/config/usr和/admin/config/dept),提供白名单配置的查询功能。
                            • 支持动态修改白名单配置,提升了仪表盘的交互性和系统管理效率。

                            技术收获

                            • 前端开发:
                              • 熟练使用Streamlit组件实现动态界面展示和交互功能。
                              • 掌握前端与后端API的集成流程,优化用户体验。
                            • 后端接口:
                              • 学习API设计规范,确保数据格式清晰、请求稳定。
                            • 问题解决:
                              • 调试界面显示和交互逻辑,确保不同场景下功能稳定。
                              • 处理API异常情况,提升系统鲁棒性。

                            自动化仪表盘说明文档

                            📋 工具概述

                            自动化任务监控仪表盘生成工具是一套完整的解决方案,帮助开发者快速将 Python 编写的仪表盘应用程序打包为独立可执行文件。用户无需安装 Python 环境即可运行生成的应用程序,极大地简化了部署和分发过程。

                            🎯 核心价值

                            • 零依赖部署:生成的应用可在任何 Windows 系统上直接运行
                            • 一键自动化:全程自动化打包,无需复杂配置
                            • 灵活维护:支持快速功能更新,无需重新打包
                            • 环境隔离:使用虚拟环境确保依赖管理的安全性

                            📁 核心文件架构

                            文件名
                            功能描述
                            作用域
                            run_dashboard.spec
                            PyInstaller 打包配置文件
                            定义应用程序打包参数、资源文件和执行设置
                            run_dashboard.py
                            应用程序启动入口
                            负责初始化和启动仪表盘主程序
                            auto_dashboard_exe.bat
                            自动化打包脚本
                            完整的环境配置、依赖安装和应用打包流程
                            requirements.txt
                            Python 依赖清单
                            定义项目所需的所有第三方库及版本
                            dashboard.py
                            仪表盘核心实现
                            包含用户界面逻辑和业务功能实现

                            📂 推荐项目结构


                            ⭐ 主要特性

                            🚀 自动化程度高

                            • 智能环境检测:自动检查 Python 环境完整性
                            • 依赖管理:自动创建虚拟环境并安装依赖
                            • 一键打包:无需手动配置 PyInstaller 参数

                            🔧 维护友好

                            • 热更新支持:修改功能无需重新打包
                            • 模块化设计:核心逻辑与界面分离
                            • 版本控制友好:清晰的文件结构便于团队协作

                            📦 部署便捷

                            • 独立可执行:生成的 .exe 文件包含所有依赖
                            • 跨机器运行:无需目标机器安装 Python 环境
                            • 绿色软件:无需安装,双击即用

                            💻 系统要求

                            基础环境

                            • 操作系统:Windows 7/8/10/11(推荐 Windows 10 及以上)
                            • Python 版本:3.6 - 3.11(推荐 3.8+)
                            • 内存要求:至少 2GB RAM
                            • 磁盘空间:至少 500MB 可用空间

                            网络要求

                            • 首次运行:需要互联网连接下载依赖包
                            • 后续使用:可离线运行

                            Python 环境验证


                            🚀 快速开始指南

                            第一步:环境准备

                            Python 安装验证

                            1. 检查现有安装
                              1. 如果显示版本号,说明 Python 已正确安装
                            1. 全新安装 Python(如果需要)
                                • 下载适合您系统的 Python 安装包
                                • 重要:安装时必须勾选 "Add Python to PATH"
                                • 验证安装:重新打开命令提示符,输入 python --version

                            项目文件准备

                            确保所有核心文件位于同一文件夹中:

                            第二步:生成应用程序

                            1. 启动自动化打包
                                • 右键点击 auto_dashboard_exe.bat
                                • 选择"以管理员身份运行"(推荐)
                            1. 监控打包进程 打包过程将显示以下阶段:
                              1. 验证生成结果
                                  • 在项目文件夹中找到 run_dashboard/ 目录
                                  • 确认 run_dashboard.exe 文件存在

                              第三步:运行应用程序

                              1. 启动应用
                                  • 进入 run_dashboard/ 文件夹
                                  • 双击 run_dashboard.exe
                              1. 验证功能
                                  • 确认仪表盘界面正常加载
                                  • 测试各项功能是否工作正常

                              🔧 维护与更新

                              场景一:仅修改功能逻辑

                              适用情况:修改界面布局、业务逻辑,但不引入新的第三方库
                              操作步骤
                              1. 直接编辑 run_dashboard/dashboard.py 文件
                              1. 保存修改
                              1. 重新运行 run_dashboard.exe 查看效果
                              优势
                              • ⚡ 立即生效,无需重新打包
                              • 🔄 支持快速迭代开发
                              • 💾 节省时间和磁盘空间

                              场景二:添加新依赖库

                              适用情况:需要引入新的 Python 库来实现新功能
                              操作步骤
                              1. 更新依赖清单 编辑项目根目录的 requirements.txt
                                1. 修改核心功能 编辑项目根目录的 dashboard.py
                                  1. 重新打包 运行 auto_dashboard_exe.bat
                                  1. 测试新功能 运行新生成的 run_dashboard.exe

                                  🛠️ 高级配置

                                  自定义打包参数

                                  编辑 run_dashboard.spec 文件以自定义打包行为:

                                  🚨 故障排除

                                  常见错误及解决方案

                                  1. Python 环境问题

                                  错误信息"Python environment not found"
                                  解决方案

                                  2. 依赖安装失败

                                  错误信息"Could not install packages due to an EnvironmentError"
                                  解决方案

                                  3. 打包过程错误

                                  错误信息"PyInstaller failed to execute script"
                                  解决方案
                                  1. 检查代码语法
                                    1. 检查隐式依赖run_dashboard.spec 中添加缺失的库:
                                      1. 启用调试模式

                                        4. 应用运行时错误

                                        错误信息:应用启动后立即关闭
                                        调试步骤
                                        1. 通过命令行启动
                                          1. 检查日志文件 查看是否生成了错误日志文件
                                          1. 验证文件完整性 确认 dashboard.py 文件在应用文件夹中

                                          🔍 批处理脚本深度解析

                                          脚本执行流程

                                          关键技术点

                                          1. 虚拟环境隔离
                                              • 避免全局 Python 环境污染
                                              • 确保依赖版本一致性
                                              • 便于项目间依赖管理
                                          1. PyInstaller 优化
                                              • 使用 spec 文件进行精确控制
                                              • 合理配置隐式依赖
                                              • 平衡文件大小与功能完整性
                                          1. 错误处理机制
                                              • 每个关键步骤都有错误检查
                                              • 提供详细的错误信息
                                              • 支持快速定位问题

                                          📚 最佳实践

                                          开发阶段建议

                                          1. 依赖管理
                                              • 使用版本范围而非固定版本
                                              • 定期更新依赖到最新稳定版
                                              • 记录依赖选择的原因
                                          1. 代码组织
                                            1. 性能优化
                                                • 使用 Streamlit 的缓存机制
                                                • 避免在循环中进行重复计算
                                                • 合理使用数据加载策略

                                            部署阶段建议

                                            1. 文件管理
                                                • 保持项目根目录的整洁
                                                • 使用 .gitignore 排除临时文件
                                                • 定期清理旧的打包输出
                                            1. 版本控制
                                                • 为每次重要更新创建标签
                                                • 维护更新日志
                                                • 保留关键版本的打包文件
                                            1. 用户体验
                                                • 提供详细的使用说明
                                                • 考虑添加应用图标和版本信息
                                                • 处理常见的用户操作错误

                                            📖 扩展资源

                                            相关文档

                                            进阶功能

                                            • 添加应用程序图标和版本信息
                                            • 集成自动更新机制
                                            • 支持配置文件外部化
                                            • 添加日志记录功能

                                            社区支持

                                            如遇到问题,可咨询:
                                            • 内部支持:联影大模型
                                            • 社区论坛:Python 开发者社区
                                            • 技术文档:查看相关库的官方文档

                                            📋 总结

                                            这套自动化仪表盘生成工具为 Python 应用的打包和分发提供了完整的解决方案。通过标准化的流程和丰富的配置选项,开发者可以快速将复杂的数据分析应用转换为用户友好的独立程序。
                                            核心优势
                                            • 🚀 一键自动化打包流程
                                            • 🛡️ 虚拟环境确保依赖安全
                                            • 🔄 支持快速功能迭代
                                            • 📦 生成独立可执行文件
                                            • 🔧 灵活的配置和扩展能力
                                            遵循本指南的建议和最佳实践,您可以高效地开发、打包和维护专业级的仪表盘应用程序。
                                            技术 The Way Towards Best Codes笔记:模式识别知识点总结
                                            Loading...