#Artificial Intelligence (AI)

0 关注者 · 44 帖子

人工智能 (AI) 是通过机器(尤其是计算机系统)对人类智能过程进行的模拟。这些过程包括学习(获取信息和使用信息的规则)、推理(使用规则得出近似或确定的结论)和自我纠正。

了解更多信息

文章 Lilian Huang · 四月 10, 2025 6m read

社区朋友们好,

传统的基于关键词的搜索方式在处理具有细微差别的领域特定查询时往往力不从心。而向量搜索则通过语义理解能力,使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 - 以下是实现文档摄取工具的代码:

defingestDoc(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 向量存储, 只有当数据尚未存在时,才执行该操作。


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

SELECTid, embedding, document, metadata
FROM SQLUser.AgenticAIRAG


1.2 - 实现向量搜索功能


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

defragSearch(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 97
文章 Michael Lei · 八月 1, 2024 4m read

随着 IRIS 中向量数据类型和向量搜索功能的引入,应用程序的开发正在开启一个充满各种可能性的全新世界,其中一个应用程序示例是我最近在巴伦西亚卫生局的一次公开竞赛中看到的应用程序,他们要求提供一种工具,能够使用 AI 模型协助进行 ICD-10 编码。

我们如何实现与所要求的应用程序类似的应用程序? 我们来看看需要什么:

  1. ICD-10 代码列表,我们将使用它作为 RAG 应用程序的上下文,在纯文本中搜索诊断结果。
  2. 经过训练的模型,它会将文本向量化,我们将在其中查找 ICD-10 代码中的对应项。
  3. Python 库,用于对 ICD-10 代码和文本进行摄取和向量化。
  4. 一个支持文本的友好前端,我们会在其中查找可能的诊断结果。
  5. 从前端接收的请求的编排。

IRIS 为我们提供哪些功能来满足上述需求?

  1. CSV 导入,可以使用 RecordMapper 功能,也可以直接使用嵌入式 Python。
  2. 嵌入式 Python 使我们能够实现使用所选模型生成向量所需的 Python 代码。
  3. 发布将从前端应用程序调用的 REST API。
  4. 互操作性生产,以允许在 IRIS 中跟踪信息。

我们只需要看看开发的示例:

d[IA]gnosis

在本文中,您可以访问开发的应用程序,在后续文章中,我们将详细了解如何实现每个功能,包括模型的使用、向量的存储和向量搜索的使用。

我们来看看这个应用程序:

导入 ICD-10 代码

在配置屏幕中,我们知道了 CSV 文件必须使用的格式,以符合我们要导入的 ICD-10 代码。 加载和向量化过程会占用大量时间和资源,因此,为了防止所需空间超出分配的 RAM,在部署 Docker 容器时,不仅配置了 Docker 可用的 RAM 内存,还配置了磁盘存储器:

# iris  iris:    init:true    container_name:iris    build:      context:.      dockerfile:iris/Dockerfile    ports:      -52774:52773      -51774:1972    volumes:    -./shared:/shared    environment:    -ISC_DATA_DIRECTORY=/shared/durable    command:--check-capsfalse--ISCAgentfalse    mem_limit:30G    memswap_limit:32G

包含 ICD-10 代码的文件位于项目路径 /shared/cie10/icd10.csv 中,达到 100% 后,即可使用该应用程序。

在我们的应用程序中,我们定义了两个不同的诊断结果编码功能,一个基于系统中接收到的 HL7 消息,另一个基于纯文本。

从 HL7 中捕获诊断结果

项目中包含一些准备进行测试的 HL7 消息,只需将 /shared/hl7/messagesa01_en.hl7 文件复制到 /shared/HL7In 文件夹,相关的生产就会负责从中提取诊断结果,并显示在 Web 应用程序中:

在诊断结果请求屏幕中,我们可以看到通过 HL7 消息收到的所有诊断结果。 要将它们编码为 ICD-10,我们只需点击放大镜以显示与收到的诊断结果最接近的 ICD-10 代码列表:

选择后,我们将在列表中看到诊断结果及其相关的 ICD-10 代码。 点击带有信封图标的按钮,将使用原始代码生成一条消息,并在诊断结果部分包含所选新代码:

MSH|^~\&|HIS|HULP|EMPI||||ADT^A08|592956|P|2.5.1
EVN|A01|
PID|||1556655212^^^SERMAS^SN~922210^^^HULP^PI||GARCÍA PÉREZ^JUAN^^^||20150403|M|||PASEO PEDRO ÁLVAREZ 1951 CENTRO^^LEGANÉS^MADRID^28379^SPAIN||555283055^PRN^^JUAN.GARCIA@YAHOO.COM|||||||||||||||||N|
PV1||N
DG1|1||O10.91^Unspecified pre-existing hypertension complicating pregnancy^CIE10-ES|Gestational hypertension||A||

可以在路径 /shared/HL7Out 中找到此消息

以纯文本形式显示的诊断结果的屏幕截图

在“文本分析器”选项中,用户可以包含纯文本,并对其进行分析。 该应用程序将按 3 个词形还原的词(去除冠词、代词和其他不太相关的词)构成的元组进行搜索。 分析后,系统将向我们显示相关的带下划线的文本和找到的可能的诊断结果:

执行分析后,可以随时从分析历史记录中进行查询。

分析历史记录

执行的所有分析都会记录下来,可以随时查询,并且能够查看所有可用的 ICD-10 代码:

在下一篇文章中…

我们将看到,如何借助嵌入式 Python,使用特定的 LLM 模型对 ICD-10 代码进行向量化,从而将其用作上下文和自由文本。

如果您有任何疑问或建议,请随时对本文发表评论。

0
0 79
讨论 Claire Zheng · 七月 25, 2024

Hi社区成员们!

你可能已经知道了,, 我们的 Developer Community AI(开发者社区AI) 已经运行一个多月了 🎉 我们希望你能够出于好奇来尝试一下 😁 如果你还没试过,那就试试吧!无论如何,由于它仍在测试阶段,我们非常有兴趣了解你对它的看法,也很期待听到你的想法和经验。

我们重视你为此付出的时间和精力,所以将随机赠送一个可爱的奖品给愿意分享自己想法的社区成员。要参加此抽奖活动,你需要遵循以下准则:

0
0 135
文章 Hao Ma · 三月 25, 2021 8m read

关键字:PyODBC,unixODBC,IRIS,IntegratedML,Jupyter Notebook,Python 3

目的

几个月前,我简单谈到了关于“将 Python JDBC 连接到 IRIS”的话题。我后来频繁提起它, 因此决定再写一篇 5 分钟的笔记,说明如何“将 Python ODBC 连接到 IRIS”。

在 Windows 客户端中通常很容易设置 ODBC 和 PyODBC,不过我每次在 Linux/Unix 风格的服务器中设置 unixODBC 和 PyODBC 客户端时,都会遇到一些麻烦。

有没有一种简单连贯的方法,可以不安装任何 IRIS,在原版 Linux 客户端中让 PyODBC/unixODBC 针对远程 IRIS 服务器运行?

范围

最近,我花了点时间研究如何在 Linux Docker 环境的 Jupyter Notebook 中从头开始让一个 PyODBC 演示运行起来, 记录下这篇稍微有些繁琐的笔记,以供日后快速参考。  

范围内: 

这篇笔记将涉及以下组件:

  • PyODBC over unixODBC 
  • 安装了 TensorFlow 2.2 和 Python 3 的 Jupyter Notebook 服务器
  • 带有 IntegratedML 的 IRIS2020.3 CE 服务器,包括示例测试数据。
  • 在此环境中

  • 安装了 Docker-compose over AWS Ubuntu 16.04 的 Docker Engine 
  • Docker Desktop for MacOSDocker Toolbox for Windows 10 也经过了测试
  • 范围外

    同样,在此演示环境中不评估非功能性方面。 它们很重要,并且可以针对特定站点,如:

  • 端到端安全和审核
  • 性能和可扩展性
  • 许可和可支持性等
  • 环境

    任何原版 Linux Docker 镜像都可以用于以下配置和测试步骤,但有一个简单的方法可以在 5 分钟内设置这样的环境:

    1.  Git 克隆演示模板
    2.  在包含 docker-compose.yml 文件的克隆目录中运行“docker-compose up -d”。

    这将创建一个演示环境,如下面的拓扑所示,其中包含 2 个容器。 一个用于 Jupyter Notebook 服务器作为 PyODBC 客户端,另一个用于 IRIS2020.3 CE 服务器。

    在上面的环境中,tf2jupyter 仅包含“Python over JDBC”客户端配置;它尚不包含任何 ODBC 或 PyODBC 客户端配置。

    因此,我们将直接在 Jupyter Notebook 内部运行以下设置步骤,以使其易于说明。  

    步骤

    以下配置和测试由我在 AWS Ubuntu 16.04 服务器中运行, 由我的同事 @Thomas.Dyar 在 MacOS 中运行。 另外在 Docker Toolbox for Windows 中也进行了简单的测试。 不过,如果您遇到任何问题,还是请告诉我们。

    以下步骤可以自动化到其 Dockerfile。 我在这里特别记录一下,以防几个月后忘记。

    1. 官方文档:

  • IRIS 的 ODBC 支持
  • 在 Unix 上定义 ODBC 数据源 
  • IRIS 的 PyODBC 支持 
  • 2. 连接到 Jupyter 服务器

    我用本地 Putty 的 SSH 隧道连接到远程 AWS Ubuntu 端口 22,然后按照上述拓扑结构映射到端口 8896。

    (举个例子,在本地 Docker 环境中,也可以直接直接 http 到 Docker 机器的 IP:8896。)

    3. 从 Jupyter Notebook 中运行 ODBC 安装

    直接在 Jupyter 单元格中运行以下代码: 

    !apt-get update<br>!apt-get install gcc<br>!apt-get install -y tdsodbc unixodbc-dev<br>!apt install unixodbc-bin -y<br>!apt-get clean -y

    它将安装 gcc(包括 g++)编译器、FreeTDS、unixODBC 和 unixodbc-dev,以在下一步重新编译 PyODBC 驱动程序。

    在原生 Windows 服务器或 PC 上安装 PyODBC 不需要这一步。 

    4. 从 Jupyter 中运行 PyODBC 安装

    !pip install pyodbc
    Collecting pyodbc
      Downloading pyodbc-4.0.30.tar.gz (266 kB)
         |████████████████████████████████| 266 kB 11.3 MB/s eta 0:00:01
    Building wheels for collected packages: pyodbc
      Building wheel for pyodbc (setup.py) ... done
      Created wheel for pyodbc: filename=pyodbc-4.0.30-cp36-cp36m-linux_x86_64.whl size=273453 sha256=b794c35f41e440441f2e79a95fead36d3aebfa74c0832a92647bb90c934688b3
      Stored in directory: /root/.cache/pip/wheels/e3/3f/16/e11367542166d4f8a252c031ac3a4163d3b901b251ec71e905
    Successfully built pyodbc
    Installing collected packages: pyodbc
    Successfully installed pyodbc-4.0.30

    以上是这个 Docker 演示的最简化 pip 安装。 在官方文档中,为“MacOS X 安装”提供了更详细的 pip 安装。

    5 在 Linux 中重新配置 ODBC INI 文件和链接:

    运行以下命令重新创建 odbcinst.iniodbc.ini 链接

    !rm /etc/odbcinst.ini
    !rm /etc/odbc.ini
    !ln -s /tf/odbcinst.ini /etc/odbcinst.ini
    !ln -s /tf/odbc.ini /etc/odbc.ini

    注:这样的原因是,**第 3 步和第 4 步通常会在 \etc\ directory 下创建 2 个空白(因此无效)的 ODBC 文件。**与 Windows 安装不同,这里的空白 ini 文件会导致问题。因此需要先将其删除,然后重新创建一个链接来指向映射的 Docker 卷中提供的真实 ini 文件:/tf/odbcinst.ini 和 /tf/odbc.ini

    看一看这两个 ini 文件。在这种情况下,它们是 Linux ODBC 配置的最简形式:

    !cat /tf/odbcinst.ini
    [InterSystems ODBC35]
    UsageCount=1
    Driver=/tf/libirisodbcu35.so
    Setup=/tf/libirisodbcu35.so
    SQLLevel=1
    FileUsage=0
    DriverODBCVer=02.10
    ConnectFunctions=YYN
    APILevel=1
    DEBUG=1
    CPTimeout=<not pooled>
    !cat /tf/odbc.ini
    [IRIS PyODBC Demo]
    Driver=InterSystems ODBC35
    Protocol=TCP
    Host=irisimlsvr
    Port=51773
    Namespace=USER
    UID=SUPERUSER
    Password=SYS
    Description=Sample namespace
    Query Timeout=0
    Static Cursors=0

    以上文件都已预先配置,位于映射的驱动器中。 引用的是驱动程序文件 libirisodbcu35.so,可以从 IRIS 服务器的容器实例中获取该文件(在其 {iris-installation}/bin 目录下)。

    要使上述 ODBC 安装正常运行,这 3 个文件必须存在于具有正确文件权限的映射驱动器(或任何 Linux 驱动器)中:

  • libirisodbcu35.so
  • odbcinst.ini
  • odbc.ini
  • **6. 验证 PyODBC 安装 **

    !odbcinst -j
    unixODBC 2.3.4
    DRIVERS............: /etc/odbcinst.ini
    SYSTEM DATA SOURCES: /etc/odbc.ini
    FILE DATA SOURCES..: /etc/ODBCDataSources
    USER DATA SOURCES..: /root/.odbc.ini
    SQLULEN Size.......: 8
    SQLLEN Size........: 8
    SQLSETPOSIROW Size.: 8
    import pyodbc
    print(pyodbc.drivers())
    ['InterSystems ODBC35']

    以上输出将表明 ODBC 驱动程序目前具有有效链接。

    我们应该能够在 Jupyter Notebook 中运行一些 Python ODBC 测试

    7. 运行将 Python ODBC 连接到 IRIS 的示例:

    import pyodbc 
    import time
    ### 1. Get an ODBC connection 
    #input("Hit any key to start")
    dsn = 'IRIS PyODBC Demo'
    server = 'irisimlsvr'   # IRIS server container or the docker machine's IP 
    port = '51773'   # or 8091 if docker machine IP is used
    database = 'USER' 
    username = 'SUPERUSER' 
    password = 'SYS' 
    #cnxn = pyodbc.connect('DSN='+dsn+';')   # use the user DSN defined in odbc.ini, or use the connection string below
    cnxn = pyodbc.connect('DRIVER={InterSystems ODBC35};SERVER='+server+';PORT='+port+';DATABASE='+database+';UID='+username+';PWD='+ password)
    ###ensure it reads strings correctly.
    cnxn.setdecoding(pyodbc.SQL_CHAR, encoding='utf8')
    cnxn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf8')
    cnxn.setencoding(encoding='utf8')
    ### 2. Get a cursor; start the timer
    cursor = cnxn.cursor()
    start= time.clock()
    ### 3. specify the training data, and give a model name
    dataTable = 'DataMining.IrisDataset'
    dataTablePredict = 'Result12'
    dataColumn =  'Species'
    dataColumnPredict = "PredictedSpecies"
    modelName = "Flower12" #chose a name - must be unique in server end
    ### 4. Train and predict
    #cursor.execute("CREATE MODEL %s PREDICTING (%s)  FROM %s" % (modelName, dataColumn, dataTable))
    #cursor.execute("TRAIN MODEL %s FROM %s" % (modelName, dataTable))
    #cursor.execute("Create Table %s (%s VARCHAR(100), %s VARCHAR(100))" % (dataTablePredict, dataColumnPredict, dataColumn))
    #cursor.execute("INSERT INTO %s  SELECT TOP 20 PREDICT(%s) AS %s, %s FROM %s" % (dataTablePredict, modelName, dataColumnPredict, dataColumn, dataTable)) 
    #cnxn.commit()
    ### 5. show the predict result
    cursor.execute("SELECT * from %s ORDER BY ID" % dataTable)   #or use dataTablePredict result by IntegratedML if you run step 4 above
    row = cursor.fetchone() 
    while row: 
        print(row) 
        row = cursor.fetchone()
    ### 6. CLose and clean     
    cnxn.close()
    end= time.clock()
    print ("Total elapsed time: ")
    print (end-start)
    (1, 1.4, 0.2, 5.1, 3.5, 'Iris-setosa')
    (2, 1.4, 0.2, 4.9, 3.0, 'Iris-setosa')
    (3, 1.3, 0.2, 4.7, 3.2, 'Iris-setosa')
    (4, 1.5, 0.2, 4.6, 3.1, 'Iris-setosa')
    (5, 1.4, 0.2, 5.0, 3.6, 'Iris-setosa')
    ... ...
    ... ...
    ... ...
    (146, 5.2, 2.3, 6.7, 3.0, 'Iris-virginica')
    (147, 5.0, 1.9, 6.3, 2.5, 'Iris-virginica')
    (148, 5.2, 2.0, 6.5, 3.0, 'Iris-virginica')
    (149, 5.4, 2.3, 6.2, 3.4, 'Iris-virginica')
    (150, 5.1, 1.8, 5.9, 3.0, 'Iris-virginica')
    Total elapsed time: 
    0.023873000000000033

    这里有一些陷阱:

    1. **cnxn = pyodbc.connect() **- 在 Linux 环境下,此调用中传递的连接字符串必须正确无误,不能有任何空格。  
    2. 正确设置连接编码,例如使用 utf8。  在这里默认值对字符串不起作用。
    3. libirisodbcu35.so - 理想情况下,此驱动程序文件应与远程 IRIS 服务器的版本保持一致。  

    **未来计划 **

    这样就得到一个带有 Jupyter Notebook 的 Docker 环境,包括 Python3 和 TensorFlow 2.2(无 GPU),通过 PyODBC(以及 JDBC)连接到远程 IRIS 服务器。 所有定制的 SQL 语法应该都可以适用,比如 IRIS Integrated ML 专有的 SQL 语法。那么何不多研究一下 IntegratedML 的功能,用它驱动 ML 生命周期的 SQL 方法以进行一些创新? 

    另外,我希望接下来能介绍或总结出在 IRIS Native 甚至是 Python 环境中的魔法 SQL 上最简单的 IRIS 服务器挂接方法。 而且,现在有出色的 Python Gateway,我们甚至可以直接从 IRIS 服务器内部调用外部 Python ML 应用和服务。我希望我们也能在这方面多做些尝试。

    附录

    上面的笔记本文件也将被迁入此 Github 存储库以及 Open Exchange 中。

    1
    0 469
    文章 Michael Lei · 七月 9, 2024 1m read

    Abstractive Health是一款医生人工智能助手,可帮助医生创建最佳病历。我们直接与国家 HIE 和 EHR 集成。我们的医疗摘要可用于门诊、住院和急诊护理,实现临床笔记的自动化,如 SOAP 笔记、进展笔记、护理过渡、ED Provider 笔记和出院摘要。我们使用生成式人工智能和 LLM 来压缩数百页的医疗笔记,从而节省您的时间,让您可以专注于病人护理。

    公司介绍:https://www.abstractivehealth.com

    软件试用

    目标使用者--临床医生

    类别--护理协调, 数据可视化, 人口健康

    应用程序类型--SMART ON FHIR应用程序

    FHIR 版本--R4

    支持的电子病历系统--Allscripts、Athena Health、Cerner、Epic等支持FHIR API的软件系统

    安全和隐私政策: https://www.abstractivehealth.com/security-and-privacy

    0
    0 119
    公告 Claire Zheng · 四月 22, 2024

    Hi 开发者们,

    我们非常高兴地邀请大家参加新的 InterSystems 在线编程竞赛,此次编程大赛关注生成式AI(GenAI), 向量搜索(Vector Search )与机器学习(Machine Learning)!

    🏆 InterSystems 编程大赛:Vector Search, GenAI 与 ML 🏆

    时间:2024年4月22日 - 5月19日 (美国东部时间)

    奖金池: $14,000


    0
    0 212
    文章 Michael Lei · 四月 9, 2024 7m read

     

    人工智能不仅限于通过带有说明的文本生成图像,或通过简单的指示创建叙事。
    您还可以制作图片的变体,或为已有图片添加特殊背景。
    此外,您还可以获得音频转录,无论其语言和说话者的语速如何。
    让我们来分析一下文件管理是如何工作的。

    0
    0 133
    文章 Michael Lei · 四月 1, 2024 2m read


    生成人工智能是能够使用生成模型生成文本、图像或其他数据的人工智能,通常是响应提示。生成式人工智能模型学习输入训练数据的模式和结构,然后生成具有相似特征的新数据。

    生成式人工智能是能够生成文本、图像和其他类型内容的人工智能。它之所以成为一项出色的技术,是因为它使人工智能民主化,任何人都可以使用它,只需文本提示,即用自然语言编写的句子。

    大型语言模型如何工作
     

    0
    0 232
    文章 Michael Lei · 二月 18, 2024 11m read

    1. IRIS RAG Demo

    IRIS RAG Demo

    这是 IRIS 与 RAG(检索增强生成)示例的一个简单演示。 后端是使用 IRIS 和 IoP用 Python 编写的,LLM 模型是 orca-mini 并由 ollama 服务器提供。 前端是用 Streamlit 编写的聊天机器人。

      1. IRIS RAG 演示](#1-iris-rag-demo)
      • 1.1. 什么是 RAG](#11-what-is-rag)
      • 1.2. 如何工作?
      • 1.3. 安装演示](#13-installation-the-demo)
      • 1.4. 使用方法
      • 1.5. 演示如何运行](#15-演示如何运行)
        • [1.5.1. 前端](#151-前端)
        • 1.5.2. 后台
          • [1.5.2.1. 业务服务](#1521-业务服务)
          • [1.5.2.2. 业务流程](#1522-业务流程)
          • [1.5.2.3. LLM 操作](#1523-the-llm-operation)
          • 1.5.2.4. 矢量操作](#1524-the-vector-operation)
      • 1.6. 一般性说明](#16-一般性说明)

    1.1. 什么是 RAG?

    RAG 是 Retrieval Augmented Generation(检索增强生成)的缩写,它带来了使用带有知识库的 LLM 模型(GPT-3.5/4、Mistral、Orca 等)的能力。

    为什么它很重要? 因为它允许使用知识库来回答问题,并使用 LLM 来生成答案。

    例如,如果你直接向 LLM 询问**"grongier.pex 模块是什么?"**,它将无法回答,因为它不知道这个模块是什么(也许你也不知道🤪)。

    但是,如果你向 RAG 提出同样的问题,它就能回答,因为它会使用知识库,知道 grongier.pex 模块是什么,从而找到答案。

    既然你已经知道什么是 RAG,那就让我们来看看它是如何工作的。

    1.2. 它是如何工作的?

    首先,我们需要了解 LLMS 的工作原理。LLMS 经过训练,可以根据前一个单词预测下一个单词。因此,如果你给它一个句子,它就会尝试预测下一个词,以此类推。很简单吧?

    要与 LLM 交互,通常需要给它一个提示,它就会生成句子的其余部分。例如,如果你给它一个提示 "什么是 grongier.pex 模块?

    很抱歉,我对您提到的 Pex 模块并不熟悉。能否请您提供有关它的更多信息或上下文?
    

    好的,不出所料,它不知道什么是 grongier.pex 模块。但如果我们给它一个包含答案的提示呢?例如,如果我们提示``什么是 grongier.pex 模块?它是一个可以让你做 X、Y 和 Z 的模块。`",它就会生成剩下的句子,看起来就像这样:

    grongier.pex 模块是一个可以让你执行 X、Y 和 Z 的模块。
    

    好了,现在它知道什么是 grongier.pex 模块了。

    但如果我们不知道 grongier.pex 模块是什么呢?我们怎样才能给它一个包含答案的提示呢? 这就需要知识库了。

    RAG

    RAG 的整个思路是使用知识库找到上下文,然后使用 LLM 生成答案。

    为了找到上下文,RAG 将使用一个**知识库。

    1.3.安装演示

    只需克隆存储库并运行“docker-compose up”命令即可。

    git clone https://github.com/grongierisc/iris-rag-demo
    cd iris-rag-demo
    docker-compose up
    

    ⚠️ 一切都是本地的,没有任何东西发送到云端,所以请耐心等待,可能需要几分钟才能开始。

    1.4.用法

    演示开始后,您可以在 http://localhost:8051 访问前端。

    ![Frontend](https://github.com/grongierisc/iris-rag-demo/blob/master/misc/iris_chat.png?raw=true)

    你可以提出有关「综合注册资讯系统」的问题,例如:

    • 什么是grongier.pex模块?

    ![Question](https://github.com/grongierisc/iris-rag-demo/blob/master/misc/without_rag.png?raw=true)

    正如你所看到的,答案不是很好,因为 LLM 不知道什么是 grongier.pex 模块。

    现在,让我们尝试使用 RAG:

    上传“grongier.pex”模块文档,它位于“docs”文件夹中,文件“grongier.pex.md”。

    并问同样的问题:

    • 什么是grongier.pex模块?

    ![Question](https://github.com/grongierisc/iris-rag-demo/blob/master/misc/with_rag.png?raw=true)

    正如你所看到的,答案要好得多,因为 LLM 现在知道什么是 grongier.pex 模块。

    您可以在日志中看到详细信息:

    转到管理门户, http://localhost:53795/csp/irisapp/EnsPortal.ProductionConfig.zen?$NAMESPACE=IRISAPP&$NAMESPACE=IRISAPP&,然后单击“消息”选项卡。

    首先,您将看到发送到 RAG 进程的消息:

    ![Message](https://github.com/grongierisc/iris-rag-demo/blob/master/misc/trace_query.png?raw=true)

    然后是知识库(向量数据库)中的搜索查询:

    ![Message](https://github.com/grongierisc/iris-rag-demo/blob/master/misc/trace_result_vector.png?raw=true)

    最后,发送给 LLM 的新提示:

    ![Message](https://github.com/grongierisc/iris-rag-demo/blob/master/misc/trace_new_query.png?raw=true)

    1.5.这个Demo如何工作?

    该演示由 3 个部分组成:

    • 前端,用 Streamlit 编写
    • 后端,用 Python 和 IRIS 编写
    • 知识库 Chroma 向量数据库
    • LLM,Orca-mini,由 Ollama 服务器提供服务

    1.5.1.前端

    前端是用 Streamlit 编写的,它是一个简单的聊天机器人,可让您提出问题。

    这里没什么花哨的,只是一个简单的聊天机器人。

    import os
    import tempfile
    import time
    import streamlit as st
    from streamlit_chat import message
    
    from grongier.pex import Director
    
    _service = Director.create_python_business_service("ChatService")
    
    st.set_page_config(page_title="ChatIRIS")
    
    
    def display_messages():
        st.subheader("Chat")
        for i, (msg, is_user) in enumerate(st.session_state["messages"]):
            message(msg, is_user=is_user, key=str(i))
    
    
    def process_input():
        if st.session_state["user_input"] and len(st.session_state["user_input"].strip()) > 0:
            user_text = st.session_state["user_input"].strip()
            with st.spinner(f"Thinking about {user_text}"):
                rag_enabled = False
                if len(st.session_state["file_uploader"]) > 0:
                    rag_enabled = True
                time.sleep(1) # help the spinner to show up
                agent_text = _service.ask(user_text, rag_enabled)
    
            st.session_state["messages"].append((user_text, True))
            st.session_state["messages"].append((agent_text, False))
    
    
    def read_and_save_file():
    
        for file in st.session_state["file_uploader"]:
            with tempfile.NamedTemporaryFile(delete=False,suffix=f".{file.name.split('.')[-1]}") as tf:
                tf.write(file.getbuffer())
                file_path = tf.name
    
            with st.spinner(f"Ingesting {file.name}"):
                _service.ingest(file_path)
            os.remove(file_path)
    
        if len(st.session_state["file_uploader"]) > 0:
            st.session_state["messages"].append(
                ("File(s) successfully ingested", False)
            )
    
        if len(st.session_state["file_uploader"]) == 0:
            _service.clear()
            st.session_state["messages"].append(
                ("Clearing all data", False)
            )
    
    def page():
        if len(st.session_state) == 0:
            st.session_state["messages"] = []
            _service.clear()
    
        st.header("ChatIRIS")
    
        st.subheader("Upload a document")
        st.file_uploader(
            "Upload document",
            type=["pdf", "md", "txt"],
            key="file_uploader",
            on_change=read_and_save_file,
            label_visibility="collapsed",
            accept_multiple_files=True,
        )
    
        display_messages()
        st.text_input("Message", key="user_input", on_change=process_input)
    
    
    if __name__ == "__main__":
        page()
    

    💡 我只是在用 :

    _service = Director.create_python_business_service("ChatService")
    

    来创建一个前后端之间的绑定.

    ChatService 只是互操作性生产中的简单业务服务BS。

    1.5.2.后端

    后端是用 Python 和 IRIS 编写的。

    它由3个部分组成:

    • 业务服务BS
      • 前端的入口点
    • 业务流程BP
      • 如果需要,在知识库中执行搜索
    • 拖曳业务运营BO
      • 一个用于知识库
        • 摄取文档
        • 搜索文档
        • 清除文件
      • 一个用于LLM大模型
        • 生成答案

    1.5.2.1.业务服务BS

    业务服务是一个简单的业务服务,它允许:

    • 上传文件
    • 提出问题
    • 清除向量数据库
    from grongier.pex import BusinessService
    
    from rag.msg import ChatRequest, ChatClearRequest, FileIngestionRequest
    
    class ChatService(BusinessService):
    
        def on_init(self):
            if not hasattr(self, "target_chat"):
                self.target_chat = "ChatProcess"
            if not hasattr(self, "target_vector"):
                self.target_vector = "VectorOperation"
    
        def ingest(self, file_path: str):
            # build message
            msg = FileIngestionRequest(file_path=file_path)
            # send message
            self.send_request_sync(self.target_vector, msg)
    
        def ask(self, query: str, rag: bool = False):
            # build message
            msg = ChatRequest(query=query)
            # send message
            response = self.send_request_sync(self.target_chat, msg)
            # return response
            return response.response
    
        def clear(self):
            # build message
            msg = ChatClearRequest()
            # send message
            self.send_request_sync(self.target_vector, msg)
    

    基本上,它只是操作和过程之间的传递。

    1.5.2.2.业务流程

    业务流程是一个简单的过程,允许在需要时搜索知识库

    from grongier.pex import BusinessProcess
    
    from rag.msg import ChatRequest, ChatResponse, VectorSearchRequest
    
    class ChatProcess(BusinessProcess):
        """
        the aim of this process is to generate a prompt from a query
        if the vector similarity search returns a document, then we use the document's content as the prompt
        if the vector similarity search returns nothing, then we use the query as the prompt
        """
        def on_init(self):
            if not hasattr(self, "target_vector"):
                self.target_vector = "VectorOperation"
            if not hasattr(self, "target_chat"):
                self.target_chat = "ChatOperation"
    
            # prompt template
            self.prompt_template = "Given the context: \n {context} \n Answer the question: {question}"
    
    
        def ask(self, request: ChatRequest):
            query = request.query
            prompt = ""
            # build message
            msg = VectorSearchRequest(query=query)
            # send message
            response = self.send_request_sync(self.target_vector, msg)
            # if we have a response, then use the first document's content as the prompt
            if response.docs:
                # add each document's content to the context
                context = "\n".join([doc['page_content'] for doc in response.docs])
                # build the prompt
                prompt = self.prompt_template.format(context=context, question=query)
            else:
                # use the query as the prompt
                prompt = query
            # build message
            msg = ChatRequest(query=prompt)
            # send message
            response = self.send_request_sync(self.target_chat, msg)
            # return response
            return response
    

    这真的很简单,它只是向知识库发送一条消息来搜索文档。

    如果 知识库 返回文档,则会使用文档内容作为提示,否则会使用查询作为提示。

    1.5.2.3.LLM 操作

    LLM 操作是一个简单的操作,可以生成答案。

    
    class ChatOperation(BusinessOperation):
    
        def __init__(self):
            self.model = None
    
        def on_init(self):
            self.model = Ollama(base_url="http://ollama:11434",model="orca-mini")
    
        def ask(self, request: ChatRequest):
            return ChatResponse(response=self.model(request.query))
    

    这一步也很简单,它只是向 LLM 发送一条消息来生成答案。

    1.5.2.4.Vector 操作

    向量操作是一个简单的操作,允许摄取文档、搜索文档和清除向量数据库。

    
    class VectorOperation(BusinessOperation):
    
        def __init__(self):
            self.text_splitter = None
            self.vector_store = None
    
        def on_init(self):
            self.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1024, chunk_overlap=100)
            self.vector_store = Chroma(persist_directory="vector",embedding_function=FastEmbedEmbeddings())
    
        def ingest(self, request: FileIngestionRequest):
            file_path = request.file_path
            file_type = self._get_file_type(file_path)
            if file_type == "pdf":
                self._ingest_pdf(file_path)
            elif file_type == "markdown":
                self._ingest_markdown(file_path)
            elif file_type == "text":
                self._ingest_text(file_path)
            else:
                raise Exception(f"Unknown file type: {file_type}")
    
        def clear(self, request: ChatClearRequest):
            self.on_tear_down()
    
        def similar(self, request: VectorSearchRequest):
            # do a similarity search
            docs = self.vector_store.similarity_search(request.query)
            # return the response
            return VectorSearchResponse(docs=docs)
    
        def on_tear_down(self):
            docs = self.vector_store.get()
            for id in docs['ids']:
                self.vector_store.delete(id)
            
        def _get_file_type(self, file_path: str):
            if file_path.lower().endswith(".pdf"):
                return "pdf"
            elif file_path.lower().endswith(".md"):
                return "markdown"
            elif file_path.lower().endswith(".txt"):
                return "text"
            else:
                return "unknown"
    
        def _store_chunks(self, chunks):
            ids = [str(uuid.uuid5(uuid.NAMESPACE_DNS, doc.page_content)) for doc in chunks]
            unique_ids = list(set(ids))
            self.vector_store.add_documents(chunks, ids = unique_ids)
            
        def _ingest_text(self, file_path: str):
            docs = TextLoader(file_path).load()
            chunks = self.text_splitter.split_documents(docs)
            chunks = filter_complex_metadata(chunks)
    
            self._store_chunks(chunks)
            
        def _ingest_pdf(self, file_path: str):
            docs = PyPDFLoader(file_path=file_path).load()
            chunks = self.text_splitter.split_documents(docs)
            chunks = filter_complex_metadata(chunks)
    
            self._store_chunks(chunks)
    
        def _ingest_markdown(self, file_path: str):
            # Document loader
            docs = TextLoader(file_path).load()
    
            # MD splits
            headers_to_split_on = [
                ("#", "Header 1"),
                ("##", "Header 2"),
            ]
    
            markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
            md_header_splits = markdown_splitter.split_text(docs[0].page_content)
    
            # Split
            chunks = self.text_splitter.split_documents(md_header_splits)
            chunks = filter_complex_metadata(chunks)
    
            self._store_chunks(chunks)
    

    如果文档太大,那么向量数据库将无法存储它们,因此我们需要将它们拆分为块。

    如果文档是 PDF,那么我们将使用“PyPDFLoader”来加载 PDF,否则我们将使用“TextLoader”来加载文档。

    然后,我们将使用“RecursiveCharacterTextSplitter”将文档拆分为块。

    最后,我们将块存储到向量数据库中。

    如果文档是 Markdown,那么我们将使用“MarkdownHeaderTextSplitter”将文档拆分为块。我们还使用标题将文档拆分为块。

    1.6.A. 总 论

    所有这些都可以通过“langchains”来完成,但我想向你展示如何使用互操作性框架来做到这一点。并让每个人都更容易理解它是如何工作的。

    1
    0 587
    文章 Lilian Huang · 三月 14, 2024 6m read

    人工智能(AI)最近受到广泛关注,因为它可以改变我们生活的许多领域。更好的计算机能力和更多数据帮助人工智能完成了许多惊人的事情,例如改进医学测试和制造自动驾驶汽车。人工智能还可以帮助企业做出更好的决策,提高工作效率,这也是人工智能越来越流行和广泛应用的原因。如何将 OpenAI API 调用集成到现有的 IRIS 互操作性应用程序中?

     

    0
    0 208
    文章 Veerarajan Karunanithi · 二月 28, 2024 4m read

    什么是非结构化数据?
    非结构化数据是指缺乏预定义数据模型或组织的信息。与数据库中具有清晰结构(例如表和字段)的结构化数据相比,非结构化数据缺乏固定的模式。此类数据包括文本、图像、视频、音频文件、社交媒体帖子、电子邮件等。

    为什么来自非结构化数据的见解很重要?
    根据 IDC(国际数据公司)的报告,预计到 2025 年,全球 80% 的数据将是非结构化的,这将成为 95% 企业的重大担忧。 福布斯文章

    人工智能世界如何解决这个问题?
    在人工智能领域,生成式人工智能在为非结构化数据提供解决方案方面发挥着至关重要的作用。它擅长从文本/图像/视频中提取有价值的信息、文本摘要和处理文档等任务。

    Intersystems 非结构化数据解决方案
    Intersystems IRIS 提供了一种称为“SQL 文本搜索”的特殊解决方案,用于搜索非结构化数据。此功能有助于对多种语言的非结构化文本数据进行语义上下文搜索。

    使用 SQL 文本搜索有什么优点?

    快速搜索: InterSystems IRIS SQL 搜索利用优化的索引生成快速导航大量数据,避免对数据本身进行顺序搜索。

    单词感知搜索:与基本字符串搜索不同,SQL 搜索依赖于文本中的语义结构,以单词为基本单位。这种方法最大限度地减少了嵌入字符串或跨越两个单词的字符串引起的误报。

    1
    0 187
    文章 Jingwei Wang · 二月 15, 2024 4m read

    大型语言模型(例如 OpenAI 的 GPT-4)的发明和普及掀起了一波创新解决方案浪潮,这些解决方案可以利用大量非结构化数据,在此之前,人工处理这些数据是不切实际的,甚至是不可能的。此类应用程序可能包括数据检索(请参阅 Don Woodlock 的 ML301 课程,了解检索增强生成的精彩介绍)、情感分析,甚至完全自主的 AI 代理等!

    在本文中,我想演示如何使用 IRIS 的嵌入式 Python 功能直接与 Python OpenAI 库交互,方法是构建一个简单的数据标记应用程序,该应用程序将自动为我们插入IRIS 表中的记录分配关键字。然后,这些关键字可用于搜索和分类数据,以及用于数据分析目的。我将使用客户对产品的评论作为示例用例。

    先决条件

    • 运行的IRIS实例
    • OpenAI API 密钥(您可以在此处创建)
    • 配置好的开发环境(本文将使用VS Code

    Review类

    让我们首先创建一个 ObjectScript 类,该类将定义客户评论的数据模型。为了简单起见,我们将只定义 4 个 %String 字段:客户姓名、产品名称、评论正文以及我们将生成的关键字。该类应该扩展%Persistent,以便我们可以将其对象保存到磁盘。

    0
    0 127
    公告 Michael Lei · 八月 7, 2023

    大家好,

    与我们一起参加 8 月 31 日上午 10 点(美国东部时间)在线开发者圆桌会议,讨论医疗保健中的生成式 AI 使用案例
    学习医疗保健领域的用例+参考架构,并观看关于大语言模型的Demo演示。我们将像往常一样有时间进行问答和公开讨论。

    通过开发者社区Global Masters报名。

    演讲者: @Nicholai Mitchko ,InterSystems 解决方案合作伙伴销售工程师经理

    背景: Nicholai 在 InterSystems 管理着一支由 10 名解决方案工程师组成的团队,帮助医疗保健公司大规模设计、开发和交付解决方案。在业余时间,Nicholai 致力于大型语言模型的研究,包括开发自己的模型,这些模型出现在Huggingface OpenLLM 排行榜上。

      

    0
    0 323
    文章 Kelly Huang · 七月 12, 2023 4m read

    FHIR 通过提供标准化数据模型来构建医疗保健应用程序并促进不同医疗保健系统之间的数据交换,彻底改变了医疗保健行业。由于 FHIR 标准基于现代 API 驱动的方法,因此移动和 Web 开发人员更容易使用它。然而,与 FHIR API 交互仍然具有挑战性,尤其是在使用自然语言查询数据时。

    隆重推出FHIR - AI 和 OpenAPI 链应用程序,该解决方案允许用户使用自然语言查询与 FHIR API 进行交互。该应用程序使用OpenAILangChainStreamlit构建,简化了查询 FHIR API 的过程并使其更加用户友好。

     

    FHIR OpenAPI 规范是什么?

    OpenAPI 规范(以前称为 Swagger,目前是OpenAPI Initiative的一部分)已成为软件开发领域的重要工具,使开发人员能够更有效地设计、记录 API 并与 API 交互。 OpenAPI 规范定义了一种标准的机器可读格式来描述 RESTful API,提供了一种清晰一致的方式来理解其功能并有效地使用它们。

    在医疗保健领域,FHIR 成为数据交换和互操作性的领先标准。为了增强FHIR的互操作能力, HL7正式记录了FHIR OpenAPI规范,使开发人员能够将FHIR资源和操作无缝集成到他们的软件解决方案中。

     

    FHIR OpenAPI 规范的优点:

    0
    0 395
    文章 Michael Lei · 七月 4, 2023 11m read

    这是个实验项目,使用OpenAI API与FHIR资源和Python相结合来回答医疗行业的用户提问。

    项目想法

    生成式人工智能,如OpenAI上提供的LLM模型, 已被证明在理解和回答高层次问题方面具有显著能力。他们使用大量的数据来训练他们的模型,因此他们可以回答复杂的问题。

    他们甚至可以使用编程语言,根据提示创建代码 --我不得不承认,让我的工作自动化的想法让我感到有些焦虑。但到目前为止,似乎这是人们必须要习惯的事情,不管你喜不喜欢。所以我决定做一些尝试。

    这个项目的主要想法是在我读到这篇文章关于ChatARKit项目时产生的。这个项目使用OpenAI的API来解释语音命令,在智能手机摄像头的实时视频中渲染3D物体--非常酷的项目。而且,这似乎是一个热门话题,因为我发现最近有一篇论文遵循类似的想法。

    让我最担心的是使用ChatGPT对AR进行**编程。由于有一个开放的github repo,我搜索了一下,发现作者是如何使用ChatGPT生成代码的。这种技术被称为提示工程Prompt Engineering--这是维基百科关于它的文章,或者这两个更实用的参考资料: 12

    所以我想--为什么不结合FHIR和Python试试类似的东西?以下是我的想法:

    其主要构成是:

    1
    0 198
    文章 Michael Lei · 六月 24, 2023 8m read

     

    众所周知,人工智能的世界已经到来,每个人都想利用它为自己谋取利益。

    有许多平台通过订阅或私人免费提供人工智能服务。然而,由于在计算领域产生的大量“噪音”而脱颖而出的是 Open AI,这主要归功于其最著名的服务:ChatGPT 和 DALL-E。

    <--break->什么是Open AI?

    Open AI 是一个非营利性人工智能研究实验室,由 Sam Altman、Ilya Sutskever、Greg Brockman、Wojciech Zaremba、Elon Musk、John Schulman 和 Andrej Karpathy 于 2015 年发起,旨在促进和开发友好的人工智能,造福于人类所有的。

    自成立以来,这些人已经发布了一些令人着迷的产品,如果用于良好的目的,可能会成为真正强大的工具。然而,与任何其他新技术一样,它们构成了可能被用来犯罪或作恶的威胁。

    我决定测试 ChatGPT 服务,并询问它人工智能的定义是什么。我收到的答案是在互联网上找到的概念的积累,并以人类会回应的方式进行了总结。

    简而言之,人工智能只能使用用于训练它的信息进行回复。利用其内部算法和训练期间输入的数据,它可以撰写文章、诗歌,甚至计算机代码片段。

    人工智能将对这个行业产生重大影响,并最终彻底改变一切……。也许对人工智能将如何影响我们的未来的期望被夸大了,所以我们应该开始为了共同利益而正确地使用它。

    0
    1 351
    公告 Claire Zheng · 六月 19, 2023

    大家好!

    InterSystems Grand Prix 2023 结合了 InterSystems IRIS 数据平台的所有主要功能!

    因此,我们邀请您使用以下功能并收集额外的技术奖励,以帮助您赢得奖品!

    如下:

    • LLM AI 或 LangChain 用法:Chat GPT、Bard 等 - 6
    • InterSystems FHIR SQL Builder- 5
    • InterSystems FHIR-3
    • IntegratedML - 4
    • Native API - 3
    • 嵌入式 Python - 4
    • 互操作性 - 3
    • 生产扩展(PEX)- 2
    • 自适应分析 (AtScale) Cube的使用 - 3
    • Tableau、PowerBI、Logi 的使用 - 3
    • InterSystems IRIS BI - 3
    • 列索引使用 - 1
    • Docker 容器使用 - 2
    • ZPM 包部署 - 2
    • 在线演示 - 2
    • 单元测试 - 2
    • 实施 InterSystems Community Idea中的创意 - 4
    • 在开发者社区发布的第一篇文章 - 2
    • 在开发者社区发布的第二篇文章 - 1
    • 代码质量通过 - 1
    • 第一次贡献 - 3
    • YouTube 上的视频 - 3
    0
    1 164
    文章 Michael Lei · 六月 14, 2023 3m read

    本文是 SqlDatabaseChain 的简单快速入门(我所做的)。

    希望大家会感兴趣。

    非常感谢:

    sqlalchemy-iris 作者@Dmitry Maslennikov

    您的项目使我的试验变得可能。

    文章脚本使用 openai API,因此请注意不要在外部共享您不打算共享的表信息和记录。

    如果需要,可以插入本地模型。

    创建一个新的虚拟环境

    0
    1 340
    文章 Michael Lei · 六月 8, 2023 2m read

    嗨社区!

    想与您分享我在Telegram中使用GPT创建“我自己的”聊天的练习

    这个应用需要用到 Open Exchange 上的两个组件:@Nikolay SolovyevTelegram Adapter@Kurro LopezIRIS Open-AI 

    因此,通过此示例,您可以在 Telegram 中使用 ChatGPT 设置自己的聊天。

    让我们看看如何让它发挥作用!

    0
    0 189
    文章 Michael Lei · 三月 27, 2023 11m read

    好不好玩,能当真吗?


    最近几个月,大型语言模型GPT正在激起一些现象。因此,上周末我不可避免地也在玩 ChatGPT,以探究它是否会成为我正在敲打的一些基于 BERT 的“传统”AI 聊天机器人的补充,或者更确切地说,它是否会淘汰它们。
    玩的时候脑子里冒出一个念头。通过略微理论化或哲学化,最终互操作性标准(如 HL7 和 FHIR 等)是一种“语言”,对吗? HL7 有自己的语法、规则、词汇甚至方言——每个系统都有自己的语调。这就是为什么当一台机器与另一台机器对话时,它们需要翻译器(例如 DTL 转换)来实现相互理解。
    所以环顾四周,似乎一切都是语言:编码是语言:python,javascript和COS也是语言。 HL7、FHIR 甚至 XML 或 JSON 都是语言,只是它们比自然语言更结构化,那么 GPT 应该更容易上手吗?
    那么,我们可以从简单地重用 GPT 的预训练编码语言模型来模拟 DTL 开始吗?我们还没有进行调整,以下是初步结果:


    测试


    模式:完整
    型号:code-davinci-002
    温度:0
    最大长度:1989
    其他:默认
    停止序列:###
    1、将HL7 ADT A01转A05?

    输入:  

    0
    0 237
    文章 Hao Ma · 二月 16, 2023 9m read

    A "big" or a "little" ask for ChatGPT?


    几周前我尝试了 OpenAI GPT 的编码模型,看看它是否可以在医疗保健系统之间进行一些消息转换。它肯定可以,在相当大的程度上。
    已经将近 3 周了,对于 ChatGPT 来说是很长很长的时间,所以我想知道它现在成长得有多快,以及它是否可以为我们做一些集成工程师的工作,例如它是否可以创建一个 InterSystems COS DTL将 HL7 转换为 FHIR 信息?

    在不到一两分钟的时间内,我立即得到了一些答案。


    测试

    首先我想测试一下我是在和它背后的正确“人”说话

    问题一:如何将HL7 V2.4报文转为FHIR STU3?

    ChatGPT

    将 HL7 V2.4 消息转换为 FHIR STU3 涉及多个步骤,因为这两个标准具有不同的数据模型和结构。以下是该过程的高级概述:

    2
    0 355
    文章 Michael Lei · 七月 29, 2022 3m read

    在这篇文章中,我试图找出多个领域来开发我们能够使用python和机器学习的功能。

    每家医院都在努力利用技术和服务来提高其服务质量和效率。

    医疗保健部门是一个非常大的、可供选择的服务领域,而python是做机器学习的最好技术之一。

    在每个医院里,人们都会有一些感觉,如果这种感觉能够被计算机理解,使用技术就有机会提供更好的服务。

    在这里,我们可以把这两者结合起来,在医疗部门,我正试图理解/识别各种选择,以提供更好的服务。

    首先,我们可以尝试使用python的机器学习来识别人并了解他们目前的感受。比如,在医院信息系统中,每个病人至少有一张照片,使用该照片我们可以识别病人,然后一旦病人到达医院,使用视频监控和机器学习技术需要识别这个人的感觉。

    在医院设施中会看到多种类型的感觉。

    1)紧张

    2)平静和冷静

    3)   哭泣

    4)  暴力的病人/亲属

    5)  生病的病人

    6)  高烧鉴定

    像上面的情况,我们可以看到多种不同的类型。

    如果一个已经登记的病人发高烧,那么使用闭路电视识别这个病人的情况,并捕捉温度热像仪,护理人员可以给予更好的支持,这在接待服务领域是非常大的区别。

    如果这个发高烧的人已经是一个登记的病人,如果利用现有的照片识别这个病人,那么我们可以做多件事情。

    1)如果该病人今天有预约,我们可以自动到达该病人处。

    0
    0 168
    文章 Frank Ma · 六月 13, 2022 6m read

    孕产妇风险可以通过一些医学界众所周知的参数来测量。这样,为了帮助医学界和计算机系统,特别是人工智能,科学家Yasir Hussein Shakir发布了一个非常有用的数据集,用于训练检测/预测孕产妇风险的机器学习(ML)算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是 https://www.kaggle.com/code/yasserhessein/classification-maternal-healt….

    关于数据集

    由于缺乏怀孕期间和怀孕后的孕产妇保健信息,许多孕妇死于怀孕问题。这在农村地区和新兴国家的中下层家庭中更为常见。在怀孕期间,应时刻注意观察,以确保婴儿的正常成长和安全分娩 (来源: https://www.kaggle.com/code/yasserhessein/classification-maternal-healt…).

    数据是通过基于物联网的风险监测系统,从不同的医院、社区诊所、孕产妇保健机构收集而来。

    0
    0 346
    文章 Frank Ma · 六月 13, 2022 10m read

    肾脏疾病可以从一些医学界熟知的参数中发现。这样,为了帮助医学界和计算机系统,特别是人工智能,科学家Akshay Singh发表了一个非常有用的数据集,用于训练肾脏疾病检测/预测方面的机器学习(ML)算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset

    关于数据集

    该肾脏疾病数据集有以下元数据信息(来源:https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset):

    0
    0 231
    文章 Michael Lei · 六月 1, 2022 6m read

    糖尿病可以从医学界熟知的一些参数中发现。这样,为了帮助医学界和计算机软件系统,特别是人工智能软件,美国国家糖尿病和消化道及肾脏疾病研究所发布了一个非常有用的数据集,用于训练糖尿病检测/预测的机器学习算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是https://www.kaggle.com/datasets/mathchi/diabetes-data-set

    该糖尿病数据集有以下元数据信息(来源:https://www.kaggle.com/datasets/mathchi/diabetes-data-set):

    0
    0 173
    文章 Michael Lei · 二月 17, 2022 23m read

    实时人工智能/机器学习计算的挑战

    我们将从我们在 InterSystems 数据科学实践中遇到的示例开始讲起:

    • “高负载”客户门户与在线推荐系统相集成。 计划是在整个零售网络层面重新配置促销活动(我们将假设使用“细分策略”矩阵而非“平面”促销活动母版)。 推荐机制会有哪些变化? 推荐机制内的数据馈送和数据更新会有哪些变化(输入数据量增加了 25000 倍)? 推荐规则生成设置会有哪些变化(生成规则的总量和“分类”呈千倍增加,因此需要将推荐规则筛选阈值缩小千倍)?
    • 设备健康监控系统使用“手动”方式馈送数据样本。 现在,它将连接到每秒可传输数千个过程参数读数的 SCADA 系统。 监控系统会有哪些变化(它能否应对以秒为单位的设备健康监控)? 当输入数据接收到包含数百列最近在 SCADA 系统中实现的数据传感器读数的新块时,会发生什么(是否有必要关闭监控系统以将新的传感器数据整合到分析当中,以及要关闭多久)?
    • 复杂的人工智能/机器学习机制(推荐、监控、预测)依赖于彼此的结果。 要调整这些人工智能/机器学习机制的功能以适应输入数据的变化,每月需要多少人工工时? 人工智能/机器学习机制在支持制定业务决策方面的总体“延迟”是多少(支持信息的刷新频率对比新输入数据的馈送频率)?

    综合考虑包括上述在内的示例后,我们总结了以下因过渡到使用实时机器学习和人工智能而出现的挑战:

    • 我们对于自家公司的人工智能/机器学习机制的创建和适应速度(相对于形势变化的速度)是否满意?
    • 我们的人工智能/机器学习解决方案在支持制定实时业务决策方面的表现如何?
    • 我们的人工智能/机器学习解决方案能否自适应(即无需开发者介入即可继续工作)以应对数据漂移和由此产生的业务决策制定方法的变化?

    本文综合概述了 InterSystems IRIS 平台在全面支持人工智能/机器学习机制部署、人工智能/机器学习解决方案装配(集成)和基于密集数据流的人工智能/机器学习解决方案训练(测试)方面的功能。 我们将关注市场研究、人工智能/机器学习解决方案实例以及我们在本文中称为实时人工智能/机器学习平台的概念方面的内容。

    调查内容:实时应用类型

    由 Lightbend 在 2019 年面向约 800 名专业 IT 人士进行的调查,结果不言自明:
    图 1:实时数据的主要使用者

    我们将引用该调查结果报告中对我们最重要的片段:“… 流式传输数据流水线和基于容器的基础架构有着并驾齐驱的增长趋势,二者相结合可应对在更快、更高效且更敏捷地交付有影响力的结果方面存在的竞争压力。 与传统的批处理相比,流式传输能够更快地从数据中提取有用信息。 它还可以及时地集成高级分析数据,例如基于人工智能和机器学习 (AI/ML) 模型的推荐,所有功能都旨在通过提高客户满意度来实现差异化竞争优势。 时间压力也会对 DevOps 团队构建和部署应用造成影响。 诸如 Kubernetes 等基于容器的基础架构可帮助常要通过快速、重复构建和部署应用以应对变化的团队化解其面对的许多效率低下和设计问题。 … 804 位 IT 专业人士提供了有关其组织内使用流式处理的应用的详细信息。 受访者主要来自西方国家/地区(欧洲占比 41%,北美占比 37%),任职于大中小型组织的人数占比大致相等。 … … 人工智能并非投机炒作。 在已于人工智能/机器学习生产应用中使用流式处理的受访者中,有 58% 的人表示明年将出现一些最大幅增长。

    • 受访者一致认为人工智能/机器学习用例将于明年出现一些最大幅增长。
    • 随着实时数据处理得到更大规模的利用,不仅会拓宽在不同用例中采用的广度,还会加大在现有用例中采用的深度。
    • 除了人工智能/机器学习之外,物联网流水线采用者的热情也十分高昂 — 有 48% 已经整合物联网数据的人员表示,此用例将于近期出现一些最大幅增长。 … ”

    这项非常有趣的调查表明,机器学习和人工智能场景是实时数据的主要使用者,这种看法已得到广泛认可。 另一个重要的收获是透过 DevOps 视角折射出的对于人工智能/机器学习的看法:我们现在已经可以断言,仍占主导地位的“基于完全已知数据集的一次性人工智能/机器学习”文化已发生转变。

    实时人工智能/机器学习平台概念

    实时人工智能/机器学习最典型的使用领域之一是工业中的制造过程管理。 让我们以这一领域为例并考虑上述所有想法,为实时人工智能/机器学习平台的概念给出确切的定义。 使用人工智能和机器学习来满足制造过程管理的需求具备多项与众不同的特性:

    • 有关制造过程状况的数据会非常密集地生成:生成频率高、涉及参数广泛(SCADA 系统每秒可传输数以万计的参数值)
    • 有关检测到的缺陷的数据(且不说不断演化的缺陷,它们反而是稀少且偶发的数据)已知存在缺陷分类不足和定位不及时的问题(通常以人工记录的形式在纸上找到)
    • 从实际角度来看,模型训练和应用只有一个“观察窗口”,可反映以最近的过程参数读数作为结尾的合理移动间隔内的过程动态

    这些特性使我们除了需要实时接收和基本处理来自制造过程的密集“宽带信号”之外,也需要以实时方式执行(并行)人工智能/机器学习模型应用、训练和准确率控制。 我们的模型在移动观察窗口中“看到”的“框架”在不断变化 – 基于之前某一“框架”训练的人工智能/机器学习模型在准确率方面也会发生变化。 如果人工智能/机器学习建模准确率下降(例如,“警报范数”分类误差的值超过了给定的容差边界),则应自动触发基于较新“框架”的重新训练 – 同时,在选择开始重新训练的时刻时,必须考虑到重新训练过程持续时间和当前模型版本的准确率下降速度(因为在获得“重新训练”版本的模型之前,在执行重新训练的过程期间会一直持续应用当前版本)。 InterSystems IRIS 拥有关键的平台内功能,可充分支持用于制造过程管理的实时人工智能/机器学习解决方案。 这些功能可以分为三大类:

    • 基于 InterSystems IRIS 平台实时运行的生产解决方案中新的或经修改的现有人工智能/机器学习机制的持续部署/交付 (CD)
    • InterSystems IRIS 平台的单一生产解决方案中的入站过程数据流、人工智能/机器学习模型应用/训练/准确率控制队列、围绕与数学建模环境实时交互的数据/代码/编排的持续集成 (CI)
    • 在使用传递自 InterSystems IRIS 平台的数据、代码和编排(“决策制定”)的数学建模环境中执行的人工智能/机器学习机制的持续训练 (CT)

    将与机器学习和人工智能相关的平台功能归入上述类别并非随意而为。 我们引用了由 Google 发表的方法论文章,文中为这种分组提供了概念基础:“… DevOps 是开发和运行大规模软件系统的一种常见做法。 这种做法具有诸多优势,例如缩短开发周期、提高部署速度、实现可靠的发布。 如需获得这些优势,您需要在软件系统开发中引入两个概念:

    • 持续集成 (CI)
    • 持续交付 (CD)

    机器学习系统是一种软件系统,因此类似的做法有助于确保您能够可靠地大规模构建和运行机器学习系统。 但是,机器学习系统在以下方面与其他软件系统不同:

    • 团队技能:在机器学习项目中,团队通常包括数据科学家或机器学习研究人员,他们主要负责进行探索性数据分析、模型开发和实验。 这些成员可能不是经验丰富的、能够构建生产级服务的软件工程师。
    • 开发:机器学习在本质上具有实验性。 您应该尝试不同的特征、算法、建模技术和参数配置,以便尽快找到问题的最佳解决方案。 您所面临的挑战在于跟踪哪些方案有效、哪些方案无效,并在最大程度提高代码重复使用率的同时维持可重现性。
    • 测试:测试机器学习系统比测试其他软件系统更复杂。 除了典型的单元测试和集成测试之外,您还需要验证数据、评估经过训练的模型质量以及验证模型。
    • 部署:在机器学习系统中,部署不是将离线训练的机器学习模型部署为预测服务那样简单。 机器学习系统可能会要求您部署多步骤流水线以自动重新训练和部署模型。 此流水线会增加复杂性,并要求您自动执行部署之前由数据科学家手动执行的步骤,以训练和验证新模型。
    • 生产:机器学习模型的性能可能会下降,不仅是因为编码不理想,而且也因为数据资料在不断演变。 换句话说,与传统的软件系统相比,模型可能会通过更多方式衰退,而您需要考虑这种降级现象。 因此,您需要跟踪数据的摘要统计信息并监控模型的在线性能,以便系统在值与预期不符时发送通知或回滚。

    机器学习和其他软件系统在源代码控制的持续集成、单元测试、集成测试以及软件模块或软件包的持续交付方面类似。 但是,在机器学习中,有一些显著的差异:

    • CI 不再仅仅测试和验证代码及组件,而且还会测试和验证数据、数据架构和模型。
    • CD 不再针对单个软件包或服务,而会针对应自动部署其他服务(模型预测服务)的系统(机器学习训练流水线)。
    • CT 是机器学习系统特有的一个新属性,它主要涉及自动重新训练和提供模型。 …

    我们可以得出结论,基于实时数据的机器学习和人工智能需要更为广泛的工具和更加丰富的功能(从代码开发到数学建模环境编排)、所有功能和主题领域之间更加紧密的集成、更好的人力及机器资源管理。

    实时场景:识别进料泵中出现的缺陷

    继续以制造过程管理领域为例,我们将探讨一个已在开头引用过的实际案例:需要建立一种基于制造过程参数值流以及维护人员缺陷检测报告来实时识别进料泵中出现的缺陷的机制。
    图 2:识别出现缺陷的案例解析

    许多类似的实际案例中都有一个共同的特点,即在考虑规律且及时地馈送数据 (SCADA) 时,还需要同时考虑偶发且不规则地检测(和记录)各种缺陷类型。 换句话说:SCADA 数据每秒馈送一次以供分析,但需要用纸笔记录缺陷并注明日期(例如:“1 月 12 日– 第三轴承区域漏油渗入泵盖”)。 因此,我们可以通过添加以下重要限制来对案例解析加以补充:我们只有一种具体缺陷类型的“指纹”(即具体缺陷类型由截至具体日期的 SCADA 数据表示 – 该特定缺陷类型没有其他示例)。 这一限制立即使我们脱离了假定有大量可用“指纹”的传统机器学习范式(监督学习)。
    图 3:细化缺陷识别案例解析

    我们能否以某种方式“倍增”我们可用的“指纹”? 是的,可以。 泵的当前状况由其与已记录缺陷的相似度表征。 即使不运用定量方法,仅通过观察从 SCADA 系统接收到的参数值的动态,也可以了解很多信息:
    图 4:泵状况动态与具体缺陷类型“指纹”

    然而,视觉感知(至少目前)在我们动态发展的场景中并不是最合适的机器学习“标签”生成器。 我们将使用统计检验来评估当前泵状况与已记录缺陷的相似度。
    图 5:对传入数据与缺陷“指纹”应用统计检验

    统计检验可评估一组包含制造过程参数值的记录(以“批次”形式取自 SCADA 系统)与具体缺陷“指纹”的记录相似的概率。 使用统计检验(统计相似度指数)评估的概率随后会被转换为 0 或 1,成为我们评估相似度的每组记录中的机器学习“标签”。 即,使用统计检验处理获取到的一批泵状况记录后,我们就能够 (a) 将该批次添加到人工智能/机器学习模型的训练数据集以及 (b) 评估人工智能/机器学习模型当前版本应用于该批次时的准确率。
    图 6:对传入数据与缺陷“指纹”应用机器学习模型

    在之前的一期在线讲座中,我们展示并讲解了 InterSystems IRIS 平台如何将任何人工智能/机器学习机制实现为能够控制建模输出似然并调整模型参数的持续执行的业务流程。 我们实现泵场景依赖于在线讲座中介绍的完整 InterSystems IRIS 功能 – 这些功能在作为我们的解决方案一部分的 ANALYZER 流程中使用,通过自动管理训练数据集实现强化学习,取代了传统的监督学习。 我们会将在应用统计检验(相似度指数转换为 0 或 1)和当前版本的模型之后呈现“检测一致性”(即统计检验和模型基于这些记录均输出 1)的记录添加到训练数据集中。 重新训练模型时,在其验证阶段(将新训练的模型应用于自身的训练数据集,在此之前需要对该数据集提前进行统计检验),应用统计检验后“未能保持”输出 1 的记录(由于训练数据集中永远存在属于原始缺陷“指纹”的记录)将从训练数据集中移除,并基于缺陷“指纹”和数据流中的“成功”记录训练新版本模型。
    图 7:InterSystems IRIS 中人工智能/机器学习计算的机器人化

    如果需要对通过 InterSystems IRIS 中的本地计算获得的检测准确率寻求“第二意见”,我们可以创建一个顾问流程,以使用云提供商(例如 Microsoft Azure、Amazon Web Services、 Google Cloud Platform 等)基于控制数据集重做模型训练/应用):
    图 8:来自 Microsoft Azure 的“第二意见”,由 InterSystems IRIS 编排

    我们场景的原型在 InterSystems IRIS 中实现为分析过程的代理系统,与设备(泵)、数学建模环境(Python、R 和 Julia)交互,并支持所有相关人工智能/机器学习机制的自我训练 – 基于实时数据流。
    图 9:InterSystems IRIS 中实时人工智能/机器学习解决方案的核心功能

    基于我们的原型获得的一些实际结果:

    • 由模型检测到的缺陷“指纹”(1 月 12 日):
    • 模型检测到的原型已知“指纹”中未包含的新出现的缺陷(于 9 月 11 日检测到,而缺陷本身在两天后,即 9 月 13 日被维修队发现):
    对包含多次发生相同缺陷的真实数据进行的模拟表明,我们使用 InterSystems IRIS 平台实现的解决方案可以在维修队发现问题的几日之前检测到缺陷。

    InterSystems IRIS – 适用于实时人工智能/机器学习计算的多功能通用平台

    InterSystems IRIS 是一款完整、统一的平台,可简化实时富数据解决方案的开发、部署和维护。 它提供了并发事务和分析处理能力,支持多个完全同步的数据模型(关系、分层、对象和文档),一个可集成不同数据孤岛和应用的完整的互操作性平台,以及支持批处理和实时用例的复杂结构化和非结构化分析功能。 该平台还提供了一个开放的分析环境,可将同类最佳的分析整合到 InterSystems IRIS 解决方案中,并提供灵活的部署功能以支持云和本地部署的任意组合。 由 InterSystems IRIS 平台提供支持的应用目前已在各行各业中得到广泛使用,帮助公司在战略和战术执行中获得切实的经济利益,促进明智的决策制定并消除事件、分析和行动之间的“差距”。
    图 10:实时人工智能/机器学习背景下的 InterSystems IRIS 架构

    与上图相同,下图将新的“基础”(CD/CI/CT) 与平台工作元素之间的信息流结合起来。 可视化始于 CD 宏机制,并继续贯穿于 CI/CT 宏机制。
    图 11:InterSystems IRIS 平台人工智能/机器学习工作元素之间的信息流图

    InterSystems IRIS 中 CD 机制的基本要素:平台用户(人工智能/机器学习解决方案开发者)使用专门的人工智能/机器学习代码编辑器调整现有和/或创建新的人工智能/机器学习机制。上述代码编辑器为 Jupyter(全称:Jupyter Notebook;为简洁起见,在此编辑器中创建的文档也常被称为相同的名称)。 在 Jupyter 中,开发者可以在传输(“部署”)到 InterSystems IRIS 之前编写、调试和测试(也使用可视化表示)具体的人工智能/机器学习机制。 显然,以这种方式开发的新机制只能进行基本的调试(特别是因为 Jupyter 不处理实时数据流)– 但我们对此没有意见,因为原则上,在 Jupyter 中开发代码的主要目标是验证单独的人工智能/机器学习机制的功能。 类似地,已部署在平台中的人工智能/机器学习机制(请参阅其他宏机制)在调试前可能需要“回滚”到其“平台前”版本(从文件读取数据、通过 xDBC 而非本地表或 global(即 InterSystems IRIS 中的多维数据数组)访问数据等)。 在 InterSystems IRIS 中实现 CD 具有一项重要特性:平台和 Jupyter 之间存在双向集成关系,支持在平台内部署(利用进一步的平台内处理)Python、R 和 Julia 内容(三种语言均为各自主要开源数学建模环境的编程语言)。 也就是说,人工智能/机器学习内容开发者获得了在平台中“持续部署”其内容的能力,同时能够使用其常用 Jupyter 编辑器以及 Python、R、Julia 所提供的常用函数库,在平台外部提供基本的调试功能(必要情况下)。 继续聊聊 InterSystems IRIS 中的 CI 宏机制。 该图展示了“实时机器人化”的宏流程(一组数据结构、以数学环境语言编写的业务流程和代码段,以及以其编排的 InterSystems IRIS 原生开发语言 ObjectScript)。 宏流程的目标是:支持人工智能/机器学习机制运行所需的数据处理队列(基于实时传输到平台的数据流),对人工智能/机器学习机制的排序和“分类” (又名 “数学算法”、“模型”等 – 可根据实现细节和术语偏好采用多种不同名称)做出决策,对围绕人工智能/机器学习输出(多维数据集、表格、多维数据数组等 – 生成报告、仪表板等)的智能保持最新的分析结构。 在 InterSystems IRIS 中实现 CI 具有一项重要特性:平台和数学建模环境之间存在双向集成关系,支持在平台内执行使用 Python、R 或 Julia 在各自的环境中编写的内容并接收执行结果。 这种集成在“终端模式”(即人工智能/机器学习内容被制定为对数学环境执行标注的 ObjectScript 代码)和“业务流程模式”(即人工智能/机器学习内容被制定为使用可视化编辑器、Jupyter 或 IDE(IRIS Studio、Eclipse、Visual Studio Code)的业务流程)下均适用。 需要使用 CI 层内的 IRIS 和 CD 层内的 Jupyter 之间的链接指定在 Jupyter 中编辑业务流程的可用性。 本文将进一步提供与数学建模环境相集成的更为详细的概述。 我们认为此时完全有理由向您说明,平台中提供了将人工智能/机器学习机制(源自“持续部署”)“持续集成”到实时人工智能/机器学习解决方案中所需的所有工具。 最后要聊到的是至关重要的宏机制:CT。 没有它,就不会存在人工智能/机器学习平台(即便可以通过 CD/CI 实现“实时”)。 CT 的本质是平台能够在数学建模环境的会话中直接操作机器学习和人工智能的“工件”:模型、分布表、向量/矩阵、神经网络层等。 在大多数情况下,这种“互操作性”体现于在环境中创建上述工件(例如,对于模型,“创建”包括模型规范及其参数的后续评估,即所谓的模型“训练”),对工件进行应用(对于模型:借助目标变量的“建模”值进行计算 – 预测、类别指定、事件概率等),以及对已经创建的和应用的工件进行改进 (例如,通过根据模型的性能重新定义模型的输入变量以便提高预测准确率,作为一种可行选项)。 CT 角色的关键属性是它对 CD 和 CI 现实的“抽象”:CT 可以在具体环境中存在的限制下使用人工智能/机器学习解决方案的计算和数学细节来实现所有工件。 将由 CD 和 CI 负责“提供输入数据”和“交付输出”。 在 InterSystems IRIS 中实现 CT 具有一项重要特性:使用上述与数学建模环境的集成时,平台可以从其编排的数学环境内的会话中提取工件,并且(最重要的是)将它们转换为平台内数据对象。 例如,刚刚在 Python 会话中创建的分布表可以(无需暂停 Python 会话)传输到平台中作为 global(InterSystems IRIS 中的多维数据数组),并进一步重用于在不同的人工智能/机器学习机制下的计算(使用不同环境的语言实现,如 R),或者作为虚拟表。 另一个示例:与模型的“例程”功能并行(在 Python 会话中),它的输入数据集使用“自动机器学习”进行处理 – 自动搜索优化的输入变量和模型参数。 与“例程”训练一起,生产模型可以实时接收“优化建议”,以根据调整后的输入变量集、调整后的模型参数值(不再是 Python 训练的结果,而是作为其“替代”版本的训练结果,例如使用 H2O 框架),使整个人工智能/机器学习解决方案能够以自主方式处理输入数据和建模对象/流程中不可预见的漂移。 我们现在将以现有原型为例,深入了解 InterSystems IRIS 的平台内人工智能/机器学习功能。 在下图中,在图像的左侧部分,我们看到了实现 Python 和 R 脚本执行的业务流程的片段。 在中央部分,我们看到了执行这些脚本后的 Python 和 R 的相应可视化日志。 接下来是两种语言的内容示例,在各自环境中执行。 右侧为基于脚本输出的可视化。 右上角的可视化使用 IRIS Analytics 开发(数据从 Python 传输到 InterSystems IRIS 平台,并使用平台功能呈现在仪表板中),右下角所示为直接在 R 会话中获取并从中传输到图形文件的内容。 重要说明:所讨论的业务流程片段在此原型中负责基于从设备模拟器流程实时接收的数据进行模型训练(设备状况分类),该流程由监控分类模型性能的分类准确率监控流程触发。 文中会进一步讨论将人工智能/机器学习解决方案实现为一组交互式业务流程(“代理”)。
    图 12:在 InterSystems IRIS 中与 Python、R 和 Julia 的交互

    平台内流程(又称 “业务流程”、“分析过程”、“流水线”等,具体取决于上下文)可以编辑,首先是使用平台中的可视化业务流程编辑器,所用方式可同时创建流程图及其相应的人工智能/机器学习机制(代码)。 我们所说的“创建人工智能/机器学习机制”是指从一开始就进行混合(在流程级别):使用数学建模环境的语言编写的内容与使用 SQL (包括 IntegratedML 扩展程序)、InterSystems ObjectScript 以及其他支持的语言编写的内容相邻。 此外,平台内范式以嵌入片段集的形式(如下图所示)为“绘制”流程提供了广泛的功能,有助于高效地构建有时相当复杂的内容,避免视觉组合中的“随机失活” (“非可视化”方法/类/过程等)。 即,在必要情况下(可能在大多数项目中),可以采用可视化的自文档格式实现整个人工智能/机器学习解决方案。 请您注意下图中心部分,该部分展示了“更高级的嵌入向量层”,并表明除了这样的模型训练(使用 Python 和 R 实现)之外,还有针对训练模型的所谓 ROC 曲线分析,可对其训练质量进行视觉(和计算)评估 – 该分析使用 Julia 语言实现(在其各自的 Julia 环境中执行)。
    图 13:InterSystems IRIS 中的视觉人工智能/机器学习解决方案组合环境

    如前所述,已实现的平台内人工智能/机器学习机制的初始开发和(在其他情况中)调整将在平台外部的 Jupyter 编辑器中执行。 在下图中,我们可以找到一个编辑现有平台内流程的示例(与上图中的流程相同)– 这就是其模型训练片段在 Jupyter 中的外观。 Python 语言的内容支持在 Jupyter 中编辑、调试、查看内嵌计算图。 更改(如果需要)可以立即复制到平台内流程,包括其生产版本。 同样,新开发的内容也可以复制到平台(自动创建一个新的平台内流程)。
    图 14 在 InterSystems IRIS 中使用 Jupyter Notebook 编辑平台内人工智能/机器学习机制

    平台内流程的编辑不仅可以使用可视化或笔记本格式执行,还可以使用“完整”的 IDE(集成开发环境)格式执行。 IDE 为 IRIS Studio(原生 IRIS 开发工作室)、Visual Studio Code(VSCode 的 InterSystems IRIS 扩展程序)和 Eclipse(Atelier 插件)。 在某些情况下,开发团队可以同时使用全部三种 IDE。 下图展示了在 IRIS Studio、Visual Studio Code 和 Eclipse 中编辑完全相同流程的示例。 内容的任何部分都完全可以编辑:Python/R/Julia/SQL、ObjectScript 和业务流程元素。
    图 15:在各种 IDE 中编辑 InterSystems IRIS 业务流程

    在 InterSystems IRIS 中使用业务流程语言 (BPL) 组合和执行业务流程的方法值得特别提及。 BPL 允许在业务流程中使用“预先配置的集成组件”(活动)– 确切地说,这让我们有权声明 IRIS 支持“持续集成”。 预配置的业务流程组件(活动和活动之间的链接)对于装配人工智能/机器学习解决方案而言是极其强大的加速器。 不仅用于装配:由于活动及其链接,在不同的人工智能/机器学习机制之上引入了“自主管理层”,能够根据具体情况做出实时决策。
    图 16:InterSystems IRIS 平台中用于持续集成 (CI) 的预配置业务流程组件

    代理系统(又名 “多代理系统”)的概念在机器人化领域被广泛接受,InterSystems IRIS 平台通过其“生产/流程”结构为其提供有机支持。 除了使用整体解决方案所需的功能“武装”每个流程的无限能力之外,“代理”作为平台内流程家族中的一员,能够为非常不稳定的建模现象(社会/生物系统的行为, 实施部分观察的制造过程等)创建高效的解决方案。
    图 17:在 InterSystems IRIS 中以业务流程代理系统形式运行的人工智能/机器学习解决方案

    现在继续概述 InterSystems IRIS 平台,我们将向您展示包含适用于所有实时场景类别的解决方案的应用领域(我们在之前的一期在线讲座中提供了对一些基于 InterSystems IRIS 的平台内人工智能/机器学习最佳做法的十分详细的发现) 。 紧接上图,我们在下面提供了一幅更具说明性的代理系统图。 在该图中,完全相同的原型显示了其四个代理流程以及它们之间的交互: GENERATOR – 模拟设备传感器的生成数据;BUFFER – 管理数据处理队列;ANALYZER – 执行机器学习;MONITOR – 监控机器学习质量以及在有必要重新训练模型时发出信号。
    图 18:在 InterSystems IRIS 中以业务流程代理系统形式构成的人工智能/机器学习解决方案

    下图展示了不同机器人化原型(文本情感分析)在一段时间内的运行。 上半部分 – 模型训练质量指标演变(质量提高),下半部分 – 模型应用质量指标和重新训练(红条)的动态。 正如所见,该解决方案显示出有效且自主的自我训练,同时继续以所需的质量水平运行(质量指标值保持在 80% 以上)。
    图 19:基于 InterSystems IRIS 平台的持续(自)训练 (CT)

    我们之前已经提到过“自动机器学习”,在下图中,我们将以另一个原型为例提供有关此功能的更多详细信息。 在业务流程片段图中,我们看到了在 H2O 框架中启动建模的活动,以及该建模的结果(与其他“手工”模型相比,获得的模型在 ROC 曲线方面具有明显优势,以及自动检测原始数据集中可用变量中“最具影响力的变量”)。 这里的一个重要优势是“自动机器学习”可节省时间并提供专家资源:我们的平台内流程可以在半分钟内交付专家可能需要一周到一个月时间才能完成的工作(确定和证明最佳模型)。
    图 20:在基于 InterSystems IRIS 平台的人工智能/机器学习解决方案中嵌入的“自动机器学习”

    下图“直击高潮”,同时也很好地将有关各类实时场景的故事推向尾声:在此提醒您,尽管 InterSystems IRIS 可提供所有平台内功能,但在其编排下训练模型并非强制要求。 该平台可以接收来自在非平台编排工具中训练的模型的外部来源的所谓 PMML 规范,然后自其导入 PMML 规范之时起继续实时应用该模型。 请务必记住,尽管大多数最广泛使用的人工智能/机器学习工件都支持,但并非每个给定的人工智能/机器学习工件都可以解析为 PMML 规范。 因此,InterSystems IRIS 是一种开放的平台,对其用户而言完全不存在“平台奴役”情况。
    图 21:InterSystems IRIS 平台中基于 PMML 规范的模型应用

    让我们聊聊 InterSystems IRIS 平台的其他优势(为了更好地说明,请参考制造过程管理),这些优势对于人工智能和机器学习的实时自动化非常重要:

    • 强大的集成框架,可与任何数据源和数据使用者(SCADA、设备、MRO、ERP 等)互操作
    • 内置多模型数据库管理系统,用于无限量制造过程数据的高性能混合事务和分析处理 (HTAP)
    • 用于将人工智能/机器学习机制持续部署到基于 Python、R、Julia 的实时解决方案的开发环境
    • 用于持续集成到人工智能/机器学习机制的实时解决方案和(自)训练的自适应业务流程
    • 用于制造过程数据和人工智能/机器学习解决方案输出可视化的内置商业智能功能
    • API 管理,可将人工智能/机器学习输出提供给 SCADA、数据集市/仓库、通知引擎等。

    在 InterSystems IRIS 平台中实现的人工智能/机器学习解决方案可轻松适应现有的 IT 基础架构。 得益于高可用性和灾难恢复配置支持,以及在虚拟环境、物理服务器、私有云和公共云、Docker 容器中的灵活部署能力,InterSystems IRIS 能够有效保障人工智能/机器学习解决方案的可靠性。 也就是说,InterSystems IRIS 确实是实时人工智能/机器学习计算的多功能通用平台。 我们平台的多功能特质在实际应用中得到了证明:对实现计算的复杂性实际上毫无限制;InterSystems IRIS 能够结合(实时)执行不同行业的场景;具有出色的适应性,能够提供满足用户具体需求的任何平台内功能和机制。
    图 22:InterSystems IRIS — 适用于实时人工智能/机器学习计算的多功能通用平台

    为了与对本文感兴趣的读者进行更加具体的对话,我们建议您继续与我们进行“实时”交流。 我们将随时提供支持,制定与贵公司具体情况相吻合的实时人工智能/机器学习场景,运行基于 InterSystems IRIS 平台的协作原型设计,设计和执行路线图以在您的制造及管理过程中实现人工智能和机器学习。 我们人工智能/机器学习专家团队的联系电子邮件:MLToolkit@intersystems.com

    0
    0 276
    文章 Michael Lei · 二月 14, 2022 5m read

    痴呆症是一个重大的全球性问题,困扰着5400万人,到2050年这个数字将上升到1.3亿。由英国剑桥大学的学者创立的Cognetivity Neurosciences公司设计了一个尖端的解决方案,以帮助缓解全球痴呆症的流行。

    根植于先进神经科学的简单解决方案

    在出现临床症状之前的早期检测,为专家干预和改变生活方式打开了大门,可以减缓痴呆症的发展,提高生活质量。生活方式的改变有可能将症状的出现推迟五年,进而将普通人群中的痴呆症发病率降低50%。

    Cognetivity Neurosciences的综合认知评估测试(ICA)是基于人类对动物刺激的强烈反应,以及健康的大脑在不到200毫秒内处理动物图像的能力。

    ICA将基于云的人工智能和神经科学的进展结合起来,进行快速的动物/非动物视觉分类测试,目的是在记忆症状出现之前发现疾病的迹象。它涉及在阿尔茨海默症的前症状阶段受到影响的大脑区域,并检测出信息处理速度的细微损伤。

    ICA基于云的敏捷性使临床医生和用户能够在熟悉的硬件上进行ICA测试,如iPad和智能手机,并在任何有互联网连接的地方进行。

    Cognetivity Neurosciences正在通过一个先进的、可扩展的解决方案,利用神经科学的进步、人工智能和InterSystems IRIS for Health云数据管理平台的力量,重新发明痴呆症检测。

    核心需求是数据的互操作性

    0
    0 313
    文章 Michael Lei · 一月 24, 2022 5m read

    现代医疗有无数来自数字技术的机会,包括优化流程的指挥中心、支持洞察力和决策的人工智能和机器学习、提供实时数据的物联网和连接设备,以及管理和保护大型数据流的强大数字基础设施。创建数字孪生和使用虚拟技术来推动医疗行业的真实世界价值将这一切结合起来。

    数字孪生在医疗领域的真实世界价值

    数字孪生是一个物理对象或过程的虚拟副本,通过模拟和反馈物理对应物来学习和发展。它在动态系统建模的同时部署了人工智能和机器学习,并适用于医疗保健和生命科学环境。数字孪生创造了一个机会,在实施干预措施、路径变化和操作改进之前,对系统的影响进行建模和预测,以实现效益最大化和风险最小化。

    这种模拟创造了以下机会:测试情景以预测影响和帮助决策(例如,在系统设计和病人治疗中);识别低效、瓶颈和机会,并模拟效益/副作用(例如,在流程优化中);自动化反应和决策(例如,在环境控制中);以及越来越多地在虚拟环境中进行测试(例如,硅研究 - 美国和欧洲监管机构都在探索在新医疗药物和技术的审批中使用此类 "数字证据")。

    0
    0 200