.png)

新しい InterSystems IRIS® Cloud SQL と InterSystems IRIS® Cloud IntegratedML® クラウド製品のユーザーであり、デプロイメントのメトリクスにアクセスして独自の可観測性プラットフォームに送信しようと考えている方のために、メトリクスを Google Cloud Platform Monitoring(旧称 StackDriver)に送信して手っ取り早く行う方法をご紹介します。
この記事では、IRIS環境におけるPythonプログラミングの基礎について紹介します。
本題に入る前に、重要なトピックである「Pythonの仕組み」について説明します。これは、IRIS環境でPythonを使用して作業する際に起こりうる問題や制限を理解するのに役立ちます。
すべての記事と例は、以下のgitリポジトリで確認できます: iris-python-article
Pythonの仕組み
インタープリター型言語
Pythonはインタープリター型言語であり、コードはランタイム時に1行ずつ実行されます。スクリプトをインポートする場合でも同様です。
これはどういうことでしょうか? 以下のコードを見てみましょう。
# introduction.py
def my_function():
print("Hello, World!")
my_function()
このスクリプトを実行すると、Pythonインタープリターはコードを1行ずつ読み取ります。 まず最初に関数 my_function を定義してから、その関数を呼び出すと、コンソールに「Hello, World!」と出力されます。
スクリプトを直接実行している例:
python3 /irisdev/app/src/python/article/introduction.py
出力は以下のようになります。
Hello, World!
この記事では、マジックメソッドとしても知られるPythonダンダーメソッドについて簡単に解説します。
ダンダーメソッドとは?
ダンダーメソッドは、始めと終わりに2つのアンダースコア(__)が付いているPythonの特殊メソッドです。 このメソッドを使用することで、加算や減算、文字列表現など、組み込みの操作に対するオブジェクトの動作を定義することができます。
よくあるダンダーメソッドには、次が含まれます。
私が先週リリースしたInterSystems Testing Managerの新しいバージョンでは、@Timothy Leavittの優れた
テストカバレッジツールが追加され、私は2025年度Developer Toolsコンテストに出品しました。
こちらは、IPMプロジェクトのユニットテストが、IPMリポジトリでソート順を上書きできると思われる機能をまだカバーしていないことを示すティザー的なスクリーンショットです。

