Modell / Datensatz
Abraxas-365/langchain-rust avatar
Abraxas-365/langchain-rust

langchain-rust: LangChain für Rust, ohne Python-Laufzeit

🦜️🔗LangChain for Rust, the easiest way to write LLM-based programs in Rust

1.344 Sterne177 ForksRustMIT
GitHub

Auf einen Blick

Was ist das?
Das Crate langchain-rust bildet die Bausteine von LangChain in Rust ab: LLM-Clients, Embeddings, Vector Stores, Chains, Agents und Document Loader. Wer eine Rust-Anwendung um LLM-Aufrufe erweitern will und keinen Python-Interpreter einbetten möchte, findet hier zusammengesetzte Bausteine statt einer Pipeline-Sprache.
Für wen ist es gedacht?
Sinnvoll ist langchain-rust für Rust-Teams, die LLM-Aufrufe, Embeddings und eine Vektorsuche in einer bestehenden Anwendung brauchen und dabei auf eine Python-Laufzeit verzichten wollen. Wer eine breite Loader-Palette, ausgefeiltes Prompt-Templating oder eine fertige Graph-Abstraktion erwartet, sollte zuerst die Feature-Liste im README gegen die eigene Anforderung legen.
Darf ich es kommerziell nutzen?
Ja. MIT ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
Wird es noch gepflegt?
Ja. Die letzten Commits kamen vor 7 Tagen.
In welcher Sprache ist es geschrieben?
Hauptsächlich Rust, laut der Sprachstatistik von GitHub.

Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.

TIEFGEHENDE OPEN-SOURCE-ANALYSE

Welches Problem langchain-rust löst und für wen

Wer in Rust eine Anwendung schreibt und darin ein Sprachmodell aufrufen will, steht vor einer Reihe von Einzelaufgaben: HTTP-Client, Authentifizierung, Streaming, Gesprächsverlauf, Embeddings, Ähnlichkeitssuche, Werkzeugaufrufe. Jede dieser Aufgaben lässt sich direkt gegen die Anbieter-API lösen. langchain-rust setzt darüber eine gemeinsame Schicht. Das README beschreibt das Projekt als Rust-Umsetzung von LangChain und fasst das Ziel so: Anwendungen mit LLMs durch Komposition von Bausteinen bauen.

Die Zielgruppe ist damit enger, als der Name vermuten lässt. Angesprochen sind Rust-Entwickler, die bereits eine Anwendung haben und LLM-Funktionalität hineinbringen wollen, ohne einen Python-Prozess daneben zu betreiben. Nicht angesprochen sind Data-Science-Teams, die Prototypen in Notebooks bauen. Für sie bleibt das Python-Original der kürzere Weg, weil dort mehr Loader, mehr Integrationen und mehr Beispiele existieren.

Der Nutzen liegt weniger in einzelnen Anbietern, die sich auch direkt ansprechen lassen, als in der Kombination. Eine Frage-Antwort-Kette über einem Vector Store berührt vier Bausteine: Embedding-Modell, Vektordatenbank, Retriever und LLM. Genau diese Kombination nimmt einem das Crate ab.

Was das Crate anbietern und speichern lässt

Die Feature-Liste im README ist der belastbarste Teil der Dokumentation. Bei den LLMs sind OpenAI, Azure OpenAI, Ollama und Anthropic Claude abgehakt. Bei den Embeddings kommen zu OpenAI, Azure und Ollama noch lokales FastEmbed und MistralAI hinzu. FastEmbed ist der einzige Eintrag in dieser Liste, der Embeddings ohne externen Dienst erzeugt.

Bei den Vector Stores nennt das README OpenSearch, Postgres, Qdrant, Sqlite und SurrealDB. Das ist eine überschaubare Auswahl. Wer eine andere Vektordatenbank betreibt, muss den Anschluss selbst schreiben, und dafür braucht es ein Trait, dessen Stabilität das Material nicht belegt.

Bei den Tools stehen Serpapi/Google, DuckDuckGo, Wolfram/Math, Kommandozeile und Text2Speech. Die Kommandozeile als Werkzeug ist der Eintrag, der bei einem Agenten am meisten Aufmerksamkeit verdient: Ein Modell, das Shell-Befehle auslösen kann, braucht eine Eingrenzung, und ob das Crate dafür eine Sandbox mitbringt, geht aus dem README nicht hervor.

Chains, Agents und semantisches Routing als Schicht über den Aufrufen

Über den einzelnen Anbietern liegt eine Ebene aus Chains. Das README listet LLM Chain, Conversational Chain, Conversational Retriever Simple, Conversational Retriever With Vector Store, Sequential Chain, Q&A Chain und SQL Chain. Die Namen beschreiben die Datenführung ziemlich genau: Eine Conversational Chain hält den Gesprächsverlauf, eine Retriever-Chain holt zuerst Dokumente und übergibt sie an das Modell, eine Sequential Chain verkettet mehrere Schritte, eine SQL Chain erzeugt offenbar Abfragen aus einer Frage.

