社区朋友们好,

传统的基于关键词的搜索方式在处理具有细微差别的领域特定查询时往往力不从心。而向量搜索则通过语义理解能力,使AI智能体能够根据上下文(而非仅凭关键词)来检索信息并生成响应。

本文将通过逐步指导,带您创建一个具备代理能力的AI RAG(检索增强生成)应用程序。

实现步骤:

  1. 添加文档摄取功能
    • 自动获取并建立文档索引(例如《InterSystems IRIS 2025.1版本说明》)
    • 实现向量搜索功能
  2. 构建向量搜索智能体
  3. 移交至主智能体(分流处理)
  4. 运行智能体

1. Create Agent Tools 添加文档摄取功能

Implement Document Ingestion: Automated ingestion and indexing of documents


1.1 - 以下是实现文档摄取工具的代码:

    def ingestDoc(self):
        #Check if document is defined, by selecting from table
        #If not defined then INGEST document, Otherwise back
        embeddings = OpenAIEmbeddings()	
        #Load the document based on the fle type
        loader = TextLoader("/irisdev/app/docs/IRIS2025-1-Release-Notes.txt", encoding='utf-8')      
        
        documents = loader.load()        
        text_splitter = RecursiveCharacterTextSplitter(chunk_size=400, chunk_overlap=0)
        
        texts = text_splitter.split_documents(documents)
                       
        #COLLECTION_NAME = "rag_document"
        db = IRISVector.from_documents(
            embedding=embeddings,
            documents=texts,
            collection_name = self.COLLECTION_NAME,
            connection_string=self.CONNECTION_STRING,
        )

        db = IRISVector.from_documents(embedding=embeddings,documents=texts, collection_name = self.COLLECTION_NAME, connection_string=self.CONNECTION_STRING,)

向量搜索智能体(Vector Search Agent)能够自动完成文档的摄取(ingest)索引构建(index), 该新功能在InterSystems IRIS 2025.1的数据资源文件夹里) 至 IRIS 向量存储, 只有当数据尚未存在时,才执行该操作。



运行以下查询以从向量存储中获取所需数据:

SELECT
id, embedding, document, metadata
FROM SQLUser.AgenticAIRAG



1.2 - 实现向量搜索功能


以下代码为智能体提供了搜索能力:

 def ragSearch(self,prompt):
        #Check if collections are defined or ingested done.
        # if not then call ingest method
        embeddings = OpenAIEmbeddings()	
        db2 = IRISVector (
            embedding_function=embeddings,    
            collection_name=self.COLLECTION_NAME,
            connection_string=self.CONNECTION_STRING,
        )
        docs_with_score = db2.similarity_search_with_score(prompt)
        relevant_docs = ["".join(str(doc.page_content)) + " " for doc, _ in docs_with_score]
        
        #Generate Template
        template = f"""
        Prompt: {prompt}
        Relevant Docuemnts: {relevant_docs}
        """
        return template


分流代理处理传入的用户查询,并将其委托给矢量搜索代理,后者执行语义搜索操作,以检索最相关的信息。

0 0
0 55

我的团队在在红帽OpenShift容器平台上运行IRIS互操作性解决方案。我想在数据被存储在Mirror的数据pods中的情况下,测试运行中的webgateway pods和计算节点 pods能处理多少消息。

为了增加测试难度,我部署了多个feeder容器,并在每个feeder上安排了任务,以在同一时间发送大量的消息。为了进入下一阶段的测试,我希望有多种类型的测试文件可以按需使用。我创建了test-data应用程序,能够请求生成大量的多种类型的文件。

我早期的一些测试依赖于复制一个样本文件和处理它。这在一次只复制一份的情况下效果不错。为了获得同一样本文件的许多副本,MakeFile函数获取一个样本文件、保存其副本、并以唯一的时间戳进行重命名。MakeFiles函数有一个参数,用于确定要制作的文件数量。

我找到了一个样本文件,它的输入和输出都是带分隔符和固定符的。我把它包含在我的应用程序中,并添加了一个转换来操作测试数据文件。在这种情况下,我把测试文件中的识别ID号替换成在一个类方法中生成的识别ID号,并且是随着文件而递增的。

我想在处理后审查测试文件中的数据,我喜欢看到一系列有顺序的数字,而不是一系列随机数字。

0 0
0 92
文章
· 七月 12, 2023 阅读大约需 4 分钟
如何利用 InterSystems 开放交换工具进行快速 API 开发