%UnitTestフレームワークのユーザーは、InterSystems Testing Manager拡張機能の最新リリース(v2.0.0)を@Timothy Leavittの素晴らしいテストカバレッジツールと組み合わせることで、VS Code内でテストカバレッジ情報を取得できるようになりました。
上部にテストカバレッジのペインが表示されています。左側のテストエクスプローラーと併せて確認しやすいように、右側のセカンダリサイドバーに移動させました。
直近のテスト実行(テストカバレッジツール自体のユニットテストすべて)の結果、TestCoverage.Procedures内のBitValueメソッドはカバーされていましたが、BitCountメソッド(および他の6つのメソッド)はカバーされていないことに注目してください。 TestCoverageパッケージの全体で43.08%の実行可能行のみが、ユニットテストによってカバーされていました。
InterSystems Testing Managerに対するこの大幅なアップグレードを、現在開催中のDeveloper Toolsコンテスト に出品します。 もし良いと思っていただけたら、来週の投票でぜひ応援してください!
少し遅れましたが、モバイルアプリケーションから接続する例を示して Workflow Engine に関する連載記事をようやく締めくくることにします。
前回の記事では、これから説明する例として、患者と担当医師の両方にとって高血圧症などの慢性病状の詳細な管理を可能にするアプリケーションを示しました。 この例では、患者は携帯電話からウェブアプリケーション(基本的に、デバイスに応答するように設計されたウェブページ)にアクセスし、ポータブル血圧計が IRIS インスタンスに送信する測定に基づく通知を受信します。
したがって、IRIS インスタンスへのアクセスは 2 つです。
- モバイルアプリケーションからのユーザーアクセス。
- 血圧の測定値を送信するデバイスアクセス。
この記事では、患者が測定値を生成するタスクを管理できる、最初のアクセスを確認します。
モバイルアプリケーションと IRIS の接続
この接続では、IRIS 内でウェブアプリケーションを構成するのが最も単純です。これを行うには、管理ポータルのシステム管理 -> セキュリティ -> アプリケーション -> ウェブアプリケーションからアクセスします。
次に、表示されるリストでアプリケーションの新規作成をクリックすると、以下のような画面が開きます。
この画面で、以下のフィールドを構成しましょう。
.png)
コミュニティの皆さん、こんにちは。
この記事では、私のアプリケーションである iris-AgenticAI をご紹介します。
エージェンティック AI の登場により、人工知能が世界とやりとりする方法に変革的な飛躍をもたらし、静的なレスポンスが動的な目標主導の問題解決にシフトしています。 OpenAI の Agentic SDK を搭載した OpenAI Agents SDK を使用すると、抽象化をほとんど行わずに軽量で使いやすいパッケージでエージェンティック AI アプリを構築できます。 これは Swarm という前回のエージェントの実験を本番対応にアップグレードしたものです。
このアプリケーションは、人間のような適応性で複雑なタスクの推論、コラボレーション、実行を行える次世代の自律 AI システムを紹介しています。
アプリケーションの機能
- エージェントループ 🔄 ツールの実行を自律的に管理し、結果を LLM に送信して、タスクが完了するまで反復処理するビルトインのループ。
- Python-First 🐍 ネイティブの Python 構文(デコレーター、ジェネレーターなど)を利用して、外部の DSL を使用せずにエージェントのオーケストレーションとチェーンを行います。
- ハンドオフ 🤝 専門化されたエージェント間でタスクを委任することで、マルチエージェントワークフローをシームレスに調整します。
- 関数ツール ⚒️ @tool で Python 関数をデコレートすることで、エージェントのツールキットに即座に統合させます。
- ベクトル検索(RAG) 🧠 RAG 検索のためのベクトルストアのネイティブ統合。
- トレース 🔍 リアルタイムでエージェントワークフローの可視化、デバッグ、監視を行うためのビルトインのトレース機能(LangSmith の代替サービスとして考えられます)。
- MCP サーバー 🌐 stdio と HTTP によるモデルコンテキストプロトコル(MCP)で、クロスプロセスエージェント通信を可能にします。
- Chainlit UI 🖥️ 最小限のコードで対話型チャットインターフェースを構築するための統合 Chainlit フレームワーク。
- ステートフルメモリ 🧠 継続性を実現し、長時間実行するタスクに対応するために、セッション間でチャット履歴、コンテキスト、およびエージェントの状態を保持します。
コミュニティの皆さん、こんにちは。
従来のキーワードベースの検索では、ニュアンスのあるドメイン固有のクエリには対応できません。 ベクトル検索であれば、セマンティック認識を利用して、キーワードだけでなくコンテキストにも基づいたレスポンスを AI エージェントで検索して生成することができます。
この記事では、エージェンティック AI RAG(検索拡張生成)アプリケーションを作成手順を紹介します。
実装手順:
- エージェントツールを作成する
- インジェスト機能の追加: ドキュメント(例: InterSystems IRIS 2025.1 リリースノート)を自動的にインジェストしてインデックス作成を行います。
- ベクトル検索機能の実装
- ベクトル検索エージェントを作成する
- Triage(メインエージェント)に渡す
- エージェントを実行する
この連載記事を終えていなかったことに気付きました!
今日の記事では、フロントエンドから最適なオプションを選択できるように、テキストに最も類似する ICD-10 診断を抽出するプロダクションプロセスについて説明します。
診断の類似度検索:
アプリケーション内で、HL7 で受け取った診断リクエストを示す画面から、医療従事者が入力したテキストに最も近い ICD-10 診断を検索できます。
検索プロセスを高速化するために、HL7 メッセージを取得する際に受信した診断をベクトル化したテキストをデータベースに保存しました。 これを行うために、メッセージから診断コードを抽出し、ベクトルを生成するメソッドにそれを送信する単純な BPL を実装しました。
受信した診断をベクトル化するコードは以下のようになります。
REST レスポンスから IRIS データーベースに情報を保存する新しいプロジェクトがあります。 少なくとも 20 以上の個別の REST エンドポイントの情報を同期する必要があるため、それらのエンドポイントの結果を保存するために、ほぼ同じ数の ObjectScript クラスを作成しなければなりません。
ChatGPT を使って、それらのクラスを作成することはできますか? 答えは「できます」です。生成 AI を使って便利なものを作るのは初めてなので、素晴らしい機会だと思います。 スープを飲むキリンの写真を生成するのには飽きてきました…。
以下のようにして実現しました。
- エンドポイントをクエリするために、「curl」を使ってサンプルの JSON REST の呼び出し出力を取得する。
- ChatGPT にアクセスする(InterSystems は社員に会社全体で使用できるライセンスを提供しています)。
- ChatGPT と以下のように会話する。
以下のリクエストを「Message ChatGPT」プロンプトに入力しました。
私: 次の JSON のデータを格納する ObjectScript クラスを生成してください。
JSON を入力する前に Return キーを押すと、ChatGPT から次のように指示されました。
プロフェッショナルな FHIR® から OMOP への変換
「プロフェッショナル」という言葉の使用に焦点を当て、それをある文脈に置いて考えてみましょう。これは業界の専門家によって書かれており、サポートと、動作に貢献する柔軟なオプションに対してガードレールをいくつか備えた有料サービスとしてまとめられているということです。オープンソースまたは自社開発のソリューションと比較して、(同じ機能を果たすかもしれませんが)拡張性やミッションクリティカルな価値の提供が検討材料となる点に重要な違いがあると感じます。OHDSI コミュニティは、OMOP データベースへの ETL というテーマに関して総合的な能力を備えており、たとえば WhiteRabbit は OMOP データベースを分析し、Rabbit in a Hat は ETL の設計に役立ちます。提供内容を改良するためにコミュニティツールが InterSystems の変換スタックに適用されたということに、株を空売りしてでも賭けるでしょう。
.png)
Hades DatabaseConnector 6.4.0 が IRIS に対応しました!
.png)
OMOP Odyssey - InterSystems OMOP、クラウドサービス(トロイ編)
次回の Python コンテストでは、Python を使用して IRIS をデータベースとして使用する簡単な REST アプリケーションを作成する方法についての小さなデモを作成しようと思います。 以下のツールを使用します。
- FastAPI フレームワーク: 高パフォーマンス、学習しやすい、高速コーディング、プロダクション対応
- SQLAlchemy: Python SQL ツールキットで、アプリケーション開発者が SQL の全性能と柔軟性を活用できるオブジェクトリレーションマッパーです。
- Alembic: Python 用の SQLAlchemy データベースツールキットと使用する軽量のデータベース移行ツール。
- Uvicorn: Python の ASGI ウェブサーバー実装。
しばらくの間、私はワークフロー機能について何らかの概念実証を行おうと計画していましたが、これは IRIS に存在する他の多くの機能と同様に、お客様にほとんど気付かれないまま終わってしまう傾向があります(その点については申し訳ありません)。 そこで数日前、この機能を構成して、Angular で開発したユーザーインターフェースに接続して使用するための例を作成することに決めました。
記事が非常に長くならなずに読みやすくするために、3 部に分けて説明しようと思います。 この最初の記事では、Workflow の機能とこれから解決する例について説明します。 2 つ目の記事では、Workflow の管理を担うプロファクションの構成と実装について詳しく説明します。 最後に、ウェブアプリケーションを通じて Workflow にある情報にアクセスする方法を説明します。
InterSystems IRIS Workflow Engine
この Workflow 機能を説明するには、IRIS ドキュメントに記載の説明をコピーするのが一番でしょう。
前回の記事では、一般的な概念と、InterSystems IRIS に統合されたタスクエンジンを使用して解決する問題を紹介しました。今回の記事では、相互運用性プロダクションを構成してソリューションを提供する方法を確認します。
Workflow Engine の構成
First we are going to define the roles of the tasks that we are going to manage, in our example we are going to define two types:
- AutomaticBloodPressureRole: ユーザーの介入が不要な自動タスクを作成します。
- ManualBloodPressureRole: ユーザーが手動で検証する必要のあるタスクを作成します。
後で様々な患者から HL7 メッセージを受信するたびにロールをユーザーに割り当てるため、ここでは割り当てる必要はありません。
また、IRIS ユーザーを Workflow に追加する必要もありません。これはプロダクションからコードで実行します。
プロダクションのセットアップ
この例では、アドホックで作成した「WORKFLOW」というネームスペース内にプロダクションを作成します。 このプロダクションに、必要とするビジネスコンポーネントを含めます。
Django フレームワークは長年学習したいと思ってきましたが、いつも他の差し迫ったプロジェクトが優先されてきました。 多くの開発者と同様に、機械学習においては Python を使用していますが、初めてウェブプログラミングについて学習したころは、PHP がまだまだ優勢でした。そのため、機械学習の作品を公開する目的でウェブアプリケーションを作成するための新しい複雑なフレームワークを選択する機会が訪れても、私は依然として PHP に目を向けていました。 ウェブサイトの構築には Laravel と呼ばれるフレームワークを使用してきましたが、この PHP フレームワークから最新の MVC(モデルビューコントローラー)というウェブプログラミングのパターンに出会いました。 さらに複雑なことに、私は最新の JavaScript フレームワークを使用してフロントエンドを構築するのを好んでいます。 React を使用するのがより一般的のようですが、私は Vue.js に一番慣れているため、このプロジェクトではそれを使用することにしました。
なぜ複雑なフレームワークを使用するのでしょうか? Django、Laravel、React、または Vue などのフレームワークを学習する際の最大の難関は何でしょうか?
Auth0 と InterSystems IRIS FHIR リポジトリ使った SMART On FHIR に関する連載最終回では、Angular 16 で開発したアプリケーションをレビューします。
このソリューションに定義されたアーキテクチャがどのように構成されているかを思い出しましょう。
フロントエンドのアプリケーションは 2 列目で、ご覧のように 2 つのことを行います。
- ログインリクエストを Auth0 にリダイレクトし、レスポンスを受信する。
- REST 経由でリクエストを FHIR サーバーに送信し、そのレスポンスを受信する。
Angular
Angular は TypeScript が開発し、Google が管理するオープンソースの Web アプリケーションフレームワークで、シングルページ Web アプリケーションの作成と管理に使用されます。 この「シングルページアプリケーション」デザイン手法によって、はるかに動的なユーザー向けアプリケーションを設計することができます。 最初の記事で説明したとおり、ここではアプリケーションサーバーとリバースプロキシとして NGINX を使用し、呼び出しヘッダーがサーバーの呼び出しヘッダーに一致するように変更して、CORS から派生する問題を回避します。
アプリケーションのデザイン
OwnObjectScriptExtension
ObjectScript は InterSystems IRIS などの InterSystems 製品に使用されている強力な言語で、堅牢なアプリケーションの構築を可能にします。 OwnObjectScriptExtension は Visual Studio Code の拡張機能として、ObjectScript 開発エクスペリエンスを強化する広範なツールと機能を提供しています。 この記事では、OwnObjectScriptExtension によって ObjectScript 開発ワークフローがどのように改善されるかを説明します。
機能
Add Method Description
メソッドの説明を包括的に記述することは、コードを明確に維持し、コラボレーションを促進する上で欠かせません。 OwnObjectScriptExtension を使用すると、メソッドの説明を簡単に生成できます。 メソッド内にカーソルを配置し、Add Method Description コマンドを実行するだけで完了です。 拡張機能によってメソッドの説明テンプレートが自動的に生成されるため、意味のあるドキュメントを簡単に提供できます。
Make Select Statement
お客様のプロジェクトにおいて、どのようにすればいつ何時に誰がデータベースを変更したかを追跡できるか問われました。 SQL とオブジェクトへの両方のアクセスで Insert、Update、および Delete を追跡することが目的です。
以下は、変更ログを維持するために作成したテーブルです。
説明
これは、ネイティブウェブアプリケーションとして IRIS にデプロイできる Django アプリケーションのテンプレートです。
インストール
- リポジトリをクローンする
- 仮想環境を作成する
- 要件をインストールする
- docker-compose ファイルを実行する
git clone
cd iris-django-template
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
docker-compose up
使用法
ベース URL は http://localhost:53795/django/ です。
エンドポイント
/iris- IRISAPP ネームスペースに存在する上位 10 個のクラスを持つ JSON オブジェクトを返します。/interop- IRIS の相互運用性フレームワークをテストするための ping エンドポイント。/api/posts- Post オブジェクトの単純な CRUD エンドポイント。- ``/api/comments` - Comment オブジェクトの単純な CRUD エンドポイント。
このテンプレートからの開発方法
WSGI 導入記事をご覧ください: wsgi-introduction。
説明
これは、ネイティブウェブアプリケーションとして IRIS にデプロイできる FastAPI アプリケーションのテンプレートです。
インストール
- リポジトリをクローンする
- 仮想環境を作成する
- 要件をインストールする
- docker-compose ファイルを実行する
git clone
cd iris-fastapi-template
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
docker-compose up
使用法
ベース URL は http://localhost:53795/fastapi/ です。
エンドポイント
/iris- IRISAPP ネームスペースに存在する上位 10 個のクラスを持つ JSON オブジェクトを返します。/interop- IRIS の相互運用性フレームワークをテストするための ping エンドポイント。/posts- Post オブジェクトの単純な CRUD エンドポイント。/comments- Comment オブジェクトの単純な CRUD エンドポイント。
このテンプレートからの開発方法
WSGI 導入記事をご覧ください: wsgiサポートの概要。
説明
これは、ネイティブウェブアプリケーションとして IRIS にデプロイできる Flask アプリケーションのテンプレートです。
インストール
- リポジトリをクローンする
- 仮想環境を作成する
- 要件をインストールする
- docker-compose ファイルを実行する
git clone
cd iris-flask-template
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
docker-compose up
使用法
ベース URL は http://localhost:53795/flask/ です。
エンドポイント
/iris- IRISAPP ネームスペースに存在する上位 10 個のクラスを持つ JSON オブジェクトを返します。/interop- IRIS の相互運用性フレームワークをテストするための ping エンドポイント。/posts- Post オブジェクトの単純な CRUD エンドポイント。/comments- Comment オブジェクトの単純な CRUD エンドポイント。
このテンプレートからの開発方法
WSGI 導入記事をご覧ください: wsgi-introduction。
コンテキスト
ウェブサーバーゲートウェイインターフェース(WSGI)は、ウェブサーバーがリクエストを Python プログラミング言語で記述されたウェブアプリケーションまたはフレームワークに転送するための単純な呼び出し規則です。 WSGI は PEP 3333 で詳しく説明された Python 規格です。
🤔 定義は良いとして、IRIS との関連性は何でしょうか?
IRIS 2024.2+ の新機能により、直接 IRIS で WSGI アプリケーションを実行できます。 この機能は、IRIS を他の Python フレームワークとライブラリに統合する優れた方法です。
これは、Python を使用して IRIS と対話できる Python ファーストエクスペリエンスのトレンドに沿ったもので、Python アプリケーションを IRIS 上で直接実行することもできるようになりました。
使用方法
IRIS で WSGI アプリケーションをインスタンス化するには、IRIS 管理ポータルのセキュリティ -> アプリケーション -> ウェブアプリケーションのセクションで構成する必要があります。
単純な Flask の例:
/irisdev/app/community ディレクトリにある app.py というファイル:
コミュニティメンバーから、Python 2024 コンテストでの出品に対する非常に素晴らしいフィードバックが届きました。 ここで紹介させていただきます。
純粋な IRIS の 5 倍以上のサイズでコンテナーをビルドしているため、時間がかかっています
コンテナーの始動も時間はかかりますが、完了します
バックエンドは説明通りにアクセス可能です
プロダクションは稼動しています
フロントエンドは反応します
何を説明したいのかがよくわかりません
私以外のエキスパート向けに書かれた説明のようです
出品はこちら: https://openexchange.intersystems.com/package/IRIS-RAG-App
このようなフィードバックをいただけて、本当に感謝しています。プロジェクトに関する記事を書く素晴らしいきっかけとなりました。 このプロジェクトにはかなり包括的なドキュメントが含まれてはいますが、ベクトル埋め込み、RAG パイプライン、LLM テキスト生成のほか、Python や LLamaIndex などの人気の Python ライブラリに精通していることが前提です。
前回の記事では、ICD-10 による診断のコーディングをサポートできるように開発された d[IA]gnosis アプリケーションを紹介しました。 この記事では、InterSystems IRIS for Health が、事前トレーニングされた言語モデル、そのストレージ、およびその後の生成されたすべてのベクトルの類似性の検索を通じて ICD-10 コードのリストからベクトルを生成するために必要なツールをどのように提供するかを見ていきます。
はじめに
AI モデルの開発に伴って登場した主な機能の 1 つは、RAG(検索拡張生成)という、コンテキストをモデルに組み込むことで LLM モデルの結果を向上させることができる機能です。 この例では、コンテキストは ICD-10 診断のセットによって提供されており、これらを使用するには、まずこれらをベクトル化する必要があります。
診断リストをベクトル化するにはどうすればよいでしょうか?
SentenceTransformers と Embedded Python
ベクトルを生成するために、トレーニング済みのモデルからの自由テキストのベクトル化を大幅に容易にする SentenceTransformers という Python ライブラリを使用しました。 そのウェブサイトでは以下のように説明されています。
ベクトルデータ型と Vector Search 機能が IRIS に導入されたことにより、アプリケーションの開発に多数の可能性が開かれました。こういったアプリケーションの例として、バレンシア保健省が AI モデルを使用した ICD-10 コーディング支援ツールを要求した公募で出品されたアプリケーションが最近私の目に留まりました。
要求されたツールのようなアプリケーションをどのように実装できるでしょうか? 必要なものを確認しましょう。
- ICD-10 コードのリスト。自由テキスト内で診断を検索するための RAG アプリケーションのコンテキストとして使用します。
- ICD-10 コード内で相当するものを検索するためにテキストをベクトル化するトレーニング済みモデル。
- ICD-10 コードとテキストの取り込みとベクトル化を行うために必要な Python ライブラリ。
- 可能性のある診断を見つけるためのテキストを受け入れる使いやすいフロントエンド。
- フロントエンドから受信するリクエストのオーケストレーション。
これらのニーズに対応するために、IRIS は何を提供できるでしょうか?
コミュニティの皆さん、こんにちは。
この記事では、iris-RAG-Gen という私のアプリケーションをご紹介します。
iris-RAG-Gen は、IRIS Vector Search の機能を使用して、Streamlit ウェブフレームワーク、LangChain、および OpenAI で ChatGPT をパーソナライズするジェネレーティブ AI 検索拡張生成(RAG: Retrieval-Augmented Generation)アプリケーションです。 このアプリケーションは IRIS をベクトルストアとして使用します。
アプリケーションの機能
- ドキュメント(PDF または TXT)を IRIS に取り込む
- 選択されたドキュメントの取り込みを使ってチャットする
- ドキュメントの取り込みを削除する
- OpenAI ChatGPT
ほとんどの方が @Daniel Tamajon の CachéQuality プロジェクトをご存知かと思います。 まだご存知でない方のために説明すると、InterSystems 製品用に記述されたコードの静的構文アナライザーです。 コード内の様々な種類の問題や潜在的なバグがお客様のプロダクション環境で見つかる前に、それらを検出して解決するのに役立てられます。 つまり、CachéQuality を使用することで、より優れた製品を提供できるようになります。 ObjectScript コードのチェックに使用されるルールの完全なリストは、こちらをご覧ください。