Für Agents nennt das README zwei Varianten: einen Chat Agent with Tools und einen Open AI Compatible Tools Agent. Der zweite ist der interessantere, weil er das Werkzeugaufruf-Format von OpenAI nutzt und damit auch gegen Anbieter funktionieren sollte, die dieses Format nachbilden. Das ist eine Designentscheidung mit einer klaren Grenze: Anbieter ohne dieses Format brauchen den anderen Agenten oder einen eigenen Weg.

Semantisches Routing gibt es in zwei Formen, statisch und dynamisch. Dabei wird eine Anfrage anhand ihrer Bedeutung einer von mehreren Routen zugeordnet, statt sie über eine Kette von Bedingungen zu schicken. Das ist der Baustein, der in der Feature-Liste am wenigsten erklärt wird. Wer ihn einsetzen will, muss die beiden Beispiele lesen, weil das README nur die Existenz nennt.

Document Loader: PDF, Pandoc, HTML, CSV und Git

Die Loader sind der Teil, für den das README echten Code zeigt. Alle folgen demselben Muster: Eine Loader-Struktur wird aus einem Pfad gebaut, load() gibt einen Stream zurück, und der Aufrufer sammelt die Dokumente mit futures_util::StreamExt ein. Ein PDF lädt man über PdfExtractLoader::from_path(path), alternativ steht LoPdfLoader im Beispiel auskommentiert daneben. Für Office-Formate geht PandocLoader::from_path(InputFormat::Docx.to_string(), path) über das extern installierte Pandoc. HTML kommt über HtmlLoader::from_path(path, Url::parse("https://example.com/").unwrap()), und HtmlToMarkdownLoader akzeptiert zusätzlich HtmlToMarkdownOptions::default().with_skip_tags(vec!["figure".to_string()]).

Zwei Details sind praktisch relevant. Erstens braucht der HTML-Loader eine Basis-URL, weil relative Links sonst nicht auflösbar sind. Zweitens ist die Fehlerbehandlung im Beispiel grob: expect() beim Bauen und unwrap() pro Dokument im Stream. In einer Anwendung, die eine Sammlung von Dateien verarbeitet, reißt ein einzelnes kaputtes Dokument damit den ganzen Lauf ab. Das ist Beispielcode, kein Bibliotheksfehler, aber es zeigt, womit man rechnen muss.

Der CsvLoader bekommt die Spaltennamen explizit als Vec<String> übergeben, statt sie aus der Kopfzeile zu lesen. Der GitCommitLoader arbeitet auf einem Repository-Pfad. Beide Beispiele sind im README abgeschnitten, der Rückgabetyp ist dort nur teilweise sichtbar.

Einbindung: Crate, Features und der Weg zum ersten Aufruf

Das Crate heißt langchain-rust und liegt auf crates.io. Das README verlinkt einen Quickstart unter langchain-rust.sellie.tech/get-started/quickstart sowie einen Discord-Server. Der Quickstart ist damit die Stelle, an der die tatsächliche Einbindung steht; das README selbst nennt weder eine Cargo-Zeile noch Feature-Flags.

Aus der Feature-Liste folgt aber, dass ein großer Teil der Integrationen optional sein dürfte. Wer nur OpenAI und Qdrant braucht, will nicht die Abhängigkeiten von SurrealDB, OpenSearch und Postgres mitkompilieren. Ob das Crate das über Cargo-Features trennt, lässt sich aus dem vorliegenden Material nicht bestätigen. Das ist die erste Frage, die man vor dem ersten Build klären sollte, weil sie die Kompilierzeit und die Zahl der transitiven Abhängigkeiten bestimmt.

Für den Einstieg liefert das Repository pro Baustein eine Beispieldatei. Die Namen sind im README verlinkt: examples/llm_openai.rs, examples/llm_anthropic_claude.rs, examples/embedding_fastembed.rs, examples/vector_store_qdrant.rs, examples/llm_chain.rs, examples/agent.rs. Diese Dateien sind die eigentliche Dokumentation des Projekts, nicht der README-Text.

Wo das Crate an seine Grenzen kommt

Die auffälligste Einschränkung ist der Umfang der Loader. PDF, Pandoc, HTML, HTML zu Markdown, CSV und Git Commits decken Büro- und Webformate ab. Für Quellen wie E-Mail, Slack-Verläufe, Confluence oder Datenbankdumps gibt es im README keinen Eintrag. In einer RAG-Anwendung ist die Aufbereitung der Quellen oft der größere Teil der Arbeit, und dieser Teil bleibt hier beim Anwender.

Der zweite Punkt ist die Anbieterbindung an OpenAI-kompatible Schnittstellen. Der Open AI Compatible Tools Agent setzt das Werkzeugaufruf-Format von OpenAI voraus. Für Anthropic und Ollama existieren LLM-Clients, aber ob sie dieselbe Agenten-Infrastruktur nutzen können, sagt das README nicht. Wer einen Agenten mit einem lokalen Modell über Ollama betreiben will, sollte das vor der Architekturentscheidung prüfen.

