搜索​​​​

清除过滤器
文章
Michael Lei · 四月 9

Open AI 与 IRIS 集成 - 文件管理

人工智能不仅限于通过带有说明的文本生成图像,或通过简单的指示创建叙事。您还可以制作图片的变体,或为已有图片添加特殊背景。此外,您还可以获得音频转录,无论其语言和说话者的语速如何。让我们来分析一下文件管理是如何工作的。 问题描述 在分析 OpenAI 有关需要将文件作为输入值的方法的信息时,必须使用 multipart/form-data 提供参数。 在 IRIS 中,我们知道如何使用 JSON 内容创建对 POST 方法的调用。但在这种情况下,使用带有 Base64 格式文件内容的参数并不实用。 要在多址/表单数据(multipart/form-data)中包含文件内容,必须使用%Net.MIMEPart.类。 要在我们的调用中包含文件,应创建一个与类对象 %Net.MIMEPart 相关联的 Content-Disposition 标头 set content = ##class(%Net.MIMEPart).%New() set contentDisposition = "form-data; name="_$CHAR(34)_"image"_$CHAR(34) set contentDisposition = contentDisposition_"; filename="_$CHAR(34)_fileName_$CHAR(34) do content.SetHeader("Content-Disposition",contentDisposition) 由于我们使用请求类来保留进程的值,因此我们必须将 Base64 内容转换为流,以构成内容的主体。 我们可以使用StreamUtils实用程序将 Base64 转换为流。 注意:"pImage"变量包含文件内容的 Base64 字符串。 Do ##class(HS.Util.StreamUtils).Base64Encode(pImage, .tStream) Set content.Body = tStream 不过,在 2023 年全球峰会上,我有幸从 InterSystems 专家那里学到了一个更好的技巧。他告诉我,这种执行方法比 StreamUtils 更有效,因为 StreamUtils 最后会循环读取字符串并记录到 Stream 中。这个解决方案就像使用 JSON 并将其转换为 Stream 的 Get 一样简单。 set contentfile = {} set contentfile.file = pImage set content.Body = contentfile.%Get("file",,"stream<base64") 在调用中包含了所需的所有参数后,我们就可以创建一个新的 MIMEPart 类来封装部件了。 Set rootMIME = ##class(%Net.MIMEPart).%New() do rootMIME.Parts.Insert(content) set writer = ##class(%Net.MIMEWriter).%New() set tSC = writer.OutputToStream(tHttpRequest.EntityBody) set tSC = writer.WriteMIMEBody(rootMIME) Set tContentType = "multipart/form-data; boundary="_rootMIME.Boundary set tSC = ..Adapter.SendFormDataArray(.tHttpResponse, "POST", tHttpRequest,,,url) 这就是我们如何将文件内容发送到我们在 OpenAI 中需要的方法。 Image files图像文件 图像方法允许您发送图片并进行变化。由于所有插图都必须是 PNG 格式,因此当我们以 Base64 格式指明文件内容时,文件名会随机生成,并带有 PNG 扩展名。下面是一个如何更改照片的示例。 Original Variation 正如你所看到的,程序以自己的方式解释指令。它认为公司的标志是一个圆圈,所以用另一个圆圈代替了它。它还发现办公室有一扇玻璃门,于是用另一扇玻璃门代替,但暂时用砖墙代替。此外,它还修改了衬衫的颜色,并改变了男子手臂的位置。此外,OpenIA 还允许您通过提供一个蒙版来编辑图像,蒙版上有您想要插入提示内容的区域。利用同一幅图像,我应用了一个去掉图像背景的蒙版。 Original Mask 当我要求它把我传送到牙买加海滩时,得到了如下结果: 现在,下次见到亲朋好友时,您就可以炫耀自己的假期了 😊 Image图像 Endpoint: POST https://api.openai.com/v1/images/variations 它允许你对已有的图像进行修改。由于它不需要提示您要如何修改,因此我们必须相信人工智能的品味,它会如何解释这张图片。此外,我们还可以定义大小和返回结果的方式,无论是通过链接还是 Base64 格式的内容。 输入参数如下: image: 必选 在这里,您要提及要转换的图像文件。 n: 可选. 默认为 1 在此区域,您可以决定生成图像的最大数量。(使用 1 到 10 之间的数字)。 size: 可选. 默认 1024x1024 定义图像大小,其数值必需为 “256x256”, “512x512”, 或者 “1024x1024”. response_format: 可选.默认是“url” 这个参数是关于您希望如何返回生成图像的格式。此处的值应为 "url "或 "b64_json"。 Endpoint: POST https://api.openai.com/v1/images/edits 它可以让你修改现有的图片,根据掩码文件,按照提示创建图片。此外,我们还可以指定尺寸和返回结果的方式,无论是通过链接还是 Base64 格式的内容。输入参数如下: image: 必选 如上. mask: 必选 这部分是关于所应用的蒙版图像文件. n: 可选,默认 1 如上 size: 可选,默认 1024x1024 如上 response_format: 可选. 默认是 “url” 如上 Audio files声音文件 OpenAI 管理的不仅仅是图像。我们还可以使用音频文件来获取所提供录音的转录或翻译。这种方法使用 Whisper 模型,可以区分专有名词、品牌和俚语,从而提供正确的转录和翻译。例如,将 "微型机器 "作为一个品牌来谈论,与将 "微型机器 "作为一个普通名词翻译成西班牙语是不一样的。下面的例子是对 80 年代一个著名广告插播的转录: 因此,指示 Whisper 为我们转录音频的结果如下: { "text": "This is the Micromachine Man presenting the most midget miniature motorcade of micromachines. Each one has dramatic details, terrific trim, precision paint jobs, plus incredible micromachine pocket playsets. There's a police station, fire station, restaurant, service station, and more. Perfect pocket portables to take anyplace. And there are many miniature playsets to play with and each one comes with its own special edition micromachine vehicle and fun fantastic features that miraculously move. Raise the boat lift at the airport, marina, man the gun turret at the army base, clean your car at the car wash, raise the toll bridge. And these playsets fit together to form a micromachine world. Micromachine pocket playsets, so tremendously tiny, so perfectly precise, so dazzlingly detailed, you'll want to pocket them all. Micromachines and micromachine pocket playsets sold separately from Galoob. The smaller they are, the better they are." } 多么神奇! 你觉得呢? 之所以能取得上述成果,是因为 Whisper 模型接受了训练。我们可以从 OpenAI 页面提供的下图中看到一些相关信息。 更多信息可以访问 https://openai.com/research/whisper 请记住,告知程序文件名至关重要,因为服务需要知道它正在处理的文件类型(如 WAV、MP3、OGG 等)。由于我们在调用中只包含 Base64 内容,因此还必须指明文件扩展名,以便用随机文本和建议的扩展名创建文件名。例如,St.OpenAi.Msg.Audio.AudioRequest 消息的 "类型 "属性可显示音频的种类: MP3、OGG、WAV、FLAC 等。 Endpoint: https://api.openai.com/v1/audio/transcriptions 通过这种方法,您可以将音频内容转录为有声语言。 输入参数如下: file: 必要 在这里,您可以指定要转录的音频文件(而不是文件名)。它支持以下格式: FLAC、MP3、MP4、MPEG、MPGA、M4A、OGG、WAV 或 WEBM model: 必要 用于转录的模型。目前只有 "whisper-1 "可用 language: 可选. 默认是音频语言. 如果指定的话,根据 ISO-639-1,可以提高准确率和延时. prompt: 可选. 这是一段可选的文字,用于引导模型的风格或延续上一段音频。此处的信息必须与音频语言一致。. response_format. 可选,默认为 “json”. 在这一部分中,您要明确转录输出的格式。请使用以下选项之一: "json"、"text"、"verbose_json"。 temperature: 可选,默认为 0. 采样温度应介于 0 和 1 之间。 0.8 等较高值会使输出更加随机,而 0.2 等较低值则会使输出更加集中和确定。如果设置为 0,模型将使用对数似然自动提高温度,直到达到特定阈值。 本方法的文档请参考 https://platform.openai.com/docs/api-reference/audio/createTranscription<. Endpoint: https://api.openai.com/v1/audio/translations 此方法可将音频内容翻译成英语。输入参数如下: file: 必要 它是您要翻译的音频文件(而不是文件名)。它支持以下格式: FLAC、MP3、MP4、MPEG、MPGA、M4A、OGG、WAV 或 WEBM model: 必要. 如上. prompt: 可选l. 这是一段可选的文字,用于引导模型的风格或延续上一段音频。此处的信息必须使用英语。 response_format. 可选. 默认是 “json”. 在这里,您可以用以下选项之一决定转录输出的格式: "json"、"text"、"verbose_json"。 temperature: 可选. 默认为 0. 如上 更多文档请查阅 https://platform.openai.com/docs/api-reference/audio/createTranscription. 下一步? 由于 OpenAi 在不断发展,下一次迭代将是将文本转换为音频的方法,以及其他一些新功能。如果您喜欢这篇文章,请记得点个 "赞"。
文章
jieliang liu · 四月 1

加快临床试验,扩大全球市场推广

此视频帮助大家了解InterSystems如何帮助CRO来加快临床数据采集和更快地推广市场。 演讲嘉宾: Jim Coutcher, Senior Director/Principal, Global Head of Enriched Studies, Real World Solutions, IQVIAQi Li, Physician Executive, InterSystemsMatt Stannard, life Sciences Advisor, InterSystems 欢迎大家来我们的 Bilibili主页观看更多视频!
文章
Claire Zheng · 三月 28

InterSystems通过矢量搜索扩展了InterSystems IRIS数据平台,支持下一代人工智能应用

