Voyage AI and Zilliz Cloud Integration

Voyage AI and Zilliz Cloud integrate to power semantic search and multimodal retrieval, combining Voyage AI's cutting-edge embedding models built on contrastive learning research with Zilliz Cloud's high-performance vector database for efficient similarity search across text and images.

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

    Voyage AI est une équipe de chercheurs de premier plan en IA axée sur l’avancement de la technologie RAG, avec une expertise issue de plus de cinq ans de recherche de pointe au Stanford AI Lab et au groupe MIT NLP. Ils fournissent des modèles d’embedding qui exploitent des approches d’apprentissage contrastif pour créer des représentations vectorielles de haute qualité de textes et d’images. Leur modèle phare voyage-2 surpasse les benchmarks concurrents avec une précision de récupération plus élevée, des fenêtres de contexte étendues et une inférence efficace, avec des modèles spécifiques à certains domaines disponibles pour le code, le droit, la finance et les cas d’usage multilingues.

    En s’intégrant à Zilliz Cloud (Milvus entièrement géré), les modèles d’embedding de Voyage AI peuvent être utilisés directement dans Zilliz Cloud Pipelines pour convertir des données non structurées en embeddings vectoriels interrogeables, permettant une recherche sémantique évolutive, une récupération multimodale et des applications RAG — le tout fonctionnant dans un environnement clé en main entièrement géré.

  • Avantages de l’intégration Voyage AI + Zilliz Cloud

    • Précision de récupération à la pointe de la technologie : Les modèles d’embeddings de Voyage AI surpassent les benchmarks concurrents, y compris les modèles d’embeddings textuels d’OpenAI, offrant une précision de récupération supérieure lorsqu’ils sont associés à la recherche de similarité efficace de Zilliz Cloud.
    • Prise en charge de la recherche multimodale : Le modèle voyage-multimodal-3 prend en charge les embeddings de texte et d’image, permettant des applications de recherche intermodale où les utilisateurs peuvent effectuer une requête avec du texte pour trouver des images, ou inversement, le tout stocké et récupéré via Zilliz Cloud.
    • Modèles spécifiques à un domaine : Voyage AI propose des modèles spécialisés comme voyage-code-2 et voyage-law-2 pour les domaines du code et du juridique, Zilliz Cloud fournissant la couche de stockage et de récupération évolutive pour ces embeddings optimisés par domaine.
    • Intégration de pipeline clé en main : Les modèles Voyage AI sont disponibles directement dans Zilliz Cloud Pipelines, sans nécessiter d’authentification séparée ni de configuration de compte externe, pour une expérience fluide d’embedding et de récupération.
  • Fonctionnement de l’intégration

    Voyage AI sert de couche d’embedding, convertissant le texte et les images en représentations vectorielles de haute dimension à l’aide de modèles comme voyage-law-2 pour le texte et voyage-multimodal-3 pour le contenu multimodal. Il fournit des types d’entrée distincts pour les documents et les requêtes afin d’optimiser la précision de la récupération grâce à son approche basée sur l’apprentissage contrastif.

    Zilliz Cloud sert de couche de base de données vectorielle, stockant et indexant les embeddings générés par Voyage AI pour une recherche de similarité rapide. Il prend en charge à la fois les déploiements locaux Milvus Lite et le service cloud entièrement géré, permettant une récupération efficace dans de grandes collections d’embeddings de texte et d’image.

    Ensemble, Voyage AI et Zilliz Cloud créent une solution de recherche sémantique de bout en bout : les documents et les images sont intégrés à l’aide des modèles de Voyage AI et stockés dans Zilliz Cloud. Lorsqu’un utilisateur soumet une requête — qu’il s’agisse de texte ou d’image — Voyage AI l’intègre et Zilliz Cloud effectue une recherche de similarité pour trouver les résultats les plus pertinents, permettant des applications telles que la récupération de documents, la recherche multimodale et les réponses aux questions propulsées par RAG.

  • Guide étape par étape

    1. Installer les packages requis

    $ pip install --upgrade voyageai pymilvus
    

    2. Recherche textuelle — Générer des embeddings et les stocker dans Milvus

    Utilisez le modèle d’embedding de Voyage AI pour générer des représentations vectorielles et les stocker dans Milvus :

    import voyageai
    from pymilvus import MilvusClient
    
    MODEL_NAME = "voyage-law-2"
    DIMENSION = 1024
    
    voyage_client = voyageai.Client(api_key="<YOUR_VOYAGEAI_API_KEY>")
    
    docs = [
        "Artificial intelligence was founded as an academic discipline in 1956.",
        "Alan Turing was the first person to conduct substantial research in AI.",
        "Born in Maida Vale, London, Turing was raised in southern England.",
    ]
    
    vectors = voyage_client.embed(texts=docs, model=MODEL_NAME, truncation=False).embeddings
    
    data = [
        {"id": i, "vector": vectors[i], "text": docs[i], "subject": "history"}
        for i in range(len(docs))
    ]
    
    milvus_client = MilvusClient(uri="milvus_voyage_demo.db")
    COLLECTION_NAME = "demo_collection"
    
    if milvus_client.has_collection(collection_name=COLLECTION_NAME):
        milvus_client.drop_collection(collection_name=COLLECTION_NAME)
    milvus_client.create_collection(collection_name=COLLECTION_NAME, dimension=DIMENSION)
    
    res = milvus_client.insert(collection_name="demo_collection", data=data)
    print(res["insert_count"])
    

    Concernant l’argument de MilvusClient : définir l’uri comme un fichier local, par exemple ./milvus.db, est la méthode la plus pratique, car elle utilise automatiquement Milvus Lite pour stocker toutes les données dans ce fichier. Si vous avez 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 l’uri et le token, qui correspondent au Public Endpoint et à l’API Key dans Zilliz Cloud.

    3. Recherche textuelle — Effectuer une recherche sémantique

    Générez l’embedding vectoriel de la requête et effectuez une recherche vectorielle :

    queries = ["When was artificial intelligence founded?"]
    
    query_vectors = voyage_client.embed(
        texts=queries, model=MODEL_NAME, truncation=False
    ).embeddings
    
    res = milvus_client.search(
        collection_name=COLLECTION_NAME,
        data=query_vectors,
        limit=2,
        output_fields=["text", "subject"],
    )
    
    for q in queries:
        print("Query:", q)
        for result in res:
            print(result)
        print("\n")
    

    4. Recherche d’images — Préparer des données multimodales

    Convertissez les pages PDF en images et générez des embeddings multimodaux avec voyage-multimodal-3 :

    import base64
    from io import BytesIO
    import urllib.request
    import fitz  # PyMuPDF
    from PIL import Image
    
    def pdf_url_to_screenshots(url: str, zoom: float = 1.0) -> list[Image]:
        if not url.startswith("http") and url.endswith(".pdf"):
            raise ValueError("Invalid URL")
        with urllib.request.urlopen(url) as response:
            pdf_data = response.read()
        pdf_stream = BytesIO(pdf_data)
        pdf = fitz.open(stream=pdf_stream, filetype="pdf")
        images = []
        mat = fitz.Matrix(zoom, zoom)
        for n in range(pdf.page_count):
            pix = pdf[n].get_pixmap(matrix=mat)
            img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
            images.append(img)
        pdf.close()
        return images
    
    def image_to_base64(image):
        buffered = BytesIO()
        image.save(buffered, format="JPEG")
        img_str = base64.b64encode(buffered.getvalue())
        return img_str.decode("utf-8")
    
    DIMENSION = 1024
    
    pages = pdf_url_to_screenshots("https://www.fdrlibrary.org/documents/356632/390886/readingcopy.pdf", zoom=3.0)
    inputs = [[img] for img in pages]
    
    vectors = voyage_client.multimodal_embed(inputs, model="voyage-multimodal-3")
    
    inputs = [i[0] if isinstance(i[0], str) else image_to_base64(i[0]) for i in inputs]
    data = [
        {"id": i, "vector": vectors.embeddings[i], "data": inputs[i], "subject": "fruits"}
        for i in range(len(inputs))
    ]
    

    5. Recherche d’images — Stocker et interroger

    Stockez les embeddings multimodaux dans Milvus et effectuez une recherche avec des requêtes textuelles ou image :

    milvus_client = MilvusClient(uri="milvus_voyage_multi_demo.db")
    COLLECTION_NAME = "demo_collection"
    
    if milvus_client.has_collection(collection_name=COLLECTION_NAME):
        milvus_client.drop_collection(collection_name=COLLECTION_NAME)
    milvus_client.create_collection(collection_name=COLLECTION_NAME, dimension=DIMENSION)
    
    res = milvus_client.insert(collection_name="demo_collection", data=data)
    print(res["insert_count"])
    
    queries = [["Les conséquences de la paix d’un dictateur"]]
    
    query_vectors = voyage_client.multimodal_embed(
        inputs=queries, model="voyage-multimodal-3", truncation=False
    ).embeddings
    
    res = milvus_client.search(
        collection_name=COLLECTION_NAME,
        data=query_vectors,
        limit=4,
        output_fields=["data", "subject"],
    )
    
  • En savoir plus