Allgemeine Einführung
Eino ist ein Golang-basiertes Open-Source-Framework, das vom CloudWeGo-Team ins Leben gerufen wurde, um das ultimative Entwicklungswerkzeug für Large Model (LLM)-Anwendungen zu sein. Es stützt sich auf das hervorragende Design von Open-Source-Frameworks wie LangChain und LlamaIndex und kombiniert modernste Forschungsergebnisse und die interne praktische Erfahrung von ByteDance, um eine einfache, skalierbare und effiziente Entwicklungserfahrung zu bieten.Eino hilft Entwicklern, schnell zuverlässige KI-Anwendungen durch gut durchdachte Komponentenabstraktionen, leistungsstarke Orchestrierungsfunktionen, vollständige Streaming-Unterstützung und Typsicherheitsfunktionen zu erstellen. Eino Eino ist bei ByteDance weit verbreitet (z.B. Jitter, Doubao) und wird nun auf GitHub als Open Source zur Verfügung gestellt. Es verfügt über eine hohe Codeabdeckung und eine aktive Community, die sich für die Standardisierung und Effizienz der KI-Entwicklung im Golang-Ökosystem einsetzt.
Funktionsliste
- Reichhaltige KomponentenabstraktionBietet wiederverwendbare Komponenten wie ChatModel, Tool, ChatTemplate usw., die Verschachtelung und komplexe Logikkapselung unterstützen.
- Kraftvolle ChoreografieUnterstützt sowohl den Ketten- als auch den Graphenmodus und bietet Typüberprüfung, Gleichzeitigkeitsmanagement und Datenflussorchestrierung.
- Vollständige Streaming-VerarbeitungAutomatisches Splicing, Splitting, Merging und Kopieren von Streaming-Daten, Anpassung an verschiedene Streaming-Paradigmen.
- Hochgradig skalierbare AusschnitteEingebauter Callback-Mechanismus zur Unterstützung der Injektion von übergreifenden Belangen wie Protokollierung und Verfolgung.
- TypensicherheitGolang-Compile-Time-Checks verwenden, um sicherzustellen, dass Eingaben und Ausgaben übereinstimmen.
- Entwicklungs-ToolsetBietet visuelles Debugging, Evaluatoren usw., die den gesamten Entwicklungszyklus abdecken.
- Beispiele für bewährte Verfahren: Eingebaut ReAct Implementierung von Agenten und anderen Prozessen, mit umfangreichem Beispielcode.
Hilfe verwenden
Ablauf der Installation
Eino ist ein Golang-Framework und benötigt zur Installation eine Go-Umgebung. Hier sind die detaillierten Schritte:
- Installieren gehen
- Besuchen Sie die Go-Website, um Version 1.18 oder höher herunterzuladen.
- Nachdem die Installation abgeschlossen ist, führen Sie
Go-Version
Überprüfen Sie die Version (z.B.go1.21.0
).
- Eino-Kernbibliotheken abrufen
- Läuft im Terminal:
go get github.com/cloudwego/eino@latest
- Wenn Sie die Komponente erweitern müssen (z. B. OpenAI-Unterstützung), führen Sie aus:
go get github.com/cloudwego/eino-ext@latest
- Läuft im Terminal:
- Überprüfen der Installation
- Dokumente erstellen
main.go
::Paket main importieren "github.com/cloudwego/eino" func main() { println("Eino erfolgreich installiert!") }
- vollziehen
go main.go ausführen
Wenn die Ausgabe erfolgreich ist, ist der Vorgang abgeschlossen.
- Dokumente erstellen
- Abhängigkeitserklärung
- Eino-Abhängigkeiten kin-openapi Version v0.118.0 für Go 1.18 Kompatibilität.
- Optional:EinoExt Bereitstellung von mehr Komponentenimplementierungen.
- Unterstützung der Gemeinschaft
- Besuchen Sie GitHub Issues, um ein Issue einzureichen oder der Flying Book User Group beizutreten (siehe QR-Code auf der offiziellen Seite).
Hauptfunktionen
1. direkt ChatModel verwenden
ChatModel ist die Basiskomponente, die verwendet wird, um das große Modell aufzurufen und Inhalte zu generieren.
- Code-Beispiel
Paket main importieren ( "kontext" "github.com/cloudwego/eino-ext/components/model/openai" "github.com/cloudwego/eino/schema" ) func main() { ctx := kontext.Hintergrund() config := &openai.Config{APIKey: "Ihr OpenAI-API-Schlüssel"} model, err := openai.NewChatModel(ctx, config) if err ! = nil { panic(err) } messages := []*schema.Message{ {Rolle: schema.System, Inhalt: "Sie sind ein Assistent."} , {Rolle: schema.User, Inhalt: "Wie werden KI-Apps in Zukunft aussehen?"} , } msg, err := model.Generate(ctx, messages) if err ! = nil { panic(err) } println(msg.Inhalt) }
- Betriebsanleitung
- Kosten oder Aufwand
NewChatModel
Initialisieren Sie die Modellinstanz und übergeben Sie den Kontext und die API-Konfiguration. - Aufforderungen
Erzeugen Sie
Methode erzeugt eine Nicht-Streaming-Ausgabe. - Andere Modelle (z.B. LLaMA) können durch Erweiterungskomponenten unterstützt werden.
- Kosten oder Aufwand
2. einfache Prozesse mit Chain orchestrieren
Chain eignet sich für lineare Prozesse wie Vorlagen + Modelle.
- Code-Beispiel
Paket main importieren ( "kontext" "github.com/cloudwego/eino" "github.com/cloudwego/eino-ext/components/model/openai" ) func main() { ctx := kontext.Hintergrund() model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "Ihr API-Schlüssel"}) prompt := eino.NewChatTemplate("Hallo, mein Name ist {{.Name}}") chain, _ := eino.NewChain[map[string]any, *eino.Message](). AppendChatTemplate(prompt). AppendChatModel(model). Kompilieren(ctx) result, _ := chain.Invoke(ctx, map[string]any{"name": "Eino"}) println(result.Content) }
- Betriebsanleitung
NewChain
Definieren Sie die Eingabe- und Ausgabetypen, dieAnhängen
Knoten hinzufügen.Kompilieren
Die Kompilierungskette.Rufen Sie auf.
Ausführen und das Ergebnis zurückgeben.- Gut geeignet für einfache sequenzielle Aufgaben, die hin und her gehen.
3. die Verwendung von Graph für komplexe Planungen
Graph unterstützt zyklische oder azyklische gerichtete Graphen, die sich für Szenarien wie Werkzeugaufrufe eignen.
- Code-Beispiel
Paket main importieren ( "kontext" "github.com/cloudwego/eino" "github.com/cloudwego/eino-ext/components/model/openai" "github.com/cloudwego/eino/schema" ) func main() { ctx := kontext.Hintergrund() model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "Ihr API-Schlüssel"}) graph := eino.NewGraph[map[string]any, *schema.Message]() graph.AddChatModelNode("model", model) graph.AddEdge(eino.START, "model") graph.AddEdge("model", eino.END) runnable, _ := graph.Compile(ctx) result, _ := runnable.Invoke(ctx, map[string]any{"query": "Hallo, Welt!"}) println(result.Content) }
- Betriebsanleitung
Hinzufügen*Knoten
Hinzufügen von Knoten.AddEdge
Definieren Sie die Datenflussrichtung.- Unterstützung für Verzweigungen (
AddBranch
) und Werkzeugaufrufe. Strom (von Wasser usw.)
austauschbarRufen Sie auf.
Streaming-Ausgabe abrufen.
4. das Streaming konfigurieren
Eino bietet vier Streaming-Paradigmen: Invoke, Stream, Collect und Transform.
- Beispiel für eine Streaming-Ausgabe
stream, _ := runnable.Stream(ctx, map[string]any{"query": "Hallo, Welt!"}) for chunk := range stream { if chunk.Err ! = nil { panic(chunk.Err) } print(chunk.Value.Content) }
- Funktionelle Analyse
- Eino übernimmt automatisch das Splicing (z.B. zu Nicht-Stream-Knoten) und das Splitting (z.B. Kopieren bei Verzweigungen) von Streams.
- Die nachgelagerten Knoten müssen sich nicht um den Status der vorgelagerten Ströme kümmern, da der Rahmen dies transparent handhabt.
5) Hinzufügen eines Rückrufmechanismus
Rückrufe werden für die Protokollierung, Nachverfolgung und andere Erweiterungen verwendet.
- Code-Beispiel
handler := eino.NewHandlerBuilder(). OnStartFn(func(ctx context.Context, info *eino.RunInfo, input eino.CallbackInput) context.Context { println("Start:", info.NodeID) return ctx }).Build() result, _ := runnable.Invoke(ctx, map[string]any{"query": "test"}, eino.WithCallbacks(handler))
- Betriebspunkte
- Adjuvans
OnStart
, undOnEnd
Fünf Arten von Schnitten wie. - passabel
WithCallbacks
Geben Sie den Knoten oder den globalen Effekt an.
- Adjuvans
Featured Function Bedienung
1) ReAct Agent
- Funktionelle Beschreibung
Der ReAct Agent kombiniert ChatModel und Tool-Aufrufe, um autonome Entscheidungsschleifen zu ermöglichen. - Verfahren
- Beratung react.go.
- Führen Sie das Beispiel aus: Konfigurieren Sie das Modell und die Werkzeuge, rufen Sie die
Rufen Sie auf.
Umsetzung.
2. visuelles Debugging
- Funktionelle Beschreibung
passieren (eine Rechnung oder Inspektion etc.) Eino Devops Bietet UI-Debugging. - Verfahren
- ziehen
eino-ext
Lagerhaus, Laufdevops
sehen Sie sich die Dokumentenkonfiguration an.
- ziehen