ChatGPT+ Base de données vectorielle + prompt-as-code - La stack CVP
Je suis ravi de partager une application de démonstration sur laquelle nous travaillons ici chez Zilliz. Nous l’appelons OSS Chat, un chatbot que vous pouvez utiliser pour obtenir des connaissances techniques sur vos projets open source préférés. Cette première version ne prend en charge que Hugging Face, Pytorch et Milvus, mais nous prévoyons de l’étendre à plusieurs de vos projets open source préférés. Nous avons construit OSS Chat en utilisant ChatGPT d’OpenAI et une base de données vectorielle, Zilliz ! Nous l’offrons comme service gratuit à tous ceux qui l’utilisent. Si vous souhaitez que votre projet open source soit répertorié, faites-le-nous savoir.
Contexte expliquant pourquoi nous avons construit OSS Chat
ChatGPT présente des contraintes en raison de sa base de connaissances limitée, ce qui entraîne parfois des réponses hallucinées lorsqu’on lui pose des questions sur des sujets inconnus. Nous introduisons la nouvelle pile d’IA, ChatGPT+base de données vectorielle+prompt-as-code, ou la pile CVP, afin de surmonter cette contrainte.
ChatGPT est exceptionnellement doué pour répondre aux requêtes en langage naturel. Lorsqu’il est combiné à un prompt qui relie la requête de l’utilisateur et le texte récupéré, ChatGPT génère une réponse pertinente et précise. Cette approche peut éviter à ChatGPT de fournir des « réponses hallucinées ».
Nous avons construit OSS Chat comme démonstration fonctionnelle de la pile CVP. OSS Chat exploite divers dépôts GitHub de projets open source et leurs pages de documentation associées comme source de vérité. Nous convertissons ces données en embeddings et stockons les embeddings dans Zilliz et le contenu associé dans un magasin de données séparé. Lorsque l’utilisateur interagit avec OSS Chat en posant des questions sur n’importe quel projet open source, nous déclenchons une recherche par similarité dans Zilliz pour trouver une correspondance pertinente. Les données récupérées sont transmises à ChatGPT pour générer une réponse précise et exacte.
Architecture OSS Chat
Halluciner la réponse
Je veux vous montrer quelques exemples de questions-réponses utilisant ChatGPT et OSS Chat afin de démontrer comment vous pouvez supprimer certaines réponses incorrectes.
Q1 Hugging Face prend-il en charge OpenAI Whisper
Lorsque nous avons posé cette question à ChatGPT, il a admis sa limite et nous a donné une réponse exacte (il n’avait pas les données), ce qui n’était pas utile.
À la date limite de mes connaissances en septembre 2021, Hugging Face n’a pas annoncé de prise en charge d’OpenAI Whisper. Cependant, il est toujours possible qu’ils ajoutent une prise en charge à l’avenir. OpenAI Whisper est un nouveau modèle de langage d’OpenAI, et il faudra peut-être un certain temps pour que d’autres entreprises et développeurs l’intègrent dans leurs plateformes et produits.
Avec OSS Chat, comme nous extrayons les informations du site de documentation de Huggingface, nous sommes en mesure d’obtenir une réponse exacte. Oui, Hugging Face prend en charge OpenAI Whisper. La classe FlaxWhisperModel est disponible dans la bibliothèque transformers, qui est un wrapper autour du modèle OpenAI Whisper. Vous pouvez utiliser cette classe pour charger le modèle OpenAI Whisper pré-entraîné et l’utiliser pour diverses tâches de traitement du langage naturel telles que la classification de texte, la réponse aux questions et la génération de texte.
Q2 Que fait l’API torch.compile ?
Nous avons posé à ChatGPT une question sur une API PyTorch et avons obtenu une longue réponse sur ce que c’est (ce que nous n’avions pas demandé) et une réponse indiquant que PyTorch ne dispose pas d’une API torch.compile.
À la date limite de mes connaissances en septembre 2021, il n’existe pas d’API torch.compile dans PyTorch, qui est une bibliothèque d’apprentissage automatique open source populaire développée par Facebook AI Research.
Cependant, PyTorch fournit diverses API liées à la compilation et à l’optimisation des modèles de réseaux neuronaux, telles que torch.nn.Module, qui est une classe de base pour tous les modules de réseaux neuronaux dans PyTorch. torch.nn.Module fournit diverses méthodes et hooks pour définir et optimiser les modèles de réseaux neuronaux.
De plus, PyTorch fournit une interface pour s’intégrer aux compilateurs Just-In-Time (JIT), comme le compilateur JIT TorchScript, qui peut être utilisé pour optimiser et compiler des modèles PyTorch afin de les exécuter efficacement sur diverses plateformes matérielles. Le compilateur JIT peut être utilisé pour convertir des modèles PyTorch en une représentation autonome et sérialisée qui peut être chargée et exécutée dans d’autres environnements ou langages. En résumé, bien que PyTorch ne dispose pas d’une API torch.compile, il fournit diverses API et outils pour optimiser et compiler des modèles de réseaux neuronaux.
Voici ce que OSSChat nous a dit :
L’objectif de l’API torch.compile est d’accélérer le code PyTorch en le compilant à l’avance. Elle peut gérer du code Python arbitraire avec des modifications minimales du code existant et peut gérer le flux de contrôle dépendant des données. Elle est également capable de gérer les appels à des fonctions non-PyTorch, que le traçage TorchScript traite comme des constantes et qui peuvent entraîner des résultats incorrects.
Q3 Qu’est-ce que le TTL dans Milvus et comment le définir
Pour cette dernière question, nous avons interrogé ChatGPT, et il nous a fourni une réponse raisonnable (elle contenait même des extraits de code !), mais ce n’était pas une réponse à la question. Il s’agissait plutôt de l’une de ces « hallucinations » où il a dû compiler la réponse.
Dans Milvus, le TTL (Time To Live) est une fonctionnalité qui vous permet de définir un délai d’expiration pour vos données. Lorsque vous définissez un TTL pour une collection ou une partition dans Milvus, Milvus supprimera automatiquement toutes les données qui ont dépassé le TTL spécifié. Pour définir le TTL d’une collection ou d’une partition dans Milvus, vous pouvez utiliser respectivement l’API set_collection_ttl ou set_partition_ttl. Voici un exemple :
pythonCopy code
import datetime
from milvus import Milvus, DataType
milvus = Milvus()
# create a collection
collection_param = {
'collection_name': 'my_collection',
'dimension': 128,
'index_file_size': 1024,
'metric_type': DataType.FLOAT_VECTOR,
}
milvus.create_collection(collection_param)
# set TTL for the collection
now = datetime.datetime.now()
delta = datetime.timedelta(days=7) # TTL of 7 days
expiry_time = now + delta
milvus.set_collection_ttl('my_collection', expiry_time.timestamp())
# create a partition
partition_param = {
'collection_name': 'my_collection',
'partition_name': 'my_partition',
}
milvus.create_partition(partition_param)
# set TTL for the partition
milvus.set_partition_ttl('my_collection', 'my_partition', expiry_time.timestamp())
Dans cet exemple, nous créons une collection et une partition dans Milvus. Nous définissons ensuite un TTL de 7 jours pour la collection et la partition à l’aide des API set_collection_ttl et set_partition_ttl respectivement. Le TTL est spécifié sous forme d’horodatage Unix, qui correspond au nombre de secondes écoulées depuis le 1er janvier 1970. Nous calculons l’heure d’expiration en ajoutant le TTL à l’heure actuelle à l’aide du module datetime.
Notez que vous devez activer la fonctionnalité TTL lorsque vous démarrez Milvus. Cela peut être fait en définissant le paramètre TTL_CHECK_INTERVAL dans le fichier de configuration de Milvus. La valeur par défaut est de 60 secondes.
OSSchat, en revanche, nous a donné la bonne réponse : une seule ligne de code pour définir le nombre de secondes souhaité dans la propriété de définition de la collection.
TTL signifie « Time to Live » dans Milvus. Il s’agit d’une fonctionnalité qui vous permet de définir un délai d’expiration pour les données d’une collection. Lorsque les données d’une collection expirent, elles sont automatiquement nettoyées et ne seront pas impliquées dans les recherches ou les requêtes.
Pour définir la valeur TTL d’une collection dans Milvus, vous pouvez utiliser la méthode collection.set_properties() en Python. Par exemple, pour définir la valeur TTL à 1800 secondes (30 minutes), vous pouvez utiliser le code suivant :
collection.set_properties(properties={"collection.ttl.seconds": 1800})
Vous pouvez également définir la valeur TTL lors de la création d’une collection en spécifiant la propriété collection.ttl.seconds dans les propriétés de la collection. La valeur doit être spécifiée en secondes et doit être égale ou supérieure à 0. Une valeur de 0 signifie que le TTL est désactivé.
Commencez dès maintenant
Dans les prochains jours, nous ajouterons davantage de fonctionnalités à OSS Chat et rédigerons des articles de blog pour vous expliquer comment nous le construisons. En attendant, essayez OSS Chat et dites-nous quelles fonctionnalités vous aimeriez voir, ou si vous avez un projet open source à ajouter, faites-le-nous savoir également !
Continuer à lire

Vector Lakebase: End the AI Data Silo
Learn how Vector Lakebase unifies vector search, data lakes, and AI data operations so teams can serve RAG and agents without copy-and-sync pipelines.

Announcing VDBBench 1.0: Open-Source VectorDB Benchmarking with Your Real-World Production Workloads
Discover VDBBench 1.0, an open-source tool for benchmarking vector databases with real-world production data, streaming ingestion, and concurrent workloads.

Vector Databases vs. Time Series Databases
Use a vector database for similarity search and semantic relationships; use a time series database for tracking value changes over time.