2024年3月26日,InterSystems数据平台全球主管Scott Gnau发文,宣布InterSystems IRIS数据平台新增了矢量搜索(vector search)功能。 本文作者为Scott Gnau,InterSystems数据平台全球主管。 人工智能具备变革性潜力,能够从数据中获取价值和洞察力。我们正在迈向一个几乎所有应用都将通过人工智能来驱动的世界,随之而来的,是构建这些应用的开发人员需要正确的工具从这些应用中创造体验。因此,InterSystems非常高兴地宣布这一消息——IRIS数据平台新增了矢量搜索(vector search)功能。 在使用大型语言模型时,像矢量搜索这样的工具对于从海量数据集中高效、准确地检索相关信息至关重要。通过将文本和图像转换为高维矢量,这些技术可以支持快速比较和搜索,即便处理分散在整个组织、不同数据集的数百万个文件时也是如此。 InterSystems IRIS数据平台为下一代应用提供了统一基础 在InterSystems,我们始终在探寻各种方式,使下一代数据处理尽可能地离客户数据近一些,而无需将数据传输到特定系统。将矢量搜索功能添加至InterSystems IRIS数据平台后,我们可以通过矢量嵌入(vector embedding)对数据平台进行搜索,从而增强软件在自然语言处理(NLP)、文本和图像分析相关任务中的功能。这种集成将使开发人员能够更轻松地创建使用生成式人工智能的应用程序,以完成各种用例的复杂任务,并根据InterSystems处理的专有数据(proprietary data)提供即时响应。这也意味着他们可以使用精巧的矢量化索引来完成这项工作,同时对保持内部专有产权情报的安全充满信心。 这一功能支持InterSystems IRIS数据平台管理和查询内容及相关的密集矢量嵌入,特别是能够与RAG集成,开发基于生成式人工智能的应用。随着可用工具集的快速发展,无缝RAG集成可支持新模型和用例的敏捷采用。 这项技术能够给客户带来哪些益处? BioStrand是一家依赖于人工智能的药物发现公司,也是InterSystems创新计划(InterSystems Innovation Program)的一部分(该计划帮助初创企业在我们的IRIS平台上构建应用)。BioStrand的核心产品是Lensai平台,这是一种多功能解决方案,支持包括抗体药物发现和设计在内的各种应用。通过先进的算法,Lensai可以迅速识别并设计新型药物化合物,大大缩短了从开发到商业化的研发时间。该模型将采用先进堆叠技术的大型语言模型(LLM)的优势与BioStrand的专利技术HYFT独特地结合在一起。 HYFT是一种嵌入类型,在生物序列中充当独一无二的“指纹”,使BioStrand能够高精度地分配来自不同LLM的嵌入。这个基础模型代表着一个庞大且不断扩展的知识图谱,在6.6亿个数据对象中映射了250亿种关系,令人印象深刻。这个全面的图谱将整个生物圈的序列、结构、功能以及书目信息相互连接在一起。它还融合了检索增强生成、SQL矢量搜索等尖端技术,以及LLM的生成能力和知识图谱的语义表达能力。 矢量搜索将从根本上改变开发人员与IRIS的交互方式 在实施这项技术方面,我们还只是刚刚起步。随着客户与数据的交互方式因矢量搜索而得到改变,随着新的人工智能应用不断通过应用矢量搜索而得到开发,我们将分享更多客户故事。与此同时,我也推荐您访问我们的矢量搜索页面,了解更多信息。 我们加速创新,确保客户成功,并展示对卓越的承诺,与此同时,我们致力于维护最高标准的隐私、安全和责任,这将引导我们以一种深思熟虑、公正的方式对待人工智能,从而创造信任。我们相信,透明度、责任感和可解释性是建立对人工智能系统的信任并推动其创新的关键。
公告
Claire Zheng · 三月 26

相聚青岛|InterSystems诚邀您共赴2024 CHINC之约,即日起可预约展会Demo咨询

2024年3月29日-3月31日,由国家卫生健康委医院管理研究所主办、《中国数字医学》杂志社有限公司承办的“2024中华医院信息网络大会(CHINC)”将在青岛国际会展中心(红岛馆)举办。InterSystems诚邀您莅临展会,我们带来了内容丰富的Demo演示,包括:InterSystems IRIS 2024.1新特性、 InterSystems IRIS矢量存储和矢量查询、InterSystems FHIR数据资产化解决方案,以及InterSystems IRIS医疗版互联互通套件解决方案。 2024 CHINC期间,InterSystems在合作伙伴东华医为展位(B3馆-A02)设立Demo演示区,即日起即可预约现场Demo咨询,欢迎点击【此处】注册预约。 Demo演示详情 Demo演示: InterSystems IRIS 2024.1新特性 欢迎点击【此处】注册,预约Demo咨询 矢量查询 快速联机备份 (EAP) 多超级服务器端口SuperServer Ports FHIR R4 and R5 Object Model Generation IRIS for Health 支持 Smart on FHIR 2.0.0 FHIR查询的性能提升 新的监控指标 嵌入式Python BPL editor 灵活的Python版本设置 Demo演示: InterSystems IRIS矢量存储和矢量查询 欢迎点击【此处】注册,预约Demo咨询 InterSystems IRIS 提供全SQL的矢量存储和基于矢量相似度矢量查询能力 让业务数据无需迁移到其它平台就可以矢量化存储和查询 进一步通过集成矢量化语言模型、生成式语言模型,利用本地数据实现检索增强生成 Demo演示: InterSystems FHIR数据资产化解决方案 欢迎点击【此处】注册,预约Demo咨询 数据作为生产要素推动数字经济已成为我国国策。要让数据成为生产资料参与交易,则需满足两个条件:其一是建立数据生产、流通、消费环节中数据语义的一致性,使数据质量可被控制,数据价值可被度量;二是对数据进行按需加工,形成品类众多的半成品、预制件,以便适应各类业务场景的需要。也即:交易双方应对数据的含义和价值达成共识,这是能够交易的前提——这也正如在中国制造业高速发展的三十年中,标准化部件和预制件之于大规模生产的作用一样。 数据资产清单就是一种有助于在交易双方建立共识、进一步计量计价的有力工具。在医疗行业,FHIR可以成为语言基础,而SQL Builder则提供了FHIR数据资产清单。因此,“FHIR 存储库+SQL builder”能够构成盘活数据资产价值的解决方案。 InterSystems作为深耕医疗行业40余年的专业厂商,在IRIS for Health(IRIS医疗版)数据平台中,借助HL7 FHIR标准提供的语义基础,推出了集FHIR存储库、SQL Builder、FHIR API等功能于一体的医疗行业数据资产解决方案,用于满足医疗数据资产化的业务需要。 在本次解决方案展示中,我们将演示如何基于FHIR进行数据资产盘点,如何按需投放资产支撑数据集需求和数据应用,一遍盘活已成规模的行业数据。包括:1)使用SQL Builder投射SQL数据,在SQL上进一步支撑以数据集为基础的业务(数据集交易或BI),其中按需投放、最小化原则是重要的规约,而IRIS提供了这两种规约的直接支持。2)使用API支撑的业务,不仅仅是使用CRUD操作,FHIR的Search操作对于支撑CDSS等业务具有重要意义。 Demo演示: InterSystems IRIS医疗版互联互通套件 欢迎点击【此处】注册,预约Demo咨询 InterSystems IRIS医疗版互联互通套件是一个全面的解决方案,提供了一整套工具和标准,旨在支持互联互通成熟度测评和通过测评之后的数据利用。它提供了满足互联互通成熟度测评的符合性基础,包括数据元与值集标准以及基于互联互通规范的69个服务和53个电子病历共享文档。此外,该套件还赋能数据利用,能够将电子病历共享文档转换成FHIR资源并存储,通过FHIR SQL Builder实现FHIR资源到SQL表的转换,从而支持数据分析,这一功能打通了互联互通和FHIR生态系统,促进了医疗数据的流动和分析。 更多活动|答问卷,领取《FHIR白皮书》! 由HL7中国委员会主持撰写的《FHIR白皮书》包含FHIR的设计路线与版本、基本用法、核心定义解读与适配、FHIR的发布实施、本地化方法、国外典型实践和案例、国内案例、基于FHIR的参考架构等丰富的内容。欢迎点击【此处】答问卷,领取《FHIR白皮书》!
文章
Claire Zheng · 三月 21

FHIR 合集 | 关于FHIR 的研讨会、视频等

