清水理史の「イニシャルB」
AIが「理解」するから、API仕様書のコピペでアプリができあがるローコード開発環境「Flowise」を試す
各種APIやPDFの情報をもとにチャット形式で回答するアプリの開発も簡単
2023年8月21日 06:00
FlowiseAIが提供している「Flowise」は、大規模言語モデル(LLM)を使った開発のためのライブラリとして有名な「LangChain」と同様に、複数の機能を組み合わせたチャットアプリをGUIで設計できるローコードツールだ。
ユーザーとチャットでやり取りする「Chat Models」や、ファイルを読み込むための「Document Loaders」、APIを呼び出すための「API Chain」など、あらかじめ用意された機能のパーツを画面上に並べ、各パーツの間を線でつないでいくだけで、複雑な処理を実現できる。
中でも注目は「API Chain」だ。単にAPIを呼び出すのでなく、APIのドキュメントを貼り付けるだけでChatGPT(GPT-3.5 Turbo)により仕様を「理解」し、勝手に適切なリクエストを生成して回答を取得してくれる、その賢さは感動ものだ。
APIの仕様を調べる必要なし
もう、どのパラメーターを使って、どの形式で指定して、戻ってきたJSONからどの値を取り出すか、などとドキュメント(仕様書)を熱心に読み込む必要はない。
同じドキュメントを「GET API Chain」パーツに貼り付けて、いくつかのパーツとつなげれば、勝手にChatGPTが内容を理解してリクエストを生成し、データを取得するチャットアプリが完成する――。
Flowiseは、こんな感じで、誰でもGUI環境で簡単にチャットアプリを作ることができるローコードの開発ツールだ。
▼FlowiseAI/Flowiseのウェブサイト
FlowiseAI
大規模言語モデルを利用した複雑な処理を実現する場合は、LangChainを使うのが一般的だ。PythonやTypeScriptのコードとして、LangChainで提供されている機能を活用することで、複雑なテンプレートを作成したり、ドキュメントに対して質問したりするアプリを作ることができる。
Flowiseは、このLangChainのTypeScript版をベースにした開発ツールで、LangChainで提供されているいくつかの機能をパーツとして実装し、コードを記述する代わりに、パーツにパラメーターを設定し、それぞれをつなぐことで、フロー処理を実現することが可能になっている。
まずはスゴさを体験してほしい
話の順番は前後するが、動作を見た方が分かりやすいので、結果(開発したチャットアプリの動き)から先に紹介しよう。以下が、今回筆者が開発したもので、「東京のNHK総合1で放送中の番組を教えて」のような質問に対し、NHKが公開している「NHK番組表API」を利用して番組情報を取得し、回答する。開発したといっても、あらかじめ用意されているAPI Chain用のサンプルを、少し変えただけだ。
プロンプト(質問)で放送中の番組を知りたい地域とチャンネルを指定することで、番組の名前を回答する。なお、Flowiseでは、開発する対象を「フロー(Flow)」と呼ぶので、以降はこの名称を使う。
特筆すべきは、このフローで筆者が手動で設定したAPI関連のパラメーターは、わずかしかない点だ。
冒頭でも触れたように、FlowiseのAPI Chainでは、APIの仕様が書かれたドキュメントを与えることで、その内容を理解して、自動的にリクエストを生成してくれる。
筆者がこのフローで与えたドキュメントは、以下の2つの内容を多少手を加えた上で「コピペ」したものだ。
▼NHK番組表APIの仕様(NHK)
Now On Air API(ver.2)
▼NHK番組表APIのリクエスト方法や出力データの仕様(NHK)
ドキュメント リクエストの説明
この内容がフローの中の「GET API Chain」というパーツの「API Documentation」というパラメーターに貼り付けられている。
筆者が手を加えた内容は、ドキュメントのテキストの「###」で見出しを付けて理解しやすくしたことと、リクエストに必要なAPIキーについて追記したこと、そして「Response json Data」として出力データの内容について「前の番組」「現在の番組」「次の番組」と補足したことのみだ。
ユーザーが入力した質問に含まれる地域やチャネルの情報を元に、このドキュメントを参考にしてChatGPTが自動的にAPIのリクエストを生成する。そして、出力されたデータから番組情報を取り出し、それをチャットで返答する、という仕組みだ。
筆者は、これまで気象庁のAPIをRPAで使うなど、API関連の記事をいくつか執筆したが、そのたびに、APIのドキュメントやネット上の識者が残してくれたノウハウを読み込み、さらに何度も試行錯誤して、ようやく最終的な出力を得るという苦労をしてきた。
まさか、こうした苦労が、ドキュメントのコピペ一発で解決する時代が来るとは、想像もしていなかった……。
ちなみに、同じことは、前述したLangChainの「API chains」(ドキュメントはこちら)でも実現できる。コードを書ける人にとっては、驚くべきことではないのかもしれないが、これがGUIで誰でも簡単に扱えるFlowiseに感心してしまった。
Flowiseの使い方
このように、チャットアプリを簡単に作れるFlowiseだが、実際に使うには、それなりの準備が必要になる。
インストール方法の詳細は以下のGitHubのドキュメントにも記載されているが、Flowiseの動作環境は、Node.jsまたはDockerのいずれかになる。
▼Flowise(GitHub)
GitHub FlowiseAI/Flowise
筆者は、Dockerの環境の方が慣れているので、今回はDockerを利用した。筆者は自宅のサーバーの仮想マシン(1コア1GBメモリでOK)で動作させたが、ちょっと試したいというだけなら、Windows 11のWSL2+Docker for Desktopでも動作を確認できたので、こちらを利用するといいだろう。
なお、LightSailなどの低価格なクラウド環境のVMも可能だが、Flowiseにユーザーとパスワードを設定したり、その場合は接続元のIPアドレスを制限したりと、セキュリティに注意が必要だ。内部にOpenAIなどのAPIキーを保存するため、場合によっては第三者に悪用される恐れがある。基本的には内部のPCやサーバーで利用すべきだろう。
Dockerの場合は、特に難しい操作は必要ない。次のように、ドキュメントにも記載されている通りGitHubからクローンして、環境設定ファイルを用意し、Docker-Composeで起動するだけだ。
git clone https://github.com/FlowiseAI/Flowise.git
cd Flowise/docker
cp .env.example .env
docker compose up -d
これで「http://サーバーのアドレス:3000」でFlowiseが利用できる。
API連携フローを作る
細かい動作は使いながら覚えていただくとして、今回は、冒頭で紹介したフローの作り方を簡単に紹介する。
事前に必要なのは、OpenAIとNHKのそれぞれのAPIにアクセスするための2つのAPIキーだ。OpenAIとNHKのサイトでユーザー登録して取得しておいてほしい。
STEP 1:テンプレートを読み込む
まずは、トップページの「Marketplaces」からサンプルを読み込む。バージョンによってサンプルが変わることがあるので、もしかすると名前などが変わっている場合があるかもしれないが「API Agent」というフローを選択し、「Use Template」で編集を開始する。
STEP 2:テンプレートの使わないパーツを削除する
このテンプレートには、GETとPOSTの両方が使える構成になっているが、今回は画面をシンプルに見せたいので、POST側のAPIは削除してしまう。中段にある「Chain Tool」「POST API Chain」「ChatOpenAI」の3つのパーツにマウスカーソルを合わせ、ゴミ箱アイコンから削除しておく。
STEP 3:OpenAIのAPIキーを登録する
続いてOpenAIのAPIを呼び出す際に利用するAPIキーを登録する。2つある「ChatOpenAI」のいずれかの「Connect Credential」をクリックし、「Create New」からOpenAIのAPIキーを登録する。一度登録すると、Flowiseに保管されるため、他のパーツやフローからは、リストから選ぶだけで設定できるようになる。
STEP 4:モデルを選択する
ChatOpenAIでは、利用する言語モデルを選択できる。今回は、「gpt-3.5-turbo」を利用した。利用するAPIによっては、入力するAPIドキュメントやAPIリクエストの結果のデータのサイズが4096トークンを超えてしまうことがある。その場合は、「GET API Chain」につながっている方の「ChatOpenAI」のモデルを「gpt-3.5-turbo-16k」などに変更しておく(ただし、料金も2倍ほどになるので注意)。
STEP 5:APIドキュメントを貼り付ける
いよいよ核心となる、APIの設定だ。「GET API Chain」の「API Documentation」を開き、冒頭で紹介したNHKのAPIドキュメントのページ内容を貼り付け、APIキーなどの情報を追記する。今回貼り付けたのは次のようなテキストだ。
###Resource URL
https://api.nhk.or.jp/v2/pg/now/{area}/{service}.json?key={apikey}
###Resource Infomation
項目 説明
リクエスト制限 なし
認証 APIキーによる認証
HTTP メソッド GET
レスポンスフォーマット json
レスポンスオブジェクト NowOnAirList
API バージョン v2
利用回数制限 1500回/日
###Request Parameters
パラメータ 必須 説明 値の例
area ◯ 地域ID(3byte)。130:東京
service ◯ サービスID (2byte)。 g1:NHK総合1
apikey ◯ APIキー(32byte)。 _ENTER_YOUR_KEY_
###area
010:札幌, 011:函館, 012:旭川, 013:帯広, 014:釧路, 015:北見, 016:室蘭, 020:青森,
030:盛岡, 040:仙台, 050:秋田, 060:山形, 070:福島,080:水戸, 090:宇都宮, 100:前橋,
110:さいたま, 120:千葉, 130:東京, 140:横浜,150:新潟, 160:富山, 170:金沢, 180:福井,
190:甲府, 200:長野, 210:岐阜, 220:静岡, 230:名古屋, 240:津, 250:大津, 260:京都,
270:大阪, 280:神戸, 290:奈良, 300:和歌山,310:鳥取, 320:松江, 330:岡山,340:広島,
350:山口, 360:徳島, 370:高松, 380:松山, 390:高知, 400:福岡, 401:北九州, 410:佐賀,
420:長崎, 430:熊本, 440:大分, 450:宮崎, 460:鹿児島, 470:沖縄
###service
g1:NHK総合1
g2:NHK総合2
e1:NHKEテレ1
e2:NHKEテレ2
e3:NHKEテレ3
e4:NHKワンセグ2
s1:NHKBS1
s2:NHKBS1(102ch)
s3:NHKBSプレミアム
s4:NHKBSプレミアム(104ch)
r1:NHKラジオ第1
r2:NHKラジオ第2
r3:NHKFM
n1:NHKネットラジオ第1
n2:NHKネットラジオ第2
n3:NHKネットラジオFM
###apikey
ApXXxxXXXXXXXxXXXxXXXXXXxXXXXXX
###Response json Data
previous:前の番組
present:現在の番組
following:次の番組
STEP 6:パラメーターを日本語化する
STEP4までで動作するが、Flowiseの各パーツに設定されている情報が英語のため、質問の仕方によってはチャットの回答が英語になる場合がある。そこで、Additional Parametersなど、各パーツのプロンプトを日本語に翻訳しておく。英語をコピーしてウェブ翻訳などで日本語にして貼り付けておけばいい。
PDFチャットも簡単
このように、Flowiseを利用すると、パーツを配置して接続し、パラメーターを設定するだけで、複数の処理を組み合わせたチャットアプリを簡単に作ることができる。サンプルがたくさんあるので、そこから選んで使ってみることをおすすめするが、冒頭で示したようなアップロードしたPDFを元にチャットするアプリなども、簡単に作れる。
Flowiseそのもののドキュメントが、現時点ではあまり充実しているとは言い難いので、慣れるまでは苦労する。しかし、不足する情報はLangChainのドキュメントなども参照しながら使えば何とかなる。基本は、パーツにあるコネクタを見て、そのパーツをつないでいけばいい。
LangChainの入門や学習用としても役立ちそうなので、ぜひ使ってみることをおすすめする。
(NHK番組の情報提供:NHK)