查找

文章
· 八月 16, 2024 阅读大约需 1 分钟

Première « recherche vectorielle » sur IRIS

Il existe de nombreux articles communautaires intéressants concernant la « recherche vectorielle sur IRIS » et des exemples dans OpenExchange. Chaque fois que je les vois, je suis ravi de savoir que tant de développeurs essaient déjà les vecteurs sur IRIS !

Mais si vous n'avez pas encore essayé la « recherche vectorielle sur IRIS », donnez-moi une minute 😄 Je crée une classe IRIS - et avec une seule classe IRIS, vous pouvez voir comment vous placez les données vectorielles dans votre base de données IRIS et comment vous les comparez dans votre application.

Vous pouvez voir le code source de OpenExchange « First-Vector-Search-on-IRIS ».

---

(1) Cette classe comprend deux propriétés

  • "feedback" as %String
  • "feedbackv" as %Vector (valeur vectorielle), générée à partir de "feedback".

      

(2) Cette classe possède la méthode « search », qui renvoie les lignes dans l'ordre de « meilleur retour » avec le vecteur de comparaison « feedbackv ».

 

---

Le guide étape par étape est décrit sur la page OpenExchange.

J'espère que mon exemple et d'autres excellents articles de la communauté vous encourageront à essayer la recherche vectorielle sur notre produit !

讨论 (0)1
登录或注册以继续
InterSystems 官方
· 八月 16, 2024

Alerta: Corrupción de Base de Datos en Bases de Datos de Múltiples Volúmenes después de Truncamiento.

Alerta: Corrupción de Base de Datos en Bases de Datos de Múltiples Volúmenes después de Truncamiento

InterSystems ha corregido un defecto que puede causar corrupción de base de datos o errores <DISKHARD> en bases de datos de múltiples volúmenes en circunstancias extremadamente raras. Solo las bases de datos que han sido truncated (truncadas) están en peligro.

El defecto existe en los siguientes productos y en cualquier producto de InterSystems basados en ellos:

 

Ningún producto de HealthShare Solutions se ve afectado por este defecto.

Aunque InterSystems no ha recibido informes de clientes debido a este defecto, recomendamos la siguiente mitigación temporal para evitar el problema:

  • No trunque bases de datos de múltiples volúmenes.
  • No cree un nuevo volumen para una base de datos de uno o múltiples volúmenes que haya truncado desde la última vez que se montó la base de datos. Para deshabilitar la creación automática, configure el parámetro de configuración New Volume Threshold = 0. Tenga en cuenta que configurar este parámetro no impide la creación manual de nuevos volúmenes.

La corrección para este defecto se identifica como DP-433375. Se incluirá en todas las versiones futuras y también está disponible a través de la distribución Ad hoc.

Si tiene alguna pregunta sobre esta alerta, por favor contacte a  Worldwide Response Center.

讨论 (0)1
登录或注册以继续
文章
· 八月 16, 2024 阅读大约需 1 分钟

First "vector search" on IRIS

There are a lot of great community articles regarding "vector search on IRIS", and samples in OpenExchange. Everytime I see these, I'm so excited to know that so many developers already try vectors on IRIS!

But if you've not tried "Vector Search on IRIS" yet, please give me one minute 😄 I create one IRIS class - and with only one IRIS class you can see how you put vector data in your IRIS database and how you compare these in your application. You can see the source code from OpenExchange "First-Vector-Search-on-IRIS".

---

(1) This class includes two properties

  • "feedback" as %String
  • "feedbackv" as %Vector (vector value), generated from "feedback".

      

(2) This class has the method "search", which returns the rows in order of "better feedback" with comparing vector "feedbackv".

 

---

The step-by-step guide is described in OpenExchange page.
I hope my sample and great other community articles will encourage you to try vector search on our product!

2 Comments
讨论 (2)2
登录或注册以继续
文章
· 八月 16, 2024 阅读大约需 5 分钟

IRIS-RAG-Gen: Personalización de la aplicación ChatGPT RAG mediante la búsqueda vectorial IRIS

image

Hola Comunidad,

En este artículo, voy a presentar mi aplicación iris-RAG-Gen .

Iris-RAG-Gen es una aplicación generativa AI Retrieval-Augmented Generation (RAG) que aprovecha la funcionalidad de IRIS Vector Search para personalizar ChatGPT con la ayuda del framework web Streamlit, LangChain, y OpenAI. La aplicación utiliza IRIS como almacén de vectores.

image

Características de la aplicación

  • Ingesta de documentos (PDF o TXT) en IRIS
  • Chatear con el documento ingerido seleccionado
  • Borrar Documentos ingerido
  • OpenAI ChatGPT

Ingesta de documentos (PDF o TXT) en IRI

Seguid los siguientes pasos para ingerir el documento:

  • Introducid a clave OpenAI
  • Seleccionad el documento (PDF o TXT)
  • Introducid la descripción del documento
  • Haced clic en el botón Ingerir documento

image
 

La funcionalidad Ingest Document inserta los detalles del documento en la tabla rag_documents y crea la tabla 'rag_document + id' (id del rag_documents) para guardar los datos vectoriales.

El siguiente código Python guardará el documento seleccionado en vectores:

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain_iris import IRISVector
from langchain_openai import OpenAIEmbeddings
from sqlalchemy import create_engine,text

