Pesquisar

Artigo
· Out. 7 6min de leitura

La espera ha terminado: damos la bienvenida al soporte de GoLang para InterSystems IRIS

Introducción

La plataforma de datos InterSystems IRIS ha sido conocida durante mucho tiempo por su rendimiento, interoperabilidad y flexibilidad entre distintos lenguajes de programación. Durante años, los desarrolladores pudieron usar IRIS con Python, Java, JavaScript y .NET, pero los desarrolladores de Go (o Golang) tuvieron que esperar.

Golang Logo

Esa espera finalmente ha terminado.

El nuevo controlador go-irisnative incorpora soporte para GoLang en InterSystems IRIS, implementando la API estándar database/sql. Esto significa que los desarrolladores de Go ahora pueden utilizar herramientas de base de datos conocidas, agrupación de conexiones e interfaces de consulta para crear aplicaciones impulsadas por IRIS.


Por qué es importante el soporte para GoLang

GoLang es un lenguaje diseñado para la simplicidad, la concurrencia y el rendimiento, ideal para arquitecturas nativas en la nube y basadas en microservicios. Impulsa algunos de los sistemas más escalables del mundo, como Kubernetes, Docker y Terraform.

Integrar IRIS en el ecosistema de Go permite:

  • Servicios ligeros y de alto rendimiento utilizando IRIS como backend.
  • Concurrencia nativa para la ejecución paralela de consultas o el procesamiento en segundo plano.
  • Integración fluida con sistemas distribuidos y en contenedores.
  • Acceso a bases de datos de forma idiomática mediante la interfaz database/sql de Go.

Esta integración convierte a IRIS en la opción perfecta para aplicaciones modernas y preparadas para la nube desarrolladas en Go.


Cómo empezar

1. Instalación

go get github.com/caretdev/go-irisnative

2. Conectar a IRIS

Así es como se realiza la conexión utilizando la API estándar database/sql:

import (
    "database/sql"
    "fmt"
    "log"
    _ "github.com/caretdev/go-irisnative"
)

func main() {
    db, err := sql.Open("iris", "iris://_SYSTEM:SYS@localhost:1972/USER")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // Simple ping to test connection
    if err := db.Ping(); err != nil {
        log.Fatal("Failed to connect:", err)
    }

    fmt.Println("Connected to InterSystems IRIS!")
}

3. Creación de una tabla

Vamos a crear una tabla de demostración sencilla:

_, err = db.Exec(`CREATE TABLE IF NOT EXISTS demo (
    id INT PRIMARY KEY,
    name VARCHAR(50)
)`)
if err != nil {
    log.Fatal(err)
}
fmt.Println("Table created.")

4. Inserción de datos

Por el momento, no se admiten inserciones de varias filas; se debe insertar una fila por cada llamada:

_, err = db.Exec(`INSERT INTO demo (id, name) VALUES (?, ?)`, 1, "Alice")
if err != nil {
    log.Fatal(err)
}

_, err = db.Exec(`INSERT INTO demo (id, name) VALUES (?, ?)`, 2, "Bob")
if err != nil {
    log.Fatal(err)
}

fmt.Println("Data inserted.")

5. Consulta de datos

La consulta es sencilla utilizando la interfaz database/sql

rows, err := db.Query(`SELECT id, name FROM demo`)
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

for rows.Next() {
    var id int
    var name string
    if err := rows.Scan(&id, &name); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("ID: %d, Name: %s\n", id, name)
}

That’s all you need to perform basic SQL operations from Go.


Cómo funciona

Bajo el capó, el controlador go-irisnativeutiliza la API nativa de IRIS para una comunicación eficiente y de bajo nivel con la base de datos. El controlador implementa las interfaces estándar database/sql/driver de Go, lo que lo hace compatible con herramientas existentes de Go como:

  • sqlx
  • gorm (con un dialecto personalizado)
  • Herramientas estándar de migración en Go

Esto ofrece a los desarrolladores una API familiar con la potencia y el rendimiento del acceso nativo a IRIS.


Ejemplos de casos de uso

  • Microservicios — servicios ligeros en Go conectados directamente a IRIS.
  • APIs de datos — exposición de endpoints REST o gRPC respaldados por IRIS.
  • Herramientas de integración — conexión de los datos de IRIS con otros sistemas en flujos desarrollados en Go.
  • Aplicaciones IRIS nativas en la nube — despliegue de aplicaciones en Go respaldadas por IRIS en Kubernetes o Docker.

Pruebas con Testcontainers

