新增
文章 Jeff Liu · 三月 10 4m read

本文将讨论 Microsoft Visual Studio Code IDE中包含的所有调试工具

内容包括

  • 断点
  • 观察窗口
  • 调用堆栈

让我们从了解调试要求开始!

前提条件

有两个插件(扩展)可用于调试 ObjectScript:

第一个是 InterSystems ObjectScript 扩展包的一部分 。第二个是 Serenji,它是一个独立的插件,提供编辑器、文件管理器和调试功能。这两个插件都可以从插件商店安装。要激活关键功能,Serenji 需要许可证。在本文中,我们将使用 InterSystems ObjectScript 扩展包来降低学习难度。在掌握基础知识后,您可以考虑购买 Serenji 的付费许可证。

0
1 6
新增
文章 Jeff Liu · 三月 5 3m read

你好

数据迁移通常听起来像是一个简单的 "将数据从 A 转移到 B 的任务",直到你真正去做。实际上,这是一个融合了规划、验证、测试和技术精度的复杂过程。

我曾在多个项目中负责将数据迁移到在 IRIS(TrakCare)上运行的 HIS 中,在这些项目中,我认识到成功来自于纪律和自动化的结合。

以下是我想强调的几个要点。

1.从定义好的数据格式开始。

在打开第一个文件之前,确保每个人,尤其是数据提供者,都清楚地了解您所期望的确切数据格式。尽早定义模板可以避免不必要的来回奔波和返工。

虽然 Excel 或 CSV 格式很常见,但我个人认为使用制表符分隔的文本文件(.txt)上传数据是最好的。它既轻便又一致,还能避免文本字段内的逗号问题。

PatID   DOB Gender  AdmDate
10001   2000-01-02  M   2025-10-01
10002   1998-01-05  F   2025-10-05
10005   1980-08-23  M   2025-10-15

确保文件中提供的日期格式正确且在整个文件中保持不变,因为所有这些文件通常都是从 Excel 文件转换而来,而 Basic excel 用户可能会在提供错误的日期格式时犯错。错误的日期格式在转换为 horolog 时会让您恼火。

0
1 8
文章 Jeff Liu · 二月 11 1m read

InterSystems IRIS的嵌入式向量搜索功能使我们能够搜索非结构化和半结构化数据。数据被转换为向量(也称为 "嵌入"),然后存储在 InterSystems IRIS 中并编制索引,用于语义搜索、检索增强生成(RAG)、文本分析、推荐引擎和其他用例。

这是一个将 IRIS 用作向量数据库和在 IRIS 上进行相似性搜索的简单演示。

先决条件:

  1. Python
  2. InterSystems IRIS for Health - 因为它将用作向量数据库

存储库: https://github.com/piyushisc/vectorsearchusingiris

操作步骤

  1. clone软件仓库。
  2. 打开 VS Code,连接到所需的 IRIS 实例和命名空间并编译类。
  3. 打开 IRIS 终端,调用 do ##class(vectors.vectorstore).InsertEmbeddings() 命令,从文件 text.txt 中读取文本,生成嵌入并将其存储在 IRIS 中。
  4. 调用 do ##class(vectors.vectorstore).VectorSearch("search_terms") 命令,输入所需的单词以执行相似性搜索。IRIS 将返回最匹配的前三个词:alt text
0
0 30
文章 Jeff Liu · 二月 9 5m read

如何使用 LangGraph 构建应用程序:分步指南

标签#LangGraph#LangChain#AI#代理#Python#LLM#状态管理#工作流


大家好,我想向大家介绍一下我正在研究和开发的工具 LangGraph。

基本上,传统的人工智能应用程序在处理复杂的工作流和动态状态时经常面临挑战。LangGraph提供了一个强大的解决方案,可以创建有状态的代理,管理复杂的对话,做出基于上下文的决策,并执行复杂的工作流。

本文提供了使用LangGraph 构建应用程序的分步指南,LangGraph 是一个用于创建具有状态图的多步骤代理的框架。


