はじめに
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以上をダウンロードしてください。
- インストールが完了したら
go version
バージョンを確認する(例go1.21.0
).
- Einoコアライブラリのプル
- ターミナルで実行:
go get github.com/cloudwego/eino@latest
- コンポーネントを拡張する必要がある場合は(OpenAIのサポートなど)、実行してください:
go get github.com/cloudwego/eino-ext@latest
- ターミナルで実行:
- インストールの確認
- ドキュメントの作成
main.go
::package main import "github.com/cloudwego/eino" func main() { println("Eino installed successfully!") }
- はこびだす
go run main.go
出力が成功すれば、プロセスは完了する。
- ドキュメントの作成
- 従属ステートメント
- イーノの依存関係 kin-openapi バージョン v0.118.0 で Go 1.18 に対応しました。
- オプションだ:エイノエクステンション より多くのコンポーネント実装を提供する。
- 地域支援
- GitHub Issuesにアクセスして課題を提出するか、Flying Bookユーザーグループに参加してください(公式ページのQRコードを参照)。
主な機能
1.ChatModelを直接使用する
ChatModel は基本コンポーネントで、コンテンツを生成するために大きなモデルを呼び出すために使用されます。
- コード例
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) }
- 操作説明
- 支出
NewChatModel
モデルのインスタンスを初期化し、コンテキストとAPI設定を渡します。 - 各論
Generate
メソッドはノン・ストリーミング出力を生成する。 - 他のモデル(例えばLLaMA)は、拡張コンポーネントによってサポートすることができる。
- 支出
2.チェーンによるシンプルなプロセスのオーケストレーション
チェーンは、テンプレート+モデルのような線形プロセスに適しています。
- コード例
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) }
- 操作説明
NewChain
以下の入出力タイプを定義する。Append
ノードを追加する。Compile
コンパイルチェーン。Invoke
実行し、結果を返す。- 単純な往復の連続作業に適している。
3.グラフを使った複雑なスケジューリング
グラフは、ツールコールのようなシナリオに適した、環状または非環状の有向グラフをサポートする。
- コード例
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) }
- 操作説明
Add*Node
ノードの追加AddEdge
データの流れ方向を定義する。- 分岐のサポート (
AddBranch
)とツール・コール。 Stream
交換可能Invoke
ストリーミング出力を得る。
4.ストリーミングの設定
Einoは、Invoke、Stream、Collect、Transformの4つのストリーミング・パラダイムを提供する。
- ストリーミング出力例
stream, _ := runnable.Stream(ctx, map[string]any{"query": "你好,世界!"}) for chunk := range 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("开始:", info.NodeID) return ctx }).Build() result, _ := runnable.Invoke(ctx, map[string]any{"query": "测试"}, eino.WithCallbacks(handler))
- 営業ポイント
- アジュバント
OnStart
そしてOnEnd
など5種類のカットがある。 - 可
WithCallbacks
ノードまたはグローバルエフェクトを指定します。
- アジュバント
注目の機能操作
1.リアクト・エージェント
- 機能説明
ReActエージェントはChatModelとツールコールを組み合わせ、自律的な意思決定ループを可能にします。 - 手続き
- 協議 リアクトゴー.
- サンプルを実行する:モデルとツールをコンフィギュレーションする。
Invoke
実施する。
2.ビジュアル・デバッグ
- 機能説明
とおす エイノ・デボップス UIデバッグを提供する。 - 手続き
- プル
eino-ext
ウェアハウス、ランdevops
モジュールで、文書の設定を表示します。
- プル