尚硅谷大模型技术之高频面试题
版本:V2.1.9
历史项目 / 互联网医疗智能RAG客服项目(Rasa Pro)

互联网医疗智能RAG客服项目(Rasa Pro)

8 个问题

项目周期#

  • 2人团队,总计约5.5个月。
  • 需求分析与技术选型2周
  • 环境搭建与熟悉框架3周
  • 基础任务流开发与集成4周
  • 测试与部署2周
  • GraphRAG流程开发1周
  • 集成与调试2周
  • LLM微调数据准备2周
  • LLM微调与评估1周
  • 模型部署与测试2周
  • 更多任务流扩展4周

功能介绍#

基于Rasa Pro框架结合LLM和知识图谱构建的互联网医疗智能客服系统,主要有以下功能:

提供任务型对话,根据预设流程进行对话,通过多轮对话交互帮助用户完成特定任务,如挂号预约、检查预约、查看病历相关业务流程等。

提供知识库问答对话,基于知识图谱和GraphRAG,支持疾病信息咨询、症状解读、预防手段查询等复杂问题和多跳推理。

支持意外对话修复和闲聊,接入LLM支持用户的非业务对话,并对回复内容做出严肃限制,避免涉及敏感内容的回复。

实现流程#

Q调用流程#

部署服务:Rasa Pro + LLM(vllm部署) + 知识图谱(neo4j)+ Embedding模型(fastapi+uvicorn)

后端服务:Rasa提供restful接口,供前端调用。

前端服务:公司自研web、app,调用后端服务。

Q实现流程#

用户query

=》Rasa对话理解(读取tracker store,调用LLM)

=》Rasa对话管理器(执行flow或者pattern)

-》匹配到flow,执行flow和对应的action,返回结果

-》未匹配到flow,执行pattern_search -> 执行企业搜索策略 -> 调用GraphRAG

-》标签路由:LLM识别问题涉及的节点类型和实体

-》节点检索:使用混合检索找到候选入口节点

-》Cypher生成:LLM根据入口节点和问题生成Cypher查询语句

-》语句验证:验证Cypher语句的正确性

-》语句校正:如有错误则进行校正

-》执行查询:在Neo4j中执行Cypher查询

-》返回结果:将查询结果返回

-》pattern_search无结果-》最终回退到pattern-chat闲聊

-》更新tracker store:添加新对话、更新slot等

=》Rasa NLG:将结果输入到LLM上下文,由LLM生成回复

技术细节#

QRasa Pro框架介绍#

CALM由三部分组成:对话理解、对话管理、响应生成#
对话理解:#

当用户发送消息时,LLM命令生成器从tracker store读取完整对话记录与已收集的信息,调用LLM,识别用户意图、提取槽位,并生成下一步的命令列表,发送给对话管理器。

这里prompt的内容包括:

① 任务描述

② 可用的Flows和Slots(开启流程检索,只放匹配度高的几个流程)

③ 可用操作:start flow、set slot、search and reply等

④ 通用指令:指令+描述

⑤ 决策规则表:满足xx条件,触发xx指令=》生成xx命令

⑥ 当前状态:活跃的flow、当前请求的slot和已填充的slots等

⑦ 对话历史

⑧ 要求生成最新命令序列

这里使用的SearchReadyLLMCommandGenerator,可以触发RAG。

对话管理:#

对话管理器接收命令序列,采取下一步操作:

启动、停止或回复流程

对话模式流程处理意外交互

执行企业搜索RAG

收集信息

触发action

响应生成:#

利用上下文响应重述器,生成自然的回复,提高对话的流程性和连贯性。

这里配置了LLM进行对执行结果的重述响应。

Rasa构建AI助手流程#
配置rasa:pipeline、policy、endpoint等#
根据业务设计和用户行为设计流程。#
编写流程中设计的槽位、响应、动作等。#

自定义动作通过继承Action类并重写run方法来实现,可以调用外部API,查询数据库或执行其他逻辑。

槽位和对话历史会自动存储在track store中。

