Eino : Cadre de développement d'applications Big Model Golang Open Source de ByteDance

Introduction générale

Eino est un framework open source basé sur Golang lancé par l'équipe de CloudWeGo, visant à être l'outil de développement ultime pour les applications LLM (Large Model). Il s'inspire de l'excellente conception de frameworks open source tels que LangChain et LlamaIndex, et combine des résultats de recherche de pointe et l'expérience pratique interne de ByteDance pour fournir une expérience de développement simple, évolutive et efficace.Eino aide les développeurs à construire rapidement des applications d'IA fiables grâce à des abstractions de composants bien conçues, des capacités d'orchestration puissantes, un support complet du streaming, et des fonctionnalités de sécurité de type. Eino Eino a été largement utilisé au sein de ByteDance (par exemple Jitter, Doubao), et est maintenant ouvert sur GitHub, avec une couverture de code élevée et une communauté active dédiée à la promotion de la standardisation et de l'efficacité du développement de l'IA dans l'écosystème Golang.

Eino:字节跳动开源的Golang大模型应用开发框架

 

Liste des fonctions

  • Une abstraction riche en composantsIl fournit des composants réutilisables tels que ChatModel, Tool, ChatTemplate, etc., prenant en charge l'imbrication et l'encapsulation de logiques complexes.
  • Une chorégraphie puissanteLe système de gestion des flux de données : il prend en charge les modes chaîne et graphe, et gère la vérification des types, la gestion de la concurrence et l'orchestration des flux de données.
  • Traitement complet de la diffusion en continuLes données en flux continu sont gérées de manière automatique, en s'adaptant à de multiples paradigmes de flux continu.
  • Des découpes hautement modulablesLes systèmes de gestion de l'information : Mécanisme de rappel intégré permettant d'injecter des informations transversales telles que la journalisation et la traçabilité.
  • type de sécuritéLes contrôles de compilation de Golang permettent de s'assurer que les entrées et les sorties correspondent bien.
  • Boîte à outils de développementLe système de débogage visuel, les évaluateurs, etc., couvrent l'ensemble du cycle de développement.
  • Exemples de bonnes pratiques: Intégré ReAct Mise en œuvre d'agents et d'autres processus, avec de nombreux exemples de code.

 

Utiliser l'aide

Processus d'installation

Eino est un framework Golang et nécessite un environnement Go pour son installation. Voici les étapes détaillées :

  1. Installer Go
    • Visitez le site web de Go pour télécharger la version 1.18 ou supérieure.
    • Une fois l'installation terminée, exécutez go version Vérifiez la version (par exemple go1.21.0).
  2. Extraction des bibliothèques de base Eino
    • S'exécute dans le terminal :
      go get github.com/cloudwego/eino@latest
      
    • Si vous avez besoin d'étendre le composant (par exemple, le support OpenAI), exécutez :
      go get github.com/cloudwego/eino-ext@latest
      
  3. Vérifier l'installation
    • Création de documents main.go: :
      package main
      import "github.com/cloudwego/eino"
      func main() {
      println("Eino installed successfully!")
      }
      
    • réaliser go run main.goSi la sortie est réussie, le processus est terminé.
  4. déclaration de dépendance
    • Dépendances Eino kin-openapi version v0.118.0 pour la compatibilité avec Go 1.18.
    • En option :EinoExt Fournir davantage d'implémentations de composants.
  5. Soutien communautaire
    • Visitez GitHub Issues pour soumettre un problème ou rejoignez le groupe d'utilisateurs Flying Book (voir le code QR sur la page officielle).

Principales fonctions

1. utiliser directement ChatModel

ChatModel est le composant de base, qui est utilisé pour appeler le grand modèle afin de générer du contenu.

  • exemple de code
    package main
    import (
    "context"
    "github.com/cloudwego/eino-ext/components/model/openai"
    "github.com/cloudwego/eino/schema"
    )
    func main() {
    ctx := context.Background()
    config := &openai.Config{APIKey: "你的OpenAI-API-Key"}
    model, err := openai.NewChatModel(ctx, config)
    if err != nil {
    panic(err)
    }
    messages := []*schema.Message{
    {Role: schema.System, Content: "你是一个助手。"},
    {Role: schema.User, Content: "未来AI应用是什么样?"},
    }
    msg, err := model.Generate(ctx, messages)
    if err != nil {
    panic(err)
    }
    println(msg.Content)
    }
  • Mode d'emploi
    • dépense ou frais NewChatModel Initialise l'instance du modèle en lui transmettant le contexte et la configuration de l'API.
    • invocations Generate génère une sortie sans flux.
    • D'autres modèles (par exemple LLaMA) peuvent être pris en charge par des composants d'extension.