Si deseas ejecutar pruebas automatizadas sin tener que gestionar una instancia activa de IRIS, puedes usar testcontainers-iris-go.
Este lanza un contenedor temporal de IRIS para realizar pruebas de integración.

Ejemplo de configuración de prueba:

import (
    "context"
    "database/sql"
    "flag"
    "log"
    "os"
    "testing"
    iriscontainer "github.com/caretdev/testcontainers-iris-go"
    "github.com/stretchr/testify/require"
    "github.com/testcontainers/testcontainers-go"
)

var connectionString string = "iris://_SYSTEM:SYS@localhost:1972/USER"
var container *iriscontainer.IRISContainer = nil
func TestMain(m *testing.M) {
    var (
        useContainer   bool
        containerImage string
    )
    flag.BoolVar(&useContainer, "container", true, "Use container image.")
    flag.StringVar(&containerImage, "container-image", "", "Container image.")
    flag.Parse()
    var err error
    ctx := context.Background()
    if useContainer || containerImage != "" {
        options := []testcontainers.ContainerCustomizer{
            iriscontainer.WithNamespace("TEST"),
            iriscontainer.WithUsername("testuser"),
            iriscontainer.WithPassword("testpassword"),
        }
        if containerImage != "" {
            container, err = iriscontainer.Run(ctx, containerImage, options...)
        } else {
            // or use default docker image
            container, err = iriscontainer.RunContainer(ctx, options...)
        }
        if err != nil {
            log.Println("Failed to start container:", err)
            os.Exit(1)
        }
        defer container.Terminate(ctx)
        connectionString = container.MustConnectionString(ctx)
        log.Println("Container started successfully", connectionString)
    }

    var exitCode int = 0
    exitCode = m.Run()

    if container != nil {
        container.Terminate(ctx)
    }
    os.Exit(exitCode)
}

func openDbWrapper[T require.TestingT](t T, dsn string) *sql.DB {
    db, err := sql.Open(`intersystems`, dsn)
    require.NoError(t, err)
    require.NoError(t, db.Ping())
    return db
}

func closeDbWrapper[T require.TestingT](t T, db *sql.DB) {
    if db == nil {
        return
    }
    require.NoError(t, db.Close())
}

func TestConnect(t *testing.T) {
    db := openDbWrapper(t, connectionString)
    defer closeDbWrapper(t, db)

    var (
        namespace string
        username  string
    )
    res := db.QueryRow(`SELECT $namespace, $username`)
    require.NoError(t, res.Scan(&namespace, &username))
    require.Equal(t, "TEST", namespace)
    require.Equal(t, "testuser", username)
}

Esto es ideal para pipelines de CI/CD o pruebas unitarias, garantizando que tu aplicación en Go funcione perfectamente con IRIS de forma aislada.


Conclusión

El soporte de GoLang para InterSystems IRIS ya está aquí, y marca un antes y un después.
Con go-irisnative, ahora puedes crear aplicaciones escalables, concurrentes y nativas en la nube que aprovechen directamente la potencia de IRIS.

Tanto si estás desarrollando microservicios, APIs o herramientas de integración, Go te ofrece simplicidad y rendimiento, mientras que IRIS te brinda fiabilidad y amplias capacidades de gestión de datos.

👉 Probadlo:

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Out. 7 9min de leitura

Iris-AgenticAI: インテリジェントなマルチエージェントワークフロー向けの OpenAI Agentic SDK を使ったエンタープライズオートメーション

コミュニティの皆さん、こんにちは。

この記事では、私のアプリケーションである 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 フレームワーク。
  • ステートフルメモリ 🧠 継続性を実現し、長時間実行するタスクに対応するために、セッション間でチャット履歴、コンテキスト、およびエージェントの状態を保持します。

Discussão (0)0
Entre ou crie uma conta para continuar
Pergunta
· Out. 6

MQTT IRIS Broker

Hi Guys,

I'm looking to setup an MQTT adapter that also acts as broker to connect directly to an MQTT clients, is there an IRIS adapter or client that can be used as Broker as well?

 

Thanks

1 Comment
Discussão (1)2
Entre ou crie uma conta para continuar
Artigo
· Out. 6 4min de leitura

Presenting the FHIR Data Explorer: AI-Powered Hybrid Semantic Search & Patient History Generation

Hello Developers! 👋

I’m excited to share the project I’ve submitted to the current InterSystems .Net, Java, Python, and JavaScript Contest — it’s called FHIR Data Explorer with Hybrid Search and AI Summaries, and you can find it on the InterSystems Open Exchange and on my GitHub page.

