LlamaIndex and Zilliz Cloud Integration

LlamaIndex and Zilliz Cloud integrate to build powerful Retrieval-Augmented Generation applications, combining LlamaIndex's flexible data framework for LLM applications with Zilliz Cloud's high-performance vector database for efficient document storage, retrieval, and context-aware AI responses.

Utilisez cette intégration gratuitement
  • Qu’est-ce que LlamaIndex

    LlamaIndex (anciennement GPT Index) est un framework de données simple et flexible permettant de connecter des sources de données personnalisées à de grands modèles de langage (LLM). Il facilite l’ingestion, la structuration et l’accès à des données privées ou propres à un domaine, en répondant au défi critique selon lequel, bien que les LLM soient pré-entraînés sur de vastes ensembles de données accessibles au public, ils manquent souvent de connaissances propres à un domaine, ce qui peut entraîner des hallucinations ou des réponses incorrectes.

    En s’intégrant à Zilliz Cloud (Milvus entièrement géré), LlamaIndex accède à une base de données vectorielle entièrement gérée et haute performance, qui stocke et récupère efficacement les embeddings de documents à grande échelle, permettant aux développeurs de créer des applications RAG prêtes pour la production, des systèmes de questions-réponses documentaires et des chatbots basés sur les connaissances avec une gestion minimale de l’infrastructure.

  • Avantages de l’intégration LlamaIndex + Zilliz Cloud

    • Ingestion de données flexible avec stockage évolutif : LlamaIndex gère l’ingestion et la structuration de sources de données diverses, tandis que Zilliz Cloud fournit un stockage vectoriel évolutif et une recherche rapide par similarité pour alimenter la récupération à n’importe quelle échelle.
    • Création d’index et interrogation simples : Avec seulement quelques lignes de code, les développeurs peuvent créer un index de magasin vectoriel adossé à Zilliz Cloud, insérer des documents et les interroger en langage naturel.
    • Filtrage par métadonnées pour une récupération précise : L’intégration prend en charge le filtrage par métadonnées, permettant aux applications de restreindre les résultats de recherche selon des attributs spécifiques tels que le nom de fichier, la source ou des balises personnalisées pour une récupération plus ciblée.
    • Double utilisation comme index ou connecteur de données : LlamaIndex peut utiliser Zilliz Cloud comme index de magasin vectoriel interne pour le stockage et l’interrogation directs de documents, ou comme connecteur de données externe qui récupère des données et les intègre dans les structures de LlamaIndex pour un traitement ultérieur.
    • Pipelines RAG prêts pour la production : Cette combinaison offre des performances et une fiabilité de niveau production, facilitant le passage du prototype au déploiement en production.
  • Fonctionnement de l’intégration

    LlamaIndex sert de couche de framework de données, gérant le chargement des documents, le découpage, la génération d’embeddings et l’orchestration des requêtes. Il fournit une API simple pour ingérer des données provenant de diverses sources (fichiers, PDF, API) et les convertir en représentations vectorielles pouvant être stockées et récupérées efficacement.

    Zilliz Cloud sert de couche de base de données vectorielle via le MilvusVectorStore, stockant et indexant les embeddings de documents générés par LlamaIndex. Il fournit une recherche de similarité haute performance avec une faible latence, permettant aux applications de récupérer efficacement le contexte le plus pertinent à partir de grandes bases de connaissances.

    Ensemble, LlamaIndex et Zilliz Cloud créent une solution RAG complète : LlamaIndex ingère et traite les documents, stocke leurs embeddings dans Zilliz Cloud via MilvusVectorStore, et lorsqu’une requête arrive, récupère les documents les plus pertinents grâce à la recherche de similarité vectorielle afin de générer des réponses contextuellement informées à l’aide du LLM.

  • Guide étape par étape

    1. Installer les dépendances

    Installez les packages requis :

    $ pip install pymilvus>=2.4.2
    $ pip install llama-index-vector-stores-milvus
    $ pip install llama-index
    

    2. Configurer OpenAI

    Ajoutez la clé API OpenAI pour accéder à ChatGPT :

    import openai
    
    openai.api_key = "sk-***********"
    

    3. Préparer les données

    Téléchargez les données d’exemple pour la démo :

    ! mkdir -p 'data/'
    ! wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham_essay.txt'
    ! wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/uber_2021.pdf' -O 'data/uber_2021.pdf'
    

    4. Générer des documents et créer un index

    Chargez le document à l’aide de SimpleDirectoryReader et créez un index de magasin de vecteurs avec MilvusVectorStore :

    from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, StorageContext
    from llama_index.vector_stores.milvus import MilvusVectorStore
    
    # load documents
    documents = SimpleDirectoryReader(
        input_files=["./data/paul_graham_essay.txt"]
    ).load_data()
    
    print("Document ID:", documents[0].doc_id)
    
    # create index with MilvusVectorStore
    vector_store = MilvusVectorStore(uri="./milvus_demo.db", dim=1536, overwrite=True)
    storage_context = StorageContext.from_defaults(vector_store=vector_store)
    index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)
    

    Pour les paramètres de MilvusVectorStore : définir le uri comme un fichier local, par ex. ./milvus.db, est la méthode la plus pratique, car cela utilise automatiquement Milvus Lite pour stocker toutes les données dans ce fichier. Si vous disposez d’un grand volume de données, vous pouvez configurer un serveur Milvus plus performant sur Docker ou Kubernetes. Si vous souhaitez utiliser Zilliz Cloud, le service cloud entièrement géré pour Milvus, ajustez le uri et le token, qui correspondent au Public Endpoint et à l’API Key dans Zilliz Cloud.

    5. Interroger les données

    Posez des questions à l’index, qui utilise les données stockées comme base de connaissances :

    query_engine = index.as_query_engine()
    res = query_engine.query("What did the author learn?")
    print(res)
    

    6. Écraser et ajouter des données

    Testez l’écrasement des données existantes en créant un nouvel index avec overwrite=True :

    from llama_index.core import Document
    
    vector_store = MilvusVectorStore(uri="./milvus_demo.db", dim=1536, overwrite=True)
    storage_context = StorageContext.from_defaults(vector_store=vector_store)
    index = VectorStoreIndex.from_documents(
        [Document(text="The number that is being searched for is ten.")],
        storage_context,
    )
    query_engine = index.as_query_engine()
    res = query_engine.query("Who is the author?")
    print(res)
    

    Ajoutez des données à un index existant en définissant overwrite=False :

    del index, vector_store, storage_context, query_engine
    
    vector_store = MilvusVectorStore(uri="./milvus_demo.db", overwrite=False)
    storage_context = StorageContext.from_defaults(vector_store=vector_store)
    index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)
    query_engine = index.as_query_engine()
    res = query_engine.query("What is the number?")
    print(res)
    

    7. Filtrage des métadonnées

    Chargez plusieurs documents et filtrez les résultats de requête par attributs de métadonnées :

    from llama_index.core.vector_stores import ExactMatchFilter, MetadataFilters
    
    # Load all documents
    documents_all = SimpleDirectoryReader("./data/").load_data()
    
    vector_store = MilvusVectorStore(uri="./milvus_demo.db", dim=1536, overwrite=True)
    storage_context = StorageContext.from_defaults(vector_store=vector_store)
    index = VectorStoreIndex.from_documents(documents_all, storage_context)
    
    # Filter to only retrieve from a specific file
    filters = MetadataFilters(
        filters=[ExactMatchFilter(key="file_name", value="uber_2021.pdf")]
    )
    query_engine = index.as_query_engine(filters=filters)
    res = query_engine.query("What challenges did the disease pose for the author?")
    print(res)
    
  • En savoir plus