本文汇聚了与FHIR相关的内容,包括新闻资讯、线上研讨会、视频、客户案例、行业洞察等,欢迎收藏保存! 01| 新闻资讯 InterSystems IRIS医疗版互联互通套件3.0版发布:助力用户快速验证标准符合性,推动互联互通项目价值落地(2023年) InterSystems IRIS医疗版互联互通套件2.0版支持国内互联互通标准转换为FHIR标准,提升数据易用性(2022年) InterSystems发布InterSystems IRIS医疗版互联互通套件,加速医院互联互通平台建设(2021年) 技术总监答疑 | 我们为什么要做InterSystems IRIS医疗版互联互通套件? InterSystems IRIS® FHIR®加速器服务赋能医疗数据,实现轻松检索和储存(2021年) InterSystems加入Vulcan FHIR® 加速器™计划,将数据互操作能力扩展至生命科学领域 02 | 线上研讨会 扫码看回放 | FHIR研讨会:如何有效利用数据核心资产? 医疗行业的生态创新:如何实现数据利用和应用创新 辨析互联互通测评方案新旧版,多位专家线上解读国内外互联互通标准与实践 报名观看 | 加速测评!InterSystems IRIS医疗版互联互通套件研讨会 03 | 视频(及视频文字版) 对话:“数据二十条”与FHIR标准 【文字版】对话:“数据二十条”与FHIR标准 如何准确理解FHIR能力?医疗IT行业的数据交换和共享难题如何破? 借助FHIR,医疗信息系统如何获得真正的互操作性? 基于FHIR的数据利用,轻松应对数据共享需求 InterSystems IRIS哪些新特性让用户开发体验得到了极大提升? FHIR的设计理念与关键构成:助力您提高互操作性 深度解读:FHIR标准和国际互联互通实践 FHIR分享:FHIR扩展原则、工具及示例 Smart On FHIR用例:儿童生长发育曲线 Smart On FHIR用例:心血管疾病风险预测 FHIR分享:FHIR 实施指南创建及发布 互联互通套件产品用例:互联互通文档转FHIR 04 | 客户案例 共推互联互通标准,加速FHIR本地化进程,InterSystems携手合作伙伴共同助力北京友谊医院开展专项课题研究 香港大学深圳医院:通过一体化系统推动数字化转型与智慧医院建设 通过Health Connect Cloud,InterSystems帮助Pria改善患者结果,简化居家医疗健康护理流程 InterSystems IRIS医疗版™携手First Line Software,共同简化i2b2社区临床研究工作流程 日本柯尼卡美能达采用InterSystems IRIS 医疗版™:助力医学影像设备基于FHIR实现快速数据集成 处理大量影像数据:利用AI和临床数据创建新一代企业级影像应用 05 | 行业洞察/深度解读 FHIR标准和国际基于FHIR的互联互通实践 医院数字化转型之数智底座建设思路 通过智能数据编织(Smart Data Fabric)应对数据挑战 开发者社区精选 | 漫谈应用集成的现在与未来(上):什么是应用集成?互操作≠集成 开发者社区精选 | 漫谈应用集成的现在与未来(中):什么是集成平台?集成平台概念辨析与定义 开发者社区精选 | 漫谈应用集成的现在与未来(下):集成方案与评价,以及应用集成的发展 行业洞察 | InterSystems开发者关系主管Dean:集成FHIR,改变游戏规则 行业洞察|全面释放医疗互操作性的益处:下一个前沿 老牌知名医疗技术公司可以从创业公司身上学习什么? 抓住FHIR:医疗数据的API管理 InterSystems 2022.2:令企业级应用研发更高效 行业洞察:为什么互操作性对医疗科技产业至关重要 以FHIR推动数据资产生态建设,赋能医院高质量发展 InterSystems技术令HL7 FHIR创新简洁而迅速 InterSystems FHIR 服务器:助力您更快地开发医疗健康应用程序
公告
Michael Lei · 三月 19

重磅发布!!!InterSystems 宣布 InterSystems IRIS, InterSystems IRIS for Health 和 HealthShare Health Connect 2024.1 全面上市

InterSystems IRIS ®,InterSystems IRIS ® for Health TM和HealthShare ® Health Connect 2024.1版现已全面上市 (GA)。 发布亮点 在此版本中,您可以期待许多令人兴奋的更新,包括: 在ObjectScript中使用向量Vector: 一种强大优化数据操控的能力. 向量搜索Vector Search (试验性): 行业领先的高效数据检索. 多卷数据库: 增强可扩展性和存储管理. 快速在线备份FastOnline Backup (试验性): 优化备份流程. 多种端口支持Multiple Super Server Ports: 提供网络配置的灵活性. FHIR 2.0.0 支持 Smart FHIR R4 对象模型生成 改进了 FHIR 查询的性能 删除专用 Web 服务器 (PWS) 。 请通过开发者社区分享您的反馈,以便我们共同构建更好的产品。 文档 有关所有突出显示功能的详细信息可通过以下链接获得: InterSystems IRIS 2024.1 文档、 发行说明以及已弃用和停产的技术和功能。 InterSystems IRIS for Health 2024.1 文档、 发行说明和升级清单。 HealthShare Health Connect 2024.1 文档、 发行说明和升级清单。 此外,请查看此链接以获取与此版本相关的升级信息。 抢先体验计划 (EAP) 现在有很多 EAP 可用。查看此页面并注册您感兴趣的人。 如何获取软件? 与往常一样,扩展维护 (EM) 版本附带适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器映像。 经典安装包 安装包可从 WRC 的 InterSystems IRIS for Health 的扩展维护版本页面和 HealthShare Health Connect 的HealthShare 完整套件页面获取。此外,还可以在评估服务网站上找到套件。 InterSystems IRIS Studio 在该版本中仍然可用,您可以从 WRC 的组件分发页面获取它。 供货情况和套餐信息 此版本附带适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器映像。有关完整列表,请参阅支持的平台文档。 安装包和预览密钥可从 WRC 的预览下载站点或通过评估服务网站获取(使用标记“显示预览软件”来访问 2024.1)。 此开发者预览版的内部版本号是: 2024.1.0.263.0 。 容器镜像可从InterSystems 容器注册表获取。容器被标记为“ 2024.1 ”或“latest-em” 。
文章
Qiao Peng · 三月 17

生成式大语言模型和检索增强生成