2) Orchestrer des processus simples avec Chain

La chaîne convient aux processus linéaires tels que les modèles.

  • exemple de code
    package main
    import (
    "context"
    "github.com/cloudwego/eino"
    "github.com/cloudwego/eino-ext/components/model/openai"
    )
    func main() {
    ctx := context.Background()
    model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "你的API-Key"})
    prompt := eino.NewChatTemplate("你好,我的名字是{{.name}}")
    chain, _ := eino.NewChain[map[string]any, *eino.Message]().
    AppendChatTemplate(prompt).
    AppendChatModel(model).
    Compile(ctx)
    result, _ := chain.Invoke(ctx, map[string]any{"name": "Eino"})
    println(result.Content)
    }
    
  • Mode d'emploi
    • NewChain Définir les types d'entrée et de sortie quiAppend Ajouter un nœud.
    • Compile La chaîne de compilation.Invoke Exécuter et renvoyer le résultat.
    • Idéal pour les tâches séquentielles simples en va-et-vient.

3. l'utilisation du graphique pour l'ordonnancement complexe

Graph prend en charge les graphes dirigés cycliques ou acycliques, ce qui convient à des scénarios tels que les appels d'outils.

  • exemple de code
    package main
    import (
    "context"
    "github.com/cloudwego/eino"
    "github.com/cloudwego/eino-ext/components/model/openai"
    "github.com/cloudwego/eino/schema"
    )
    func main() {
    ctx := context.Background()
    model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "你的API-Key"})
    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": "你好,世界!"})
    println(result.Content)
    }
    
  • Mode d'emploi
    • Add*Node Ajout de nœuds.AddEdge Définir la direction du flux de données.
    • Prise en charge de la ramification (AddBranch) et les appels d'outils.
    • Stream interchangeable Invoke Obtenir une sortie en continu.

4. configuration de la diffusion en continu

Eino propose quatre paradigmes de diffusion en continu : Invoke, Stream, Collect et Transform.

  • Exemple de sortie en continu
    stream, _ := runnable.Stream(ctx, map[string]any{"query": "你好,世界!"})
    for chunk := range stream {
    if chunk.Err != nil {
    panic(chunk.Err)
    }
    print(chunk.Value.Content)
    }
    
  • Analyse fonctionnelle
    • Eino gère automatiquement l'épissage (par exemple, vers des nœuds qui ne sont pas des flux) et le fractionnement (par exemple, la copie lors d'une ramification) des flux.
    • Les nœuds en aval n'ont pas besoin de se préoccuper de l'état du flux en amont et le cadre le gère de manière transparente.

5. ajouter un mécanisme de rappel

Les rappels sont utilisés pour la journalisation, le traçage et d'autres extensions.

  • exemple de code
    handler := eino.NewHandlerBuilder().
    OnStartFn(func(ctx context.Context, info *eino.RunInfo, input eino.CallbackInput) context.Context {
    println("开始:", info.NodeID)
    return ctx
    }).Build()
    result, _ := runnable.Invoke(ctx, map[string]any{"query": "测试"}, eino.WithCallbacks(handler))
    
  • Points de fonctionnement
    • adjuvant OnStart,OnEnd Cinq types de coupes telles que
    • passable WithCallbacks Spécifier le nœud ou l'effet global.

Fonction en vedette Fonctionnement

1. l'agent ReAct

  • Description fonctionnelle
    L'agent ReAct combine le ChatModel et les appels d'outils pour permettre des boucles de décision autonomes.
  • procédure
    • consultation react.go.
    • Exécuter l'exemple : configurer le modèle et les outils, appeler la fonction Invoke Mise en œuvre.

2. débogage visuel

  • Description fonctionnelle
    faire passer (un projet de loi, une inspection, etc.) Eino Devops Permet le débogage de l'interface utilisateur.
  • procédure
    • tirer eino-ext Entrepôt, course devops visualiser la configuration du document.
© déclaration de droits d'auteur

Articles connexes

Pas de commentaires

Vous devez être connecté pour participer aux commentaires !
S'inscrire maintenant
aucun
Pas de commentaires...