コミュニティセッション:Vercel Workflow

VVercel
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00ここで一度止めて、質問に移りたいと思います。
00:00:02まだお話しできることがたくさんあります。
00:00:05また、ワークフローに関するドキュメントもぜひ見てください。
00:00:08ワークフローの詳細や、それぞれの要素が
00:00:11どのように動作するかが詳しく書かれています。
00:00:14質問に合わせて、ブログ記事の内容も説明できます。
00:00:19これはあくまで導入ガイドだと思ってください。
00:00:23ワークフローの基本となる3つのプリミティブについて考えます。
00:00:25まず「ステップ」があります。
00:00:27中断と再開が可能なワークフローとステップです。
00:00:30外部からの任意のイベントを待機できる
00:00:31「フック」があります。
00:00:33そして、任意の時間を待機できる
00:00:36「スリープ」があります。
00:00:38数秒から数日間、
00:00:39あるいは数ヶ月間まで対応可能です。
00:00:42これらを使えば、多くの
00:00:44バックグラウンドパイプラインや、その自然な延長である
00:00:48エージェントなどもモデル化できます。
00:00:51詳細はまだ説明していませんが、
00:00:53質問の前にドキュメントの該当箇所を紹介します。
00:00:56エージェントは非常に自然な表現であり、
00:01:01基本的には長時間実行されるタスクと言えます。
00:01:05ループの中でLLMを呼び出し、ツールを実行し、
00:01:08サンドボックスを使ってメモリに書き込んだり、
00:01:11ファイルシステムを利用したりといったことを
00:01:13何度も繰り返します。
00:01:15トークンをストリーミングしてツールを呼び出し、
00:01:17またトークンをストリーミングして呼び出す。
00:01:20これをワークフローで行うことは非常に強力ですが、
00:01:25自分でゼロから構築するのは非常に厄介です。
00:01:27そこで、
00:01:27「Durable Agent」というクラスを用意しました。
00:01:29これを使えばオーケストレーションの多くを代行し、
00:01:32ワークフロー内でネイティブに動作します。
00:01:35一旦ここで止めて、皆さんの質問を伺いたいです。
00:01:39何でも聞いてください。
00:01:45やあ。
00:01:47実は、コミュニティの通知を管理するためのツールとして、
00:01:50ワークフローを使い始めています。
00:01:54通知の流入元があまりに多いためです。
00:01:58エージェントのおかげで通知の管理がとても楽になり、
00:02:01ワークフローもそういったタスクを処理するのに
00:02:03非常に役立っています。
00:02:05開発のあり方が大きく前進したと実感しています。
00:02:11最初の質問なのですが、
00:02:13新しいオープンソースを出すたびに
00:02:15懐疑的な人たちがたくさんいるので、
00:02:18それをクリアにしておきたいんです。
00:02:23ワークフローSDKはオープンソースですよね。
00:02:26そしてVercelワークフローもあります。
00:02:28実際、どれくらいオープンなのでしょうか?
00:02:31Vercelワークフローがあるということは、
00:02:32ワークフローSDKはVercelでしか動かないのでしょうか?
00:02:35他の環境でも簡単に使えますか?
00:02:39ええ。
00:02:40いい質問ですね。
00:02:41ワークフローについてよく聞かれます。
00:02:43結論として、ワークフローSDKはオープンソースのフレームワークです。
00:02:49初日からそのように位置づけています。
00:02:52「Worlds」という仕組みを提供しています。
00:02:54これはアダプターのようなものだと考えてください。
00:02:57Next.jsも同時期にアダプターをリリースしましたね。
00:03:00ワークフローSDKによるワークフローとは、
00:03:03長時間実行コードを記述するための手法に過ぎません。
00:03:06ワークフローやステップを使い、
00:03:08スリープ、タイマー、待機、フックなどを
00:03:11自由に使用できます。
00:03:12一番分かりやすいのはDockerの例えです。
00:03:15これは長時間実行されるワークフローを記述するための
00:03:18Dockerファイルのような構文なんです。
00:03:22デフォルトで3つのWorldを提供しています。
00:03:24まずは「ローカルWorld」です。
00:03:26ローカルでワークフローを実行すると、
00:03:28すべてファイルシステムに保存され、確認できます。
00:03:31ファイルシステムを検査するだけで
00:03:33ローカルでも高い可観測性が得られます。
00:03:36キューはメモリ内にあります。
00:03:38そのため、初日から
00:03:39素晴らしいローカル開発体験を提供しており、
00:03:42Vercel上で行っていることを
00:03:44ほぼモックできるんです。
00:03:45もちろん「Vercel World」も提供しています。
00:03:47Vercelにデプロイすれば、箱から出してすぐに
00:03:49多くの機能が使えます。
00:03:50すべてエンドツーエンドで暗号化されます。
00:03:52コンピュート層にも多くの労力を費やし、
00:03:54高速でプライベートなネットワークを維持しています。
00:03:58さらに「Postgresアダプター」も
00:04:00初日から提供しています。
00:04:02つまり、ワークフローを
00:04:03すでに本番環境で利用しているお客様もいて、
00:04:05同じコードを実行しつつ、
00:04:07VercelからPostgresへ容易に移行したり、
00:04:10その逆も可能です。
00:04:12自分でPostgresバックエンドを実行し、
00:04:14環境変数でそのPostgresインスタンスを指定すれば、
00:04:17ワークフローを開始できます。
00:04:19Worldアダプターが必要なテーブルを自動設定し、
00:04:25永続層として確実かつ安全に使用できるようになります。
00:04:29今後、さらに多くのWorldが登場予定です。
00:04:31コミュニティと連携も進めています。
00:04:32現在Cloudflare Worldを開発中です。
00:04:34AWS Worldも開発中ですね。
00:04:36どこでも実行できるように構築されています。
00:04:39言った通り、最初の3つの主要な環境については
00:04:43私たちが作業を進めました。
00:04:44他にもたくさん計画があります。
00:04:47私たちチームだけでなく、
00:04:50コミュニティからも多くの協力があります。
00:04:54視聴者からコメントで愛をいただいていますね。
00:04:57実際に今Vercelワークフローを使っている方もいます。
00:05:02ワークフローはVercelへの素晴らしい追加機能だという声も。
00:05:08こういったものについて、よく上がる質問がもう一つあります。
00:05:12ドキュメントにはコードスニペットがありますが、
00:05:15フルアプリや、より複雑なシナリオの例はありますか?
00:05:19理論的で簡単な初心者向けの内容だけでなく、
00:05:23実際の業務に役立つものを探している人たちがいます。
00:05:27ええ、画面を共有してもよろしいですか。
00:05:31ああ、もちろんです。
00:05:32共有してください。
00:05:34ちょうどその話をしようと思っていました。
00:05:37Chromeだと共有に4回クリックが必要なんですよね。
00:05:40よし、これで。
00:05:422つ紹介したいことがあります。
00:05:441つはワークフローのサンプルです。
00:05:46私たちが管理しているレポジトリです。
00:05:48デモでよく使っています。
00:05:50先ほどお見せした誕生日カード生成ツールもそうです。
00:05:54それから、「Durable Agent」を使った
00:05:55フライト予約アプリもあります。
00:05:58Postgresで動かす方法も紹介しています。
00:06:00Vercel以外にデプロイする方法のPRもあります。
00:06:03なので、サンプルはたくさんあります。
00:06:08もう1つ、今力を入れているのが
00:06:09「クックブック」です。
00:06:12このページにはさらに多くの
00:06:15コンテンツを追加していく予定です。
00:06:19単純なコードを見せるだけではなく、
00:06:21ワークフロー内の一般的なパターンを
00:06:23多数紹介しています。
00:06:24Vercel自身がどのようにワークフローを
00:06:27使っているかというエキサイティングな例もあります。
00:06:31例えば、「分散アボートコントローラー」を
00:06:32使うためのガイドを書きました。
00:06:34フックとスリープとステップのプリミティブを見ると、
00:06:37私たちはそれらを基本単位として考えています。
00:06:41その上に楽しいものをたくさん構築できます。
00:06:44例えば、v0は停止ボタンを機能させる仕組みとして
00:06:48分散アボートコントローラーを使っています。
00:06:51v0のチャットで停止ボタンを押すと、
00:06:53ワークフローとサポートコントローラーを使って、
00:06:56バックグラウンドの全プロセスを停止するんです。
00:07:00これからもここに追加していきます。
00:07:01これら2つが、単純なコードスニペットを超えて、
00:07:03その先へ進むための良い場所だと思います。
00:07:08実用的な例ですね。
00:07:13素晴らしい。
00:07:13かなりリアルな例ですね。
00:07:16私たちがVercelで実際に行ってきたことや、
00:07:18お客様が取り組んでいるアイデアが含まれています。
00:07:21気に入りました。
00:07:23ええ。
00:07:26今や誰もがAIコーディングエージェントを使っています。
00:07:31ですから、探求するには最適な場所です。
00:07:36では、コーディングエージェントのサポートについてはどうですか?
00:07:41彼らがこの新しいワークフローのやり方を習得するのは
00:07:45どれくらい簡単ですか?
00:07:47先ほど少し触れましたが、
00:07:512つの素晴らしい点がありました。
00:07:541つ目は、エージェントが、人間が長い間
00:07:58プログラミングしてきた方法を学習していることです。
00:08:01すべて私たちの好みのプログラミング方法から訓練されています。
00:08:06ワークフローのDXには多くの選択肢がありました。
00:08:08私たちはSDKを極めて軽量に保つという手法を選びました。
00:08:11ほとんどがJavaScriptであり、
00:08:13ディレクティブです。
00:08:14エージェントはそれをよく理解しています。
00:08:15また、エージェントにとって
00:08:17大規模な並列処理をモデリングするのは容易です。
00:08:19彼らはプロミスをうまく扱えます。
00:08:22ステップを実行する際、
00:08:23タイムアウトを設定したい場合、
00:08:24ワークフローのパターンはシンプルです。
00:08:27基本的には「promise.race」を使い、
00:08:29ステップとスリープを競わせるだけです。
00:08:34JavaScriptの基本を知っていれば、
00:08:37非常に自然な思考プロセスです。
00:08:40エージェントはそれを本当によく捉えています。
00:08:43彼らはすでに困難なことのやり方を知っているからです。
00:08:47彼らは非常に複雑なフレームワークコードを書く方法を知っています。
00:08:50私たちはNext.jsでそれを使っています。
00:08:53常にNext.jsで要素を使っています。
00:08:56彼らはフレームワークコードをよく理解しています。
00:08:59SDKに負荷をかけない
00:09:02ワークフローへの移行も非常にスムーズです。
00:09:05多くの選択肢を持たせると、
00:09:08SDKが複雑化しがちです。
00:09:11人間にとって複雑になるだけでなく、
00:09:13読むべきドキュメントが増えるからです。
00:09:15膨大なオプションと複雑さを伴うSDKは、
00:09:18読むべきドキュメントが山ほどあるため、人間にとって複雑なだけではありません。
00:09:22これは私がワークフローに取り組む前、
00:09:23競合他社の製品を使っていた時に感じていた問題でもあります。
00:09:26ワークフローシステムのDX(開発者体験)は、
00:09:29理論上は素晴らしいものの、実際に実行するのは非常に難しい、
00:09:32と感じることが多かったのです。
00:09:33あるいは、巨大な取扱説明書を読まなければなりませんでした。
00:09:36エージェントもその点では苦労します。なぜなら、
00:09:38すべてをコンテキストに含める必要があるからです。
00:09:40あるいは、もしそれを学習させたとしても、
00:09:42他の特定の例では見られなかったことですが、
00:09:45将来的にSDKを変更するのが、
00:09:47非常に困難になってしまうのです。
00:09:49しかし、物事を変更していく中で、
00:09:50バージョンが変わると、古いモデルは、
00:09:53自分が学んだことに固執し続けてしまうからです。
00:09:57そうですね。一つは、私たちがエージェントは――
00:10:01長い回答になりましたが。
00:10:02エージェントがワークフローに非常に適していると確信したことです。
00:10:04そしてもちろん、私たちのワークフロー用のスキルも提供しました。
00:10:07ですから、`npx skills@vercel/workflow`を実行すれば利用可能です。
00:10:11このスキルを見てみると、面白いポイントがあります。
00:10:14私が今言ったことを証明する良い例として、ワークフロースキルは基本的に、
00:10:17単に指示を出すだけです。
00:10:20例えば「race」のような処理をどのように実装できるかという、
00:10:23非常に基本的なコード例をいくつか示し、
00:10:25あとはドキュメントを読むように促すだけです。これは、
00:10:27NPMパッケージと一緒に同梱しているものです。
00:10:30つまり、エージェントは基本的にソースコードを参照するだけで、
00:10:34ワークフローの記述も非常に上手になるということです。
00:10:37そして、そのドキュメント付きのスキルがあれば、
00:10:38常に最新の状態に保たれるので、非常に便利です。
00:10:41まさにその通りですね。
00:10:42パッケージと一緒にドキュメントを同梱しているので、常に最新に保たれ、
00:10:44正しいバージョンを参照し続けることができます。
00:10:47そのため、もし私たちがSDKを変更したとしても、
00:10:49あなたが古いバージョンのクライアントを使っていた場合でも、
00:10:51私たちが提供している少数のオプションについては、
00:10:54あなたのLLMがローカルでアクセスできるのです。
00:10:57素晴らしいですね。
00:10:58チャットからもう一つ質問が来ています。
00:11:00「1回の実行で、いくつまでワークフロー、
00:11:03サブワークフロー、ステップを持つことができますか?」という質問です。
00:11:07なるほど、いい質問ですね。
00:11:11ええ。
00:11:13素晴らしい質問です。
00:11:16デプロイ時のワークフローの同時実行数についてですが、
00:11:22Vercelのことを想定して話します。
00:11:24Vercelにデプロイする場合、
00:11:26ステップとワークフローの同時実行数は、Vercel関数の
00:11:30同時実行制限によって決まり、確か1万から10万程度だったと思います。
00:11:33プランのティアによって異なります。
00:11:36ですが基本的に、ワークフロー自体が
00:11:39同時実行数を制限することはありません。
00:11:41とは言え、ランタイムが実行できるかどうかという点では、
00:11:44ワークフローにおけるサスペンド(一時停止)とレジューム(再開)は、
00:11:46すべてのステップの入出力を追跡するためのイベントログを
00:11:50保持するという仕組みになっています。
00:11:53そのため、イベントログが非常に大きくなると、
00:11:55例えば1,000個のステップを順番に実行したり、
00:11:59あるいは1,000個のステップを並列実行したりすると、
00:12:01イベントログが蓄積されていきます。
00:12:03ワークフローの実行時間が長くなるにつれて、
00:12:06リプレイのためにイベントログ全体を読み込む必要が出てくるのです。
00:12:09もしTemporalの環境から来られたのであれば、
00:12:10確かその制限は5万イベントか50メガバイトのストレージ容量ですね。
00:12:14私たちはこれをワークフロー上で公開しました。
00:12:16私たちにも独自の制限があります。
00:12:18私たちのドキュメントにあるはずです。
00:12:22そうですね、たしか
00:12:26Vercelのドキュメントに記載されています。
00:12:30後でリンクを共有します。
00:12:33探さないといけませんが。
00:12:34ですが、制限としては――
00:12:36多くのワークフローを並列で実行できます。
00:12:40たくさんの子ワークフローを開始できます。
00:12:42そのどれもイベントログには影響しません。
00:12:44イベントログに影響を与えるのは、
00:12:45大量のステップを並列で処理することです。
00:12:47そのため、1,000から10,000のステップを
00:12:49並列で実行するような場合、タイムアウトの問題が発生し始めます。
00:12:52ワークフローの実行時間が長くなる可能性があります。
00:12:55ですが、5,000ステップを実行しているエージェントでも問題なく動いています。
00:12:59ステップの最後の方では、
00:13:01ステップ間のレイテンシーが15秒から20秒かかるようになりますが。
00:13:04用途によっては、それが非常に長く感じるかもしれませんし、
00:13:06バックグラウンドタスクとして5,000ステップ実行する必要があるなら、
00:13:11それで問題ないというお客様もいらっしゃいます。
00:13:13同時に、これは現在取り組んでいる
00:13:15Workflow SDK 5における大きな注力分野でもあります。
00:13:19現在ベータ版であるSDK 5での多くの取り組みは、
00:13:21DXを最適化できた今、
00:13:25このリプレイ問題を根本的に解決しようとしています。
00:13:29Temporalなどを使っている場合、最終的に制限に達してしまいます。
00:13:34その場合の解決策は、常に「5,000イベントに達したら、
00:13:37ワークフローを終了し、
00:13:38新しいワークフローとして再開する」ことでした。
00:13:40それは現在のワークフローでも行えます。
00:13:44必要であれば新しいワークフローを開始できます。
00:13:46しかし、私が考える正しい解決策は、
00:13:48ランタイムを改善し、
00:13:50サスペンドとレジュームのコストをイベントログの長さに依存させず、
00:13:52O(1)にすることです。
00:13:54現在、Wasmとスナップショットベースのランタイムについて、
00:13:56このリプレイ問題を完全に排除できるか模索する作業を行っています。
00:13:59それが実現すれば、理論上は無限の同時実行数と、
00:14:03無限に長いワークフロー実行が可能になります。
00:14:04さて、時間も迫ってきました。
00:14:06そのリプレイを完全になくすべく、現在探索を行っているところです。
00:14:09それが実現すれば、極めて高い並行処理性能と、
00:14:12少し触れられましたが、
00:14:19次はどうなるのでしょうか?
00:14:21皆が注目すべきことは何でしょうか?
00:14:22はい。
00:14:25Workflow 4が一般公開(GA)された通り、
00:14:27Workflow 5が現在ベータ版です。
00:14:28いつGAになるかのスケジュールはまだありません。
00:14:31しかし、Workflow 5の主な焦点は、
00:14:33パフォーマンスです。
00:14:36先ほど話したように、継続的な再開について気にしなくて済むように、
00:14:39制限の問題に取り組んでいます。
00:14:42また、ネイティブな同時実行制御も追加されます。
00:14:44ワークフローの初日からあったステップ、フック、
00:14:47時間、待機、スリープといったプリミティブに加えて、
00:14:50「lock(ロック)」という新しいプリミティブを追加します。
00:14:52これにより、ワークフローがロックを待機したり、
00:14:55同時実行のスロットを待機したりできるようになります。
00:14:57例えば20個のワークフローを並列で実行しつつ、
00:15:00同時実行数を1分あたり1に制限するとします。
00:15:05それらすべてがロックを待機し、
00:15:08ロックが解放されると再開されます。
00:15:11これは大規模な同時実行を制御する、
00:15:15非常に素晴らしいネイティブな方法です。
00:15:16さらに、エージェントのストリーミング体験を向上させます。
00:15:18ワークフローの大きな用途として、
00:15:20バースデーカードのような伝統的なスタイルのワークフローにも、
00:15:23AIエージェントにも活用できます。
00:15:24SDKには多くの意見がありますが、ストリーミングや
00:15:28サンドボックスとどう連携するかなど、
00:15:31パフォーマンスを改善し、
00:15:34エージェント用途におけるDXをさらに向上させていきます。
00:15:36今後にご期待ください。
00:15:39あるいはAIエージェント向けにも使えます。そのSDKに関しては、
00:15:43ストリーミングやサンドボックスとの連携について多くの知見を持っています。
00:15:47他にもいくつか質問をいただいていますので、
00:15:49チャットで非同期に回答します。
00:15:54プラニート、今日はお越しいただき、
00:15:55皆さんとお話ししてくださりありがとうございました。
00:15:56エイミー、こちらこそ。
00:15:58とても楽しかったです。
00:16:01皆さん、ご視聴ありがとうございました。
00:16:04来週木曜日にもセッションを予定しています。
00:16:05ぜひまたお会いしましょう。
00:16:07それでは、ご視聴ありがとうございました。
00:16:09また来週木曜日にゲストをお招きして
00:16:14配信を行いますので、ぜひご覧ください。
00:16:15さようなら。