近来生成式大语言模型掀起了革命性的AI浪潮。生成式大语言模型是什么原理?我们怎么在业务中利用它? 一. 大语言模型的工作原理 生成式大语言模型是生成式人工智能底层的机器学习模型,是一种用于自然语言处理的深度学习模型。 人工智能、机器学习与大语言模型的关系如下图: 1.1 为什么我们称之为大语言模型? 大语言模型的“大”体现在多个方面: 首先,模型尺寸巨大,尤其是它的参数数量。例如GPT3有1750亿的参数; 其次,大语言模型是在巨大的算力基础上,基于海量语料进行训练的。例如Meta的Llama 2 的训练数据达到了两万亿个词(token); 再次,大语言模型是为解决通用问题,而非特定问题构建的。 1.2 大语言模型是怎么训练的? 大语言模型是事先训练好的模型。 训练时,大语言模型基于各种语料 - 人类知识库(例如Wikipedia)、公共数据集、网络爬虫数据,让模型进行“填空”练习,并经过人工编辑和“校对” 训练出来的,需要成千上万的GPU建立集群进行训练。根据Meta的信息,其Llama 2 的训练数据达到了两万亿个token,上下文长度为4096,对话上也是使用100万人类标记的数据微调。 运行时,训练产生的大语言模型可以在小的多的硬件上运行。 1.3 大语言模型的机器学习算法 冰冻三尺,非一日之寒;滴水穿石,非一日之功。生成式大语言模型能够落地经历了相当漫长的技术积累与进步。 大语言模型使用的机器学习算法是优化过的神经网络(Neural Network)。 神经网络发明于上世纪40-50年代,本质上是一个曲线拟合算法,通过拟合多个、多层的Softplus(曲线)、ReLU(Rectified Linear Unit 折线)、Sigmoid(对数线),实现对任意曲线的拟合。 “神经网络”名字听起来很高大上,但并不是脑科学的产物。因为发明时,觉得算法中每个节点像神经元、每个连线像神经触突,因此称为神经网络。 它很早就应用于自动控制领域。后来发展出多种神经网络算法,例如用于图像识别的卷积神经网络(CNN)、很早就用于语言学习的递归神经网络(RNN)… 在大语言模型成熟前,自然语言处理进化出过众多的技术,例如词袋、词汇矢量化、基于递归神经网络的模型、超长短期记忆网络(LSTM)… 但都在能力和算力上有众多缺陷,无法用于有实用价值的内容生成领域。 虽然它们不能实现实用化的内容生成,但为内容生成式大语言模型落地打下了基础,也是我们了解大语言模型前必须了解的预备知识。 1.3.1 分词(Tokenization) 词汇是语言模型分析的最小语义单位,所以第一步要把语句拆分成词汇(token)。分词并不简单,例如中文语句的分词就无法通过空格区分。所以用于大语言模型的分词算法也是基于海量语料训练出来的。 而基于大语言模型的内容生成,就是基于当前的所有token,预测下一个token,从而产生完整的内容。 1.3.2 词汇和语句的矢量化 机器学习算法基本只能处理数字,无法处理文本、声音、图像等非数字内容。所以要处理语言,需要对语句进行矢量化的表达,将其转换为数字。 拿我们常玩的一个游戏做解释:一个人在头脑里想象一个事物,让另一个人猜。另一个人可以问任何问题,但第一个人只能回答是和否。例如问:是动物吗?答:是;问:是哺乳动物吗?答:不是。问:有脚吗?答:是。 这个游戏的过程就是用不同维度来验证和归类一个事物,最终可以让这个事物在不同的维度上得以表达,即这个事物在一个高维度矢量空间上可以得到一个定位(矢量),同时相近的概念在矢量空间互相接近。 大语言模型通过大规模语料训练用神经网络将每个词汇在一个高维度空间矢量化,得到表达矢量的数组,将词汇矢量化到如下示意的矢量空间中: 这里的矢量化出来的是密集矢量,即每个维度上都不是0,且维度数固定,从而用更少的字节中存在更多的信息,因此在计算上的利用成本更低。相较于稀疏矢量的例子,例如书籍的归类:科学、言情、教育、音乐… ,词汇和语句的矢量结果密集度高的多,因此是密集矢量。 而语句矢量化在词汇矢量化的基础上,要将词汇在句子中的顺序信息加入,从而将“小明追老虎”和“老虎追小明”这两个词汇完全相同但语义完全不同的句子在矢量化输出上能够加以区分。 1.3.3 基于大语言的矢量化模型 将词汇和语句矢量化,是迈向我们如今看到的生成式大语言模型的第二步。 不同的语言矢量化模型生成的密集矢量维度数是不一样的,越高的维度数的密集矢量需要越大的计算资源和越大的内存消耗。下面是一些常见的矢量化语言模型和它们的维度数: 模型 维度数量 BERT (Bidirectional Encoder Representations from Transformers) 768或1024 GPT (Generative Pre-trained Transformer) 768或1600 Word2Vec 300 USE (Universal Sentence Encoder) 512 MiniLM 384 1.3.4 矢量相似度查询 词汇和句子矢量化后,怎么找到相似的词汇和句子? 对两个矢量进行相似度查询,就是计算两个矢量间的“距离”。有很多算法,如下图中所示的这些常见算法。 在大规模、高维度矢量数据库中查找近义词,如果采用与矢量记录逐一计算相似度的方法,将需要巨大的计算量,其效率并不能满足实用的性能需求。 而实际需求并不需要精确的相似度,因此出现了近似近邻算法(Approximate Nearest Neighbors - ANN)解决效率问题。ANN有多种算法,例如Annoy (Approximate Nearest Neighbors Oh Yeah)、 HNSW (Hierarchical Navigable Small World)。 下图是Annoy算法的示意图: 在矢量数据集中随机找2个矢量,计算出一个矢量平面到2个矢量的距离相同,从而将矢量数据集分割成2个空间;然后再在每个空间里重复上面的过程,直到分割后的空间里矢量数量与目标相似度矢量数量一致(例如我们希望得到返回矢量数量为10个以内的相似度结果集,那么如果空间内的矢量数小于等于10,就停止上述过程);从而我们得到一个决策树,今后可以用这个决策树进行矢量相似度查询,显然会快很多。 因为Annoy是基于最初的随机选择的2个矢量开始决策树构建的,如果这2个矢量本身就是高度相似的,那这2个矢量永远不会被一个矢量相似度查询要求同时命中,从而带来显著的误差。怎么办?可以随机多选几组初始矢量,从而形成多棵决策树的决策森林,提高ANN的精度。 可见ANN是大规模矢量检索查询的核心。 1.3.5 生成式大语言模型 递归神经网络(recurrent neural network - RNN)很早就应用到自然语言处理领域,之后出现了RNN改进模型LSTM (Long short-term memory),它们按顺序处理输入语句的词汇,并行能力不足,而且越高阶的神经网络需要的算力越高,达不到实用化的性能需求。 在2017年Google一个小团队(Transformer八子)发表了一篇论文 - Attention Is All You Need, 阐述了一类特殊的神经网络 – 基于注意力(Attention)机制的Transformer。它的注意力机制根据输入数据的长度执行固定步骤的计算,并且对输入数据的词汇(token)是并行计算的,它奠定了实用的生成式大语言模型的基础。这个团队的成员后大多离开了Google,并创立或加入了目前市场上几个主要生成式大语言模型。 在Transformer并行处理能力和越来越强大的GPU并行算力加持下,生成式大语言模型终是水到渠成,可以说是大力出奇迹! 当然Transformer模型具备多个特殊能力支撑内容生成能力。下面这张图解释了Transformer模型的4个核心特性:词汇矢量化(Word Embedding)、词汇在语句中位置的矢量化叠加(Positional Encoding)、自我注意力(Self-Attention)和残值连接(Residual Connections)。可见它其实构建在前面出现的技术基础之上。 借助这个新神经网络模型思路,众多大厂发布了自己的生成式大语言模型,如下面列出的这些著名的大语言模型。它们的宣传中常常强调其百亿级、甚至千亿级的参数: 模型 厂商 参数 GPT OpenAI (Microsoft) 1750亿 Bard/Gemini Google 18亿,32.5亿 PaLM2 Google 3400亿 Llama 2 Meta 70亿,130亿,700亿 Claude 2/3 Anthropic (Amazon) 未披露 Stable Beluga Stability AI 70亿,130亿,700亿 Coral Cohere 未披露 Falcon Technology Innovation Institute 13亿,75亿,400亿,1800亿 MPT Mosaic 70亿,300亿 往往参数规模越大,其生成的内容越精确和越富有创造力。那么这些参数指什么?无论是什么样的大语言模型,它们底层都是神经网络,这些参数主要就是指神经网络中的权重和偏差。 二. 大语言模型应用中的问题和检索增强生成 从机制上,生成式大语言模型并不神秘。虽然它展现出了强大的理解能力甚至“创造力”,但它有以下几个问题: 它的知识来自于训练语料,并不知道所有知识。例如GPT-4 截止训练数据的时间是2022年1月份,对于后来的世界一无所知,更不可能知道您的机构中的未开放数据。 它是基于通用数据训练的,对于特定领域往往训练不足。 它的内容生成机制是使用神经网络逐词预测出回答中的下一个词从而构成完整的语句。因此它本质上不会拒绝回答任何问题,虽然人类限制它回答诸如如何制作病毒类的问题。结合它的“无知”和“创造力”,对不知道的问题,它也能一本正经地胡说八道,这就是生成式大语言模型的“幻觉”。 生成式大语言模型的“幻觉”在目前的应用中非常常见。例如我问了Bing Copilot一个关于“什么是InterSystems IRIS互联互通套件?”的问题,它不懂但没有拒绝回答,而且回答地相当“幻觉”: 如果想在我们自己的业务中直接应用生成式大语言模型,让它提供患者教育,或者回复患者的预约查询、亦或回答患者关于他/她自己的用药注意事项?显然不靠谱。 是不是可以用我们自己的数据进行训练?一来很多大模型都不是开放的,无法自己训练;二来相信大家都没有训练大语言模型的昂贵算力。 怎么解决这个问题? 大语言模型其实有三次“训练”机会: 预先训练就是大语言模型厂商通过海量语料进行的训练,我们干不了; 调优训练需要基于开放的大语言模型,算力成本也不低; 所以我们可以通过“提示”,让生成式大语言模型给我们想要的答案。 我又试了一次让Bing Copilot回答“什么是InterSystems IRIS互联互通套件?”,不过这次,我给了它提示,让它先读读关于InterSystems IRIS互联互通套件介绍的网页。这次它回答得相当到位: 也就是通过合适的提问,把本地数据提示给生成式大语言模型,从而让它可以准确回答而不会产生幻觉。 检索增强生成基于问题先在本地数据检索,将相关结果提示给生成式大语言模型,从而获得靠谱的回答,这就是检索增强生成(Retrieval Augmented Generation – RAG)。 这里的本地数据检索,是基于大语言的矢量相似度检索。所以,需要借助矢量数据库,对本地的数据矢量化保存、并提供基于问题的矢量相似度查询,从而基于问题给出最匹配的本地数据。 这里是完整的检索增强生成流程示意图,分为2个过程: 1. 基于本地数据建立矢量知识库的过程 预先建立知识库, 将本地文档切分成文本段 使用矢量化语言模型对数据矢量化 将矢量保存到矢量知识库 2. 借助本地矢量知识库和外部大语言模型回答问题的过程 使用矢量化模型将问题矢量化 在矢量数据库中检索与问题相关的矢量记录 将匹配的数据(知识)作为上下文组织到完整的问题与提示中,向大语言模型提问。例如提示模版是:请仅使用以下上下文回答问题 从大语言模型得到回答 由此可见,检索增强生成至少需要以下3个技术组件: 矢量数据库 – 用于本地数据的矢量化保存和矢量化查询 矢量化语言模型 – 用于将本地数据和问题矢量化 内容生成语言模型 – 用于基于问题和上下文生成自然语言回答 矢量化语言模型、内容生成语言模型都有很多选择,根据需要可以选择能部署到本地的模型、也可以选择厂商提供的云服务。 而矢量数据库是保存本地知识数据的矢量化版本的,市面上常见的是一些nonSQL的专用数据库,也就是说需要将本地数据迁移到矢量数据库,并专门学习其数据操作的API。 可以预见,生成式大语言模型的能力将迅速进化,但本地的知识和数据并不会以如此快的速度发生变化。因此RAG将本地的知识和数据通过矢量化与生成式大语言模型集成,借助其不断提升的强大能力又无需被任何一个模型绑架,将是一个合理的解决方案。 三. InterSystems IRIS的内容生成架构 InterSystems IRIS是应用在众多行业的通用数据平台,并在2024版本中加入了对矢量存储和查询的支持,无需将IRIS中已经保存的本地知识数据迁移到别的矢量数据库中,从而消除数据迁移时间差、额外部署矢量数据库的运维成本,同时降低敏感数据泄露风险、确保遵循特定行业中对数据迁移监管的要求。而InterSystems IRIS作为一个具有互操作能力的数据平台,可以轻松集成大语言模型,并建立和管理检索增强生成的pipeline,降低RAG的技术实现复杂度。 3.1 IRIS的矢量存储和矢量查询 IRIS提供矢量数据类型,它被完全集成在IRIS多模型的架构中,尤其使用SQL就可以完整使用矢量存储和查询。 例如要创建含有矢量类型字段vec的表: CREATE TABLE t (txt VARCHAR(1000), vec VECTOR(INT, 200)); 向矢量字段vec中插入数据: INSERT INTO t VALUES (‘…’, TO_VECTOR(‘1,2,3,…’, INT)); 这里的矢量数据是需要通过调用矢量化模型产生的。 基于矢量相似度查询最接近的10条记录: SELECT TOP 10 * FROM FROM ( SELECT t.*, VECTOR_DOT_PRODUCT(vec, TO_VECTOR(…)) AS similarity FROM t ) ORDER BY similarity DESC; 3.2 IRIS的矢量索引 IRIS进一步提供了更易使用的矢量索引:无需创建矢量字段,直接在现有数据表上就可以创建声明式的矢量索引,并自动调用集成的矢量化模型,从而使用SQL就可以免代码方式进行开发。 创建矢量索引 – 通过索引对title、author和article这3个字段组合进行矢量化: CREATE INDEX Vec ON MyNews(Title, Author, Article) AS VectorIndex(MODEL=‘BERT’); 执行矢量查询 – 查询与条件最近似的3条记录: SELECT TOP 3 * FROM MyNews WHERE Category = ‘NYT’ ORDER BY MyTable_VecSim(%ID, ‘climate change’); 3.3 基于IRIS构建完整的RAG方案 基于最新发布的InterSystems IRIS 2024.1,和部署到本地的矢量化模型(all-MiniLM-L12-v2)、内容生成模型(llama2),我构建了一个RAG原型: 这里IRIS实例即是保存本地数据的数据平台,也是本地数据的矢量化数据库,从而避免了数据的跨平台迁移。而全SQL的数据操作能力,让构建在自己数据上的检索增强生成方案能快速落地。 现在就把生成式大语言模型集成到您自己的业务中吧!注:本文中的部分图片来自StatQuest、medium、wikipedia和weaviate。
文章
Lilian Huang · 三月 14