在本文中,我将分享我们在 2023 年全球峰会技术交流室中提出的主题。我和@Rochael.Ribeiro

借此机会,我们就以下话题进行探讨:

  • 用于快速 API 的开放交换工具
  • 开放API规范
  • 传统与快速 Api 开发
  • 复合 API(互操作性)
  • 规范优先或 API 优先方法
  • API 治理和监控
  • 演示(视频)

用于快速 API 的开放交换工具

当我们谈论快速现代 API 开发(Rest / json)时,我们将使用两个 Intersystems Open Exchange 工具:

第一个是用于快速开发 API 的框架,我们将在本文中详细介绍。

https://openexchange.intersystems.com/package/IRIS-apiPub

1 0
0 123

Hi 大家好

在本文中,我讲介绍我的应用 iris-AgenticAI .

代理式人工智能的兴起标志着人工智能与世界互动方式的变革性飞跃--从静态响应转变为动态、目标驱动的问题解决方式。参看 OpenAI’s Agentic SDK , OpenAI Agents SDK使您能够在一个轻量级、易用且抽象程度极低的软件包中构建代理人工智能应用程序。它是我们之前的代理实验 Swarm 的生产就绪升级版。

该应用展示了下一代自主人工智能系统,这些系统能够进行推理、协作,并以类似人类的适应能力执行复杂任务。

应用功能

  • Agent Loop 🔄 一个内置循环,可自主管理工具的执行,将结果发回 LLM,并迭代直至任务完成。
  • Python-First 🐍 利用本地 Python 语法(装饰器、生成器等)来协调和连锁代理,而无需外部 DSL。
  • Handoffs 🤝 通过在专业代理之间委派任务,无缝协调多代理工作流程。
  • Function Tools ⚒️ 用 @tool 修饰任何 Python 函数,可立即将其集成到代理的工具包中。
  • Vector Search (RAG) 🧠 原生集成向量存储(IRIS),用于 RAG 检索。
  • Tracing 🔍 内置跟踪功能,可实时可视化、调试和监控代理工作流(想想 LangSmith 的替代方案)。
  • MCP Servers 🌐 通过 stdio 和 HTTP 支持模型上下文协议(MCP),实现跨进程代理通信。
  • Chainlit UI 🖥️ 集成 Chainlit 框架,可使用最少的代码构建交互式聊天界面。
  • Stateful Memory 🧠 跨会话保存聊天历史、上下文和代理状态,以实现连续性和长期任务。

0 0
0 56
文章
· 二月 6, 2021 阅读大约需 10 分钟
InterSystems:技术支持和 DBMS 互操作性管理解决方案

在本文中,我们将讨论一个我每天都会使用的应用程序,当监控 InterSystems IRIS 平台上的应用程序和集成解决方案并查找所发生的错误时,我就会用到它。

在查找用来记录 InterSystems IRIS、Ensemble 和 Caché DBMS 中对象变化的解决方案时,我发现了一篇关于使用宏进行日志记录的好文章。 受到该文章的启发,我对其介绍的项目进行了分叉,并做了相应调整以满足一些特定需求。 生成的解决方案以面板子类 %CSP.Util.Pane 的形式实现,它具有主命令窗口、“Run”(运行)按钮和已启用的命令配置。

该应用程序允许查看和编辑 global 数组、执行查询(包括 JDBC 和 ODBC)、通过电子邮件发送搜索结果(压缩的 XLS 文件)、查看和编辑对象,以及用几个简单图表来表示系统协议。

1 0
0 112

亲爱的开发者们,

如果您需要更改您的主邮箱地址(登录邮箱),同时不希望丢失任何开发者生态系统资源里的activity——在社区、Global Master、Open Exchange中的各种交流与历史活动痕迹——该如何去做呢?

很简单,我们来帮您!

1️⃣ 我们会帮您把所有资料信息从您的旧账户中转移到新账户

包括您的所有发帖、评论、艾特(@)和点赞记录,都会被保存在新账户中!

2️⃣ 如果您是 Global Masters的成员,您的级别、徽章、分数等等,也会被转移到新账户中。

3️⃣ 我们还会帮您转移您发布在 Open Exchange中的应用。

4️⃣ 除此之外,如果您只是需要停用您的旧账号(而无需转移任何活动记录),我们都可以帮您一键操作。

您所需要做的,就是通过社区email私信联系 @Irina.Podmazko,提供 :

0 0
0 100

