Flowiseを試す
ドラッグ&ドロップでカスタマイズしたLLMフローを構築できるUI
クローン
$ git clone https://github.com/FlowiseAI/Flowise && cd Flowise
Dockerでやる。
$ cd docker
$ cp -pi .env.example .env
.envの中身はこんな感じ。
PORT=3000
DATABASE_PATH=/root/.flowise
APIKEY_PATH=/root/.flowise
SECRETKEY_PATH=/root/.flowise
LOG_PATH=/root/.flowise/logs
BLOB_STORAGE_PATH=/root/.flowise/storage
# CORS_ORIGINS="*"
# IFRAME_ORIGINS="*"
# NUMBER_OF_PROXIES= 1
# DATABASE_TYPE=postgres
# DATABASE_PORT=""
# DATABASE_HOST=""
# DATABASE_NAME="flowise"
# DATABASE_USER=""
# DATABASE_PASSWORD=""
# DATABASE_SSL=true
# DATABASE_SSL_KEY_BASE64=<Self signed certificate in BASE64>
# FLOWISE_USERNAME=user
# FLOWISE_PASSWORD=1234
# FLOWISE_SECRETKEY_OVERWRITE=myencryptionkey
# FLOWISE_FILE_SIZE_LIMIT=50mb
# DEBUG=true
# LOG_LEVEL=debug (error | warn | info | verbose | debug)
# TOOL_FUNCTION_BUILTIN_DEP=crypto,fs
# TOOL_FUNCTION_EXTERNAL_DEP=moment,lodash
# LANGCHAIN_TRACING_V2=true
# LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
# LANGCHAIN_API_KEY=your_api_key
# LANGCHAIN_PROJECT=your_project
# DISABLE_FLOWISE_TELEMETRY=true
基本的なところはまずここだけかな。
FLOWISE_USERNAME=XXXXXXXX
FLOWISE_PASSWORD=XXXXXXXX
OpenAIのAPIキーとかを設定する箇所がないようだけど、これはインタフェース側から設定するのかしら?LangChainのAPIキーはLangSmithのやつだと思うし。
とりあえずdocker-composeで起動
$ docker compose up
デフォルトだと3000番ポートで起動する
docker-flowise-1 | 2024-04-08 07:14:15 [INFO]: ⚡️ [server]: Flowise Server is listening at 3000
ブラウザでアクセスしてみる。最初に設定したユーザ・パスワードでログイン。
ログインできた。んー、ログイン前に中身が見えているような気がするんだが、大丈夫なのだろうか?
で、"Chatflows"からおそらく新しいフローを作成していくのだろうと思うけども、まずどんなものかを見て見るために、公開されているフローが利用できる"Marketplaces"を見てみる。
シンプルそうなやつで始めてみたいということで"Simple LLM Chain"を選んでみた。
こんな感じのフローになっている。右上の"Use Template"をクリック。
これで自分のフロートして編集等ができるようになる。フローをざっと見た感じ、モデルの設定とプロンプトテンプレートの設定があって、それらをLLM Chainにわたすという感じ。
なんかLangChainっぽいなぁと思って、左のプラスボタンをクリックして見ると・・・・
まんまLangChainだった。あとBetaだけどLlamaIndexもサポートされているらしい。
とりあえず、今のフローを設定して実際に動かすところまで。
モデルの設定。
APIキーはここでセットできる。一度セットすると後は使いまわしができる模様。
次に、プロンプトテンプレートの設定。プロンプトを入力。テンプレート変数も使えるし、LangChain Hubのプロンプトを持ってくることもできる様子。
最後にLLMChain。今回はモデルとプロンプトしか受けてないけども、Output ParserやInput Modelationの指定もできるらしい。そこからの出力を、さらに別のLLMChainに渡すか、そのまま出力するか、を決めれるっぽい。
実際に動かしてみる。右のチャットアイコンからチャット画面を開いて、適当に入力してみた。どうやらうまく行ってるっぽい。
今回はテンプレート変数は1つだけなのでこれでいいのだけど、複数の場合はどうなるんだろうか?それはまあ一旦置いておく。
作成したフローを保存する。フロー名も変更しておくと良い。
保存すると1つアイコンが増える。
このフローを外部から実行するためのコードスニペットを表示してくれる。HTMLに埋め込んだり、Python/JavaScriptで実行したり、curlで叩いたりできる。あとはフローそのものを別のFlowiseユーザに共有なんてのもできるっぽい。認証も設定できる。
今回はcurlで叩いてみる。
$ curl http://XXX.XXX.XXX.XXX:3000/api/v1/prediction/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX \
-X POST \
-d '{"question": "スペシャルなコーヒー"}' \
-H "Content-Type: application/json" | jq -r .
{
"text": "\n\n\"ブルーマウンテンコーヒー株式会社\"",
"question": "スペシャルなコーヒー",
"chatId": "234b48a2-17bf-4391-8a0e-c53a1f6b04ee",
"chatMessageId": "a81c421d-b66f-4d4e-9b90-3551aa2e909e"
}
つまり作成したフローごとにAPIが用意されるということになる。
あと設定アイコン。
- View Messages: フローへのアクセス履歴
- Upsert History: (おそらくベクトル検索用)データの登録履歴
- Configuration: 設定いろいろ
- Duplicate Chatflow: フローを複製
- Load Chatflow: フローをJSONファイルから読み込み
- Export Chatflow: フローをJSONファイルでエクスポート
- Delete Chatflow: フローを削除
という感じ。フローの履歴管理みたいなものはちょっと見当たらないので、JSONをgit管理するしかないかなぁ。
あと設定だけど、6つメニューがある。
レートリミットの設定
Starter Promptってのは、1回のチャット(何をもって1回というのかわからないけど)で何もメッセージがない≒初回のみ出力されるもの、っぽい?
音声入力(Speech-To-Text)の設定
フィードバックの有効・無効
ドメイン単位でのアクセス制限
解析・トレーシング連携の設定
という感じ。Flowiseが用意するインタフェース上でしか動かないものもありそうだけど、解析系の連携ができるのは良さそう。
で、トップに戻ると作成したフローはこんな感じでリストされるのでいつでも編集できる。
その他のメニューについてざっと。
- Tools: Function Callingのツール設定を行う
- Assitatns: OpenAI Assistantの設定を行う
- Credentials: モデルのAPIキーの設定を行う。
- Variables: おそらくだけどフローで使う変数の設定を行う
- API Keys: フローへのAPIアクセスに認証を有効にした場合のAPIキーの設定を行う
という感じ。
ちなみに、少し気になったので確認してみたけど、ログイン前にはさすがに見えないみたい。
実はリリース当初に少し触っていた記憶があるのだけど、当時は単にGUIでフロー作れるというだけのものだった。そこから久々に触ってみてのだけど、想像してたよりも機能充実してるなと個人的には感じた。
この手のGUIツール、メリット・デメリットがあって
- メリット
- 最初の障壁が低い
- 比較的スピード感を持って作成できる
- デメリット
- GUIで用意されている以外のことをやろうと思うとハードルが上がる
- 更新管理が難しい
- ブラックボックス的な面もある
というところで、プロトタイプ作るにはいいんだけど、商用で「そのまま」使うってのは厳しい、と思っている。
あと、Flowiseの特徴としては、LangChain/LlamaIndexがベースとなっているようなので、知識ゼロでもできなくはないと思うけど、LangChain/LlamaIndexを事前知識として持っている方がベター、つまり、最初の障壁というところについては少しメリット感が減る面もあるし、LangChain/LlamaIndexの進化も速いのでその辺の不安感も当然ある。
とはいえ、LLMの世界は非常に進化が早いので、一度書いたものが陳腐化してしまうとかはありがちだし、処理が複雑になっていくとコードも見通しが悪くなっていくので、そのへんを考えるとこういったGUIでフロー作成するツールというところのニーズはあるし、むしろ増えていくんじゃないだろうかという気もしている。
とはいえ、変更管理みたいなのがやっぱり欲しい。ここがなんとかなればなーというところで、以下の記事は少し気になっている