Categorygithub.com/kyodo-tech/orchid
repositorypackage
0.8.0
Repository: https://github.com/kyodo-tech/orchid.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

Orchid: ダイナミックデータフローオーケストレーション

Go Report Card GoDoc English 日本語

Orchidは、データ駆動型ワークフローを自動化の調整をするための軽量なGoフレームワークです。Flow-Based Programming (FBP) とワークフローエンジンの概念を組み合わせ、アプリケーション内でのデータフローとタスク実行の管理をシンプルかつ耐障害性のある方法で提供します。 Uber CadenceTemporal.io などのツールに影響を受けて、開発されたOrchidは、他のソリューションに見られる複雑さや重い依存関係を避けるために、ワークフローオーケストレーションにおいて最小限のアプローチを採用しています。Orchidは、temporaliteのようなシンプルな実行エンジンが存在しないことから生まれましたが、現在はメンテナンスされていません。他のソリューションはしばしば複雑で多くの依存関係を持っています。

Orchidは、以下の原則を念頭に制作されています:

  • シンプルさ: 理解しやすく、使いやすいことを重視し、冗長なコードを最小限に抑えます。Orchidのコアは約1,000行のコードで構成されています。
  • データの受け渡し: Flow-Based Programmingパラダイムに従い、ノード間でデータをbyte配列を使って渡します。
  • 動的ルーティング: データやエラー条件に基づいて動的にルーティングを行い、柔軟なワークフロー論理を実現します。
  • デフォルトでの順次実行: ワークフローはデフォルトで順次実行されます。ノードが複数のアウトゴーイングエッジを持つ場合、並列実行が明示的に有効化されていない限り、最初のパスに従って決定的に進行します。
  • 明示的並列処理: DisableSequentialFlowノードオプションを使うことで、並列処理を明示的に有効化できます。これにより、並列実行を意図的なデザイン選択として使用できます。
  • ハイブリッド実行: 同期タスクと非同期タスクの実行を両立させることができます。
  • モジュール性: 機能を独立したノードにカプセル化することで、モジュール化されたコードを推奨します。
  • リトライポリシー: 各タスクに対してカスタムリトライポリシーを定義できます。
  • コンテキスト伝播: Goのcontextパッケージを利用して、ワークフロー実行中にメタデータやキャンセル信号を伝播させます。
  • グラフベースのワークフロー: ワークフローは有向グラフで表現され、複雑なプロセスを視覚的に把握しやすくします。
  • 耐障害性: オプションで状態の永続化とワークフローの回復を提供します。
  • JSONワークフロー定義: 人間が読みやすいDSL(ドメイン特化言語)として、ワークフロー定義に基本的なJSONフォーマットをサポートし、コードベースの定義にも対応しています。

ユースケース

  • データパイプライン: データのインジェスト、変換、分析を含むデータ処理タスクのオーケストレーション。
  • 自動化ワークフロー: 機械または人間のエージェントとの自動化タスクやインタラクションの管理。
  • サービスオーケストレーション: アプリケーションサービス間のインタラクションの調整や、分散APIワークフローの管理。
  • ヒューマンインザループプロセス: 人間による介入や承認が必要なワークフローの処理。
  • エージェントベースモデル: シミュレーション内でのエージェントの相互作用や行動の管理。

関連する概念との接点

  • ワークフローエンジン: OrchidはAirflowやPrefectのようなDAGベースのワークフローエンジンと基礎的な共通点を持ちながら、簡便さと使いやすさに注力しています。また、リトライ用のループもサポートしています。エラーベースのルーティング、ローカルおよびリモートでの実行をサポートし、簡潔な設定形式を提供します。
  • フローベースプログラミング: ノード間の逐次実行とデータ受け渡しはフローベースプログラミングのパラダイムに似ていますが、Orchidはトリガー、コールバック、条件分岐などの機能も提供し、より複雑なオーケストレーションが可能です。
  • エージェントベースモデル(ABM): Orchidは依存関係の表現やイベントに基づくワークフローのトリガーが可能で、エージェントベースモデルの相互作用パターンにも適しています。
  • 大規模言語モデル(LLM)エージェント: データの受け渡しや条件分岐の柔軟性を活かし、言語モデルを活用するタスクのオーケストレーションにも応用できます。

LangChainとの比較について

Orchidは、モジュール式のタスクチェーン、エラーハンドリング、コンテキストの伝搬を活用するワークフローをサポートしています。これらの概念は、LangChainによるワークフローチェーンやエージェント駆動タスクのアプローチと類似しています。Orchidは言語非依存であり、LLMや動的プロンプトを使った拡張も可能で、LangChainと同様の構造化されたワークフローをGoベースで提供できる代替手段です。