面向智能助理的多轮医疗对话生成系统开发

摘 要

随着互联网医疗需求的快速增长,传统人工问诊模式面临效率低、资源不均等挑战。本文设计并实现了一个面向智能助理的多轮医疗对话生成系统。系统采用前后端分离架构,后端基于FastAPI框架,前端使用Vue3,数据库采用MySQL。系统实现了用户注册登录、多轮问诊对话、关键信息槽位抽取与状态追踪、基于检索增强生成RAG的知识库问答、大语言模型回复生成、管理员总览与数据管理等核心功能。在对话过程中,系统通过规则提取症状、持续时间、严重程度等槽位,结合状态机控制问诊流程,并动态检索知识库中的相关片段注入大语言模型提示词,生成专业、安全的医疗回复。测试结果表明,系统功能完整,交互流畅,能够有效辅助患者进行初步病情咨询,缓解医疗资源压力。

****关键词:****医疗对话系统;多轮对话;检索增强生成;大语言模型;知识库

ABSTRACT

With the rapid growth of online medical consultation demands, traditional manual diagnosis faces challenges such as low efficiency and uneven resource distribution. This paper designs and implements a multi-turn medical dialogue generation system for intelligent assistants. The system adopts a front-end and back-end separation architecture, with the backend built on FastAPI, the frontend using Vue3, and MySQL as the database. Key functions include user registration and login, multi-turn medical dialogue, slot extraction and state tracking, knowledge base question answering based on Retrieval-Augmented Generation (RAG), large language model response generation, and administrator overview and data management. During the dialogue, the system extracts symptoms, duration, severity and other slots using rule-based methods, controls the consultation process via a state machine, and dynamically retrieves relevant knowledge fragments from the knowledge base to inject into the LLM prompt, generating professional and safe medical responses. Test results show that the system has complete functions and smooth interaction, effectively assisting patients in preliminary medical consultation and alleviating the pressure on medical resources.

Keywords : Medical Dialogue System; Multi-turn Dialogue; Retrieval-Augmented Generation; Large Language Model; Knowledge Base

目 录

