1 关注者 · 503 帖子

SQL 是在关系数据库中存储、操作和检索数据的标准语言。

新增
文章 Lilian Huang · 七月 10 8m read

大多数“AI 代理 + FHIR”项目最终都呈现出相同的架构:这边是一个 FHIR 服务器,那边是一个向量数据库,中间则是一个 Python 服务,其职责是调用嵌入 API、在两端之间转换浮点数数组,并保持两个数据存储库的同步。 三个活动组件、两次网络跳转,以及一个你从此永久拥有的嵌入式客户端。

Triage Park:我们 提交给InterSystems 编程大赛:FHIR AI Agent的参赛作品完全没有这些复杂结构。该代理从不计算嵌入向量,也从未导入过 OpenAI 嵌入向量客户端。 没有向量数据库。它将原始文本发送给 IRIS,剩下的工作由 IRIS 完成:它在服务器端计算嵌入向量,并通过针对与 FHIR 存储库位于同一数据库*中的表执行单条 VECTOR_COSINE SQL 语句来响应检索请求。

这就是 IRIS for Health 的“AI Hub”模式,一旦我采用该模式,我自己的代码中整整一层就消失了。以下是它的具体工作原理。

问题在于:分诊人员需要快速获得指导方针

Triage Park 是一款对话式分诊助手。患者描述症状(“我上楼梯时胸口发紧”),由大型语言模型(LLM)支持的助手会读取患者的真实 FHIR 病历,并生成分诊决策:自我护理 / 看全科医生 / 急诊护理 / 急诊科,同时附上依据说明。

“引用依据”(Cited rationale)是关键所在。

0
0 6
新增
文章 Kelly Huang · 七月 9 5m read

在开始开发“智能出院导航器(Smart Discharge Navigator)”时,我遇到了一个常见的难题:FHIR 数据以 JSON 数据包的形式存储,但我所需的分析需要将多个资源进行关联,而这正是 SQL 所擅长的领域。

InterSystems FHIR SQL Builder 彻底解决了这一问题。我无需在应用程序代码中解析 JSON 数据包,而是能够直接在 IRIS for Health 中针对 FHIR 资源投影编写纯 SQL 语句。本文将详细介绍我如何利用该工具构建了该应用程序核心——基于人群的再入院风险评分引擎。


临床问题

30 天内的医院再入院是医疗保健领域成本最高且本可预防的问题之一,每年给美国医疗系统造成 170 亿美元的损失。挑战并不在于事后识别风险因素,而在于在恰当的时机——即患者出院前——及时发现这些风险因素。

为了评估再入院风险,我需要针对每位患者同时回答以下五个问题:

  • 该患者近期住院过几次?
  • 该患者是否患有多种活动性慢性病?
  • 该患者目前是否正在服用五种或更多种药物(多药联用)?
  • 病历中是否有任何异常实验室检查结果?
  • 是否有缺席随访的情况?

如果通过 Python 解析 FHIR 数据包来回答这五个问题,不仅速度慢,而且容易出错。而 FHIR SQL Builder 则让这一切变得简单明了。


0
0 6
新增
文章 Claire Zheng · 七月 8 12m read

摘要

常见表表达式(CTE)为在SQL语句中定义可重用的中间结果集提供了一个结构化的框架。InterSystems IRIS通过WITH子句实现CTE,在与IRIS基于成本的优化器完全集成的情况下,能实现更清晰的查询构建,又能支持模块化的分析处理

本文探讨了 InterSystems IRIS 中 CTE 的语义,解释了其与查询优化的交互关系,讨论了合适的部署场景,并提供了可执行的示例,以说明生产环境中的实用模式。


  1. 引言

复杂的 SQL 工作负载通常需要多个逻辑处理阶段(例如过滤、聚合、数据增强和投影)。如果没有抽象机制,这些操作往往会导致查询结构深度嵌套,难以理解和维护。