This project showcases how InterSystems IRIS can be integrated with Python through the Python Native SDK, combining healthcare data analysis, vector search, and local LLMs for generating intelligent, structured, private insights of clinical data extracted from FHIR messages, demonstrating how to:

  • Build and analyze a FHIR repository inside IRIS
  • Perform semantic and hybrid patient search
  • Use AI-powered text generation to create patient history summaries
  • Visualize and explore everything through an interactive Streamlit dashboard

Overview

The project highlights how InterSystems IRIS can serve as the data backbone for AI-powered healthcare analytics — combining:

  • InterSystems IRIS for robust data storage and SQL/vector operations
  • Python SDK (IRIS Native) for direct integration. In particular, the project is built over IRIStool module which I've developed (and candidated to the contest as well!)
  • Sentence Transformers for semantic embedding and hybrid search
  • Streamlit for visualization and user interaction
  • Ollama + local LLMs for generating synthetic patient summaries — ensuring data never leaves your local environment

The result is an end-to-end workflow for FHIR-based patient data exploration.


Usage Walkthrough

  1. Import FHIR examples and extract structured data First step is connecting to the InterSystems IRIS containerized instance using IRIStool module. Next step is creating the FHIR table and importing synthetic FHIR bundles while generating embeddings. This step is the only performed by code, the following steps will be performed directly on the Streamlit UI.
  2. Search Patients
    Use natural language queries and optional filters (gender, age, deceased status) to locate a patient.
  3. Select a Patient
    Click on a search result to view detailed clinical data.
  4. Explore Records
    Browse through multiple tabs representing FHIR categories.
  5. Generate History
    Use the prompt to generate a patient summary of all clinical data with your preferred local LLM

Key Features

🔹 FHIR Repository Creation & Analysis

The provided code automatically generate and analyze a synthetic FHIR repository, importing hundreds of structured FHIR bundles representing real-world clinical data (conditions, procedures, immunizations, etc.) and extracting structured data from FHIR messages. Data from each FHIR resource are stored into a different table and associated to a patient id.

🔹 Semantic & Hybrid Patient Search

Perform natural language searches like

"patients with diabetes and cardiovascular issues"
and retrieve the most relevant patients using vector embeddings and HNSW indexes for fast approximate nearest neighbor search.

Search results can be refined by:

  • Gender
  • Deceased status
  • Age range

The pritamdeka/S-PubMedBert-MS-MARCO transformer model is used to convert user input into a 768 dimensional vector. This model has been optimized for the information retrieval task in the medical/health text domain.

The following image provide and example of natural language search:

Input vector is compared with the vectorized form of the patient description column, which summarizes all the main patient clinical information. This field is generated and converted into a vector form during the data acquisition process.

🔹 Comprehensive Patient Profiles

Once a patient is selected, you can explore all medical records categorized as:

  • 🤧 Allergies & Intolerances
  • 💉 Immunizations
  • 📊 Observations & Lab Results
  • 🩺 Medical Conditions
  • ⚕️ Procedures
  • 📋 Care Plans

All structured data extracted from FHIR records is now easily accessible through a simple and comprehensive interface!

🔹 AI-Powered History Generation

Generate comprehensive patient summaries using local LLMs such as:

  • llama3.2:1b
  • gemma2:2b
  • gemma3:1b

This allows clinicians or analysts to get an AI-generated overview directly from the structured FHIR records — with full data control and no external API dependencies.


    Example Output

    You can find examples of generated patient histories in the /output_examples folder of the repository. The examples refers to the same patient, analyzed using three different local LLMs.

    Each model yields a unique writing style and clinical focus.


    Conclusions and remarks

    This project demonstrates how InterSystems IRIS can power AI-driven analytics pipelines to manage healthcare data information, while remaining:

    • Secure — all data processing stays local
    • Flexible — integrates seamlessly with Python and AI tools
    • Efficient — vector search and LLM inference optimized for local environments

    🔗 Try It Out

    👉 GitHub Repository: FHIR Data Explorer with Hybrid Search and AI Summaries
    👉 Vote for it in the InterSystems Developer Community Contest!

    2 Comments
    Discussão (2)1
    Entre ou crie uma conta para continuar
    Resumo
    · Out. 6

    Publicações Desenvolvedores InterSystems, Setembro 29 - Outubro 05, 2025, Resumo

    Artigos
    #InterSystems IRIS
    #InterSystems IRIS for Health
    #Health Connect
    Setembro 29 - Outubro 05, 2025Week at a GlanceInterSystems Developer Community