Key Takeaway

Workflow SDKは、ステップ、フック、スリープの3つの基本プリミティブを用いて長時間実行タスクやAIエージェントをモデル化し、環境に依存しないポータブルなワークフロー構築を可能にする。

Highlights

  • Workflow SDKは初日からオープンソースとして位置づけられ、ローカル環境、Vercel、Postgresの各環境でアダプター(World)を介して実行可能である。

  • Dockerファイルのような構文で長時間実行コードを記述でき、ローカル開発時にはファイルシステムへ保存することで高い可観測性を実現する。

  • Durable Agentクラスを使用することで、オーケストレーションを自動代行し、ネイティブなワークフロー実行が可能となる。

  • 大規模なワークフロー実行時に発生するイベントログの蓄積と制限課題に対し、次期バージョンWorkflow 5ではWasmとスナップショットを用いたO(1)のコスト最適化を模索している。

  • Workflow 5では、同時実行スロット制御を実現する「lock」プリミティブが追加され、大規模な並列処理の管理が容易になる。

Timeline

ワークフローの基本概念とエージェントモデル

  • ワークフローは「ステップ」「フック」「スリープ」の3つのプリミティブで構成される。
  • スリープは数秒から数ヶ月という長期の待機に対応する。
  • Durable Agentクラスがオーケストレーションを代行し、LLMやツールの実行を自動化する。