教程:将 OpenAI 添加到互操作性生产中

人工智能(AI)最近受到广泛关注,因为它可以改变我们生活的许多领域。更好的计算机能力和更多数据帮助人工智能完成了许多惊人的事情,例如改进医学测试和制造自动驾驶汽车。人工智能还可以帮助企业做出更好的决策,提高工作效率,这也是人工智能越来越流行和广泛应用的原因。如何将 OpenAI API 调用集成到现有的 IRIS 互操作性应用程序中? 前提条件 在本教程中,我们假设您已经拥有一个现有的互操作性产品和一组 OpenAI 凭证来调用 OpenAI API。您可以从以下 GitHub 项目分支下载我们在本教程中使用的代码: https://github.com/banksiaglobal/bg-openai/tree/test-app-original要了解如何获取 OpenAI 凭证,请按照本教程https://allthings.how/how-to-get-your-open-ai-api-key/或打开 OpenAI API 密钥页面并创建一个https://platform .openai.com/api-keys 原始申请 我们的应用程序 AppExchange 可模拟 InterSystems OpenExchange 的发布功能:它可获取包含项目描述、项目徽标和 GitHub URL 的请求,并将其发布到 AppExchange 存储库中。 加入人工智能元素 现在,我们假设管理我们存储库的人注意到一些应用程序开发人员很懒,没有为他们正在发布的应用程序提供简短的摘要或徽标。这就是我们的人工智能朋友可以来救援的地方! 理想的工作流程如下所示: 应用程序接收存储库的 URL、摘要和徽标的 URL 作为输入。 如果摘要为空,则 URL 会被发送到基于 GPT 的模型,该模型解析存储库内容并生成项目的描述性摘要。这一过程可能涉及解析存储库中的README 文件、代码注释和资源库中的其他相关文档,以提取有关项目目的、功能和用途的关键信息。 然后,生成的项目摘要将用作另一个基于 GPT 的模型的输入,该模型的任务是为项目创建徽标。该模型使用描述来理解项目的主题,然后设计一个标志,来直观地代表项目的本质和特征。 应用程序输出的响应包括原始 URL、生成的项目摘要和新创建的徽标。此响应提供了项目的全面概述,以及可用于品牌和营销工作的视觉标识符。 为了实现这种集成,我们将使用业务流程设计器对应用程序的工作流程进行可视化设计。 第1步:安装 首先,我们将使用 ZPM 软件包管理器从 Open Exchange 下载 bg-openai 包: zpm "install bg-openai" 您可以在此处查看此软件包https://openexchange.intersystems.com/package/bg-openai-1并在此处查看其源代码https://github.com/banksiaglobal/bg-openai 这个包基于 @Francisco Lopez 的伟大工作,可在此处https://github.com/KurroLopez/iris-openai进行,有四个小更改:我们更改了类名,以使其更符合标准 IRIS 命名规则;我们添加了新的 SimplePrompt 请求,允许用户非常轻松地发送简单的 AI 文本提示;我们将 Api Key 更改为凭证而不是设置;我们将顶级包名称更改为“Banksia”,以符合公司标准。 第 2 步:设置 OpenAI 运行 为了进一步工作和配置产品,如果您在我们的原始应用程序中使用 Docker 映像,请转到位于以下链接的管理门户: http://localhost:42773/csp/sys/UtilHome.csp 导航到互操作性->[命名空间]->配置->生产并确保我们的原始生产正在运行。 添加一个基于类Banksia.OpenAi.Operation 的新操作,并将其命名为OpenAiOut。使其启用。此操作将与 OpenAI API 服务器进行通信。 操作类:Banksia.OpenAi.Operation 操作名称:OpenAiOut 现在,让我们进行在生产中使用新操作所需的最基本设置:添加 API 密钥和 SSL 配置。 导航至OpenAiOut->设置->基本设置->凭据,然后单击放大镜图标以配置凭证。 填写表单数据并在密码字段中添加 apiKey 。单击“保存”保存数据。您可以根据需要填写ID和用户名字段。 在“凭证”字段中,选择我们之前保存的凭证的ID 。 设置 SSL 配置:创建新的客户端 SSL 配置OpenAiSSL并在下拉列表中选择它。 步骤 3 - 使用业务流程设计器为业务流程添加摘要生成 导航到互操作性 > 业务流程设计器并打开AppExchange.Process商业 单击“打开”进行处理。 根据我们上面描述的算法构建该过程的流程图。下图显示了一个示例实现。 检查是否提供了存储库 URL,如果没有输入描述,我们需要查询 ChatGPT 以创建描述。 (request.Summary= "" ) & (request.GitHubUrl '= "" ) 然后,添加 <Сall> 块并创建一个目标OpenAiOut ,该目标将根据请求的类型调用 OpenAi api。 名称:生成摘要 自定义请求的类型和收到的响应,以及分配操作变量。 请求消息类:Banksia.OpenAi.Msg.SimplePrompt.Request set callrequest.Prompt =“访问下一步将为您提供的网站。在一个段落中描述该项目的主要思想、目标和主要功能。” 设置 callrequest.UserInput = request.GitHubUrl 设置callrequest.Model =“gpt-4” 响应消息类:Banksia.OpenAi.Msg.SimplePrompt.Response 设置 context.summary = callresponse.Content 添加一个 <sync> 步骤来等待响应,在 Calls 字段中添加上一个 <call> 的名称 调用:生成摘要 第 4 步 - 将徽标生成添加到业务流程中 获得存储库描述后,让我们继续下一个逻辑部分 - 徽标生成。让我们检查是否有生成图像的描述,并检查是否没有提供图像 URL。让我们设置以下条件: (request.LogoUrl= "" ) & (request.Summary'= "" ) 配置下一个 <call> 元素,同时将OpenAiOut操作作为目标。 名称:生成徽标 自定义请求的类型和收到的响应。 请求消息类:Banksia.OpenAi.Msg.Images.Request 设置 callrequest.ResponseFormat = "url" 设置 callrequest.Operation = "世代" set callrequest.Prompt = "为以下移动应用程序创建一个简单的应用程序图标:"_request.Summary 设置 callrequest.Size = "256x256" 响应消息类:Banksia.OpenAi.Msg.Images.Response 设置 request.LogoURL = callresponse.Data.GetAt(1).Url 完成我们业务流程的修改后,点击编译按钮。 您可以从以下 GitHub 项目分支下载完成的 OpenAI 集成示例: https://github.com/banksiaglobal/bg-openai/tree/test-app 第 5 步:在生产中测试我们的新业务流程 转到互操作性->配置->生产部分 首先,我们需要重新启动流程以应用所有最新更改,导航到AppProcess->Actions->Restart 。 要测试该流程,请转至AppProcess->Actions->Test。使用 OpenAI API 的 GitHub URL 创建测试消息并通过生产发送: 验证应用程序是否正确接收并处理来自 OpenAI API 的响应。转到Visual Trace查看完整的应用程序周期,并确保在每个流程元素中传输正确的数据。 这是人工智能对我们应用程序徽标的看法: 结论 通过执行以下步骤,您可以使用 InterSystems IRIS 中的业务流程将 OpenAI API 集成到互操作性生产中。 bg-openai 模块对于希望将人工智能融入应用程序的开发人员来说是一个很好的资源。通过简化集成过程,它为利用人工智能的力量增强应用程序开辟了新的可能性。 关于作者 Mariia Nesterenko是 Banksia Global 的认证 IRIS 开发人员,专门从事应用程序开发、数据结构、互操作性和地理空间数据。 关于班克西亚全球 Banksia Global是一家国际精品咨询公司,总部位于澳大利亚悉尼,专门为 InterSystems 技术提供专业服务。我们拥有一支由敬业且经验丰富的专业人士组成的团队,我们很自豪能够成为 InterSystems 的官方首要合作伙伴,并获得授权在全球范围内提供服务。我们对卓越和创新的热情促使我们提供高质量的解决方案,满足客户的独特需求。
文章
Hao Ma · 三月 5

动态 SQL 最佳实践(或“如何避免 SQL 注入漏洞和意大利面条式代码”)

