🙄

中島聡さん主催のハッカソンに参加します!

2024/11/23に公開

こんにちは、私は上原久志といいます。ソフトウェアエンジニアを目指して勉強中の社会人で、現在は英語力を上げるためにオーストラリアに滞在しています。

先日、中島聡さんのXでの投稿で彼が主催するハッカソンのことを知りました。とてもいい勉強になると思い、GraphAI を活用したオープンソースのサービスやプロトタイプを作る過程での学びを投稿していきます。

そもそもGraphAIとは何なのか?から学んでいきたいと思います。
上記のウェブサイトのパブリックリポジトリ(public repositry)にあるREADMEに以下の解説がされています。

GraphAI is an asynchronous data flow execution engine, which allows developers to build agentic applications by describing agent workflows as declarative data flow graphs in YAML or JSON.

🔰 asynchronous data flow
まずasynchronousとは非同期という意味です。通常のアルゴリズム(手順書)では1から順にタスクをこなすのに対して、asynchronous data flowは1〜5までの手順をそれぞれのタスクごとに行えるということだと思います。例えばカレーを作る1〜5までの行程がある際、通常のアルゴリズムだと1のタスクが終わるまで2や3は行えないのに対して、asynchronous data flowは1と2を完了すれば、いきなり4や5のタスクに取り掛かることができるということですね。

🔰 declarative data flow
declarativeとは、宣言的なという意味ですが、私は以前からこの言葉を知っているし、理解したつもりでしたが、いざここに解説記事を書くとなると手が進みませんでした。これは理解していないということなので、1から調べていきます。まずdeclarative dataと調べるとdeclarative programmingが出てきたので調べていくと、これはimperative programming(命令型プログラミング)と対照的な存在になるようです。宣言型プログラミングは「何をしたいか」だけを書いて「どうやってやるか」はプログラムに任せるということでした。例えば、あなたが家族とピザを食べたいとして、「私はピザが食べたい」と宣言するだけで、食べるまでの行程は他の誰かに任せるのです。一方で、命令型プログラミングは「⚪︎⚪︎ピザ店で⚪︎⚪︎という種類のピザに⚪︎⚪︎のトッピングをして...」という指示を与えます。

🔰 YAML
YAML(YAML Ain't a Markup Languag)はデータを整理して書く方法の1つで、コンピュータが使うテキスト形式のファイルです。wikipediaには「YAMLはマークアップ言語じゃない」と記載がありました。
マークアップ言語とは、マークアップ言語は、文章やデータの「構造」をタグや記号で表現するものです。たとえば、Webページを作るHTMLや、データの構造を表すXMLが有名です。
最初は「Yet Another Markup Language(もう1つのマークアップ言語)」と呼ばれていましたが、YAMLはマークアップよりも「データを簡単に表す」ことを目的に作られたため、現在の名前に変わt多様です。

🔰 JSON(JavaScript Object Notation)も、コンピュータがデータをやり取りするときに使うテキスト形式のデータの書き方です。YAMLと似ていますが、JSONのほうがコンピュータ向けに作られていて、やや機械的な書き方になるようです。

どちらも、コンピュータ同士やアプリ同士が情報をやり取りするために使われています。
よって、開発者はGraphAIを使って、YAMLやJSON形式で書かれたデータを非同期で実行できるアプリを作ることができます。そのアプリの中では、非同期でデータがやり取りを始めるので、複雑な処理をシンプルなコードで構築することができるものと思います。以下にGraphAIの特徴をまとめます。

・複雑なタスクのフローを管理する必要がある。
・複数のAIエージェントやAPIを組み合わせて利用できる。
・変更や拡張が頻繁に行われるシステムに適している。

なので、GraphAIは複雑さを「簡単に管理する」力を持っているので、その強みを活かしたアプリケーションが価値を発揮するのでないかと思います。

まだまだ分からない点は多いのですが、知らない単語などを調べつつ、次回からはGraphAIをforkしてアプリを作ってみたいと思います。
それでは次回お会いしましょう。

Discussion