IRIS Interoperability互操作性/HealthConnect(前身是Ensemble)有许多内置的适配器。但是没有一个接收邮件的服务或适配器。我洗的了一个电子邮件服务,通过SMTP接收邮件,这些邮件可以被传递到电子邮件操作。

现在我想对一个使用电子邮件操作向外部邮件服务器发送邮件的Production进行负载测试。邮件服务器团队不希望我向他们发送成千上万的信息。

我创建了iris-mail应用程序来替代邮件服务器。我更新了电子邮件操作中的服务器和端口设置。外发的邮件被发送到替代的邮件服务器,我能够计算出iris-mail中收到的邮件数量,并将其与邮件操作发送的邮件数量进行比较。

应用程序的源代码:https://openexchange.intersystems.com/package/iris-mail

0 0
0 125

亲爱的社区开发者们,大家好!

欢迎积极参与新一轮InterSystems开发者竞赛!

随着 InterSystems IRIS 2021.2 预览版 的发布和全新的 LOAD DATA 功能,我们希望将其与最新的竞赛(数据集)结合起来!

🏆 InterSystems 数据集竞赛🏆

竞赛时间: 2021年12月27日-2022年1月16日

奖金总额: $9,450

0 0
0 197

嗨社区,

这篇文章公开介绍我的 iris-fhir-client 客户端应用。

iris-fhir-client 可以可以借助嵌入式 python 连接到任何开放的 FHIR 服务器 fhirpy 图书馆.

通过终端和使用 CSP Web 应用程序获取资源信息。

0 0
0 179
文章
· 八月 30, 2023 阅读大约需 5 分钟
使用 SQLAlchemy 将表传输到 IRIS 或从 IRIS 获取表

案例描述

假设您是一名 Python 开发人员或拥有一支训练有素的 Python 专业团队,但您分析 IRIS 中某些数据的期限很紧迫。当然,InterSystems 提供了许多用于各种分析和处理的工具。然而,在给定的场景中,最好使用旧的 Pandas 来完成工作,然后将 IRIS 留到下次使用。
对于上述情况和许多其他情况,您可能需要从 IRIS 获取表来管理 InterSystems 产品之外的数据。但是,当您有任何格式(即 CSV、TXT 或 Pickle)的外部表时,您可能还需要以相反的方式执行操作,您需要在其上导入并使用 IRIS 工具。
无论您是否必须处理上述问题,Innovatium让我明白,了解更多解决编码问题的方法总是能派上用场。好消息是,从 IRIS 引入表时,您不需要经历创建新表、传输所有行以及调整每种类型的繁琐过程。
本文将向您展示如何通过几行代码快速将 IRIS 表转换为 Pandas 数据框架并向后转换。您可以在我的GitHub上查看代码,您可以在其中找到包含本教程每个步骤的 Jupiter Notebook。

0 0
0 144

亲爱的社区开发者们,大家好!

欢迎积极参与新一轮InterSystems开发者竞赛!

🏆 InterSystems 编程大赛:FHIR 加速器 🏆