class RagOpr:
    #Ingest document. Parametres contains file path, description and file type  
    def ingestDoc(self,filePath,fileDesc,fileType):
        embeddings = OpenAIEmbeddings()	
        #Load the document based on the file type
        if fileType == "text/plain":
            loader = TextLoader(filePath)       
        elif fileType == "application/pdf":
            loader = PyPDFLoader(filePath)       
        
        #load data into documents
        documents = loader.load()        
        
        text_splitter = RecursiveCharacterTextSplitter(chunk_size=400, chunk_overlap=0)
        #Split text into chunks
        texts = text_splitter.split_documents(documents)
        
        #Get collection Name from rag_doucments table. 
        COLLECTION_NAME = self.get_collection_name(fileDesc,fileType)
               
        # function to create collection_name table and store vector data in it.
        db = IRISVector.from_documents(
            embedding=embeddings,
            documents=texts,
            collection_name = COLLECTION_NAME,
            connection_string=self.CONNECTION_STRING,
        )

    #Get collection name
    def get_collection_name(self,fileDesc,fileType):
        # check if rag_documents table exists, if not then create it 
        with self.engine.connect() as conn:
            with conn.begin():     
                sql = text("""
                    SELECT *
                    FROM INFORMATION_SCHEMA.TABLES
                    WHERE TABLE_SCHEMA = 'SQLUser'
                    AND TABLE_NAME = 'rag_documents';
                    """)
                result = []
                try:
                    result = conn.execute(sql).fetchall()
                except Exception as err:
                    print("An exception occurred:", err)               
                    return ''
                #if table is not created, then create rag_documents table first
                if len(result) == 0:
                    sql = text("""
                        CREATE TABLE rag_documents (
                        description VARCHAR(255),
                        docType VARCHAR(50) )
                        """)
                    try:    
                        result = conn.execute(sql) 
                    except Exception as err:
                        print("An exception occurred:", err)                
                        return ''
        #Insert description value 
        with self.engine.connect() as conn:
            with conn.begin():     
                sql = text("""
                    INSERT INTO rag_documents 
                    (description,docType) 
                    VALUES (:desc,:ftype)
                    """)
                try:    
                    result = conn.execute(sql, {'desc':fileDesc,'ftype':fileType})
                except Exception as err:
                    print("An exception occurred:", err)                
                    return ''
                #select ID of last inserted record
                sql = text("""
                    SELECT LAST_IDENTITY()
                """)
                try:
                    result = conn.execute(sql).fetchall()
                except Exception as err:
                    print("An exception occurred:", err)
                    return ''
        return "rag_document"+str(result[0][0])

 

Escribid el siguiente comando SQL en el portal de gestión para recuperar los datos vectoriales

SELECT top 5
id, embedding, document, metadata
FROM SQLUser.rag_document2

image

 

Chatear con el documento ingerido seleccionado

Seleccionad el Documento en la sección de opciones de chat y escribid la pregunta. La aplicación leerá los datos del vector y devolverá la respuesta correspondiente.
image

El siguiente código Python guardará el documento seleccionado en vectores:

from langchain_iris import IRISVector
from langchain_openai import OpenAIEmbeddings,ChatOpenAI
from langchain.chains import ConversationChain
from langchain.chains.conversation.memory import ConversationSummaryMemory
from langchain.chat_models import ChatOpenAI


class RagOpr:
    def ragSearch(self,prompt,id):
        #Concat document id with rag_doucment to get the collection name
        COLLECTION_NAME = "rag_document"+str(id)
        embeddings = OpenAIEmbeddings()	
        #Get vector store reference
        db2 = IRISVector (
            embedding_function=embeddings,    
            collection_name=COLLECTION_NAME,
            connection_string=self.CONNECTION_STRING,
        )
        #Similarity search
        docs_with_score = db2.similarity_search_with_score(prompt)
        #Prepair the retrieved documents to pass to LLM
        relevant_docs = ["".join(str(doc.page_content)) + " " for doc, _ in docs_with_score]
        #init LLM
        llm = ChatOpenAI(
            temperature=0,    
            model_name="gpt-3.5-turbo"
        )
        #manage and handle LangChain multi-turn conversations
        conversation_sum = ConversationChain(
            llm=llm,
            memory= ConversationSummaryMemory(llm=llm),
            verbose=False
        )
        #Create prompt
        template = f"""
        Prompt: {prompt}
        Relevant Docuemnts: {relevant_docs}
        """
        #Return the answer
        resp = conversation_sum(template)
        return resp['response']

    

Para más detalles, visitad la página de solicitud de intercambio abierto iris-RAG-Gen.

Gracias

讨论 (0)1
登录或注册以继续
文章
· 八月 16, 2024 阅读大约需 12 分钟

VSCode を使った ObjectScript コードのデバッグ

Visual Studio Code(VSCode)は、市場で最も一般的なコードエディターです。 Microsoft によって制作され、無料 IDE として配布されています。 VSCode は ObjectScript などの多数のプログラミング言語をサポートしており、2018 年までは Atelier(Eclipse ベース)もサポートしていました。 InterSystems 製品開発の主なオプションの 1 つとして考えられていましたが、 2018 年、InterSystems 開発者コミュニティが VSCode のサポートを発表した際に、関連する InterSystems のプロユーザーらが実際にこのエディターを使用し始め、以来、特に新しいテクノロジー(Docker、Kubernetes、NodeJS、Angular、React、DevOps、GitLab など)を使用する開発者の間でその使用が続いています。 VSCode の一番の機能の中にはデバッグ機能が挙げられます。 そこで、この記事では、クラスコードや %CSP.REST コードなどの ObjectScript コードをデバッグする方法を詳しく紹介します。

讨论 (0)1
登录或注册以继续