ワークフローの基本単位であるステップ、フック、スリープを組み合わせることで、複雑なバックグラウンドパイプラインを構築できる。特にエージェント開発においては、トークンのストリーミングやツールの実行を繰り返す長時間実行タスクがワークフロー上でネイティブに動作する。ゼロから構築する手間を省くためにDurable Agentクラスが用意されており、メモリ書き込みやファイルシステム操作を含むループ処理を簡素化する。

SDKのオープン性とポータビリティ

  • Workflow SDKはアダプター「World」を介して異なるプラットフォームで動作する。
  • ローカルWorldはファイルシステムを検査することで高い可観測性を提供する。
  • Postgresアダプターを使用すれば、既存のインフラ上でも確実かつ安全に永続層を運用できる。

SDKは特定の環境に依存せず、Vercel以外でも利用可能なオープンソースフレームワークである。ローカル環境ではファイルシステム、クラウド環境ではVercelやPostgresをバックエンドとして利用できる。今後はコミュニティ協力のもと、CloudflareやAWS向けのアダプター開発も進行中である。

実務的な実装例とコーディングエージェントの活用

  • GitHubのサンプルリポジトリやクックブックで、実用的なパターンを確認できる。
  • 分散アボートコントローラーなど、SDKの機能を組み合わせた高度な設計が可能である。
  • SDKには専用スキルが含まれ、AIエージェントが最新のAPI仕様を参照してコードを記述できる。

単純なスニペットだけでなく、フライト予約や分散アボートコントローラーなど、複雑なシナリオをサンプルとして提供している。AIコーディングエージェントを用いる場合、SDKのドキュメントがパッケージに同梱されているため、バージョン変更時も最新の仕様を正しく参照し、複雑なワークフローコードを記述できる。

パフォーマンス制限と将来の最適化

  • 同時実行数はVercel関数の制限に依存し、大規模並列実行時にはイベントログの肥大化が課題となる。
  • Workflow 5ではWasmとスナップショットを用いてサスペンド・レジュームのコストをO(1)に最適化する。
  • 新しい「lock」プリミティブにより、ワークフローの同時実行数や並列処理を制御可能になる。

現在のワークフローシステムはリプレイ時にイベントログ全体を読み込む必要があるため、ステップ数が非常に多い場合にレイテンシーが発生する。Workflow 5ではこの根本的なリプレイ問題を解決し、理論上無限の実行時間を実現することを目指している。同時に、並列実行を制御するためのロック機能を導入し、運用コストを低減する設計が進行中である。

Community Posts

No posts yet. Be the first to write about this video!

Write about this video