训练并调试助手。在调试过程中将对话保存为端到端测试示例。#
微调小型语言模型用于执行命令生成任务。将其部署并集成到Rasa中。#

Q任务型对话#

在流程中定义一个业务操作的各个步骤。

通过槽位存储操作过程中所需的信息。

通过定义响应来引导LLM如何回复用户。

通过编写自定义动作来调用外部API,查询或操作业务数据库,来获取业务相关信息或执行用户操作。

Q信息型对话#

结合知识图谱与GraphRAG,支持复杂的疾病查询、症状解读等功能。

Q生成命令生成模型微调数据#

准备覆盖重要对话流程的端到端测试数据,执行rasa命令生成微调数据集。

Q命令生成模型微调与部署#

数据集#

由Rasa合成数据模块生成,覆盖高频步骤路径与边界场景(如模糊意图、多意图、口语化表达等)。

共计约1万条样本,按8:2划分训练集和验证集。

训练集:8000条左右。

验证集:2000条左右。

模型训练#

Q信息型对话(GraphRAG)#

LLM根据Prompt从用户输入中提取入口节点实体和其对应的类型。

获取入口节点实体和标签之后,使用混合检索从Neo4j中检索出若干候选入口节点。

LLM根据用户输入、候选入口节点、Neo4j的schema信息,生成Cypher查询语句。

将生成的Cypher语句交给LLM进行验证,返回Cypher中的存在的语法与逻辑错误。

LLM根据验证出的错误信息对Cypher进行修正,得到最终的Cypher语句。

执行查询语句,将查询结果返回LLM作为上下文参考。

LLM根据用户输入和上下文参考生成回复。

项目总结#

该项目实现了基于Rasa Pro框架的互联网医疗智能客服系统,集成了大语言模型、任务型对话流程管理、知识图谱和GraphRAG。

能够自动化处理挂号预约、检查预约、住院管理、病历查看、疾病症状咨询等核心业务场景,提供高效的客户服务解决方案。

项目主要包含任务型对话部分和信息型对话部分,支持闲聊。

任务型对话针对结构化的目标导向任务,如挂号预约或检查报告查询,通过预定义流程管理输入输出。

信息型对话则集成RAG和GraphRAG,利用外部知识库响应用户问题,如疾病信息咨询、症状解读等。

首先我们使用Rasa Pro框架构建AI助手,基于CALM(对话理解、管理、响应生成)设计流程。

在对话理解中,采用SearchReadyLLMCommandGenerator,根据prompt将用户消息转换为命令。多轮对话的对话历史、槽位信息由tracker store存储和更新。

prompt包括当前状态、对话历史、可用流程/槽位/动作、可用操作、决策规则等。

对话管理接收命令执行操作,如路由流程、收集信息、执行动作、或处理意外交互,通过对话模式(如修复、导航、外部支持)处理非线性对话。

响应生成利用上下文重述器生成自然回复。

构建流程时,在YAML文件中定义流程ID、描述和步骤,包括收集信息、执行动作、设置槽位等;编写槽位存储信息、响应引导回复、自定义动作调用外部API或数据库。

为优化命令生成并提高响应速度,我们准备了端到端测试数据,使用Rasa命令标注模块提取命令,合成数据生成模块创建重述版本,最终生成微调数据集。

数据集覆盖高频路径和边界场景,共计约1万条样本,训练集8000条、验证集2000条。

预训练模型选择Qwen3-8B,采用LoRA微调。训练时使用4bit量化、梯度检查点、bf16精度。每设备训练批次大小2,梯度累计步数8;使用Unsloth在V100单卡上训练。

之后使用vllm部署模型,最大序列长度4096。

对于信息型对话我们结合了知识图谱和GraphRAG。

LLM从用户输入提取入口节点实体和类型,使用混合检索从Neo4j中获取候选节点。

根据用户输入、候选节点和schema生成Cypher查询语句,之后LLM验证并修正语法逻辑错误。

得到修正后的Cypher语句后执行查询,将结果作为上下文参考生成回复。

结合任务型对话和信息型对话功能,最终实现了支持多场景的AI助手,可满足不同业务的需求。