提交在AWS上使用InterSystems的IRIS FHIR-as-a-service的应用程序,或帮助使用InterSystems IRIS FHIR加速器开发的解决方案。点击这篇文章,了解如何在AWS上申请应用InterSystems IRIS FHIR 加速器服务 (FHIRaaS) 。

    时间:2021年5月10日-6月6日

    奖金总额: $8,750

    👉 点击登录活动页面 👈

    0 0
    0 153
    嗨,开发者们,新年好!
    不要错过2021年的《ISC 应用市场Open Exchange应用文摘》。让我们认识一下最受欢迎的应用程序和它们的开发者,欢迎免费下载。.
    2021概览:
    183 新应用
    6,899 次下载
    654 位开发者
    566 应用累计
    15,897 次下载累计
    1,457 位开发者累计

    0 0
    0 138
    文章
    · 九月 5, 2023 阅读大约需 11 分钟
    HTTP请求监控响应时间

    嗨,开发者们!

    今天我想谈谈一个让我感到困难的话题。我相信你们中的很多人一定已经遇到过这种情况(所谓的“瓶颈”)。由于这是一个广泛的主题,因此本文将仅重点关注识别可能导致缓慢问题的传入 HTTP 请求。我还将向您提供我开发的一个小工具来帮助识别它们。

    我们的软件变得越来越复杂,处理来自不同来源的大量请求,无论是前端还是第三方后端应用程序。为了确保最佳性能,必须有一个能够记录一些关键测量的日志系统,例如响应时间、global引用的数量以及每个 HTTP 响应执行的代码行数。作为工作的一部分,我参与了 EMR 软件的开发以及事件分析。由于用户负载主要来自 HTTP 请求(REST API 或 CSP 应用程序),因此在发生普遍缓慢问题时进行此类测量的需求变得显而易见。

    0 0
    0 254
    文章
    · 一月 19, 2023 阅读大约需 4 分钟
    在globals中序列化 Python 对象

    动机

    这个项目是在我考虑如何通过Embedded Python让Python代码自然地处理IRIS globals所提供的可扩展的存储和高效的检索机制时想到的。

    我最初的想法是使用globals创建一种Python字典的实现,但很快我就意识到,我应该首先处理对象的抽象问题。

    所以,我开始创建一些可以包装Python对象的Python类,在globals中存储和检索它们的数据,也就是说,在IRIS globals中序列化和反序列化Python对象。

    0 0
    0 147

    您好!社区的各位老师,

    在我的上一篇文章中,我们学习了以下主题:

    1. 什么是 Docker?
    2. Docker 的一些好处
    3. Docker 是如何工作的?
    4. Docker 镜像
    5. Docker容器
    6. Docker 镜像存储库
    7. InterSystems 的 Docker 镜像存储库
    8. Docker安装
    9. Docker 基本命令
    10. 使用 Docker 运行 IRIS 社区版
    11. Docker 桌面图形用户界面

    在本文中,我们将讨论以下主题:

    1. 使用 Docker Compose 文件( YAML 文件)
    2. Docker 文件的使用(用于构建 Docker 镜像)
    3. Docker 卷的使用

    那么让我们开始吧。

    0 0
    0 147
    文章
    · 一月 5, 2021 阅读大约需 4 分钟
    增强型日志监视器

    各位开发者们大家好!

    此前,我向各位介绍了一个非常好用的运行分析监控面板,它能使消息处理过程中的关键指标可视化,例如入站/出站消息的数量和平均处理时间等。

    现在,我想用一项许多人已熟悉的工作流程,来展示一个增强型日志监视器——将警告信息作为Production中的消息来处理。我们可以通过创建路由规则来实现对告警消息的过滤和路由,并运用预先构建的组件(例如电子邮件适配器等)来发送粒度级别的通知。

    如你所知,监视和管理警告信息是确保任何应用程序平稳运行的关键。对诸如HealthShare和IRIS医疗版这样支撑医疗系统运转的一级应用程序和集成引擎来说对告警信息的处理更显得尤为重要。

    1 0
    0 244

    嘿开发者,

    我们想邀请您参加我们的下一场比赛,该比赛致力于创造有用的工具,让您的开发伙伴们的生活更轻松

    🏆 InterSystems 开发者竞赛:Tool(工具)🏆

    提交有助于加快开发速度、贡献更多定性代码并有助于使用 InterSystems IRIS 测试、部署、支持或监控您的解决方案的应用程序。

    时间: 2023 年 1 月 23 日至 2 月 12 日(美国东部时间)

    奖金池: 13,500 美元

    0 0
    1 274
    文章
    · 九月 14, 2023 阅读大约需 2 分钟
    容器中的 InterSystems IRIS

    InterSystems 还发布了容器化部署的IRIS。这篇文章旨在演示 InterSystems IRIS 和依赖 IRIS 后端的应用程序如何打包到镜像中并在容器中的其他计算机中运行,以及这样做有多么简单。

    容器运行包含所有必需的可执行文件、二进制代码、库和配置文件的镜像。镜像可以从一台机器移动到另一台机器,像 Docker Hub 这样的镜像存储库可以简化这个过程。

    我在本演示中使用了 Open Exchange 的应用程序。

    演示视频: https://www.loom.com/share/93f9a760b5f54c0a8811b7a212387b9d

    IRIS 数据平台社区版的镜像(image)可以在 InterSystems 容器注册表中找到:

    0 0
    0 157

    亲爱的社区用户,您好!

    您可能知道,您在 Open Exchange 上每发布一个应用程序都会获得 Global Masters 积分奖励。 最近,我们针对 ZPM 应用程序推出了附加积分。 现在,您的每个 ZPM 应用程序都会为您赢得额外的 400 积分!积分将自动调整。
    立即查看 Global Masters 上的积分和可用奖励!

    0 0
    0 101