常见表表达式(CTE)通过允许开发人员定义可在单个 SQL 语句中求值的命名查询组件,解决了这一问题。

在 InterSystems IRIS 中,CTE 通过 SQL 的 WITH 子句实现,并作为逻辑查询表达式运行,与周围的语句一同进行优化 [1]。


  1. InterSystems IRIS 中的常见表表达式

2.1 定义

公共表表达式(Common Table Expression)是在 SELECT 语句之前声明的命名子查询:

WITH PersonSubset AS (
  SELECT ID, Name, Age
  FROM Sample.Person
)
SELECT Name
FROM PersonSubset
0
0 9
新增
文章 Claire Zheng · 七月 6 15m read

太长不读版(TL;DR:):本文演示了如何利用iris-vector-graph包,完全在 InterSystems IRIS 环境中实现 GraphRAG 风格的混合检索——该方法结合了向量相似度、图遍历和全文搜索。 我们通过一个欺诈检测场景,展示了图模式如何揭示仅靠向量搜索无法发现的问题。


为何欺诈检测需要图技术

每年,企业和消费者因欺诈损失数十亿美元。仅在2024年,消费者报告的损失就达125亿美元——同比增幅达25%。 现代欺诈之所以难以被发现,是因为欺诈者很少单独行动。他们通过有组织的网络运作,实施协调一致的骗局,利用我们无法察觉看似无关的交易之间存在关联这一弱点。

举个简单的例子:从账户 A 转账至账户 B 的单笔交易看起来完全正常。金额合理,时间点符合常规,且两个账户均未被标记为可疑。传统的基于规则的系统,甚至那些孤立分析交易的机器学习模型,都会毫不犹豫地批准这笔交易。

但如果我们能看到全局呢?

image

同一笔交易其实是环形模式的一部分——资金在循环流动,每一步都会被截留一小部分。这是一种典型的洗钱结构,对于任何不分析交易关联性的系统来说,都是隐形的。

这一洞见——即欺诈隐藏在关联关系中,而非单个记录中——正是图数据库成为欺诈检测不可或缺工具的原因。

0
0 12
文章 Nicky Zhu · 六月 17 8m read

在上一篇文章中,我们探讨了 IRIS 中单元测试的基础知识以及将其应用于 REST API 的方法。我们甚至还了解了如何在最终确定网络配置和身份验证之前测试逻辑,从而使我们能够专注于测试 API 内容。

今天,我们将在此基础上使用另一个工具来提升我们的单元测试策略:%Populate

乍一看,%Populate类似乎非常简单。你可以创建一个同时扩展了 %Persistent%Populate的类,并继承一个用于生成随机记录的 方法。该工具可识别某些字段名称(如 "Name"、"SSN" 和 "Phone"),并应用专门的逻辑来确保数据的真实性。如果某个字段名称没有被识别为特殊字段名称,就会按照其指定的数据类型填充随机值。

假设我们开发了这样一个具有以下属性的类,用来跟踪商店中一些基本的客户信息(我们的类还扩展了 ,这在后面会派上用场):

Class User.CustomerList Extends (%Persistent, %Populate, %JSON.Adaptor)
{
    Property Name As %String;
    Property DOB As %Date;
    Property Age As %Numeric(SCALE = 0);
    Property IsMember As %Boolean;
    Property MemberID As %String(POPSPEC = ".GenID()");
}
0
0 68
文章 Claire Zheng · 六月 16 7m read

大家好,

你是否曾希望你的电子健康记录(EHR)能具备思考能力?不仅仅是显示数据,也不仅仅是触发警报。而是能够真正阅读病历、综合临床指南进行分析,并根据临床医生的单条信息,向系统生成结构化的转诊医嘱。

在本文中,我将向大家展示如何创建您自己的定制临床AI助手。


🏥 关于 iris-fhir-agents 应用

iris-fhir-agents是一个完全基于 InterSystems IRIS for Health 构建的多智能体临床 AI 平台

0
0 19