À propos du projet
Dernières mises à jour sur notre blog
Exemple
Vision
Caractéristiques
Commencer
Utilisation et concepts
Feuille de route
Contribuer
Licence
En travaillant avec d'autres outils basés sur Python, des frustrations sont apparues concernant les performances, la stabilité et la facilité d'utilisation. Ainsi, Swiftide est né. L'objectif de Swiftide est d'offrir une bibliothèque de génération augmentée de récupération à part entière, rapide, facile à utiliser, fiable et facile à étendre.
Une partie du projet bosun.ai. Une plateforme à venir pour l’amélioration autonome du code.
Nous <3 commentaires : les idées de projets, les suggestions et les plaintes sont les bienvenues. N'hésitez pas à ouvrir un ticket ou à nous contacter sur Discord.
D'excellents points de départ sont ce fichier Lisez-moi, Swiftide.rs, le dossier d'exemples, notre blog sur bosun.ai et des didacticiels approfondis sur Swiftide-tutorial.
Prudence
Swiftide est en cours de développement intensif et peut subir des modifications importantes pendant que nous travaillons vers la version 1.0. La documentation ici peut ne pas offrir toutes les fonctionnalités et, malgré nos efforts, être légèrement obsolète. Attendez-vous à des bugs. Nous vous recommandons de toujours garder un œil sur notre documentation github et api. Si vous avez trouvé un problème ou si vous avez des commentaires, nous serions ravis de vous entendre sur un problème.
(retour en haut)
Évaluer les pipelines Swiftide avec Ragas (2024-09-15)
Sortie - Swiftide 0.12 (2024-09-13)
Informations sur le code local avec Ollama, FastEmbed et OpenTelemetry (04/09/2024)
Sortie - Swiftide 0.9 (2024-09-02)
Apportez vos propres transformateurs (2024-08-13)
Sortie - Swiftide 0.8 (2024-08-12)
Sortie - Swiftide 0.7 (2024-07-28)
Création d'un pipeline de réponses aux questions de code (2024-07-13)
Sortie - Swiftide 0.6 (2024-07-12)
Sortie - Swiftide 0.5 (2024-07-1)
(retour en haut)
Indexer un projet de code local, le diviser en morceaux plus petits, enrichir les nœuds avec des métadonnées et le conserver dans Qdrant :
indexing :: Pipeline :: from_loader ( FileLoader :: new ( "." ) . with_extensions ( & [ "rs" ] ) )
. with_default_llm_client ( openai_client . clone ( ) )
. filter_cached ( Redis :: try_from_url (
redis_url ,
"swiftide-examples" ,
) ? )
. then_chunk ( ChunkCode :: try_for_language_and_chunk_size (
"rust" ,
10 .. 2048 ,
) ? )
. then ( MetadataQACode :: default ( ) )
. then ( move |node| my_own_thing ( node ) )
. then_in_batch ( Embed :: new ( openai_client . clone ( ) ) )
. then_store_with (
Qdrant :: builder ( )
. batch_size ( 50 )
. vector_size ( 1536 )
. build ( ) ? ,
)
. run ( )
. await ? ;
Recherche d'un exemple d'utilisation du pipeline de requête :
query :: Pipeline :: default ( )
. then_transform_query ( GenerateSubquestions :: from_client (
openai_client . clone ( ) ,
) )
. then_transform_query ( Embed :: from_client (
openai_client . clone ( ) ,
) )
. then_retrieve ( qdrant . clone ( ) )
. then_answer ( Simple :: from_client ( openai_client . clone ( ) ) )
. query ( "How can I use the query pipeline in Swiftide?" )
. await ? ;
Vous pouvez trouver plus d'exemples dans /examples
(retour en haut)
Notre objectif est de créer une plate-forme rapide et extensible pour la génération augmentée de récupération afin de poursuivre le développement d'applications d'IA automatisées, avec une API facile à utiliser et à étendre.
(retour en haut)
tracing
pris en charge pour la journalisation et le traçage, voir /examples et la caisse tracing
pour plus d'informations.Fonctionnalité | Détails |
---|---|
Fournisseurs de modèles linguistiques étendus pris en charge | OpenAI (et Azure) – Tous les modèles et intégrations AWS Bedrock - Anthropique et Titan Groq - Tous les modèles Ollama - Tous les modèles |
Chargement des données | Fichiers Grattage Fluvio Parquet Autres pipelines et flux |
Transformateurs et génération de métadonnées | Générer des questions et des répondeurs pour le texte et le code (Hyde) Résumés, titres et requêtes via un LLM Extraire des définitions et des références avec tree-sitter |
Fractionnement et découpage | Réduction Texte (text_splitter) Code (avec arboriculteur) |
Stockage | Qdrant Rédis LanceDB |
Pipeline de requêtes | Recherche de similarité et hybride, transformations de requêtes et de réponses, et évaluation |
(retour en haut)
Assurez-vous que la chaîne d'outils antirouille est installée. rustup Est l’approche recommandée.
Pour utiliser OpenAI, une clé API est requise. Notez que par défaut, async_openai
utilise les variables d'environnement OPENAI_API_KEY
.
D'autres intégrations peuvent avoir leurs propres exigences.
Mettre en place un nouveau projet Rust
Ajouter un Swiftide
cargo add swiftide
Activez les fonctionnalités des intégrations que vous souhaitez utiliser dans votre Cargo.toml
Ecrire un pipeline (voir nos exemples et documentation)
(retour en haut)
Avant de créer vos flux, vous devez activer et configurer toutes les intégrations requises. Voir /exemples.
Nous avons beaucoup d'exemples, veuillez vous référer à /examples et à la documentation
Note
Aucune intégration n'est activée par défaut car certaines sont lourdes en code. Nous vous recommandons de sélectionner les intégrations dont vous avez besoin. Par convention, les drapeaux portent le même nom que l'intégration qu'ils représentent.
Un flux d'indexation commence par un Loader qui émet des Nodes. Par exemple, avec Fileloader, chaque fichier est un nœud.
Vous pouvez ensuite découper, augmenter et filtrer les nœuds. Chaque type d’étape du pipeline nécessite des caractéristiques différentes. Cela permet l’extension.
Les nœuds ont un chemin, un morceau et des métadonnées. Actuellement, les métadonnées sont copiées lors du regroupement et toujours intégrées lors de l'utilisation du transformateur OpenAIEmbed.
(impl Loader)
point de départ du flux, crée et émet des nœuds(impl NodeCache)
filtre les nœuds mis en cache(impl Transformer)
transforme le nœud et le met sur le flux(impl BatchTransformer)
transforme plusieurs nœuds et les met sur le flux(impl ChunkerTransformer)
transforme un seul nœud et émet plusieurs nœuds(impl Storage)
stocke les nœuds dans un backend de stockage, cela peut être chaîné De plus, plusieurs transformateurs génériques sont implémentés. Ils demandent aux implémenteurs de SimplePrompt
et EmbedModel
de faire leur travail.
Avertissement
En raison des performances, le regroupement avant l'ajout de métadonnées donne lieu à des erreurs de limite de débit très rapides sur OpenAI, en particulier avec des modèles plus rapides comme 3,5-turbo. Savoir.
Un flux de requête commence par une stratégie de recherche. Dans le pipeline de requêtes, une Query
passe par plusieurs étapes. Les transformateurs et les récupérateurs travaillent ensemble pour obtenir le bon contexte dans une invite, avant de générer une réponse. Les transformateurs et les récupérateurs fonctionnent sur différentes étapes de la requête via une machine à états générique. De plus, la stratégie de recherche est générique sur tout le pipeline et les Retrievers doivent la mettre en œuvre spécifiquement pour chaque stratégie.
Cela semble beaucoup mais, à tl&dr; le pipeline de requêtes est entièrement et fortement typé .
De plus, les pipelines de requêtes peuvent également être évalués. C'est à dire par Ragas.
Semblable au pipeline d'indexation, chaque étape est régie par des traits simples et les fermetures implémentent également ces traits.
(retour en haut)
Consultez les problèmes ouverts pour une liste complète des fonctionnalités proposées (et des problèmes connus).
(retour en haut)
Si vous souhaitez vous impliquer davantage dans Swiftide, si vous avez des questions ou si vous souhaitez discuter, vous pouvez nous trouver sur Discord.
(retour en haut)
Swiftide en est à ses débuts et nous sommes conscients qu'il nous manque des fonctionnalités pour la communauté au sens large. Les contributions sont les bienvenues. ?
Si vous avez une bonne idée, veuillez créer le dépôt et créer une pull request. Vous pouvez aussi simplement ouvrir un ticket avec la balise « amélioration ». N'oubliez pas de donner une étoile au projet ! Merci encore!
Si vous souhaitez simplement contribuer (à Dieu !), consultez nos numéros ou rejoignez-nous sur Discord.
git checkout -b feature/AmazingFeature
)git commit -m 'feat: Add some AmazingFeature'
)git push origin feature/AmazingFeature
)Voir CONTRIBUER pour en savoir plus
(retour en haut)
Distribué sous licence MIT. Voir LICENSE
pour plus d’informations.
(retour en haut)