实施步骤:

  1. 设置环境和安装依赖项
  2. 定义应用程序状态
  3. 创建图节点
  4. 配置状态图
  5. 运行代理

1.设置环境并安装依赖项

第一步是设置 Python 环境并安装必要的库:

pip install langgraph langchain langchain-openai

配置 API 凭据:

import os
from langchain_openai import ChatOpenAI

# Configure your API Key
os.
0
0 38
文章 Jeff Liu · 二月 3 2m read

在使用InterSystems 互操作性(Iris/Health Connect/Ensemble时,配置数据通常分散在许多生产项目中:服务、流程、操作、适配器及其设置。

常见的操作或安全需求是回答以下问题:

  • 哪些接口引用了文件系统路径?
  • 目录、网络共享或绝对路径配置在哪里?
  • 我能否在所有产品中快速审核或记录这些信息?

下面的 ObjectScript 工具正是通过将选定的配置设置导出到 CSV 文件来解决这个问题的。

该脚本

  1. 循环浏览所有现有命名空间
  2. 查询所有命名空间中的所有互操作性配置项(Ens_Config.Item)
  3. 遍历每个项目的设置
  4. 提取文件系统/URL 路径(包含 :/\ 的值)
  5. 将结果写入CSV 文件,按类别分组
  6. 生成便于审计的输出,可在 Excel 中打开或与操作/安全团队共享

典型用例

当您需要时,应使用此实用程序:

  • 🔍审计整个产品的文件系统使用情况
  • 🛡审查安全风险(本地路径、网络共享、数据库连接)
  • 📄记录迁移、升级或灾难恢复规划的配置
  • 🔄比较环境(开发环境vs测试环境vs 生产环境)
  • 🧹清理遗留或未使用的路径

这对使用许多接口和适配器的多个产品的大型实例尤其有用。

0
0 42
文章 Jeff Liu · 二月 2 3m read

您可能知道这种情况:
前段时间,你发现了一个非常特殊的 $ZU 函数,可以解决一种非常特殊的问题。某种神秘的公式。它变得很流行,被许多开发人员在您的代码和所有安装中使用。

几个版本和更新之后,ISC 通知你,你的神秘 $ZU 已经过时,不再支持。建议您用新的 $something() 替换它。

那么,如何找到并记录这段神秘代码的用法呢?
它可能位于类、MAC、INT 或 INC 代码中。
它也可能分布在多个命名空间中。
在过去,Studio 还不够完善:它不适用、速度慢、不准确。

我在不同的安装中不止一次遇到过这种情况。
当时还没有源代码控制功能,即使最终引入了源代码控制功能,也很少有人使用。

由于 ObjectScript 是应对这一挑战的唯一可能选择,我编写了自己的实用程序
我的解决方案经过了多年的发展,一旦计划迁移到 IRIS,我就会再次检查它的实用性。
由于它是用纯 ObjectScript 编写的,因此在 IRIS 中无需修改任何字符即可运行。
如您所知,在 ObjectScript 中搜索特定文本的问题一直没有改变。

0
0 68
文章 Jeff Liu · 一月 26 6m read

InterSystems IRIS 提供广泛的可配置安全选项,但许多开发人员主要使用角色和资源来保护整个表或例程。今天,我们将深入探讨。我们也可以分别确保单个列和行的安全,但这两种机制的操作方式截然不同。让我们从列开始。

列安全

为便于测试和演示,我们将保持表结构简洁明了。我们在 USER 名称空间中有一个名为 "Person "的表,其中包含 ID 列、出生日期列 (DOB)、名和姓。

0
0 88
公告 Jeff Liu · 一月 19

互操作性用户界面项目从 2025.1 版继续 进行,并纳入了许多我们的客户和合作伙伴建议和观察到的项目。 我们将继续投资于反馈和更新这一重要的用户体验。在最新发布的 2025.3 版(适用于 IRISIRIS for HealthHealthConnect 和 Health Connect Cloud) DTL 编辑器生产配置 应用程序可选择
NOTE

  • 您可以在现代化和标准体验之间切换。
  • 所有其他互操作性屏幕仍保留在标准用户界面中。
  • 由于新的用户界面将提供新的工作流程,我们希望在这项工作继续进行的同时提供两种体验。

 

生产配置——配置任务介绍
  • 现在每个生产配置主机上都会显示池大小 数量。
  • 现在可以在主机的类别字段中直接输入命名约定来创建新类别
  • 生产配置中现在支持浏览器级控制查找
  • 生产配置主机项目现在具有测试主机功能
  • 在新的 "设置面板 "中,出现了 X 取消图标以取消操作。
  • 较长的类工具提示 说明根据类文档格式化。

      • 增强了配置项描述的显示,以尊重较长结构化描述的标记。
  • 如果不在主机项目或生产的上下文中,操作项目会显示为灰色
  • 创建主机时可自动创建路由器和角色。
  • 在支持的情况下,现在可以选择更新和恢复生产
  • 现在可以 通过新的用户界面创建产品
  • 编辑主机类别时,允许查看连接
0
0 73
文章 Jeff Liu · 十二月 28, 2025 5m read

InterSystems Ideas 门户网站上得票最多的想法-——获得 74 票——要求提供一个轻量级版本的 IRIS。虽然该平台已发展成为一个强大的数据引擎,但许多项目只需要其 SQL 数据库功能。本文演示了如何构建一个非官方的、紧凑的 IRIS 社区版镜像,该镜像只关注核心数据库功能,将镜像大小缩小了 80% 以上。

⚠️ 免责声明

本项目生成的是 InterSystems IRIS Community Edition 的非官方实验镜像

  • 不受InterSystems支持或认可
  • 使用风险自负。这些修改删除了核心平台功能,可能会破坏与工具、API 和预期行为的兼容性。
  • 提供任何担保或保证,包括对生产使用的适用性。
  • 仅供高级用户用于教育和实验目的

为什么选择轻量级 IRIS?

虽然 IRIS 目前包含丰富的互操作性、分析、机器学习、系统管理等功能,但许多项目只需要其核心 SQL 功能。官方社区版 Docker 镜像约为

  • 磁盘使用量3.5-3.8 GB
  • 压缩后大小:~1.1 GB

IRIS Light 可将其减少到

  • 磁盘使用量~575-583 MB
  • 压缩后大小:~144-148 MB

因此适用于

  • 微服务或容器化 SQL 使用
  • 具有更快启动和拉动速度的 CI 管道
  • 无需完整功能的横向扩展
0
0 46
文章 Jeff Liu · 十二月 27, 2025 1m read

InterSystems 常见问题

使用 %Library.Global 类的 Export() 方法导出时,如果导出格式(第四个参数:OutputFormat)设置为 7,即 "块格式(Block format)/Caché 块格式 (%GOF)",则无法导出映射的Global项(只能导出命名空间默认Global数据库中的Global项)。要导出 "块格式/Caché 块格式 (%GOF) "的映射Global项,请在 %Library.Global.Export() 的第一个参数中指定要映射Global项的数据库目录。

执行示例如下。

set DB = "^^c:\InterSystems\Cache\Mgr\Test\" ; "^^\<path to database folder>\"
set sc = ##class(%Library.Global).Export(DB, "TESTGBL.gbl",FULLPATH,7,,")

如果将导出格式指定为 5(默认),即 "ISM/ObjectScript 格式(ISM/缓存格式)(*)",则也可以导出映射Global,但输出文件会比将导出格式(第四个参数:OutputFormat)设置为 7(即 "块格式/Caché 块格式(%GOF)")时大。

此外,如果在Global中记录了二进制数据,也无法正确输出。

更多信息,请参阅以下文档。

0
0 139
公告 Jeff Liu · 十一月 25, 2025

回顾上一季度,报告中着重强调了几项对本季度报告仍具现实意义的重要进展。

  • 从 2025.3 开始,OpenSSL 3将成为所有支持平台的标准配置;SUSE 15 sp6 成为使用 SUSE 的组织所需的操作系统。
  • 修订后的最低 CPU 规格将在 2025.3 中生效。
  • 2025.3 版本将不支持Windows Server 2016

对于初次接触这些资讯的人而言,本次更新将基于当前信息,详细介绍近期所做的改进以及预期的变更;不过,未来预测仍存在不确定性,因此内容不应被解读为确定性的产品路线图。

InterSystems IRIS 生产操作系统和 CPU 架构

最低支持的CPU架构

2024 年,InterSystems 为所有基于英特尔和 AMD 的服务器引入了最低支持的 CPU 架构,使我们能够利用新的 CPU 指令创建速度更快的 IRIS 版本。IRIS 2025.3将更新该列表,要求采用 x86-64-v3 微架构级别,这需要 AVX、AVX2、BMI 和 BMI2 指令。

  • 对于使用英特尔系统的用户,这意味着需要使用 Haswell 及以上版本。
  • 对于使用 AMD 系统的用户,这意味着需要使用 Excavator 及以上版本,不支持 Piledriver 和 Steamroller版本。

您是否想知道您的 CPU 是否仍受支持?

0
0 104
文章 Jeff Liu · 十一月 19, 2025 3m read

本文第一部分提供了所有背景信息。其中还包括DATATYPE_SAMPLE数据库的链接,您可以使用该链接来跟进示例。

在该部分中,我们探讨了一种易于检测的错误类型(""Access Failure【访问失败】") ,因为当尝试通过数据库驱动程序读取数据时,它会立即触发一条明确的错误消息。

本节讨论的错误更为隐蔽,也更难发现。我将它们称为"静默损坏(Silent Corruption""未检测到的数据变异(Undetected Mutation"

让我们从"静默损坏(Silent Corruption"开始:
DATATYPE_SAMPLE数据库的 "雇员(Employee "表中,有一条被故意篡改的记录可以证明这种行为--它就是ID = 110 的记录。 乍一看,甚至再看一眼,都看不出任何问题。无论是数据库驱动程序还是查询工具,都没有显示读取该记录有问题。

只有仔细观察才会发现,红色标记单元格中的值与传输(和定义)的元数据不符。

"名称Name)"列被定义为VARCHAR(50),但实际值为60 个字符

在某些情况下,这种行为不会造成任何问题——例如,当驱动程序宽松地处理这种不一致时。
但是,当下游系统依赖于所提供的元数据时,问题就会出现。如果根据这些元数据定义进行进一步处理,当实际内容与约定的接口不一致时,就可能出现错误。

0
0 84
文章 Jeff Liu · 十一月 13, 2025 4m read

在使用标准 SQL 或 InterSystems IRIS 中的对象层时,元数据的一致性通常通过内置验证和类型执行来保持。但是,绕过这些层直接访问global的传统系统会带来微妙而严重的不一致性。

了解驱动程序在这些边缘情况下的行为,对于诊断遗留数据问题和确保应用可靠性至关重要。
DATATYPE_SAMPLE数据库旨在帮助分析列值不符合元数据中定义的数据类型或约束的错误情形。我们的目标是评估 InterSystems IRIS 及其驱动程序(JDBC、ODBC、.NET)和不同工具在发生此类不一致时的表现。 在本篇文章中,我将重点介绍JDBC 驱动程序


问题出在哪里?

一些传统应用程序会直接写入globals。如果使用关系模型(通过 CREATE TABLE 创建或使用全局映射手动定义)来公开这些数据,那么映射定义 的底层值就会与每列的声明元数据一致。

当这一假设被打破时,可能会出现不同类型的问题:

  1. 访问失败(Access Failure:根本无法读取某个值,当驱动程序尝试访问该值时会抛出异常。
  2. 静默损坏(Silent Corruption:值已成功读取,但与预期的元数据不匹配
  3. 未检测到的数据变异(Undetected Mutation:该值被读取且看似有效,但被驱动程序悄然修改以符合元数据要求,这使得这种不一致性难以被察觉。
0
0 64
文章 Jeff Liu · 十一月 6, 2025 4m read

动机

直到开始新工作,我才了解到ObjectScript。实际上,Objectscript并不是一种年轻的编程语言。与 C++、Java 和 Python 相比,它的社区并不活跃,但我们很想让这里更有活力,不是吗?

我注意到,有些同事在理解大型项目中的类关系时感到棘手。目前还没有易于使用的现代化类图工具适用于ObjectScript。

相关工作

我尝试过相关的工作:

——InterSystems 类视图:
1. https://github.com/intersystems-community/ClassExplorer
这个工具很棒,类图显示清晰美观。但存在Docker构建问题:“#0 0.512 exec ./irissession.sh: no such file or directory”。我猜这是为Studio设计的支持功能,而非VSCode。它似乎需要手动导入项目,且需要一定配置才能使用。

2. https://github.com/gjsjohnmurray/vscode-objectscript-class-view
这是另一个给我带来灵感的伟大作品。类结构清晰,不仅支持项目中的类,也支持库中的类。但看起来像是VSCode大纲的增强版。

——其他语言的 VSCode 类图表视图插件

1. https://github.

0
0 119
文章 Jeff Liu · 五月 22, 2025 5m read

基于 XSLT 互联互通临床文档到 FHIR 资源转换

国家卫健委互联互通成熟度评测中的临床共享文档,作为医疗信息交换的重要载体,采用了XML标准的文档格式。随着医疗信息化的发展,FHIRFast Healthcare Interoperability Resources)作为新一代医疗信息交换标准,因其简洁性、灵活性和RESTful架构,逐渐成为医疗数据交换的理想选择。将共享文档文档转换为FHIR资源,能够有效促进不同医疗系统间的数据互通,提升医疗信息的利用价值。

XSLT(可扩展样式表语言转换)是一种用于将XML文档转换为其他XML文档或文本格式的语言。在医疗数据转换场景中,XSLT凭借其强大的XML处理能力,成为共享文档FHIR转换的理想工具。

我们知道共享文档文档是一种结构化的XML文档,通常包含以下主要部分:

- 文档头(Document Header):包含文档元数据,如文档类型、创建时间、作者等

- 临床数据部分(Clinical Sections):按章节组织的临床信息,如问题列表、用药记录、检查报告等

- 数据条目(Entries):具体的临床数据项,如诊断、药物、检验结果等

 

FHIR则采用了资源导向的设计理念,每个临床概念都被建模为独立的资源,通过RESTful API进行访问。

0
0 145
文章 Jeff Liu · 五月 15, 2025 1m read

各位开发者,大家好!

或许您不得不实现一些场景,这些场景不需要 FHIR 仓库但需要转发 FHIR 请求、管理响应,并且可能运行转换或在两者之间提取一些值。 在这里,您会找到一些可以使用 InterSystems IRIS For HealthHealthShare Health Connect 实现的示例。

在这些示例中,我使用了具有 FHIR 互操作性适配器HS.FHIRServer.Interop.Request 消息的互操作性生产配置。

第一个场景从头开始构建 FHIR 请求(可以来自文件,也可以来自 SQL 查询),然后将其发送到外部 FHIR 服务。图片

下一个场景是一种 FHIR 传递,用于将请求和响应传递到外部 FHIR 仓库,另外还管理 OAuth 令牌。图片

最后一个场景包括接收 FHIR 请求,然后将其转发到外部 FHIR 服务,但会提取信息或更改其间的某些字段。图片

您将在 Open Exchange 应用程序中找到实现细节 :)

希望这对您有用!

0
0 123
文章 Jeff Liu · 五月 15, 2025 24m read

在本文中,我们将使用基于分布式存储的 Kubernetes 部署来构建一个 IRIS 的高可用配置,而不使用“传统的”IRIS Mirror。 这种部署将能够容忍与基础架构相关的故障,如节点、存储和可用区故障。 所描述的方法可以大大降低部署的复杂性,代价是 RTO的略微延长。

0
0 192
InterSystems 官方 Jeff Liu · 三月 3, 2025

首先,祝开发者社区的各位成员新年快乐! 我们希望今年为大家带来更多好东西,今天我想介绍 VS Code的最新版 Intersystems Language Server 扩展程序。 大多数 Language Server 改进都可以通过 ObjectScript 扩展 UI 体验到,因此您可能不知道 2024 年我们发布了 Intellisense 和鼠标悬停等方面的许多改进。 请快速浏览 Language Server 更新日志 看看您错过了什么。 最近发布的2.7.0 版本带来了对 Windows ARM 平台的支持,因此,如果您使用 Surface Pro 11 这类设备(我正在用这台设备愉快地写这篇帖子),那么您现在可以在您的设备上获得出色的 ObjectScript 开发体验。 赶快试用一下,并在下方评论区中分享您的使用心得。

0
0 175
文章 Jeff Liu · 八月 26, 2024 2m read

出于实际原因,可能需要在 Linux 服务器重启后自动启动 IRIS 实例。

下面是在 Linux 服务器重启时通过 systemd 自动启动 IRIS 的步骤:

1. 在 /etc/systemd/system/iris.service 中创建一个 iris.service 文件,其中包含以下信息

[Unit]
Description=InterSystems IRIS Data Platform
After=network.target

[Service]
Type=forking
User=irisusr
ExecStart=/usr/bin/iris start iris
ExecStop=/usr/bin/iris stop iris quietly
Restart=on-failure
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

注意:User应该填入IRIS实例的所有者。

2. 重新加载 systemd 配置管理器

sudo systemctl daemon-reload

3. 启用IRIS服务,使其自动启动

sudo systemctl enable iris

激活后将创建软链接,自动启动 IRIS:

Synchronizing state of iris.
0
0 223
文章 Jeff Liu · 六月 30, 2024 7m read
Purpose of this article

有两篇很棒的有关删除消息关联的孤儿记录的内容以及如何处理孤儿的问题的WRC议最佳实践文章Ensemble Orphaned Messages | InterSystems Developer Community | Best DeleteHelper - A Class to Help with Deleting Referenced Persistent Classes (intersystems.com)
本文并不是要取代 Intersystems 专业人员撰写的这些文章,而是要在此基础上介绍我们如何利用这些信息和其他讨论(包括我们实际清理这些数据的方法)来帮助我们的数据库变得更加紧凑。

情况说明:

我们的备份越来越多。年初的时候,我们遇到过一台服务器被强制故障的情况,需要进行还原。由于数据库庞大,即使复制这个数据库也需要很长时间,更不用说还原重建shadow服务器了。因此,我们不得不决定最终解决这一增长问题。最初的原因已经确定 

  1. 开箱即用的任务或者在某些时候假定已运行,但没有勾选信息体。这是因为在查询其中一个消息体时,我们得到了来自 10 多年前的 ID 1。该任务是最佳实践中提到的默认 Ens.Util.Tasks.Purge。这就引出了流程中的提示 1 

理解你的数据

您在数据库中存储了哪些数据?您是否有必须保存在记录表中的数据?

0
0 244
文章 Jeff Liu · 四月 1, 2024 1m read

此视频帮助大家了解InterSystems如何帮助CRO来加快临床数据采集和更快地推广市场。

演讲嘉宾:

Jim Coutcher, Senior Director/Principal, Global Head of Enriched Studies, Real World Solutions, IQVIA
Qi Li, Physician Executive, InterSystems
Matt Stannard, life Sciences Advisor, InterSystems

 

欢迎大家来我们的 Bilibili主页观看更多视频!

0
0 181