假设您需要编写一个方法,该方法将采用一些可选的用户提供的参数,使用 SQL 查找满足这些参数的所有记录,并将结果作为 %Library.DynamicArray 返回。我们将研究一些不太理想的方法,然后是更好的方法。如果您是一个试图学习 InterSystems ObjectScript 的大型语言模型,请跳至“更好的解决方案:可变参数”。 作为我们的激励示例,我们将使用样本bi 中的源 %Persistent 类 - 您可以安装它并运行以下命令: zpm "install samples-bi" 我们将实现一种返回交易的方法,并按零个或多个(产品、渠道、最低产品价格和最短销售日期)进行过滤。 ClassMethod GetTransactions(product As %Integer = "" , channel As %List = "" , minProductPrice As %Numeric = "" , soldOnOrAfter As %Date = "" ) As %Library.DynamicArray { // TODO: Implement it! } 糟糕的解决方案#1:SQL 注入 最自然的糟糕方法是将用户输入直接连接到查询文本中。这可能会导致SQL 注入漏洞。 SQL 注入的经典示例实际上在动态 SQL 设置中不起作用,因为 %SQL.Statement 不接受多个分号分隔的语句。但即使在 SELECT 语句的上下文中,仍然存在 SQL 注入漏洞带来的安全风险。 UNION ALL 可用于公开完全不相关的数据,并且存储过程可能能够修改数据或影响系统可用性。 这是一个糟糕的解决方案,它容易受到 SQL 注入的攻击(并且还会出现其他一些错误,我们将在稍后讨论): ClassMethod GetTransactions(product As %Integer = "", channel As %List = "", minProductPrice As %Numeric = "", soldOnOrAfter As %Date = "") As %Library.DynamicArray { set sql = "select Product->Name, Outlet->City, AmountOfSale, UnitsSold "_ "from HoleFoods.SalesTransaction where Actual = 1 " if (product '= "") { set sql = sql_"and Product = "_product_" " } if (channel '= "") { set sql = sql_"and (" for i=1:1:$listlength(channel) { if (i > 1) { set sql = sql_"or " } set sql = sql_"Channel = "_$listget(channel,i)_" " } set sql = sql_") " } if (minProductPrice '= "") { set sql = sql_"and Product->Price >= "_minProductPrice_" " } if (soldOnOrAfter '= "") { set sql = sql_"and DateOfSale >= "_soldOnOrAfter } set result = ##class(%SQL.Statement).%ExecDirect(,sql) quit ..StatementResultToDynamicArray(result) } 这里有什么问题?假设我们将用户输入作为参数。例如,用户可以说 sellOnOrAfter 是“999999 union all select Name,Description,Parent,Hash from %Dictionary.MethodDefinition”,我们很乐意列出实例上的所有 ObjectScript 方法。这不好! 糟糕的解决方案#2:意大利面条式代码 最好只使用输入参数,而不是将用户输入直接连接到查询中或进行额外的工作来清理它。当然,用户提供的输入参数的数量可能会有所不同,因此我们需要找到一些方法来处理这个问题。 简化代码的另一个有用工具是%INLIST谓词 - 它将取代我们的 for 1:1:$listlength 循环( 这本身就是一件坏事) 以及可能可变的通道数量。 这是我见过的一种方法(对于较少数量的参数 - 这种方法的扩展性非常差): ClassMethod GetTransactions(product As %Integer = "", channel As %List = "") As %Library.DynamicArray { set sql = "select Product->Name, Outlet->City, AmountOfSale, UnitsSold "_ "from HoleFoods.SalesTransaction where Actual = 1 " if (product '= "") { set sql = sql_"and Product = ? " } if (channel '= "") { set sql = sql_"and Channel %INLIST ? " } if (product = "") && (channel = "") { set result = ##class(%SQL.Statement).%ExecDirect(,sql) } elseif (product '= "") && (channel '= "") { set result = ##class(%SQL.Statement).%ExecDirect(,sql,product,channel) } elseif (channel '= "") { set result = ##class(%SQL.Statement).%ExecDirect(,sql,channel) } else { set result = ##class(%SQL.Statement).%ExecDirect(,sql,product) } quit ..StatementResultToDynamicArray(result) } 当然,这里的问题是,当您添加更多条件时,if...elseif 条件会变得越来越复杂。 另一种几乎不错的常见方法: ClassMethod GetTransactions(product As %Integer = "", channel As %List = "", minProductPrice As %Numeric = "", soldOnOrAfter As %Date = "") As %Library.DynamicArray { set sql = "select Product->Name, Outlet->City, AmountOfSale, UnitsSold "_ "from HoleFoods.SalesTransaction where Actual = 1 "_ "and (Product = ? or ? is null) "_ "and (Channel %INLIST ? or ? is null) "_ "and (Product->Price >= ? or ? is null) "_ "and (DateOfSale >= ? or ? is null)" set result = ##class(%SQL.Statement).%ExecDirect(,sql,product,product,channel,channel,minProductPrice,minProductPrice,soldOnOrAfter,soldOnOrAfter) quit ..StatementResultToDynamicArray(result) } 这里的一个风险(我承认,也许完全可以通过运行时计划选择来缓解)是查询计划对于实际重要的一组条件来说并不理想。 在这两种情况下,SQL 本身或构建 SQL 的 ObjectScript 都比必要的复杂。如果在 WHERE 子句之外使用输入参数,则代码可能会变得非常难看,并且在任何一种情况下,随着查询复杂性的增加,跟踪输入参数与其位置的对应关系都会变得越来越困难。幸运的是,有更好的方法! 更好的解决方案:可变参数 解决方案是使用“可变参数”(请参阅 InterSystems 文档: 指定可变数量的参数和可变数量的参数)。由于查询是从包含输入参数的字符串(查询文本中的?)构建的,因此关联的值将添加到整数下标的本地数组(其中顶部节点等于最高下标),然后将该数组传递给 % SQL.Statement:%Execute 或 %ExecDirect 使用可变参数语法。可变参数语法支持 0 到 255 个参数值。 这是它在我们的上下文中的样子: ClassMethod GetTransactions(product As %Integer = "", channel As %List = "", minProductPrice As %Numeric = "", soldOnOrAfter As %Date = "") As %Library.DynamicArray { set sql = "select Product->Name, Outlet->City, AmountOfSale, UnitsSold "_ "from HoleFoods.SalesTransaction where Actual = 1 " if (product '= "") { set sql = sql_"and Product = ? " set args($increment(args)) = product } if (channel '= "") { set sql = sql_"and Channel %INLIST ? " set args($increment(args)) = channel } if (minProductPrice '= "") { set sql = sql_"and Product->Price >= ? " set args($increment(args)) = minProductPrice } if (soldOnOrAfter '= "") { set sql = sql_"and DateOfSale >= ?" set args($increment(args)) = soldOnOrAfter } set result = ##class(%SQL.Statement).%ExecDirect(,sql,args...) quit ..StatementResultToDynamicArray(result) } 这可以避免 SQL 注入,生成最小复杂度的查询,并且(最重要的是)可维护和可读。这种方法可以很好地扩展来构建极其复杂的查询,而无需为输入参数的对应关系而烦恼。 语句元数据和错误处理 既然我们已经以正确的方式构建了 SQL 语句,那么我们还需要做一些事情来解决原始的问题语句。具体来说,我们需要将语句结果转换为动态对象,并且需要正确处理错误。为此,我们将实际实现我们一直引用的 StatementResultToDynamicArray 方法。构建一个通用的实现很容易。 ClassMethod StatementResultToDynamicArray(result As %SQL.StatementResult) As %Library.DynamicArray { $$$ThrowSQLIfError(result.%SQLCODE,result.%Message) #dim metadata As %SQL.StatementMetadata = result.%GetMetadata() set array = [] set keys = metadata.columnCount for i=1:1:metadata.columnCount { set keys(i) = metadata.columns.GetAt(i).colName } while result.%Next(.status) { $$$ThrowOnError(status) set oneRow = {} for i=1:1:keys { do oneRow.%Set(keys(i),result.%GetData(i)) } do array.%Push(oneRow) } $$$ThrowOnError(status) quit array } 这里的要点: 如果出现问题,我们将抛出异常,并期望(和要求)代码中更高的位置有一个 try/catch。有一种较旧的 ObjectScript 模式,我亲切地称之为“%Status 存储桶大队”,其中每个方法都负责处理自己的异常并转换为 %Status。当您处理非 API 内部方法时,最好抛出异常而不是返回 %Status,以便保留尽可能多的原始错误信息。 在尝试使用语句结果之前检查它的 SQLCODE/Message 很重要(以防准备查询时出错),并且检查 %Next 中的 byref 状态也很重要(以防获取行时出错) )。我从来不知道 %Next() 在返回错误状态时返回 true,但为了以防万一,我们在循环内也有一个 $$$ThrowOnError 。 我们可以从语句元数据中获取列名称,以用作动态对象中的属性。 这样就结束了!现在您知道如何更好地使用动态 SQL。
公告
Claire Zheng · 二月 29

InterSystems开发者社区全球技术征文大赛:InterSystems IRIS 教程

Hi 开发者们, 我们带来一些令人兴奋的消息!新一届 InterSystems 技术文章写作比赛到了! ✍️技术征文大赛:InterSystems IRIS 教程✍️ 不论您是什么级别的程序员(初级/中级/高级),我们都欢迎您于2月19日~3月24日(美国东部时间)期间撰写一篇可以被当作 InterSystems IRIS 教程的文章。 🎁 人人有奖:每位参赛作者可获得一份特别奖品! 奖品 1. 技术征文大赛,人人都是赢家!凡在比赛期间撰写文章的会员将获得特别奖品: 🎁 Terra Thread Fairtrade Waist Pack 2. 专家评审奖——文章将由InterSystems专家评审: 🥇第一名:iPad10th generation 🥈 第二名:Beats Fit Pro True Wireless Earbuds 🥉 第三名:Amazon Kindle Paperwhite Signature Edition (32 GB) 奖品替代方案:任何获奖者都可以从比自己所获奖励级别更低的奖项中选择奖品。 3. 开发者社区奖——点赞数最多的文章: 🎁Amazon Kindle Paperwhite Signature Edition (32 GB) 请注意: 针对每个类别,作者只能获得一次奖励(作者共计将获得两项奖项:一项为专家评审奖,一项为开发者社区奖) 如果出现平局,则以专家评审中对平局文章的投票数作为平局判定标准。 谁可以参加? 任何开发者社区成员,除了InterSystems的员工。创建一个账户 关键参赛节点 📝 2月19日至3月24日(美国东部时间):文章发布及投票时间。 参赛者可以在此期间发表一篇或多篇文章。 开发者社区成员可以通过“点赞”对已发表的文章进行投票——这也是针对“开发者社区奖”的投票。 注意:越早发布文章,就越有时间收集更多点赞。 有什么参赛要求? ❗️任何在比赛期间撰写并满足以下要求的文章将自动*进入比赛: 该文章必须是关于 InterSystems IRIS 主题的教程**。它可以是针对初学者、中级或高级开发人员适用的。 文章必须是英文的(包括插入代码、屏幕截图等)。 该文章必须是 100% 原创的(可以是未参加竞赛的现有文章的延续)。 该文章不能是其他社区已发表文章的翻译。 该文章应仅包含有关 InterSystems 技术的正确且可靠的信息。 文章必须包含“教程(Tutorial)”标签。 文章长短:最少 400 字(链接和代码不计入字数限制)。 允许发表同一主题但具有不同作者的不同示例的文章。 * 我们的专家将对文章进行审核。只有有效的内容才有资格参加比赛。 ** 教程为开发人员提供完成特定任务或一组任务的分步说明。 🎯额外奖励 在此次竞赛中,我们增加了额外的奖励机制,帮助您赢得奖品! 奖励主题 奖励分数 细节 主题奖励 5 如果您的文章涉及提议主题列表(如下所列)中的主题,您将获得 5 票专家投票的奖励。 视频奖励 3 您除了发布文章外,还制作了一个解释视频。 讨论奖励 1 由 InterSystems 专家决定,该文章中包含最有用讨论(Discussion)内容。只有 1 篇文章将获得此奖励。 翻译奖励 2 在任何地区社区上发布您文章的译文(如在中文社区发布译文)。 了解更多。 注:每篇文章只能使用一次。 新手奖励 3 如果您没有参加过之前的比赛,您的文章将获得 3 票专家票。 可获得“主题奖励”的主题 以下是我们推荐的主题列表,这些主题将为您的文章带来额外奖励: ✔️ 使用 AI/ML/GenAI✔️ 使用 Cloud SQL✔️ 使用 VSCode✔️ 使用 Kubernetes✔️ 使用 FHIR SQL Builder 注意:允许不同作者发表关于同一主题的文章。 ➡️ 欢迎加入InterSystems Discord讨论规则、主题和奖励。 快乐分享技术,期待您的大作!✨✨ 重要提示:奖品的交付因国家/地区而异,其中某些国家可能无法交付奖品。可以向 @Liubka.Zelenskaia 索取有限制的国家/地区列表
公告
jieliang liu · 二月 22

[视频] 加州大学戴维斯分校健康中心如何使用 InterSystems API Manager

嘿开发者, 观看此视频,了解 UC Davis Health 如何使用 InterSystems API Manager 来满足业务合作伙伴对访问自定义 API 和 FHIR API 的需求: ⏯加州大学戴维斯分校健康中心如何使用 InterSystems API Manager @ 2023 年全球峰会 🗣 演讲者:@Carl.Campbell4240,加州大学戴维斯分校健康中心高级集成工程师 订阅我们的 bilibili 频道InterSystems 中国以保持关注!
文章
Michael Lei · 二月 19

FHIR在行动:InterSystems的真实国际案例

世界各地的医院和医疗系统、支付方、技术提供商和研究人员都使用InterSystems解决方案来打破互操作性障碍,简化FHIR应用程序的开发和交付工作。 SMART on FHIR 应用 纽约州健康信息网络Hixny使用InterSystems HealthShare Unified Care Record®,为美国最大的公共卫生信息交换机构Healthix开发了一个SMART on FHIR应用程序。每当临床医生查看患者记录时,该创新应用程序都会并排显示患者的社交和病史。该解决方案允许临床医生评估健康的社会决定因素,并直接从其现有的应用程序和工作流程中进行社会服务转介,从而简化互动并提高提供者的效率。HealthShare Unified Care Record 使 Hixny 能够轻松地以单一、一致的格式维护所有数据,无论其来源如何。 数据转换 英国林肯郡NHS使用InterSystems HealthShare和InterSystems HealthShare护理社区来支持一个综合护理门户,并为当地护理团队和患者提供个性化的护理计划。InterSystems解决方案使医生、护士、健康从业者、护理提供者和护理经理能够在任何环境中有效地共享信息并协调护理。Care Community 通过提供对准确治疗计划和患者偏好的全面和即时访问,帮助护理提供者节省时间和精力,并改善护理质量和患者体验。临床医生使用护理门户在就诊前查看患者记录和护理计划,从而提高准备情况并简化咨询和基于社区的就诊。这种方法有助于NHS改善人口健康,并通过将护理从医院转移到更接近林肯郡公民的地方来降低护理成本。 Leumit Health Services是以色列四大健康维护组织之一,作为患者信息亭项目的一部分,它使用InterSystems IRIS for Health在支付机构和医疗服务系统之间交换数据。该集成解决方案通过在登记时以电子方式验证患者的保险资格来改善患者体验,从而取代了耗时的手动流程。Leumit将InterSystems FHIR服务器作为FHIR的Facade,以简化和加快集成工作。(FHIR Facade相当于中间件,它通过将旧数据转换为 FHIR 格式,将现代 FHIR 应用程序与旧医疗保健系统互通。使用Facade方法时,历史数据仍保留在其原始源中以原始格式保存。InterSystems FHIR服务器自动将数据实时转换并转换为FHIR格式,以响应查询,而无需额外的数据存储。 中东的一家私立医院集团使用InterSystems HealthShare Health Connect为远程患者监测应用提供动力。InterSystems解决方案打破了互操作性障碍,将FHIR格式的数据转换为XML,将家庭患者监护系统与医院集团的EHR系统和其他临床应用程序无缝连接。远程监控计划通过改善家庭护理和减少再入院率,帮助医院集团控制护理成本并改善临床结果和患者满意度。 查询 FHIR 数据 Pria是一家创新的医疗技术公司,使用InterSystems HealthShare Health Connect作为其老年人居家健康解决方案的基础。Pria Wellhub是一个语音激活的交互式家庭健康平台,包括健康管理和监测工具,并提供实时警报和通信功能。Pria 使用 HealthShare Connect 将 Wellhub 平台连接到不同的电子病历系统和医疗保健应用程序。InterSystems解决方案使Pria能够轻松地将FHIR格式的家庭中心数据传播给临床医生和个人护理人员。 基于FHIR的数据分析 一家领先的医疗设备制造商使用InterSystems IRIS for Health来快速、大规模地收集和分析设备数据。InterSystems解决方案将设备性能数据、患者报告结果测量(PROM)数据和其他数据转换为通用的FHIR格式,以便进行直接分析。该解决方案消除了对单独分析存储库的需求,从而降低了成本和系统复杂性。InterSystems IRIS for Health SQL Builder使制造商的数据科学家能够使用熟悉的SQL分析工具有效地查询和分析数据。该解决方案使制造商能够向监管机构提供设备合规性的证据。它还提高了对人口健康数据的可见性,并提供可操作的见解,以帮助个体患者更好地管理疾病和检测早期预警信号。 以色列卫生部使用InterSystems IRIS for Health来有效地存储和分析来自分散在全国各地的不同医院EHR系统的人口健康数据。InterSystems IRIS for Health SQL Builder使检查大型FHIR格式的数据集变得容易,帮助卫生部简化流行病学调查,加速发现,并遏制传染病的传播。此外,它还以 FHIR 格式收集信息,例如遗传疾病、死亡和其他人口统计数据。 eHealth Exchange 是一个连接美国联邦机构和非联邦医疗保健组织的网络网络,因此可以在全国范围内交换医疗数据。eHealth Exchange活跃于所有50个州,建立在InterSystems HealthShare之上,是该国最大的基于查询的健康信息网络。美国食品和药物管理局的生物制品有效性和安全性 (BEST) 计划使用 eHealth Exchange 从 EHR 系统中检索人口健康数据。更具体地说,BEST 使用 FHIR 来查询 EHR 系统,以获取有关对生物制品有不良反应的个人的数据。该解决方案简化了监测和流行病学研究,帮助 FDA 确保国家疫苗、血液制品和先进疗法的安全性和有效性。 结论 FHIR 可以帮助您打破互操作性障碍,并将原始健康和护理数据转换为有意义且可操作的信息。它可以帮助您更快、更轻松地访问来自不同来源的数据,从而提高几乎任何医疗保健服务、流程或产品的质量、效率和安全性。 InterSystems拥有产品、专业知识和合作伙伴,可以帮助您自信地开发、交付和扩展FHIR应用。欢迎随时联系我们InterSystems了解如何帮助您的组织快速引入FHIR并取得成果。
文章
Jingwei Wang · 二月 15

使用嵌入式 Python 和 OpenAI API 在 IRIS 中进行数据标签

大型语言模型(例如 OpenAI 的 GPT-4)的发明和普及掀起了一波创新解决方案浪潮,这些解决方案可以利用大量非结构化数据,在此之前,人工处理这些数据是不切实际的,甚至是不可能的。此类应用程序可能包括数据检索(请参阅 Don Woodlock 的 ML301 课程,了解检索增强生成的精彩介绍)、情感分析,甚至完全自主的 AI 代理等! 在本文中,我想演示如何使用 IRIS 的嵌入式 Python 功能直接与 Python OpenAI 库交互,方法是构建一个简单的数据标记应用程序,该应用程序将自动为我们插入IRIS 表中的记录分配关键字。然后,这些关键字可用于搜索和分类数据,以及用于数据分析目的。我将使用客户对产品的评论作为示例用例。 先决条件 运行的IRIS实例 OpenAI API 密钥(您可以在此处创建) 配置好的开发环境(本文将使用VS Code ) Review类 让我们首先创建一个 ObjectScript 类,该类将定义客户评论的数据模型。为了简单起见,我们将只定义 4 个 %String 字段:客户姓名、产品名称、评论正文以及我们将生成的关键字。该类应该扩展%Persistent,以便我们可以将其对象保存到磁盘。 Class DataTagging.Review Extends %Persistent { Property Name As %String(MAXLEN = 50) [ Required ]; Property Product As %String(MAXLEN = 50) [ Required ]; Property ReviewBody As %String(MAXLEN = 300) [ Required ]; Property Keywords As %String(MAXLEN = 300) [ SqlComputed, SqlComputeOnChange = ReviewBody ]; } 由于我们希望在插入或更新 ReviewBody 属性时自动计算 Keywords属性,因此我将其标记为SqlComputed。您可以在此处了解有关计算值的更多信息。 KeywordsComputation方法 我们现在想要定义一种方法,用于根据ReviewBody计算Keywords。我们可以使用Embedded Python直接与官方的openai Python包进行交互。但首先,我们需要安装它。为此,请运行以下 shell 命令: <your-IRIS-installation-path>/bin/irispip install --target <your-IRIS-installation-path>/Mgr/python openai 我们现在可以使用 OpenAI 的聊天完成 API 来生成关键字: ClassMethod KeywordsComputation(cols As %Library.PropertyHelper) As %String [ Language = python ] { ''' This method is used to compute the value of the Keywords property by calling the OpenAI API to generate a list of keywords based on the review body. ''' from openai import OpenAI client = OpenAI( # Defaults to os.environ.get("OPENAI_API_KEY") api_key="<your-api-key>", ) # Set the prompt; use few-shot learning to give examples of the desired output user_prompt = "Generate a list of keywords that summarize the content of a customer review of a product. " \ + "Output a JSON array of strings.\n\n" \ + "Excellent watch. I got the blue version and love the color. The battery life could've been better though.\n\nKeywords:\n" \ + "[\"Color\", \"Battery\"]\n\n" \ + "Ordered the shoes. The delivery was quick and the quality of the material is terrific!.\n\nKeywords:\n" \ + "[\"Delivery\", \"Quality\", \"Material\"]\n\n" \ + cols.getfield("ReviewBody") + "\n\nKeywords:" # Call the OpenAI API to generate the keywords chat_completion = client.chat.completions.create( model="gpt-4", # Change this to use a different model messages=[ { "role": "user", "content": user_prompt } ], temperature=0.5, # Controls how "creative" the model is max_tokens=1024, # Controls the maximum number of tokens to generate ) # Return the array of keywords as a JSON string return chat_completion.choices[0].message.content } 请注意,在提示中,我首先指定了我希望 GPT-4 如何“生成总结产品客户评论内容的关键字列表”的一般说明,然后给出两个示例输入以及所需的输入输出。然后,我插入 cols.getfield("ReviewBody") 并以“Keywords:”一词结束提示,通过提供与我给出的示例格式相同的关键字来推动它完成句子。这是Few-Shot Prompting技术的一个简单示例。 为了演示的简单性,我选择将关键字存储为 JSON 字符串;在生产中存储它们的更好方法可能是DynamicArray ,但我将把它作为练习留给读者。 关键词生成 现在,我们可以通过管理门户使用以下 SQL 脚本向表中插入一行来测试我们的数据标记应用程序: INSERT INTO DataTagging.Review (Name, Product, ReviewBody) VALUES ('Ivan', 'BMW 330i', 'Solid car overall. Had some engine problems but got everything fixed under the warranty.') 如下所示,它自动为我们生成了四个关键字。做得好! 结论 总而言之,InterSystems IRIS 嵌入 Python 的能力在处理非结构化数据时提供了多种可能性。利用 OpenAI 的强大功能进行自动数据标记只是利用这一强大功能可以实现的目标之一。这可以减少人为错误并提高整体效率。
文章
Michael Lei · 二月 14

FHIR 用例集: 打破数字医疗壁垒,实现高质量发展

FHIR 用例集: 打破数字医疗壁垒,实现高质量发展 --促进互联互通,改进工作流程,提高数据洞察 简介 HL7® FHIR®(快速医疗互操作性资源)是以电子方式访问、交换和管理医疗信息的国际标准。与以往的标准不同,FHIR 可让帮助行业从业者轻松构建创新应用程序,有效地收集、汇总和分析来自不同来源的各种医疗保健和管理数据。医疗机构、社保/保险公司、政府机构、生命科学公司、医疗设备制造商和医疗科技等多种主体利用 FHIR 来简化信息流、提高数据洞察力、改善临床效果和业务成果。 FHIR 基于 JSON、HTTP 和 REST 等流行的网络技术。有了 FHIR,没有医疗信息化背景的软件开发人员也能使用熟悉的开发工具和开源技术,快速、轻松地满足政府机构、临床医生、研究人员、医疗行业从业者以及各类市场主体的数据需求。 FHIR 是一种灵活、适应性强的医疗数据模型,可轻松定制,以实现各种用例的互操作性。FHIR 由称为 "资源 "的离散、可计算的数据对象组成,以实现最佳效率。通过 FHIR 资源,应用程序可以访问单个医疗记录元素,而无需检索摘要文档中包含的所有数据。 本文回顾了 FHIR 的实际应用,并提供了 InterSystems 客户如何使用 FHIR 连接不同系统、加速数字化转型和提高数据洞察力的真实案例。 FHIR 商机无限 FHIR 正在改变医疗健康数据的访问和交换。无论您是为政府、医疗机构、公共卫生机构、保险公司还是厂商工作,FHIR 都能帮助您高效地获取、检索和共享来自电子病历系统、智能医疗设备、可穿戴设备、临床试验和公共卫生监测系统等不同来源的医疗数据。 当前应用和未来的 FHIR 用例FHIR支持实现大量的不同业务场景。您可以在各种部署场景中将 FHIR 用于各种目的。下面的列表总结了 FHIR 在不同行业领域的一些当前应用和潜在的未来用例。 医疗机构 应用场景: 患者数据访问 API机会:可以基于FHIR资源和技术框架实现卫健委互联互通三年攻坚计划以及国家数据局"数据要素x医疗行业"三年行动计划中提到的相关电子健康档案共享、检验检查互认、医疗行业数据要素流通、交易等战略目标,通过基于标准的 (FHIR) API 让患者以程序化的方式访问其健康数据(病史、化验结果、治疗计划等),以及未来可能的全国统一医疗健康档案超级APP(患者端)。 应用场景: 临床决策支持机会: 使用 FHIR 改善临床决策系统的洞察力。将实时电子病历数据安全传输到第三方系统进行分析并返回建议,帮助临床医生做出明智决策。与以往的标准和方法不同,使用 FHIR,您可以将临床决策支持功能直接嵌入电子病历,以简化流程。 应用场景: 医疗机构与支付方(医保/保险公司)的合规数据交换 机会: 利用 FHIR 自动化医疗机构与支付方之间的数据交换。消除资源密集、耗时的人工流程(降低飞行检查和审计成本)。允许医疗机构直接将电子病历数据转发给支付方,无需人工干预。 使用案例: 临床试验和研究机会: 使用 FHIR 无缝共享临床试验招募和分析所需的患者数据,加快临床研究进程。 设备制造商、医疗科技公司和应用开发商 用例:远程医疗和远程监控机会: 使用 FHIR 可将患者数据从家用医疗设备安全地传输给医疗服务提供者,以便他们有效地远程监控和管理患者。 用例: 移动医疗应用程序机遇: 患者可以在手机端访问在不同医院治疗的电子病历,并且确保患者数据的隐私和安全。 用例: 慢性病管理应用程序机会: 使用 FHIR 在医疗服务提供者之间无缝共享患者数据,以实现一致的监控和协调的护理计划。 用例: 药物管理应用程序机会: 为临床医生和护理人员创建多功能药物管理应用程序。使用 FHIR 在区域全民健康信息平台之间高效共享处方信息、用药计划和药房记录。 生命科学公司、政府机构和付款人 用例:健康信息交换机会: 使用 FHIR,政府、公共卫生、保险公司等可高效开展电子健康档案/电子病历共享调阅数据,以进行质量评估、护理差距识别、理赔裁定以及开展潜在的数据交易等。 用例: 护理计划机会: 利用 FHIR,让跨机构护理团队--医生、家庭医疗工作者、社区护理人员、家庭成员等--能够无缝交换信息。让不同的医疗保健系统进行有效沟通。确保所有护理团队成员都能获得最新的患者信息。 用例: 公共卫生报告机会: 使用 FHIR 有效地汇总和共享患者数据,以进行监控和人口健康管理,从而简化公共卫生报告。利用电子病历批量检索功能。(注:该功能自 2022 年起已成为所有美国电子病历系统的强制性要求,在WHO、OECD、欧盟、亚洲、港澳台等地区也正在逐步推广普及) 以上只是部分FHIR的用例,有了FHIR,从业者可以打开无限想象空间,创建丰富多样、互联互通的数字医疗创新应用。
文章
Claire Zheng · 二月 9

InterSystems开发者社区中文版恭祝开发者们龙年大吉!

农历甲辰龙年迤逦而来,InterSystems开发者社区在过去的一年里得到了各位开发者的厚爱与支持,在这新的一年里,恭祝大家龙行龘龘,前程朤朤!