Der dritte Punkt betrifft die SQL Chain. Eine Kette, die aus natürlicher Sprache Abfragen gegen eine Datenbank erzeugt, ist ein Sicherheitsthema. Das README nennt nur die Existenz und verlinkt ein Beispiel. Wer das produktiv einsetzen will, muss die Rechte des verwendeten Datenbankkontos selbst begrenzen. Das Crate kann diese Verantwortung nicht übernehmen.

Schließlich die Versionierung: Die letzten Releases v4.4.2, v4.5.0 und v4.6.0 liegen im September und Oktober 2024, wobei v4.5.0 und v4.6.0 am selben Tag erschienen sind. Der letzte Push ins Repository ist mit September 2026 datiert. Ein Sprung von zwei Jahren zwischen Release und letztem Push bedeutet nicht automatisch Stillstand, aber die veröffentlichte Version ist deutlich älter als der Repository-Stand. Wer auf crates.io baut, bekommt nicht zwingend das, was im main-Branch liegt.

Was man stattdessen wählen kann

Die naheliegende Alternative ist das Python-Original LangChain, auf das das README selbst verweist. Der Unterschied liegt nicht in der Funktionsliste, sondern in der Laufzeit. Python-LangChain bringt LCEL als Ausdrucksform für Ketten mit, dazu deutlich mehr Loader und Integrationen. Wer seine Anwendung ohnehin in Python schreibt, hat keinen Grund, auf die Rust-Umsetzung zu wechseln. Umgekehrt gilt: Wer eine Rust-Anwendung hat, bekommt mit langchain-rust dieselbe Idee in derselben Sprache, aber mit kleinerem Baukasten.

Eine zweite Möglichkeit ist, auf das Framework ganz zu verzichten und die Anbieter-SDKs direkt zu verwenden. Für einen einzelnen Chat-Aufruf mit Streaming ist das weniger Code als jede Abstraktion. Der Aufwand wächst erst, wenn mehrere Bausteine zusammenspielen: Embedding, Vektorsuche, Verlauf, Werkzeuge. Genau an dieser Stelle beginnt der Nutzen von langchain-rust.

Wer nur Embeddings und eine Vektorsuche braucht, kann auch FastEmbed direkt mit einem Vektor-Client kombinieren. Das umgeht die Chain-Ebene vollständig und ist bei einem schmalen Anwendungsfall die ehrlichere Wahl.

Lizenz, Pflegeaufwand und was vor der Übernahme zu klären ist

Das Projekt steht unter der MIT-Lizenz. Das ist eine permissive Lizenz: Nutzung, Änderung und Weitergabe sind erlaubt, sofern der Copyright-Hinweis und der Lizenztext beibehalten werden. Für eine Einbindung in kommerzielle Produkte entstehen daraus keine Copyleft-Pflichten. Das ist eine Einschätzung der Lizenzart, keine Rechtsberatung; wer Haftungsfragen oder die Kombination mit anderen Lizenzen klären muss, sollte das mit der eigenen Rechtsabteilung tun.

Der Pflegeaufwand hängt an einer Eigenheit des Projekts: Es ist eine Nachbildung fremder APIs. Jede Änderung an den Schnittstellen von OpenAI, Anthropic, Azure oder Qdrant erzeugt Anpassungsbedarf, unabhängig davon, ob das Projekt selbst aktiv entwickelt wird. Bei einer Bibliothek, die nur ein Protokoll implementiert, ist das anders. Hier ist die Wartung ein Wettlauf mit mehreren Anbietern gleichzeitig.

Konkret zu prüfen sind drei Dinge. Erstens, ob die Cargo-Features die benötigten Integrationen abdecken, damit nicht das gesamte Anbieter-Spektrum mitkompiliert wird. Zweitens, ob der Stand auf crates.io oder der Stand im main-Branch verwendet werden soll, denn zwischen beiden liegt laut Repository-Daten eine erhebliche Zeitspanne. Drittens, ob der gewählte Agenten-Pfad mit dem gewählten Modell zusammenpasst, weil der dokumentierte Werkzeugaufruf an das OpenAI-Format gebunden ist. Das sind drei Fragen, die sich vor dem ersten produktiven Aufruf beantworten lassen, nicht danach.

Redaktionelles Fazit

Sinnvoll ist langchain-rust für Rust-Teams, die LLM-Aufrufe, Embeddings und eine Vektorsuche in einer bestehenden Anwendung brauchen und dabei auf eine Python-Laufzeit verzichten wollen. Wer eine breite Loader-Palette, ausgefeiltes Prompt-Templating oder eine fertige Graph-Abstraktion erwartet, sollte zuerst die Feature-Liste im README gegen die eigene Anforderung legen. Vor dem Produktiveinsatz ist zu prüfen, welcher Anbieter und welcher Vector Store tatsächlich gebraucht wird, ob das jeweilige Cargo-Feature dafür existiert und ob der letzte Release-Stand vom Oktober 2024 zu den aktuellen API-Versionen der Anbieter passt.

Offizielle Quellen

  1. Abraxas-365/langchain-rust on GitHub
  2. Issues
  3. License: MIT
  4. README
  5. Releases
Community-Notizen

Community-Notizen