Über das Projekt
Neueste Updates auf unserem Blog
Beispiel
Vision
Merkmale
Erste Schritte
Verwendung und Konzepte
Roadmap
Mitwirken
Lizenz
Bei der Arbeit mit anderen Python-basierten Tools kam es zu Frustrationen hinsichtlich Leistung, Stabilität und Benutzerfreundlichkeit. So wurde Swiftide geboren. Das Ziel von Swiftide ist es, eine vollwertige Retrieval-Augmented-Generation-Bibliothek anzubieten, die schnell, benutzerfreundlich, zuverlässig und leicht erweiterbar ist.
Teil des bosun.ai-Projekts. Eine kommende Plattform zur autonomen Codeverbesserung.
Wir <3 Feedback: Projektideen, Anregungen und Beschwerden sind herzlich willkommen. Fühlen Sie sich frei, ein Problem zu eröffnen oder uns über Discord zu kontaktieren.
Gute Ausgangspunkte sind diese Readme-Datei, Swiftide.rs, der Beispielordner, unser Blog unter bosun.ai und ausführliche Tutorials unter Swiftide-Tutorial.
Vorsicht
Swiftide befindet sich in der intensiven Entwicklung und kann wichtige Änderungen erfahren, während wir an 1.0 arbeiten. Die Dokumentation hier könnte nicht alle Funktionen erfüllen und trotz unserer Bemühungen etwas veraltet sein. Erwarten Sie Fehler. Wir empfehlen, immer ein Auge auf unsere Github- und API-Dokumentation zu haben. Wenn Sie ein Problem gefunden haben oder Feedback haben, würden wir uns freuen, von Ihnen zu einem Problem zu hören.
(zurück nach oben)
Bewerten Sie Swiftide-Pipelines mit Ragas (15.09.2024)
Veröffentlichung – Swiftide 0.12 (13.09.2024)
Informationen zum lokalen Code mit Ollama, FastEmbed und OpenTelemetry (04.09.2024).
Veröffentlichung – Swiftide 0.9 (02.09.2024)
Bringen Sie Ihre eigenen Transformatoren mit (13.08.2024)
Veröffentlichung – Swiftide 0.8 (12.08.2024)
Veröffentlichung – Swiftide 0.7 (28.07.2024)
Aufbau einer Code-Fragen-Antwort-Pipeline (13.07.2024)
Veröffentlichung – Swiftide 0.6 (12.07.2024)
Veröffentlichung – Swiftide 0.5 (1.7.2024)
(zurück nach oben)
Ein lokales Codeprojekt indizieren, in kleinere Teile aufteilen, die Knoten mit Metadaten anreichern und in Qdrant beibehalten:
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 ? ;
Ich frage nach einem Beispiel für die Verwendung der Abfragepipeline:
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 ? ;
Weitere Beispiele finden Sie in /examples
(zurück nach oben)
Unser Ziel ist es, eine schnelle, erweiterbare Plattform für Retrieval Augmented Generation zu schaffen, um die Entwicklung automatisierter KI-Anwendungen voranzutreiben, mit einer benutzerfreundlichen und leicht erweiterbaren API.
(zurück nach oben)
tracing
wird für Protokollierung und Ablaufverfolgung unterstützt. Weitere Informationen finden Sie unter /examples und in der tracing
.Besonderheit | Einzelheiten |
---|---|
Unterstützte Anbieter großer Sprachmodelle | OpenAI (und Azure) – Alle Modelle und Einbettungen AWS Bedrock – Anthropic und Titan Groq – Alle Modelle Ollama – Alle Modelle |
Daten werden geladen | Dateien Schaben Fluvio Parkett Andere Pipelines und Streams |
Transformer und Metadatengenerierung | Generieren Sie Fragen und Antworten für Text und Code (Hyde) Zusammenfassungen, Titel und Abfragen über ein LLM Extrahieren Sie Definitionen und Referenzen mit Tree-Sitter |
Teilen und Chunking | Abschlag Text (text_splitter) Code (mit Baumsitter) |
Lagerung | Qdrant Redis LanceDB |
Abfragepipeline | Ähnlichkeits- und Hybridsuche, Abfrage- und Antworttransformationen und Auswertung |
(zurück nach oben)
Stellen Sie sicher, dass Sie die Rost-Toolchain installiert haben. Rustup ist der empfohlene Ansatz.
Um OpenAI nutzen zu können, ist ein API-Schlüssel erforderlich. Beachten Sie, dass async_openai
standardmäßig die Umgebungsvariablen OPENAI_API_KEY
verwendet.
Für andere Integrationen gelten möglicherweise eigene Anforderungen.
Richten Sie ein neues Rust-Projekt ein
Swiftide hinzufügen
cargo add swiftide
Aktivieren Sie die Funktionen der Integrationen, die Sie in Ihrem Cargo.toml
verwenden möchten
Schreiben Sie eine Pipeline (siehe unsere Beispiele und Dokumentation)
(zurück nach oben)
Bevor Sie Ihre Streams erstellen, müssen Sie alle erforderlichen Integrationen aktivieren und konfigurieren. Siehe /examples.
Wir haben viele Beispiele, siehe /examples und die Dokumentation
Notiz
Standardmäßig sind keine Integrationen aktiviert, da einige sehr codeintensiv sind. Wir empfehlen Ihnen, die Integrationen auszuwählen, die Sie benötigen. Per Konvention haben Flags denselben Namen wie die Integration, die sie darstellen.
Ein Indexierungsstream beginnt mit einem Loader, der Knoten ausgibt. Beim Fileloader ist beispielsweise jede Datei ein Knoten.
Anschließend können Sie Knoten in Scheiben schneiden, erweitern und filtern. Jeder unterschiedliche Schritt in der Pipeline erfordert unterschiedliche Merkmale. Dies ermöglicht eine Erweiterung.
Knoten haben einen Pfad, einen Block und Metadaten. Derzeit werden Metadaten beim Chunking kopiert und bei Verwendung des OpenAIEmbed-Transformers immer eingebettet.
(impl Loader)
Startpunkt des Streams, erstellt und gibt Knoten aus(impl NodeCache)
filtert zwischengespeicherte Knoten(impl Transformer)
den Knoten und stellt ihn in den Stream(impl BatchTransformer)
transformiert mehrere Knoten und fügt sie dem Stream hinzu(impl ChunkerTransformer)
transformiert einen einzelnen Knoten und gibt mehrere Knoten aus(impl Storage)
speichert die Knoten in einem Speicher-Backend, dieses kann verkettet werden Darüber hinaus sind mehrere generische Transformatoren implementiert. Sie nehmen Implementierer von SimplePrompt
und EmbedModel
mit, um ihre Aufgaben zu erledigen.
Warnung
Aufgrund der Leistung führt das Chunking vor dem Hinzufügen von Metadaten sehr schnell zu Ratenbegrenzungsfehlern bei OpenAI, insbesondere bei schnelleren Modellen wie 3.5-turbo. Seien Sie sich bewusst.
Ein Abfragestrom beginnt mit einer Suchstrategie. In der Abfragepipeline durchläuft eine Query
mehrere Phasen. Transformer und Retriever arbeiten zusammen, um den richtigen Kontext in eine Eingabeaufforderung zu integrieren, bevor sie eine Antwort generieren. Transformer und Retriever bearbeiten verschiedene Phasen der Abfrage über eine generische Zustandsmaschine. Darüber hinaus ist die Suchstrategie für die gesamte Pipeline generisch und Retriever müssen jede Strategie speziell umsetzen.
Das hört sich nach viel an, aber tl&dr; Die Abfragepipeline ist vollständig und stark typisiert .
Darüber hinaus können auch Abfragepipelines ausgewertet werden. Dh von Ragas.
Ähnlich wie bei der Indexierungspipeline wird jeder Schritt durch einfache Merkmale gesteuert, und Abschlüsse implementieren diese Merkmale ebenfalls.
(zurück nach oben)
Eine vollständige Liste der vorgeschlagenen Funktionen (und bekannten Probleme) finden Sie in den offenen Problemen.
(zurück nach oben)
Wenn Sie mehr über Swiftide erfahren möchten, Fragen haben oder chatten möchten, finden Sie uns auf Discord.
(zurück nach oben)
Swiftide befindet sich in einem sehr frühen Stadium und wir sind uns bewusst, dass uns Funktionen für die breitere Community fehlen. Beiträge sind herzlich willkommen. ?
Wenn Sie eine tolle Idee haben, forken Sie bitte das Repo und erstellen Sie eine Pull-Anfrage. Sie können ein Problem auch einfach mit dem Tag „Verbesserung“ eröffnen. Vergessen Sie nicht, dem Projekt einen Stern zu geben! Danke noch einmal!
Wenn Sie einfach nur einen Beitrag leisten möchten (Gott segne Sie!), schauen Sie sich unsere Themen an oder schließen Sie sich uns auf Discord an.
git checkout -b feature/AmazingFeature
)git commit -m 'feat: Add some AmazingFeature'
)git push origin feature/AmazingFeature
)Weitere Informationen finden Sie unter BEITRAG
(zurück nach oben)
Verteilt unter der MIT-Lizenz. Weitere Informationen finden Sie unter LICENSE
.
(zurück nach oben)