初めまして。miracleaveでアルバイトをしております。現役高校生の「つきみ」です。
私は普段、TypeScriptをメインに個人開発でコードを書いており、Denoが最近のお気に入りです。
先輩方と比べたら若輩者ではありますが、これから一人前のエンジニアと呼ばれるまで努力して参ります。
さて、弊社では社内生成AI基盤の利活用を積極的に推進しております。今回はそのナレッジをできるだけわかりやすく落とし込み、解説をしていきます。
また、今回の記事はタイトルのもあるとおり、シリーズとなります。計3回を予定しており次の順番でお届けしていきます。
- 第一回
- シリーズを進めるにあたっての前提知識
- Difyのインストール
- 各種APIキーのセットアップ
- 第二回
- チャットボットの制作
- RAGの構築
- 第三回
- Rerankを使った回答精度の向上
前提知識チェック
OpenAI / GPT-4o
まず、今回使うAIは米国のOpenAI社が研究・開発しているGPT-4oというものです。
最近では「ChatGPTなら聞いたことあるよ!」であったり、「書類・レポートの作成をAIに助けてもらってる!」といった使い方でご存知の方も多いかもしれませんが、今回は厳密にはChatGPTは使用しません。
ここら辺は複雑な問題になりがちですが、ChatGPTはGPT-4o、GPT-3.5といった大規模言語モデル(LLM)を使用するための一つのサービスであり、今回はそのサービスにあたるChatGPTではなく、GPT-4oを利用していきます。
Azure OpenAI Service
Azure OpenAI ServiceはAI周りを取り扱う際に言われる「セキュリティ」「信頼性」「コンプライアンス」「データプライバシー」などを保証した、エンタープライズをはじめとした、多くの企業が求める機能を提供しているAzureのサービスです。
弊社は、多くのお客様のデータをお預かりしており、守秘義務を果たす必要があります。そのため、使用するAIは慎重に選定しており、データがAIの学習データとして再利用されないことが重要な観点です。
2021 年 11 月に、マイクロソフトは、Azure OpenAI Service を発表し、お客様が Azure クラウドとコンピューティングインフラに期待するセキュリティ、信頼性、コンプライアンス、データプライバシー、および、組み込み型 Responsible AI といったエンタープライズ級機能を備えた大規模生成 AI モデルのパワーを利用できるようにしました。
Azure OpenAI Service の一般提供開始 大規模かつ高度な AI モデルへのアクセスを拡大し、企業に付加価値を提供
Microsoft Japan News Center
Embedding
そして今回のシリーズではEmbeddingを取り扱っていく予定です。「ベクトル化」と言われる作業です。
高校生で言うと、数C(新課程の場合・旧課程は数B範囲です)で取り扱う「ベクトル」となりますが、日常用語でもベクトルという言葉は聞いたことがあるかもしれません。
文章を一つの点として巨大な地図の中に配置していきます。点の位置をベクトルと言います。そのとき、点と点が近ければ関連性の高い事柄ですし、逆に遠ければ関連性の低いものとしてみなします。
文章を与えたときに地図上での点の位置「ベクトル」を返してくれる。それがEmbeddingと言われる技術です。
参考:東京書籍 2022年4月からの新課程(数学)対応について
Rerank
最後の用語としてお伝えするのが、Rerank(リランク)です。検索をした際に検索結果を最適な順に並ばせる技術のことを指します。特に、このシリーズでは、米国のCohere社が提供するRerankのモデルを使用します。
例えば公式サイトから引用すると「Where is NYC located?」という質問に対して、基本的には「Where is NYC(New York City) located?」と解釈できるのに対して、全文検索では「NYC」の部分と似ているということで「NYC Media」が出てきてしまうかもしれません。
このような省略名称が検索文字列に入っていたとしても適切に検索結果を返答するための言語モデルが、Rerankです。
Difyとは?
ここまでで、前提知識をお伝えしました。では、ここからDifyの説明に入っていきたいと思います。
Difyとは複数のAIを組み合わせてアプリケーションを作ることができるツールです。すごく抽象的な解説になりましたが、これから具体的に説明していきます。
例えば、Difyではベクトル検索の機能が標準で入っていますが、もしDifyがなければ、
「ベクトル検索のためのデータベースを用意して、ベクトル検索をかけて、Rerankさせてあげて…」といった複数の手段をすべてソースコードに落とし込むコーディングスキルが必要になり、「コサイン類似度を調べて〜…」と言った数学の応用知識も求められます。
Difyは、それを「ウェブから簡単にできるようにした」という強みに加えて「オープンソース」という太っ腹さが感じられます。私も実際に触ってみましたが、用語の理解や使用方法さえ理解すれば誰でもでもできるほど簡単なものでした。
恐れる必要はありません、次に行きましょう。
Difyのインストール・設定
Difyを始めるにあたって、今回の記事では主に次のものを使用していきます。
- Docker & Docker Compose
- Azure OpenAI Service API Key
- GPT-4o
- text-embedding-3-large
- DALL-E-3
- TTS (Text to Speach)
- Whisper
開発環境は、私はM1 MacBookを使用しておりますが、適時ご自身の端末に合わせて調整ください。
Difyのダウンロード・実行
Difyのダウンロードと実行方法について説明していきます。この作業は、Difyのソースコードをダウンロード、Docker Composeによって立ち上げるだけです。
# ダウンロード
$ git clone https://github.com/langgenius/dify.git
# Up Docker Compose on background
$ cd dify/docker
$ docker compose up -d
エンジニアのみなさんであれば、「えっ、これだけ?」と感じるかもしれません。これだけで、Difyを立ち上げることができました。
次からはDifyでLLMの設定を進めていきます。
参考:https://docs.dify.ai/getting-started/install-self-hosted/docker-compose
Difyの初期設定を進める
登録が完了すると、管理画面にアクセスするためのURLがコンソールに出力されます。
デフォルトでは、次のようなURLになります。
http://localhost
最初に管理者アカウントの作成が求められるので登録します。ログインまで終わらせるとダッシュボードが出てきます。
右上のユーザーアイコンをクリックし、設定>ワークススペース>モデルプロバイダーに行きましょう。
自身の使っているモデルプロバイダーを選択し、セットアップを表示に従って進むとこのような画面になります。
各種キーの登録が終われば、モデルプロバイダー設定の右上にある「システムモデル設定」を設定できます。そこで各種使用したいモデルを指定するようにしてください。
続いて、Azure DALL-E-3の設定をしていきます。
Azure OpenAI Serviceをお使いの場合は「DALL-E」ではなく、「Azure DALL-E」をお使いするようにご注意ください。
「認証する」をクリックし、必要な情報を入力すれば次のような画面になります。
参考:公式ドキュメント
まとめ
ここまででDifyを使うための前提知識の学習、Difyのインストール、DifyへのLLMの設定を行ってきました。スムーズに進めたのではないでしょうか?
次回は、設定したLLMを使って、簡単なチャットボットを作っていきたいと考えております。次回もぜひ購読をよろしくお願いします。