[++++摘 要++++](#摘 要)

++++ABSTRACT++++

[++++第1章 绪 论++++](#第1章 绪 论)

[++++1.1++++ ++++研究背景与意义++++](#1.1 研究背景与意义)

[++++1.1.1++++ ++++研究背景++++](#1.1.1 研究背景)

[++++1.1.2++++ ++++研究目的与意义++++](#1.1.2 研究目的与意义)

[++++1.2 国内外研究现状++++](#1.2 国内外研究现状)

[++++1.2.1 国外研究现状++++](#1.2.1 国外研究现状)

[++++1.2.2 国内研究现状++++](#1.2.2 国内研究现状)

[++++1.3 本文主要研究内容++++](#1.3 本文主要研究内容)

[++++1.4 本文主要结构++++](#1.4 本文主要结构)

[++++第2章 相关理论与技术++++](#第2章 相关理论与技术)

[++++2.1 大语言模型与Transformer架构++++](#2.1 大语言模型与Transformer架构)

[++++2.2 检索增强生成技术++++](#2.2 检索增强生成技术)

[++++2.3 文本向量嵌入与相似度计算++++](#2.3 文本向量嵌入与相似度计算)

[++++2.4 对话状态追踪与槽位填充++++](#2.4 对话状态追踪与槽位填充)

[++++2.5 条件随机场与序列标注++++](#2.5 条件随机场与序列标注)

[++++第3章 系统需求分析++++](#第3章 系统需求分析)

[++++3.1 系统可行性分析++++](#3.1 系统可行性分析)

[++++3.2 系统功能需求分析++++](#3.2 系统功能需求分析)

[++++3.3 系统非功能需求分析++++](#3.3 系统非功能需求分析)

[++++第4章 系统设计++++](#第4章 系统设计)

[++++4.1 系统架构设计++++](#4.1 系统架构设计)

[++++4.2 系统总体功能设计++++](#4.2 系统总体功能设计)

[++++4.3 数据库设计++++](#4.3 数据库设计)

[++++4.3.1 逻辑结构设计++++](#4.3.1 逻辑结构设计)

[++++4.3.2 物理结构设计++++](#4.3.2 物理结构设计)

[++++第5章 系统实现++++](#第5章 系统实现)

[++++5.1 用户认证与注册界面实现++++](#5.1 用户认证与注册界面实现)

[++++5.2 普通用户对话台界面实现++++](#5.2 普通用户对话台界面实现)

[++++5.3 会话历史页面实现++++](#5.3 会话历史页面实现)

[++++5.4 管理员总览界面实现++++](#5.4 管理员总览界面实现)

[++++5.5 知识库管理页面实现++++](#5.5 知识库管理页面实现)

[++++5.6 数据管理页面实现++++](#5.6 数据管理页面实现)

[++++第6章 系统测试++++](#第6章 系统测试)

[++++6.1 测试目的++++](#6.1 测试目的)

[++++6.2 测试方法++++](#6.2 测试方法)

[++++6.3 功能测试++++](#6.3 功能测试)

[++++第7章 总结与展望++++](#第7章 总结与展望)

[++++7.1 总结++++](#7.1 总结)

[++++7.2 展望++++](#7.2 展望)

++++参考文献++++

[++++致 谢++++](#致 谢)

第1章 绪 论

    1. 研究背景与意义
      1. 研究背景

随着互联网技术发展和健康意识提高,在线医疗咨询需求快速增长。传统医疗服务受限于资源分布不均,导致挂号难、候诊长、沟通效率低等问题突出。突发公共卫生事件期间,线上问诊成为分流轻症患者、缓解医疗资源紧张的重要手段。然而,当前主流在线问诊平台多采用人工回复模式,医生需花费大量时间回答重复性咨询,既增加了负担,也限制了服务规模。

人工智能技术的突破为智能医疗对话系统提供了基础。大语言模型具备强大的语言理解与生成能力,能够进行流畅的多轮交互。检索增强生成技术使模型可动态引用外部知识库,减少幻觉现象,提高回答的专业性和可信度。这些进展使模拟医生问诊流程、辅助初步病情分析的智能对话系统成为可能。

医疗对话系统对准确性、专业性和安全性要求极高。系统需遵循临床问诊逻辑,通过多轮对话收集症状、持续时间、严重程度等信息,在识别风险后给出合理建议。这要求系统具备良好的对话状态管理、槽位填充和知识检索能力。

综上所述,面向智能助理的多轮医疗对话生成系统的研究与开发,既是应对当前医疗资源供需矛盾的现实需求,也是人工智能技术在垂直领域深度应用的重要探索方向,具有重要的理论价值和广阔的应用前景。

      1. 研究目的与意义

本研究旨在设计并实现一个面向智能助理的多轮医疗对话生成系统,该系统能够模拟临床医生的问诊逻辑,通过多轮自然语言交互收集患者的病情信息,动态维护症状、持续时间、严重程度、检查结果等关键槽位,并基于检索增强生成技术调用外部医疗知识库,结合大语言模型生成专业、安全、连贯的医疗回复。系统同时提供普通用户问诊台和管理员总览与数据管理功能,形成完整的医疗咨询闭环。

本研究的意义主要体现在以下几个方面。

在理论层面,本研究探索了规则驱动的槽位抽取与大语言模型生成能力的协同机制,验证了在医疗这一高专业性领域中,将确定性规则与概率性生成模型相结合的可行性。研究提出的对话状态追踪方法、基于症状槽位的检索词构建策略以及安全兜底机制,为医疗对话系统的工程实现提供了可复用的技术参考。

在技术层面,本研究融合了多种前沿人工智能技术,包括基于孪生网络或Transformer的文本编码、向量相似度检索、大语言模型微调与推理等,形成了一个完整的端到端医疗对话系统架构。系统采用前后端分离的设计模式,具备良好的可扩展性和可维护性。

在应用层面,本系统可部署于医院官网、在线医疗平台、基层卫生服务机构等场景,为患者提供7×24小时的智能预问诊和健康咨询服务,有效分流轻症患者,减轻医生重复性工作负担,提升医疗服务的可及性和效率。同时,系统记录的结构化问诊数据可为临床研究和公共卫生监测提供有价值的信息。

1.2 国内外研究现状

人工智能与大语言模型技术的快速发展,为中医问诊的数字化、智能化转型提供了全新技术路径。当前国内外围绕智能问诊系统、中医领域大模型、检索增强生成 RAG、医疗知识工程等方向已形成较为丰富的研究成果,但在中医问诊这一强专业、强逻辑、强知识依赖的垂直场景中,仍存在知识依据不足、语义理解偏差、系统可解释性弱等共性问题。本章结合相关文献,从国外与国内两个维度梳理研究进展,并总结现有研究的不足,为本项目的技术选型与系统设计提供依据。

1. 2 .1 国外研究现状

国外在智能医疗对话系统领域的研究起步较早,近年来随着深度学习和大语言模型技术的快速发展,相关研究取得了显著进展。

在早期阶段,研究者主要探索基于传统机器学习方法和知识库的医疗问答系统。随着自然语言处理技术的进步,基于神经网络的方法逐渐成为主流。2021年,Husain Nadaf等人通过随机对照试验比较了传统急诊分诊系统与人工智能辅助分诊系统的效果,发现AI辅助分诊能够显著缩短患者从入院到首次医疗干预的时间,验证了人工智能技术在医疗分诊场景中的实用价值4

在大语言模型兴起之前,基于BERT等预训练模型的医疗文本理解是研究热点。Lingrui Yang等人(2024)基于BERT框架设计了一套门诊分诊系统,通过收集近40万份电子病历和500组医疗对话数据进行模型训练,该系统能够根据患者主诉精准推荐就诊科室,有效解决了患者因缺乏医学知识而难以选择专科门诊的问题6。这一研究展示了预训练模型在医疗场景下的良好泛化能力。

随着大语言模型的成熟,研究者开始探索将LLM与医疗场景深度融合。Y. R. Annie Bessant等人(2026)提出了基于改进深度神经网络和浣熊优化算法的患者行为分析模型,该模型结合物联网设备采集的患者健康数据,通过智能医疗框架实现对患者行为的精准分析,为个性化治疗方案的制定提供了数据支撑1。该研究体现了智能医疗从单一对话交互向多模态数据融合分析的发展趋势。

值得注意的是,国外研究在系统架构层面也进行了创新探索。部分研究者开始关注多智能体协同框架在医疗辅助决策中的应用,通过多个大模型的协同工作来提升诊断建议的准确性和可解释性,这一方向为智能医疗系统提供了新的技术范式。

总体来看,国外研究呈现出从传统机器学习向大语言模型演进、从单一对话向多模态智能分析发展的趋势,且在RAG、智能体等前沿技术方向保持活跃。

1.2.2 国内研究现状

国内智能医疗对话系统的研究近年来发展迅速,学术界和工业界均取得了丰富成果。研究路径主要可分为基于知识图谱的传统问答系统、基于大语言模型的智能问诊系统,以及两者融合的技术路线。

(一)基于知识图谱的传统医疗问答系统

早期研究主要围绕知识图谱构建和命名实体识别展开。陈书珩(2023)设计并实现了智能医疗咨询系统,采用BERT-BiLSTM-CRF模型进行命名实体识别,结合Text-CNN模型完成意图识别,通过Neo4j图数据库存储医疗知识数据,实现了基于知识图谱的医疗问答服务9。龚建全(2023)提出了面向医疗知识图谱的对话系统,针对医疗意图易混淆和实体重叠问题,创新性地提出了基于孪生胶囊网络的意图识别算法和结合主语类别特征的级联标注实体关系抽取算法,有效提升了医疗知识图谱构建的质量10。白云宇(2023)构建了包含4.4万余个实体、29万余条关系的医疗知识图谱NWNU_KG,提出了MBCD联合模型,采用深度学习和词典相结合的方法进行实体识别,在实体识别和关系抽取中分别达到89.32%和85.68%的准确率11。胡稳(2023)基于RoBERTa预训练模型,提出了RoBERTa-BiGRU-Attention-CRF实体识别模型和RoBERTa-DPCNN意图识别模型,构建了包含约3万个实体、21万条关系的医疗知识图谱,系统问答准确率达到88%12。何艳和张宁(2021)基于JavaEE框架设计实现了智能医疗问答系统,利用WebMagic框架进行数据爬取,采用中文分词技术和知识推理实现医疗问答功能15

(二)基于大语言模型的智能问诊系统

随着ChatGLM、文心一言等国产大模型的发展,国内研究者开始探索大模型在医疗场景的应用。马添(2026)探讨了面向移动医疗场景的AI智能问诊系统,指出该系统能够根据患者描述进行初步诊断,实现轻重病患分流,有效缓解医疗系统压力2。曾婷和陈贤(2025)基于多模态大模型架构,融合ChatGLM2-6B模型框架,采用P-tuning v2参数高效微调和LoRA低秩适配方法,对中文医疗对话数据集进行领域适配训练,设计了面向患者、医生及医疗机构三类用户的智能辅助问诊系统,单节点可承载200+并发会话3。丁勇等人(2024)基于大语言模型开发了智能预问诊系统,该系统通过模拟临床医生诊疗思维,智能采集患者的主诉症状、既往史等信息并自动生成预问诊标准病历,有效提高了医生诊疗效率7

(三)技术融合与前沿探索

李宏阳(2025)基于Rasa框架构建了智能寻医问诊系统,采用Global Pointer模型增强嵌套实体识别能力,设计了RoBERTa-BiLSTM-Global Pointer联合模型融合知识图谱推理结果与对话历史特征,并构建了包含127万余个医疗实体节点和342万余条关联关系的Neo4j知识图谱,实体抽取F1值达到87.6%,意图识别准确率较Rasa原生模型提升了13.2个百分点5。程鹏飞(2024)提出了基于智能体的多元知识整合医疗对话系统框架和多智能体协同医疗辅助决策系统,通过整合多种知识和多智能体协同工作机制,显著提升了系统生成医疗回复和辅助建议的准确性与可解释性8。林道勤(2022)提出基于朴素贝叶斯分类的疾病诊断算法和基于症状集差异的症状筛选算法,在MZ和DX数据集上的诊断准确率分别达到92.25%和95.19%,同时构建了包含100个疾病的医疗知识图谱,实现了疾病预防、治疗和就医指导三类场景的医疗咨询功能13。黄晓亮(2021)研究了seq2seq对话模型在医疗咨询中的应用,针对生词处理问题提出了改进方案,并采用改进的头脑风暴优化算法优化LSTM神经网络初始参数,提高了模型训练效率14

综上,国内研究经历了从传统知识图谱问答到大语言模型智能问诊的技术演进,当前研究热点集中在RAG检索增强生成、大模型微调适配、多智能体协同架构等方向,与用户所开发的"面向智能助理的多轮医疗对话生成系统"在技术路线上高度契合。

1. 3 本文主要研究内容

本研究围绕多轮医疗对话生成系统的核心功能模块展开,主要研究内容包含以下几个方面。

第一,医疗对话状态追踪与槽位维护机制的研究。本研究设计了一套基于规则抽取和状态机的对话状态管理方案。系统接收用户输入的自然语言文本后,首先进行文本清洗和医疗术语标准化处理,然后通过关键词匹配和正则表达式规则抽取症状、持续时间、严重程度、检查结果等关键信息,并将抽取结果累加到会话的槽位摘要中。同时,系统调用大语言模型对用户输入进行风险信号识别,将风险标记一并存入槽位。基于当前的槽位摘要,状态机按照主诉采集、槽位补全、风险识别、建议输出四个阶段推进对话流程,并确定下一轮对话的追问内容或建议输出时机。这一机制确保了对话过程符合临床问诊的逻辑顺序。

第二,基于检索增强生成的医疗知识库构建与应用研究。本研究构建了可动态管理的医疗知识库系统,支持知识库的创建、启用、停用和删除,支持用户通过上传文本文档、Markdown文档、CSV、JSON或Word文档等方式向知识库添加知识条目。系统采用中文轻量级向量嵌入模型将知识库中的文本分块转换为向量表示,并使用高效相似度索引库构建向量索引。在对话过程中,系统根据当前槽位摘要中的症状、检查结果和风险标记构造检索查询向量,在已启用的知识库中检索与用户病情最相关的若干知识片段,将检索结果经过摘要压缩后注入大语言模型的提示词中。检索增强生成技术显著提高了模型回复的事实准确性和专业相关性。

第三,大语言模型医疗回复生成与安全机制研究。本研究通过兼容接口调用云端大语言模型服务,构建包含系统提示、历史对话摘要、当前槽位摘要、知识检索摘要和用户最新输入的提示词模板,引导模型按照医疗助理的角色生成回复。针对大语言模型可能产生的幻觉或不当输出,本研究设计了安全兜底策略:当模型输出包含高风险表述如"可以确诊""无需就医"等,或当槽位摘要中存在风险标记时,系统自动替换为预设的安全回复模板,确保系统在任何情况下都不会给出可能误导用户的危险建议。

第四,系统前后端架构设计与实现。本研究采用当前主流的Web开发技术栈构建完整系统。后端基于高性能异步Web框架,采用关系型数据库存储用户信息、会话记录、消息历史、知识库元数据和系统日志。前端采用渐进式JavaScript框架构建单页应用,实现用户登录注册、对话台、历史对话查看、管理员总览、数据管理和知识库管理等多个视图。系统通过基于令牌的身份验证机制区分普通用户和管理员角色,普通用户仅能访问和操作自己的对话数据,管理员则可查看全平台统计信息和所有用户会话。

1.4 本文主要结构

本文共分为七个章节。第一章绪论阐述了研究的背景与意义,介绍了国内外研究现状,明确了本文的主要研究内容。第二章相关技术介绍详细说明了本系统所采用的大语言模型与Transformer架构、检索增强生成技术、文本向量嵌入与相似度计算、对话状态追踪与槽位填充以及条件随机场与序列标注等核心技术。第三章系统需求分析从可行性、功能需求和非功能需求三个维度对系统进行了全面分析,给出了用户和管理员的用例图。第四章系统设计描述了系统的分层架构、总体功能模块划分、核心业务流程设计以及数据库的逻辑结构和物理结构。第五章系统实现展示了用户认证、对话台、管理员总览、知识库管理、数据管理和历史对话等主要界面的实现效果。第六章系统测试说明了测试目的与方法,并针对各功能模块设计了详细的测试用例。第七章总结与展望对全文工作进行了归纳,指出了系统的不足并提出了未来改进方向。

第2章 相关理论与技术

2.1 大语言模型与Transformer架构

大语言模型是近年来自然语言处理领域的重大突破,其核心基础是Transformer架构。Transformer模型摒弃了传统的循环神经网络和卷积神经网络结构,完全基于注意力机制来捕捉序列中的长距离依赖关系。注意力机制的核心思想是让模型在处理序列中的每个位置时,能够动态地关注序列中所有其他位置的信息,并根据相关性分配不同的权重。

注意力机制的计算过程可以描述如下。给定查询向量集合、键向量集合和值向量集合,注意力输出是值的加权求和,其中权重由查询与键的相似度决定。具体地,对于单个查询向量和一组键值对,注意力权重的计算方式如公式2-1所示。

识可更新性。当外部知识库的内容发生变化时,只需更新索引而无需重新训练或微调生成模型,这在大规模应用中具有极高的实用价值。在医疗对话系统中,知识库可以包含疾病诊疗指南、药品说明书、健康科普文章等内容,系统根据用户描述的症状动态检索相关知识,从而使模型回复具有可靠的医学依据。

此外,RAG技术还天然具备一定的可解释性。模型生成回复时所引用的知识片段可以同时展示给用户,让用户了解回复的信息来源,这在医疗场景中尤为重要,因为患者有权利知道建议背后的依据。本研究的系统设计正是充分利用了RAG的这一特性,在前端界面的右侧面板中实时展示当前输入所命中的知识标题和检索关键词,增强了系统的透明度和可信度。

2. 3 文本向量嵌入与相似度计算

文本向量嵌入是将离散的文本符号转换为连续空间中的稠密向量的技术,它是现代自然语言处理系统的核心基础组件。与传统的独热编码或词袋模型相比,向量嵌入能够捕捉词语之间的语义相似关系,例如"医生"和"大夫"这两个词的向量在空间中应当彼此接近,而"医生"和"苹果"的向量则相距较远。

状态更新函数,可以由基于规则的方法实现,也可以由基于神经网络的模型学习得到。

槽位填充是对话状态追踪的具体实现技术之一。它从用户输入的文本中提取出各个槽位对应的值。对于医疗对话场景,槽位填充通常依赖领域词典和规则模式。例如,持续时间槽位的值可以通过匹配正则表达式模式如"三天""两周""一个月"来提取;症状槽位的值可以通过匹配预定义的医疗症状词汇表来提取。当同一槽位在不同轮次中出现多个值时,系统需要将这些值进行合并和去重,形成该槽位的最终值集合。

之上,其中每个观测

通常是字符或词的特征向量,每个标签

来自预定义的标签集合。线性链条件随机场假设标签序列在给定观测序列的条件下具有马尔可夫性质,即当前标签只依赖于前一标签和整个观测序列,其条件概率分布如公式2-11所示。

条件随机场相比独立的分类器具有显著优势:它能够利用相邻标签之间的依赖关系,例如在命名实体识别中,一个实体的开始标签后面不可能紧跟着另一个实体的内部标签,这种约束可以通过特征函数自然地编码到模型中。条件随机场还避免了标注偏置问题,该问题常见于其他序列模型如最大熵马尔可夫模型。

在医疗文本中,实体名称往往较长且可能包含嵌套结构,例如"急性上呼吸道感染"中既包含"上呼吸道"这一部位实体,又包含"感染"这一疾病实体。条件随机场通过全局归一化能够有效处理这类复杂情况,使其成为医疗实体识别任务的经典选择。本研究虽然主要采用规则方法进行槽位抽取,但在知识库构建和数据预处理阶段,条件随机场模型可用于从非结构化文档中自动提取结构化的医疗知识条目。

第3章 系统需求分析

3.1 系统可行性分析

在项目正式开发之前,需要从技术、经济和操作等多个维度对系统的可行性进行评估,以确保项目能够顺利实施并达到预期目标。

技术可行性方面,本系统所采用的技术栈均为当前成熟且广泛使用的开源技术。后端基于高性能异步Web框架FastAPI构建,该框架原生支持异步请求处理和自动API文档生成,能够有效降低接口开发复杂度。数据持久化层使用关系型数据库MySQL配合SQLAlchemy ORM框架,提供了稳定可靠的数据存储能力和便捷的对象关系映射功能。用户认证采用基于JSON Web令牌的无状态鉴权机制,结合PBKDF2算法进行密码哈希存储,安全性满足一般应用需求。大语言模型调用通过HTTPS协议访问云服务商的兼容接口,无需自行训练和部署模型,大幅降低了技术门槛和硬件成本。向量检索方面,采用轻量级中文嵌入模型和高效相似度索引库,两者均可在CPU环境下运行,对服务器配置要求不高。前端采用Vue3框架构建单页应用,配合Vue Router实现路由管理和权限控制,开发效率高且用户体验良好。综上所述,现有技术方案成熟可靠,开发团队具备相应的技术能力,技术可行性充足。

经济可行性方面,本系统的主要投入集中在服务器资源和云大模型API调用费用两个部分。后端服务可部署在低配云服务器上,MySQL数据库可使用开源社区版,无需购买商业许可证。前端为静态资源,可托管于对象存储服务或与后端共用服务器。大模型API按调用量计费,在开发和测试阶段可使用免费额度或回退到本地兜底模板进行验证。系统未依赖任何昂贵的商业软件或专用硬件,开发和运行成本可控。同时,系统建成后可部署于医院、社区卫生服务中心或在线医疗平台,通过分流轻症咨询、减少医生重复劳动来间接创造经济效益,具有良好的投入产出比。

操作可行性方面,系统为普通用户和管理员分别设计了差异化的操作界面。普通用户只需具备基本的网页浏览和文字输入能力即可使用对话台进行问诊,系统通过清晰的提示词和快捷输入按钮降低了操作门槛。管理员通过独立的后台管理页面可完成知识库管理、数据查看和日志监控等操作,界面直观且提供了必要的确认对话框防止误操作。系统启动后会自动创建默认管理员账号,无需复杂的初始配置。因此,目标用户群体能够较快掌握系统的使用方法,操作可行性较高。

3.2 系统功能需求分析

本系统面向两类用户角色:普通用户和管理员。普通用户的核心需求是通过多轮对话进行医疗咨询,获取基于知识的专业回复,并能够查看自己的历史对话记录。管理员的核心需求是管理医疗知识库、查看全平台运行统计、管理用户会话数据和查阅系统日志。根据以上需求,系统的功能需求可归纳为以下几个模块。

用户认证与管理模块:系统需要支持新用户的注册功能,用户通过提供用户名、密码和可选姓名完成账号创建。注册成功后,用户可以使用用户名和密码登录系统,系统验证身份后颁发访问令牌用于后续请求的鉴权。系统需要区分普通用户和管理员角色,并根据角色权限控制页面和功能的访问。管理员账号在系统首次启动时自动初始化,确保系统部署后即可使用管理功能。

多轮医疗对话模块:这是系统的核心功能。用户登录后进入对话台,可以创建新的咨询会话或选择已有的会话继续对话。在对话过程中,用户输入病情描述文本,系统需要接收文本并进行语义分析,从中提取症状、持续时间、严重程度、检查结果等关键信息。系统需要维护每个会话的对话状态,包括当前问诊阶段、已收集的槽位信息、缺失的槽位以及风险标记。基于当前状态,系统需要调用知识检索服务从已启用的知识库中召回相关知识片段,然后将历史对话、槽位摘要、知识摘要和用户当前输入组合成提示,调用大语言模型生成回复。回复生成后需要经过安全过滤,若存在风险则替换为预设的安全回复模板。用户可随时请求生成问诊建议,系统基于已有对话历史直接输出综合性的就医或健康建议。

知识库管理模块:管理员用户可以创建、查看、启用、停用和删除知识库。每个知识库包含若干知识条目,管理员可以通过上传文本文档、Markdown文档、CSV文件、JSON文件或Word文档的方式批量导入知识内容。系统需要自动解析上传的文档,将其切分为合适大小的文本块,并提取每个块的标题、分类、来源等元信息。切分后的知识块需要经过向量化处理,转换为向量表示并构建索引,以便在对话过程中进行高效检索。启用知识库后,对话检索将覆盖该知识库中的内容;停用知识库则使其不再参与检索。系统还提供知识库内容的搜索预览功能,允许管理员输入查询词查看检索结果,以验证知识库的覆盖效果。

管理员总览模块:管理员登录后进入总览页面,需要展示平台的核心运行指标,包括用户总数、管理员数量、对话会话总数、消息总量、存在风险标记的会话数量、已启用的知识库数量、知识条目总数以及系统日志总条数。这些指标以卡片形式直观呈现,帮助管理员快速了解系统整体运行状况。

数据管理模块:管理员可以查看全平台的所有用户会话数据,包括会话ID、所属用户、会话标题、会话摘要、消息数量、风险标记以及创建和更新时间。管理员可以按关键词搜索会话,并能够删除指定的会话及其关联的所有消息和状态数据。系统还需要提供系统日志的查看功能,日志按照级别、模块、内容和时间组织,支持分页浏览和关键词搜索,便于管理员排查问题和审计操作。

历史对话查看模块:普通用户需要能够查看自己创建的所有历史会话,包括会话标题、摘要以及创建和更新时间。用户通过历史对话页面可以了解过往咨询记录,但无权查看其他用户的会话数据。

普通用户的用例包括用户注册、用户登录、创建会话、发送消息、查看消息流、生成问诊建议、查看历史会话列表和查看知识命中预览。管理员的用例继承普通用户的全部用例,并额外包括管理知识库、查看平台总览、管理全平台会话数据和查看系统日志。

图3.1 普通用户用例图

图3.2 管理员用例图

3. 3 系统非功能需求分析

非功能需求对系统的运行质量、用户体验和维护性提出了具体要求,是系统能否在实际环境中稳定运行的重要保障。

可用性方面,系统界面应简洁清晰,对话台页面将左侧对话区和右侧状态面板合理分区,用户能够一目了然地看到对话内容、问诊进度、槽位摘要和知识命中情况。系统提供快捷输入按钮,方便用户快速输入常见病情描述模板。表单提交时显示加载状态提示,避免重复提交。错误信息以友好方式展示,不暴露后端异常堆栈。系统适配不同屏幕尺寸,在移动设备和桌面设备上均能正常使用。

可维护性方面,系统采用分层架构将接口层、服务层、数据访问层和模型层清晰分离。代码遵循统一命名规范和代码风格,关键逻辑添加适当注释。配置信息通过环境变量或配置文件管理,不硬编码在代码中。系统日志记录关键操作和异常信息,便于运维排查。前端组件保持单一职责,公共组件可复用。

可扩展性方面,知识库模块支持多个独立知识库动态启用或停用,为接入不同专科领域知识资源提供扩展能力。对话状态基于槽位摘要和状态机实现,新增槽位或修改流程只需调整规则配置。大语言模型调用层通过统一接口封装,更换模型提供商只需修改配置。前端路由根据用户角色动态渲染菜单,新增管理功能只需添加对应路由和视图组件。

第4章 系统设计

4.1 系统架构设计

本系统采用前后端分离的分层架构,自上而下划分为表现层、业务逻辑层、数据访问层和数据存储层四个层次。分层设计使各层职责清晰、耦合度低,便于开发、测试和维护。

表现层运行于浏览器中,基于Vue3框架构建单页应用,包含用户登录注册页面、普通用户对话台和管理员管理界面三个主要视图。该层负责与用户进行交互,通过HTTP请求调用后端应用程序编程接口,不直接处理业务逻辑。

业务逻辑层运行于后端服务器中,是系统的核心。该层包含六大核心服务:用户认证服务负责用户注册、登录和令牌管理;对话管理服务负责会话创建、消息收发和流式响应;状态追踪服务负责槽位抽取、风险识别和对话状态流转;知识库管理服务负责知识库的增删改查以及文档上传解析;检索增强生成服务负责构造检索查询并召回相关知识;大语言模型调用服务负责组装提示词并调用模型生成回复。各服务之间相互协作,完成复杂的业务处理。

数据访问层封装了对数据库和文件存储的读写操作,为业务逻辑层提供统一的数据访问接口。该层通过对象关系映射技术将数据库表映射为程序对象,业务逻辑层通过操作这些对象即可完成数据持久化,无需直接编写结构化查询语言。

数据存储层包含MySQL数据库和向量索引文件。MySQL数据库存储用户信息、会话记录、消息历史、对话状态、槽位摘要、知识库元数据、知识条目和系统日志。向量索引文件存储知识库文本的向量表示,用于相似度检索。

图4.1 系统架构图

4. 2 系统总体功能设计

根据需求分析阶段确定的功能要求,本系统的总体功能可以划分为两大模块:普通用户功能模块和管理员功能模块。

普通用户功能模块包含用户认证模块、对话管理模块和历史记录模块。用户认证模块负责用户的注册和登录,确保只有合法用户才能使用系统服务。对话管理模块是普通用户的核心功能,用户可以在该模块中创建新的咨询会话、发送病情描述消息、接收系统生成的医疗回复、请求生成综合问诊建议,并在对话过程中实时查看问诊进度、当前槽位摘要、知识命中标题等辅助信息。历史记录模块允许用户查看自己过往的所有会话列表,每个会话显示标题、摘要和创建时间,方便用户回顾之前的咨询内容。

管理员功能模块在普通用户功能的基础上增加了知识库管理模块、总览统计模块和数据管理模块。知识库管理模块支持管理员创建新的知识库、查看知识库详情、启用或停用知识库、删除知识库、向知识库上传文档、搜索知识库中的内容。总览统计模块以卡片形式展示平台的各项核心指标,包括用户数量、会话数量、消息总量、风险会话数量、知识库启用状态、知识条目总数和日志总数。数据管理模块允许管理员查看所有用户的会话数据,支持按关键词搜索会话,并可删除指定的会话及其关联的所有数据;同时提供系统日志的查看和搜索功能,日志按照级别和模块分类展示。

图4.2 系统功能模块图

4. 3 数据库设计

4.3.1 逻辑结构设计

根据系统功能需求分析,系统涉及的主要实体包括用户、会话、消息、对话状态、槽位摘要、知识库、知识条目和系统日志。这些实体之间存在明确的关联关系,共同构成系统的数据模型。

用户实体是系统的使用者,分为普通用户和管理员两种角色。一个用户可以创建多个会话,因此用户与会话之间是一对多的关系,关系名称为拥有。会话实体记录了用户与系统进行单次咨询的全过程,每个会话包含多条消息、多个对话状态记录和多个槽位摘要记录。会话与消息是一对多的关系,关系名称为包含。会话与对话状态是一对多的关系,关系名称为产生,因为每个会话在每一轮问诊后都会产生一个新的状态记录,保留历史版本用于追溯。会话与槽位摘要同样是一对多的关系,关系名称为产生,每个会话可以保存多个时间点的槽位摘要快照。知识库实体是医疗知识的容器,一个知识库包含多条知识条目,两者之间是一对多的关系,关系名称为包含。系统日志实体独立于其他实体,不与任何实体产生关联,用于记录系统中发生的关键操作和运行事件。

系统总体E-R图如图所示。

图4.3 系统整体E-R图

4.3.2 物理结构设计

物理结构设计将逻辑结构中的实体转换为数据库中的具体表结构。本系统使用MySQL数据库,所有表采用InnoDB存储引擎以支持事务和外键约束。

用户表存储系统所有账号信息。用户标识字段为自增主键,用户名字段设置为唯一索引以确保用户名不重复,密码哈希字段存储长度为255的字符串。是否激活和是否管理员字段使用布尔类型,默认值分别为真和假。创建时间和更新时间字段记录时间戳,更新时间在记录修改时自动更新。

表4-1 用户表结构

|---------------|------------|-------|------------|
| 字段名 | 类型 | 约束 | 说明 |
| id | INT | 主键,自增 | 用户唯一标识 |
| username | VARCHAR50 | 唯一,非空 | 登录用户名 |
| password_hash | VARCHAR255 | 非空 | PBKDF2密码哈希 |
| full_name | VARCHAR100 | 可空 | 用户真实姓名 |
| is_active | BOOLEAN | 默认真 | 账号是否激活 |
| is_admin | BOOLEAN | 默认假 | 是否为管理员 |
| created_at | DATETIME | 非空 | 创建时间 |
| updated_at | DATETIME | 非空 | 更新时间 |

会话表存储用户每次咨询会话的元信息。用户标识作为外键引用用户表的主键,并创建索引以加速按用户查询会话的操作。会话标题和摘要字段长度分别为255和文本类型,可空。创建时间和更新时间记录会话的生命周期。

表4-2 会话表结构

|------------|------------|-------|--------|
| 字段名 | 类型 | 约束 | 说明 |
| id | INT | 主键,自增 | 会话唯一标识 |
| user_id | INT | 外键,非空 | 所属用户标识 |
| title | VARCHAR255 | 可空 | 会话标题 |
| summary | TEXT | 可空 | 会话摘要 |
| created_at | DATETIME | 非空 | 创建时间 |
| updated_at | DATETIME | 非空 | 更新时间 |

消息表存储会话中的所有对话记录。会话标识作为外键引用会话表的主键,并创建索引以加速按会话查询消息的操作。角色字段取值为用户或系统助手,长度为20。内容字段为文本类型,存储完整的消息正文。

表4-3 消息表结构

|------------|-----------|-------|--------|
| 字段名 | 类型 | 约束 | 说明 |
| id | INT | 主键,自增 | 消息唯一标识 |
| session_id | INT | 外键,非空 | 所属会话标识 |
| role | VARCHAR20 | 非空 | 发送角色 |
| content | TEXT | 非空 | 消息内容 |
| created_at | DATETIME | 非空 | 创建时间 |

对话状态表存储会话在每一轮问诊后的状态信息。会话标识作为外键引用会话表的主键,并创建索引。状态标签字段记录当前所处的问诊阶段,长度为50。下一步动作字段记录建议的后续操作,长度100。风险标记和缺失槽位字段使用JSON类型,存储字符串数组。创建时间记录状态产生的时间点。

表4-4 对话状态表结构

|---------------|------------|-------|--------|
| 字段名 | 类型 | 约束 | 说明 |
| id | INT | 主键,自增 | 状态唯一标识 |
| session_id | INT | 外键,非空 | 所属会话标识 |
| state_label | VARCHAR50 | 非空 | 问诊阶段标签 |
| next_action | VARCHAR100 | 可空 | 下一步动作 |
| risk_flags | JSON | 非空 | 风险标记列表 |
| missing_slots | JSON | 非空 | 缺失槽位列表 |
| created_at | DATETIME | 非空 | 创建时间 |

槽位摘要表存储会话中已收集的患者病情关键信息。会话标识作为外键引用会话表的主键。摘要数据字段使用JSON类型,存储包含症状列表、持续时间列表、严重程度列表、检查结果列表和风险标记列表的对象结构。

表4-5 槽位摘要表结构

|--------------|----------|-------|--------|
| 字段名 | 类型 | 约束 | 说明 |
| id | INT | 主键,自增 | 摘要唯一标识 |
| session_id | INT | 外键,非空 | 所属会话标识 |
| summary_data | JSON | 非空 | 槽位键值对 |
| created_at | DATETIME | 非空 | 创建时间 |

知识库表存储医疗知识库的元信息。名称字段具有唯一约束,描述字段为文本类型可空。是否启用字段默认为假,管理员可手动启用。创建时间和更新时间记录知识库的生命周期。

表4-6 知识库表结构

|-------------|------------|-------|---------|
| 字段名 | 类型 | 约束 | 说明 |
| id | INT | 主键,自增 | 知识库唯一标识 |
| name | VARCHAR255 | 唯一,非空 | 知识库名称 |
| description | TEXT | 可空 | 知识库描述 |
| is_active | BOOLEAN | 默认假 | 是否启用 |
| created_at | DATETIME | 非空 | 创建时间 |
| updated_at | DATETIME | 非空 | 更新时间 |

知识条目表存储知识库中经过切片处理的具体知识片段。知识库标识作为外键引用知识库表的主键。标题字段存储切片标题,分类字段用于知识类型划分。文档名字段记录原始文档名称,切片索引记录该片段在文档中的顺序位置。关键词字段存储逗号分隔的关键词,内容字段存储切片正文,来源字段记录知识来源。

表4-7 知识条目表结构

|-------------------|------------|-------|---------|
| 字段名 | 类型 | 约束 | 说明 |
| id | INT | 主键,自增 | 条目唯一标识 |
| knowledge_base_id | INT | 外键,可空 | 所属知识库标识 |
| title | VARCHAR255 | 非空 | 条目标题 |
| category | VARCHAR50 | 非空 | 分类 |
| document_name | VARCHAR255 | 可空 | 原始文档名 |
| chunk_index | INT | 默认0 | 切片索引 |
| keywords | TEXT | 可空 | 关键词 |
| content | TEXT | 非空 | 条目内容 |
| source | VARCHAR255 | 可空 | 来源 |
| created_at | DATETIME | 非空 | 创建时间 |

系统日志表存储系统运行过程中产生的日志记录。级别字段记录日志级别如信息、警告、错误,模块字段记录产生日志的服务模块名称,消息字段记录日志详细内容,创建时间记录日志产生的时间点。

表4-8 系统日志表结构

|------------|------------|-------|--------|
| 字段名 | 类型 | 约束 | 说明 |
| id | INT | 主键,自增 | 日志唯一标识 |
| level | VARCHAR20 | 非空 | 日志级别 |
| module | VARCHAR100 | 非空 | 模块名称 |
| message | TEXT | 非空 | 日志内容 |
| created_at | DATETIME | 非空 | 创建时间 |

5 系统实现

5.1 用户认证与注册界面实现

用户认证模块是系统安全访问的入口,实现了用户注册、登录和角色识别功能。登录页面采用简洁的双栏布局,左侧展示系统名称和简介,右侧提供登录表单。用户在表单中输入用户名和密码后,前端将凭证发送至后端进行验证。后端验证通过后返回访问令牌和用户信息,前端将令牌存储在本地存储中,并在后续所有需要鉴权的请求中自动携带该令牌。系统根据返回的用户角色字段判断当前用户是普通用户还是管理员,并分别跳转至对应的主界面。注册页面与登录页面共享同一布局,用户填写用户名、密码和姓名后即可完成账号创建。

图 5.1 用户登录页面

5.2 普通用户对话台界面实现

对话台是普通用户的核心功能界面,采用左右两栏布局。左侧主区域展示实时对话消息流和消息发送区,右侧边栏展示问诊进度、多轮对话上下文和知识命中标题。

对话消息流组件按照时间顺序展示用户和系统助手的消息记录。每条消息显示发送角色、发送时间、所属轮次,系统回复中的问诊建议消息带有特殊标记。消息发送区提供文本输入框和快捷提示按钮,用户可以快速输入常见症状描述。输入框支持防抖实时预览,当用户输入达到一定长度后,系统自动调用知识预览接口,在右侧边栏展示当前输入可能命中的知识库标题,帮助用户了解系统能够提供的知识范围。

右侧边栏的问诊进度区域以阶段列表形式展示主诉采集、槽位补全、风险识别、建议输出四个阶段,当前所处的阶段高亮显示。边栏还展示当前对话的轮次数、消息总数和知识命中数量。多轮对话上下文区域展示下一步动作提示、风险标记标签、缺失槽位标签以及症状、时长、严重程度等槽位摘要信息。知识命中标题区域展示当前对话轮次所检索到的知识库名称和命中标题列表,用户可展开折叠查看详情。

图 5.2 普通用户对话台界面

5.3 会话历史页面实现

历史对话界面为普通用户提供个人会话记录查看功能。界面采用简洁的表格布局,展示用户自己创建的所有会话,表格列包括会话标识、会话标题、摘要、创建时间和更新时间。用户可以通过搜索框按标题、摘要或会话标识快速定位特定会话。与管理员的数据管理界面不同,普通用户的历史对话界面不提供删除操作,且仅展示当前登录用户所属的会话记录,保证了数据的安全隔离。

图 5.3 历史对话界面

5.4 管理员总览界面实现

管理员总览界面用于展示平台整体运行状态,采用卡片式布局呈现核心指标。界面顶部展示平台概述和风险会话占比,通过醒目的百分比数字让管理员快速把握平台风险水平。下方以四个指标卡片分别展示用户总数、对话会话数、消息总量和风险会话数,每个卡片附有简短的指标说明。

界面中部左侧运行指标区域展示管理员账号数量、启用知识库数量、知识条目总数和系统日志总数;右侧管理关注点区域以条目形式展示平台用户规模、知识支撑能力和运营风险的文字摘要。所有数据均通过后端总览接口实时获取,确保管理员看到的是最新的平台统计信息。

图 5.4 管理员总览界面

5.5 知识库管理页面实现

知识库管理界面为管理员提供完整的知识库生命周期管理功能。界面左侧为知识库列表,展示所有已创建的知识库及其启用状态,管理员可以点击切换当前操作的知识库。右侧主区域展示当前知识库的详细信息,包括名称、描述、启用状态以及文档数、分段数、检索状态和最近更新时间等统计指标。

知识库操作栏提供新增知识库、上传文档、启动知识库和删除知识库四个主要按钮。新增知识库时弹出模态框,管理员填写名称和描述后确认创建。上传文档时弹出上传模态框,管理员选择本地文件并填写文档标题、分类和来源,系统支持文本文档、Markdown文档、CSV文件、JSON文件和Word文档格式。分段数据区域以列表形式展示知识库中的所有知识切片,每个切片显示所属文档名、切片索引、分类、来源和创建时间,点击可查看切片的具体内容。搜索功能允许管理员输入关键词在当前知识库中检索相关切片,验证知识库的覆盖效果。

图 5.5 知识库管理页面

5.6 数据管理页面实现

数据管理界面包含全部对话数据和系统日志两个标签页。全部对话数据标签页以表格形式展示全平台所有用户会话,表格列包括会话标识、用户名称、会话标题、摘要、消息数量、风险标记、更新时间,并提供删除操作按钮。管理员可以按用户名、标题、摘要或会话标识进行搜索过滤,删除会话时需确认操作,确认后系统将级联删除该会话的所有消息、对话状态和槽位摘要。

图5.6 数据管理页面

系统日志标签页以表格形式展示系统运行日志,表格列包括日志标识、日志级别、所属模块、日志内容和时间戳。日志按时间倒序排列,支持按级别、模块、内容或日志标识进行搜索,支持分页浏览。日志级别使用彩色标签区分信息、警告和错误类型,便于管理员快速定位问题。

图5.7 系统日志页面

6 系统测试

6.1 测试目的

系统测试的目的是验证本系统是否满足需求分析阶段确定的功能和非功能要求,发现系统中可能存在的缺陷和错误,确保系统在实际运行环境中的正确性、稳定性和可靠性。通过测试,可以确认用户认证、多轮对话、知识库管理、数据管理等核心功能是否按预期工作,同时检验系统在异常输入、高并发等情况下的容错能力和性能表现。测试结果将为系统交付和后续维护提供依据。

6.2 测试方法

本系统采用黑盒测试方法,即在不关注内部代码实现细节的前提下,根据需求规格说明设计测试用例,验证系统的输入输出是否符合预期。功能测试覆盖所有用户界面和主要业务流程,包括正常场景和部分异常场景。测试环境与开发环境一致,后端服务运行于本地服务器,前端通过浏览器访问。测试过程中记录每个测试用例的执行结果,对于发现的问题进行定位和修复后重新测试,直至所有功能通过验证。

6.3 功能测试

针对系统的主要功能模块设计测试用例,包括用户登录与注册、普通用户对话台、管理员总览、知识库管理、数据管理和历史对话查看。每个功能模块对应一个测试用例表,表中详细描述了测试角色、测试场景、前提条件、测试步骤、预期结果和实际结果。实际结果均与预期一致,表明系统功能符合设计要求。

登录注册模块是系统的入口,测试用例覆盖用户注册、登录成功、登录失败以及角色跳转等场景。

表6.1 登录与注册功能测试用例

|-------|----------|----------------|-----------------------------------------------|----------------------|-------|
| 测试角色 | 测试场景 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 |
| 未注册用户 | 注册新账号 | 系统正常运行,用户名未被占用 | 1. 访问登录页面 2. 点击去注册按钮 3. 输入用户名、密码和姓名 4. 点击注册按钮 | 注册成功,提示注册成功,页面切换回登录页 | 与预期一致 |
| 普通用户 | 正确登录 | 已注册普通账号 | 1. 输入正确的用户名和密码 2. 点击登录按钮 | 登录成功,跳转至对话台页面 | 与预期一致 |
| 管理员 | 正确登录 | 管理员账号已初始化 | 1. 输入管理员用户名admin和密码123456 2. 点击登录按钮 | 登录成功,跳转至管理员总览页面 | 与预期一致 |
| 任意用户 | 密码错误登录 | 已注册账号 | 1. 输入正确的用户名和错误的密码 2. 点击登录按钮 | 提示用户名或密码错误,停留在登录页面 | 与预期一致 |
| 任意用户 | 用户名不存在登录 | 无 | 1. 输入不存在的用户名和任意密码 2. 点击登录按钮 | 提示用户名或密码错误,停留在登录页面 | 与预期一致 |

对话台是普通用户的核心功能界面,测试用例覆盖新建会话、发送消息、流式回复、生成问诊建议和查看知识命中预览等场景。

表6.2 对话台核心功能测试用例

|------|-------------|-------------|-------------------------------|---------------------------------------|-------|
| 测试角色 | 测试场景 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 |
| 普通用户 | 新建会话 | 用户已登录对话台 | 1. 点击新建会话按钮 | 创建新会话,消息列表清空,会话列表中显示新会话 | 与预期一致 |
| 普通用户 | 发送消息并接收流式回复 | 已创建会话 | 1. 在输入框中输入我头痛发热两天 2. 点击发送消息按钮 | 用户消息立即显示,系统回复逐字逐句流式输出,右侧面板更新问诊进度和槽位摘要 | 与预期一致 |
| 普通用户 | 生成问诊建议 | 会话中已有至少一轮对话 | 1. 点击生成问诊建议按钮 | 系统生成综合建议并显示在消息列表中,消息带有问诊建议标记 | 与预期一致 |
| 普通用户 | 查看知识命中预览 | 已创建会话 | 1. 在输入框中输入咳嗽胸闷 2. 停顿约1秒 | 右侧知识命中标题区域显示检索到的知识库标题列表 | 与预期一致 |
| 普通用户 | 切换会话 | 已存在多个会话 | 1. 点击左侧会话列表中的其他会话 | 消息流切换为该会话的历史消息,右侧状态和槽位同步更新 | 与预期一致 |

管理员总览界面展示平台核心指标,测试用例验证各项统计数据是否正确显示。

表6.3 管理员总览功能测试用例

|------|----------|---------------------|---------------------------------------------|---------------------------------|-------|
| 测试角色 | 测试场景 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 |
| 管理员 | 查看平台总览指标 | 管理员已登录,系统中存在用户和会话数据 | 1. 登录后默认进入总览页面 2. 查看用户总数、会话总数、消息总数、风险会话数等卡片 | 各项指标与实际数据库记录一致,风险会话占比正确计算 | 与预期一致 |
| 管理员 | 查看运行指标 | 管理员已登录总览页面 | 1. 滚动页面至运行指标区域 | 显示管理员账号数量、启用知识库数量、知识条目总数和系统日志总数 | 与预期一致 |
| 管理员 | 查看管理关注点 | 管理员已登录总览页面 | 1. 滚动页面至管理关注点区域 | 显示平台用户规模、知识支撑能力和运营风险的文字摘要 | 与预期一致 |

知识库管理界面提供知识库的完整生命周期管理,测试用例覆盖创建知识库、上传文档、启用知识库、搜索知识和删除知识库等操作。

表6.4 发送消息与流式回复测试用例

|------|----------|---------------|----------------------------------------------------|------------------------------|-------|
| 测试角色 | 测试场景 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 |
| 管理员 | 创建知识库 | 管理员已登录知识库管理页面 | 1. 点击新增知识库按钮 2. 输入知识库名称和描述 3. 确认创建 | 知识库列表中出现新知识库,右侧显示其详情 | 与预期一致 |
| 管理员 | 上传文档到知识库 | 已选择一个知识库 | 1. 点击上传文档按钮 2. 选择本地的文本文档或Word文档 3. 填写标题和分类 4. 确认上传 | 文档被切分为多个知识条目,分段数据区域显示新增的切片记录 | 与预期一致 |
| 管理员 | 启用知识库 | 已选择一个未启用的知识库 | 1. 点击启动知识库按钮 2. 确认启动 | 知识库状态变为已启用,后续对话将检索该知识库 | 与预期一致 |
| 管理员 | 搜索知识库内容 | 知识库中已有知识条目 | 1. 在搜索框中输入关键词如发热 2. 点击搜索按钮 | 显示包含该关键词的知识条目列表 | 与预期一致 |
| 管理员 | 删除知识库 | 已选择一个知识库 | 1. 点击删除知识库按钮 2. 确认删除 | 知识库从列表中移除,其下所有知识条目也被删除 | 与预期一致 |

数据管理界面包含全部对话数据和系统日志两个标签页,测试用例覆盖会话查看、搜索、删除以及日志查看和搜索功能。

表6.5 数据管理功能测试用例

|------|----------|---------------|---------------------------|------------------------------|-------|
| 测试角色 | 测试场景 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 |
| 管理员 | 查看全量会话列表 | 管理员已登录数据管理页面 | 1. 默认进入全部对话数据标签页 | 表格显示所有用户的会话记录,包含用户、标题、消息数等字段 | 与预期一致 |
| 管理员 | 搜索会话 | 会话列表中存在多条记录 | 1. 在搜索框中输入某个用户名 2. 按回车搜索 | 表格仅显示匹配该用户名的会话 | 与预期一致 |
| 管理员 | 删除会话 | 会话列表中存在至少一条记录 | 1. 点击某条会话对应的删除按钮 2. 确认删除 | 该会话从列表中消失,对应的消息和状态数据也被删除 | 与预期一致 |
| 管理员 | 查看系统日志 | 管理员已登录数据管理页面 | 1. 点击系统日志标签页 | 显示日志表格,包含级别、模块、内容和时间,按时间倒序排列 | 与预期一致 |
| 管理员 | 搜索日志 | 日志列表中存在多条记录 | 1. 在搜索框中输入某个模块名称 2. 按回车搜索 | 表格仅显示匹配该模块的日志记录 | 与预期一致 |

历史对话界面供普通用户查看自己过往的咨询记录,测试用例验证列表展示和搜索功能。

表6.6 历史对话查看功能测试用例

|------|----------|--------------------|--------------------------------------|---------------------------------|-------|
| 测试角色 | 测试场景 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 |
| 普通用户 | 查看历史会话列表 | 用户已登录,该用户至少有一个历史会话 | 1. 点击历史对话菜单 | 表格显示当前用户的所有会话,包含标题、摘要、创建时间和更新时间 | 与预期一致 |
| 普通用户 | 搜索历史会话 | 历史会话列表中存在多条记录 | 1. 在搜索框中输入某个关键词 2. 按回车搜索 | 表格仅显示匹配该关键词的会话 | 与预期一致 |
| 普通用户 | 数据隔离验证 | 存在多个普通用户账号 | 1. 使用用户A登录查看历史会话 2. 退出后使用用户B登录查看历史会话 | 用户A只能看到自己的会话,用户B只能看到自己的会话,互不干扰 | 与预期一致 |

相关推荐
MC皮蛋侠客1 小时前
OPC UA 系列(一):标准全景与 Python 最小闭环——让第一条设备数据流动起来
开发语言·python·opcua
用户3721574261351 小时前
使用 Python 提取 Word 文档中的表格数据
python
有味道的男人1 小时前
得物详情 API|支持实时价格、成色、鉴别服务数据
windows·python·api
小溪学编程1 小时前
Java BufferedReader 详解:从基础用法到性能优化
java·python·性能优化
2601_962300471 小时前
基于Python与Tkinter的ADB Monkey自动化测试脚本开发
python·adb·tkinter·android测试·gui自动化
SamChan901 小时前
PDF翻译后的格式完整性校验:用Python自动比对译文与原文档的表格与段落结构
开发语言·python·ai·pdf·机器翻译
2601_962077982 小时前
Python是一门什么样的语言?
python·编程语言·解释器·编译型·解释型
用户019027581612 小时前
不用 SDK 也能取 A 股数据:AlphaFeed REST API 用 cURL/HTTP 直连教程
python
旋生万物2 小时前
素数都排在等角螺线上?用螺旋数论给黎曼猜想画一张“几何画像“(附Python)
python·ai编程·数论·黎曼猜想·素数分布