[控场AI]
· 5 分钟阅读· 2,728 字

用FalkorDB构建自主语音医疗代理:14ms完成急救分诊

用FalkorDB构建自主语音医疗代理:14ms完成急救分诊

开发者用FalkorDB图数据库构建急救语音代理,14毫秒完成5跳查询并自主预留ICU床位。

CareGraph AI是开发者Roshni Mishra在FalkorDB Graph Hacks中构建的自主语音急救分诊代理。文章指出向量搜索擅长文本相似度却无法处理结构化图约束,关系型SQL在5跳以上连接时延迟飙升,而FalkorDB基于Redis模块与GraphBLAS稀疏矩阵,将多跳遍历转化为矩阵运算,使5跳查询稳定在14毫秒左右。系统以医疗知识图谱建模患者、症状、疾病、药物、医院、医生与床位,单个Cypher查询即可完成症状匹配、过敏禁忌检查、医院与专科医生定位及床位预留。查询返回后代理通过语音安抚患者、经Twilio外呼医院急诊台、实时变更床位状态并创建可查询的会话记忆节点,24小时后自动随访。技术栈整合FalkorDB、Deepgram、Murf Falcon、Twilio、LiveKit与Next.js,已开源部署于Vercel。

大多数医疗AI项目只是礼貌的问答机器人:你说发烧,它建议喝水看医生。但真正的急救分诊需要实时连接症状、过敏史、医院床位和专科医生,并在救护车出发前采取行动。开发者Roshni Mishra在FalkorDB Graph Hacks中构建了CareGraph AI——一个基于图数据库的自主语音代理,能在14毫秒内完成5跳关系查询,自动预留ICU床位并通知医生。

CareGraph AI项目概览

为什么向量搜索和SQL在急救场景失效

构建之前,作者考虑过用Pinecone或Postgres。但向量嵌入擅长文本相似度(比如“肺炎症状有哪些”),却对结构化图约束无能为力:找到15公里内既有空余ICU床位、又有值班肺科医生、同时要标记患者青霉素过敏的医院——这需要图连接,而不是向量检索。

关系型SQL在5跳连接时性能急剧下降。连接患者->症状->疾病->禁忌药物->医院->专科医生->空余床位需要6层嵌套JOIN,并发急救查询下延迟飙升。而FalkorDB作为Redis模块,用稀疏矩阵和GraphBLAS线性代数存储图,多跳遍历本质是矩阵乘法,延迟稳定在15毫秒以内。

Cypher查询语言是图数据库领域广泛采用的声明式查询语言,专为属性图模型设计,语法上以MATCH、WHERE、RETURN等子句描述节点与边的模式匹配,例如(p:Patient)-[:HAS_SYMPTOM]->(s:Symptom)。与SQL需要显式书写多表JOIN不同,Cypher通过箭头和括号直观表达多跳路径,数据库引擎可据此自动优化遍历顺序。FalkorDB兼容OpenCypher标准,因此熟悉Neo4j的开发者可以低成本迁移。在急救分诊这类需要沿多条关系快速扩展的场景中,Cypher的表达力和引擎的多跳优化能力直接决定了端到端延迟。

GraphBLAS是一套用于图算法的线性代数标准接口,其核心思想是把图表示为稀疏邻接矩阵,并将广度优先搜索、多跳可达性等操作转化为矩阵乘法或半环运算。FalkorDB基于Redis模块实现,底层用稀疏矩阵存储节点与边,多跳遍历因此可以借助高度优化的C语言矩阵内核并行执行,避免了传统图数据库逐条指针跳转的开销。这正是文中“5跳查询稳定在15毫秒以内”的技术根基:跳数增加时,计算量体现为矩阵维度的增长而非嵌套循环的爆炸,延迟曲线更加平缓,适合并发急救查询。

医疗知识图谱的架构设计

CareGraph AI的核心是一个医疗知识图谱,节点包括患者、症状、疾病、药物、医院、医生和床位,边表示“表现出”“指示”“禁忌”“雇佣”“拥有床位”等关系。例如,患者Ramesh对青霉素过敏,症状高烧指示急性肺炎,肺炎需要肺科医生,而BHU中心雇佣了Dr. Verma并拥有可用ICU床位。

这种显式的关系建模避免了将大量医院目录和过敏指南塞进LLM上下文窗口,从而减少幻觉。代理的决策历史也作为AgentSession节点存储在图中,形成可查询的结构化记忆,而非杂乱的聊天日志。

一个Cypher查询完成分诊与资源匹配

当患者通过语音描述症状,音频经Deepgram转为文本后,代理执行一个5跳Cypher查询:匹配患者症状到高风险疾病,交叉参考过敏禁忌,遍历找到同时拥有对症专科医生和空余ICU床位的医院,返回诊断、过敏警告、目标医院、值班医生和床位数。

这个查询一次性完成诊断、禁忌检查、医院选择、医生分配和床位定位。据作者测试,该查询在FalkorDB上执行时间约14毫秒。

从对话到行动:闭环急救响应

找到医院只是第一步。午夜呼吸困难的患者需要行动,而非建议。查询返回后,代理立即:

  1. 语音安抚患者:使用Murf Falcon的低于250毫秒语音合成(hi-IN-shweta),用印地语或英语告知患者正在预留ICU床位。
  2. 自主PSTN外呼:通过Twilio向医院急诊台发起电话,播报患者信息、过敏警告和值班医生通知。
  3. 图状态变更:实时将床位节点标记为不可用并关联患者。
  4. 持久会话记忆:创建AgentSession节点,24小时后自动触发随访电话,查询患者恢复情况。

PSTN(公共交换电话网)外呼指通过传统电话网络主动发起语音通话,而非依赖互联网协议。Twilio的REST API将这一能力封装为可编程接口:开发者提交被叫号码与TwiML指令,Twilio即代为拨号并在接通后播放语音或执行交互逻辑。在急救场景中,这意味着代理无需人工介入即可直接呼叫医院急诊台,播报患者过敏史与床位预留请求。相比短信或应用推送,PSTN的优势在于覆盖任何一部固定电话或手机,医院值班台通常也以此作为首要联络渠道,确保关键信息在秒级触达。

技术栈与部署

  • 图引擎:FalkorDB(Cypher查询语言 + GraphBLAS线性代数)
  • 语音管道:Murf Falcon(多语言印度TTS) + Deepgram Nova-2 STT
  • 通信:Twilio REST API + LiveKit WebRTC
  • 前端:Next.js 14 + Tailwind CSS + 交互式Canvas图物理
  • 部署:Vercel边缘网络

LiveKit WebRTC是一套开源的实时音视频基础设施,基于WebRTC协议提供低延迟的音频轨道传输、房间管理与服务端SDK。在语音代理架构中,它负责在患者浏览器或移动端与后端代理进程之间建立双向音频流,使STT(语音转文本)和TTS(文本转语音)可以在近乎实时的回路中运行。与传统的电话语音网关相比,WebRTC路径端到端延迟通常更低,且天然支持Web前端集成,与Next.js前端和Twilio外呼形成互补:前者服务在线患者,后者触达医院电话系统。

图数据库带来的三点启示

上下文不膨胀:关系由图的边显式强制,无需将大量文档塞入LLM上下文,降低幻觉风险。

图记忆可扩展:将会话和决策存储为节点,记忆变成结构化历史,可用Cypher查询。

速度决定生死:FalkorDB的C语言矩阵实现让多跳急救查询稳定在14毫秒左右,满足实时性要求。

项目已在Vercel部署并提供GitHub开源代码,作者邀请开发者交流agentic memory和图协调的实践。

分享:

相关推荐