はじめに
前回は、AlmaLinux上にセルフDify環境を構築してみました。
今回は構築Dify上で基本となるチャットBOTアプリを作ってみようと思います。
手順は以下の通りです。
- 利用したいLLMのAPIキーを取得する
- APIキーをDifyに設定する
- DifyでチャットBOTアプリを作成する
今回はLLMとしてOpenAI(GPTモデル)を利用したいと思います。
なお、DifyはOpenAI以外にも、Google Geminiや、Azure OpenAI、AWS Bedrockなど、様々なLLMと連携することが可能です。
1.OpenAIのAPIキーを取得する
今回はChatGPTでおなじみのGPT系のLLMモデルを利用するために、OpenAIのAPIキーを取得します。
なお、OpenAPIのAPIを利用するのは基本的には有料になるため、アカウント作成後に任意の額をチャージしておく必要があります。(時期によっては初回アカウント作成時に無料枠が提供されることもあるようです。)
API取得までの手順は以下の通りです。
- OpenAIのアカウントを作成
- 支払用のクレジットカード情報を登録
- チャージする
- APIキーの発行
OpenAIのアカウントを持っていない場合、まずはアカウントを作成します。
OpenAI:https://openai.com/index/openai-api/
OpenAIのサイトにアクセスして、トップページの「Sign up」をクリックします。
アカウント作成ページに遷移するので、任意の情報でアカウントを作成してください。
なお、GoogleやMicrosoftのアカウントを持っている場合は、それらのアカウントで連携することも可能です。
すでにアカウントを持っている場合は、真ん中ぐらいにある「ログイン」をクリックして、ログインしてください。
アカウントが準備できてログインすると管理画面になるので、まずは支払用のクレジットカード情報を登録するために、右端のアイコンをクリックして、「Your Profile」をクリックします。
左ペインの「Billing」をクリックして、メインビューで「Payment methods」タブをクリックし、「Add payment method」をクリックします。
必要な情報を入力し、「Add payment method」をクリックして、カード情報を登録します。
登録が完了すると、Payment methodsのタブにカード情報が表示されます。
カードが登録できたら、同じくBillingの「Overview」タブに移動して、「Add to credit ballance」をクリックします。(↑の画像では$4.52となっているのは、既に一度購入しているからです。初回の場合は0になっているか、無料枠があればその額が表示されていると思います。)
「Amount to add」に購入額を入力し、「Payment method」で先程登録したクレジットカード情報を選択して、「Continue」をクリックし、購入します。
2024年11月現在、一度の購入額は、$5~$95となっているようです。
購入が完了して、Overviewに戻ると、Credit balanceに元の残高+購入額の合計が表示されていると思います。
とりあえず利用してみるなら$10程を購入しておけば、それなりに試してみることができると思います。
API利用の金額はプライスリストページに記載されているので、細かく知りたい方は見てみてください。
ここまで出来れたら、APIキーを発行する準備が完了です。
次にAPIキーの発行を行います。上部メニューの「Dashboard」から、左ペインにある「APIkeys」⇒「Create new secret key」をクリックします。
「Name」に任意のAPIキー名を入力して、「Create secret key」をクリックします。
そうすると、↑のような画面でAPIキーが表示されます。
ここで注意して欲しいのは、必ずこの画面に表示されているAPIキーの情報をメモ帳等に保管してください。(「Copy」ボタンをクリックするとコピーができます。)
なぜかと言うと、APIキーは作成時のこのタイミングでしか表示することができないからです。
APIキーをメモ帳等に保存せず、「Done」を押してしまうと、その後二度とAPIキーの文字列が分からなくなるので、再発行する羽目になります。
完了すると、API keysの画面に発行したAPIキー名が表示されます。右端の鉛筆マークをクリックすると、APIキーのパーミッションを変更することができますが、「SECRET KEY」に表示されているAPIキーの文字列はマスクされていて見ることは出来ないため、前述の通り必ず作成時に表示されたものをどこかに保存するようにしてください。
ここまでで、OpenAPIのAPIキーを発行することができました。
2.APIキーをDifyに登録する
OpenAPIのAPIキーが発行できたので、Difyで利用できるように登録を行います。
DIfyにログインして、右上のアイコンをクリックして、「設定」を選択します。
左ペインから「モデルプロバイダー」を選択し、「Open AI」のところにマウスカーソルを合わせると表示される「セットアップ」をクリックします。
「API Key」のところに、先程発行したOpenAIのAPIキー(超長い文字列)を入力して、「保存」をクリックします。
登録が完了すると、↑のようにOpenAIのところの「API-KEY」のところに緑のランプが点灯します。これでAPIキーの登録が完了です。
3.DifyでチャットBOTアプリを作成する
これでようやくDifyでLLMにOpenAIのGPT系モデルを使う準備ができました。
ここからは、試しにオーソドックスなチャットBOTを作ってみます。
上部メニューの「スタジオ」で移動して、アプリを作成するの「最初から作成」をクリックします。
このスタジオというのが、Difyで構築したアプリを管理する場所になっています。
アプリの作成画面が表示されるので、アプリタイプで「チャットボット」、オーケストレーションの方法で「Chatflow」を選択し、名前のところに任意の名前を入れて、「作成する」をクリックします。
オーケストレーションの方法で、初心者向けと書かれている「基本」を選ぶこともできますが、アプリの構造が複雑化していくと、個人的にはChatflowで作った方がアプリの動きなど含め分かりやすかったので、先を見据えて今回はChatflowで作成します。
オーケストレーションの方法でChatflowを選択してアプリを作成すると、フロー作成画面に遷移します。
ちなみに、この時点で最低限のチャットBOTは完成している状態となります。
「LLM」のところをクリックすると、GPTのモデルを選択することができるので、任意のモデルを選ぶことが可能です。記事作成時のデフォルトでは「gpt-4」がデフォルトで選択されていました。
ただ、gtp-4はAPIの利用料金が若干高めのため、なるべく安価に利用したいのであれば、下の方にある「gpt-3.5-turbo」などを選ぶのが良いと思います。
同じくLLMの「SYSTEM」欄でチャットBOTに色々な定義(指示)をすることができます。
例えば、↑のような呪文を書いてみます。
「プレビュー」をクリックすると、その時点までの設定を反映したチャットBOTを試してみることができるので、入力欄で適当にお話してみます。
「あなたは誰?」と聞くと、先程定義(指示)したように、自分はドラえもんだと名乗り、且つ語尾に「ぼくドラえもん!」を付けています。
ここまでくれば完成まであと少しです。
アプリが完成したら、外部からアクセスできるように公開設定を行います。
右上の「公開する」をクリックして、公開してみます。
公開出来ると、「アプリを実行」からアプリのURLを開くことができます。
「http://DifyのホストサーバのIP/chat/ランダム文字列」といったURLでブラウザが開き、チャットBOTのページが表示されたかと思います。
「Start Chat」をクリックすると、チャットBOTとの会話を開始することができます。
まとめ
今回はセルフDify環境に、LLMとしてGPT系モデルを使うために、OpenAIのAPIキーを取得⇒Difyに登録し、簡単なチャットBOTアプリを構築してみました。
ただ、このチャットBOTだと、ChatGPTと何が違うの?と感じると思います。
それは正しくて、今回作ったチャットBOTは単にChatGPTと同じGPT系モデルを使ったChatGPTもどきでしかありません。
これだけだと「いや、だったらChatGPT使った方がいいじゃん」になりますし、実際その通りです。
実はDifyの本領はここからで、ナレッジと呼ばれる外部情報とLLM(今回で言えばGPT系のLLM)を連携させることで、RAG(検索拡張生成)を利用したチャットBOTアプリなどを作ることができることにあります。
簡単に言えば、例えば、社内の問合せ履歴をナレッジデータとして登録して、そのデータを基にチャットBOTが回答を生成するといった、独自のFAQアプリみたいなものが簡単?に作ることができます。
ChatGPTはインターネット上のデータを基に回答を生成しますが、Difyで独自データを食わせることで、インターネット上には存在しないデータを基にした回答を生成することができるようになります。
次回はナレッジデータをDifyに登録して、RAGを活用したチャットBOTを作ってみようと思います。