はじめに
Einoは、CloudWeGoチームによって立ち上げられたGolangベースのオープンソースフレームワークで、ラージモデル(LLM)アプリケーションの究極の開発ツールとなることを目指しています。Einoは、LangChainやLlamaIndexなどのオープンソースフレームワークの優れた設計を活用し、最先端の研究成果とByteDance社内の実務経験を組み合わせて、シンプルでスケーラブルかつ効率的な開発体験を提供します。Einoは、よく設計されたコンポーネントの抽象化、強力なオーケストレーション機能、完全なストリーミングサポート、型安全機能を通じて、開発者が信頼性の高いAIアプリケーションを迅速に構築できるよう支援します。アプリEinoは、ByteDance社内で広く使用されています(Jitter、Doubaoなど)。現在はGitHubにオープンソース化されており、高いコードカバレッジと、GolangエコシステムにおけるAI開発の標準化と効率化を推進するための活発なコミュニティがあります。
機能一覧
- 豊富なコンポーネントの抽象化: ChatModel、Tool、ChatTemplate 等の再利用可能なコンポーネントを提供し、入れ子や複雑なロジックのカプセル化をサポートします。
- パワフルな振り付けチェーン・モードとグラフ・モードの両方をサポートし、型チェック、並行性管理、データ・フローのオーケストレーションを行う。
- 完全なストリーミング処理複数のストリーミング・パラダイムに対応し、ストリーミング・データのスプライシング、スプリット、マージ、コピーを自動的に処理します。
- 拡張性の高いカットアウトロギングやトレースなど、横断的な関心事の注入をサポートする、組み込みのコールバック・メカニズム。
- タイプセーフティ: Golangのコンパイル時チェックを使って、入力と出力が一致していることを確認します。
- 開発ツールセット開発サイクル全体をカバーするビジュアル・デバッギング、エバリュエーターなどを提供。
- ベストプラクティスの例内蔵 リ・アクト 豊富なサンプルコードによるエージェントやその他のプロセスの実装。
ヘルプの使用
設置プロセス
EinoはGolangフレームワークで、インストールにはGo環境が必要です。詳しい手順は以下の通り:
- 囲碁のインストール
- Goのウェブサイトからバージョン1.18以上をダウンロードしてください。
- インストールが完了したら
碁バージョン
バージョンを確認する(例go1.21.0
).
- Einoコアライブラリのプル
- ターミナルで実行:
go get github.com/cloudwego/eino@latest
- コンポーネントを拡張する必要がある場合は(OpenAIのサポートなど)、実行してください:
github.com/cloudwego/eino-ext@latestを取得する。
- ターミナルで実行:
- インストールの確認
- ドキュメントの作成
main.go
::パッケージ main インポート "github.com/cloudwego/eino" func main() { println("Einoのインストールに成功しました!") }
- はこびだす
go run main.go
出力が成功すれば、プロセスは完了する。
- ドキュメントの作成
- 従属ステートメント
- イーノの依存関係 kin-openapi バージョン v0.118.0 で Go 1.18 に対応しました。
- オプションだ:エイノエクステンション より多くのコンポーネント実装を提供する。
- 地域支援
- GitHub Issuesにアクセスして課題を提出するか、Flying Bookユーザーグループに参加してください(公式ページのQRコードを参照)。
主な機能
1.ChatModelを直接使用する
ChatModel は基本コンポーネントで、コンテンツを生成するために大きなモデルを呼び出すために使用されます。
- コード例
パッケージ main インポート ( "コンテキスト" "github.com/cloudwego/eino-ext/components/model/openai" "github.com/cloudwego/eino/schema" ) func main() { ctx := context.Background() config := &openai.Config{APIKey: "Your 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アプリは将来どうなるのか?" } , {Role: schema.System, Content: "あなたはアシスタントです。, } msg, err := model.Generate(ctx, messages) if err != nil panic(err) } println(msg.Content) }
- 操作説明
- 支出
新チャットモデル
モデルのインスタンスを初期化し、コンテキストとAPI設定を渡します。 - 各論
生成する
メソッドはノン・ストリーミング出力を生成する。 - 他のモデル(例えばLLaMA)は、拡張コンポーネントによってサポートすることができる。
- 支出
2.チェーンによるシンプルなプロセスのオーケストレーション
チェーンは、テンプレート+モデルのような線形プロセスに適しています。
- コード例
パッケージ main インポート ( "コンテキスト" "github.com/cloudwego/eino" "github.com/cloudwego/einoo-ext/components/model/openai" ) func main() { ctx :=コンテキスト.バックグラウンド() model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "Your API-Key"}) prompt := eino.NewChatTemplate("Hello, my name is {{.name}}") chain, _ := eino.NewChain[map[文字列]any, *eino.Message](). AppendChatTemplate(プロンプト). AppendChatModel(model). コンパイル(ctx) result, _ := chain.Invoke(ctx, map[string]any{"name": "Eino"}) println(result.Content) }
- 操作説明
ニューチェーン
以下の入出力タイプを定義する。追加
ノードを追加する。コンパイル
コンパイルチェーン。呼び出す
実行し、結果を返す。- 単純な往復の連続作業に適している。
3.グラフを使った複雑なスケジューリング
グラフは、ツールコールのようなシナリオに適した、環状または非環状の有向グラフをサポートする。
- コード例
パッケージ main インポート ( "コンテキスト" "github.com/cloudwego/eino" "github.com/cloudwego/einoo-ext/components/model/openai" "github.com/cloudwego/eino/schema" ) func main() { ctx := context.Background() model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "Your API-Key"}) graph := eino.NewGraph[map[文字列]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": "Hello, world!"}) println(result.Content) }
- 操作説明
追加*ノード
ノードの追加アドエッジ
データの流れ方向を定義する。- 分岐のサポート (
AddBranch
)とツール・コール。 ながれ
交換可能呼び出す
ストリーミング出力を得る。
4.ストリーミングの設定
Einoは、Invoke、Stream、Collect、Transformの4つのストリーミング・パラダイムを提供する。
- ストリーミング出力例
stream, _ := runnable.Stream(ctx, map[string]any{"query": "Hello, world!"}) for chunk := stream {の範囲 if chunk.Err != nil { もし panic(chunk.Err) } print(chunk.Value.Content) }
- 機能分析
- Einoは、ストリームのスプライス(ストリーム以外のノードへのスプライスなど)やスプリット(分岐時のコピーなど)を自動的に処理する。
- ダウンストリームノードはアップストリームのフロー状態を気にする必要はなく、フレームワークが透過的に処理する。
5.コールバック機構の追加
コールバックは、ロギング、トレース、その他の拡張に使われる。
- コード例
handler := eino.NewHandlerBuilder(). OnStartFn(func(ctx context.Context, info *eino.RunInfo, input eino.CallbackInput) context.Context {. println("Starting:", info.NodeID) return ctx }).Build() result, _ := runnable.Invoke(ctx, map[文字列]any{"クエリ": "テスト"}, eino.WithCallbacks(handler))
- 営業ポイント
- アジュバント
オンスタート
そして終了
など5種類のカットがある。 - 可
コールバックあり
ノードまたはグローバルエフェクトを指定します。
- アジュバント
注目の機能操作
1.リアクト・エージェント
- 機能説明
ReActエージェントはChatModelとツールコールを組み合わせ、自律的な意思決定ループを可能にします。 - 手続き
- 協議 リアクトゴー.
- サンプルを実行する:モデルとツールをコンフィギュレーションする。
呼び出す
実施する。
2.ビジュアル・デバッグ
- 機能説明
とおす エイノ・デボップス UIデバッグを提供する。 - 手続き
- プル
アイノエクスト
ウェアハウス、ランデボップス
モジュールで、文書の設定を表示します。
- プル