「FalconAI、LangChain、およびChainlitを使用してチャットボットを作成する」

Creating a chatbot using FalconAI, LangChain, and Chainlit.

イントロダクション

ジェネレーティブAI、特にジェネレーティブ大規模言語モデルは、その誕生以来世界を席巻しています。これは、動作可能なプログラムコードを生成することから完全なジェネレーティブAI管理のチャットサポートシステムを作成するまで、さまざまなアプリケーションと統合できたために可能になりました。しかし、ジェネレーティブAIの領域における大規模言語モデルのほとんどは、一般には非公開で、オープンソース化されていませんでした。オープンソースモデルは存在しますが、非公開の大規模言語モデルとは比べものになりません。しかし最近、FalconAIというLLMがリリースされ、OpenLLMのリーダーボードでトップに立ち、オープンソース化されました。このガイドでは、Falcon AI、LangChain、Chainlitを使用してチャットアプリケーションを作成します。

学習目標

  • ジェネレーティブAIアプリケーションでFalconモデルを活用する
  • Chainlitを使用して大規模言語モデルのUIを構築する
  • ハギングフェイスの事前学習モデルにアクセスするための推論APIで作業する
  • LangChainを使用して大規模言語モデルとプロンプトテンプレートを連鎖させる
  • LangChain ChainsをChainlitと統合してUIアプリケーションを作成する

この記事はData Science Blogathonの一部として公開されました。

Falcon AIとは何ですか?

ジェネレーティブAIの分野では、Falcon AIは最近導入された大規模言語モデルの一つで、OpenLLMのリーダーボードで第1位を獲得しています。Falcon AIはUAEのテクノロジーイノベーション研究所(TII)によって導入されました。Falcon AIのアーキテクチャは推論に最適化された形で設計されています。最初に導入された時、Falcon AIはLlama、Anthropic、DeepMindなどの最先端のモデルを抜いてOpenLLMのリーダーボードのトップに立ちました。このモデルはAWS Cloud上でトレーニングされ、2ヶ月間連続で384のGPUが接続されました。

現在、Falcon AIにはFalcon 40B(400億パラメータ)とFalcon 7B(70億パラメータ)の2つのモデルがあります。重要なポイントは、Falcon AIの開発者がこのモデルをオープンソース化すると発表しており、商用利用に制限なく使用できるようになることです。Falcon AIはさらにInstructモデル(Falcon-7B-InstructおよびFalcon-40B-Instruct)も提供しており、これらを使用して簡単にチャットアプリケーションの構築を始めることができます。このガイドでは、Falcon-7B-Instructモデルを使用します。

Chainlitとは何ですか?

Chainlitライブラリは、PythonのStreamlitライブラリに似ています。ただし、Chainlitライブラリの目的は、大規模言語モデルを使用してチャットアプリケーションを迅速に構築することです。つまり、ChatGPTと同様のUIを作成することが可能です。Chainlitパッケージを使用して会話型チャットアプリケーションを数分で開発することができます。このライブラリはLangFlowとLangChain(大規模言語モデルでアプリケーションを構築するためのライブラリ)とシームレスに統合されており、このガイドの後半でそれらを使用します。

Chainlitは多段推論の可視化も可能であり、中間結果を確認することで、大規模言語モデルがどのようにして出力結果に至ったかを知ることができます。UI自体を通じてモデルの思考の連鎖を明確に確認できるため、与えられた質問に対してLLMがどのように結論付けたかを理解することができます。Chainlitはテキスト会話に制限されており、対応するジェネレーティブAIモデルとの間で画像の送受信も可能です。さらに、コードに戻らずにUI内でプロンプトテンプレートを更新することもできます。

HuggingFace推論APIの生成

Falcon-7B-Instructモデルを使用する方法は2つあります。1つは、モデルをローカルマシンにダウンロードして直接使用する従来の方法です。ただし、これは大規模言語モデルなので、高いGPUメモリが必要になります。そのため、もう1つのオプションである推論APIを介してモデルを直接呼び出す方法を選択します。推論APIは、HuggingFaceのすべてのトランスフォーマーモデルにアクセスできるHuggingFace APIトークンです。

このトークンにアクセスするには、公式のHuggingFaceウェブサイトにアカウントを作成する必要があります。詳細を入力してログイン/サインインした後、プロフィールに移動し、設定セクションをクリックします。そこからのプロセスは次のとおりです。

設定でアクセストークンに移動してください。Falcon-7B-Instructモデルを使用するため、新しいトークンを作成します。新しいトークンを作成するには、[新しいトークン]をクリックします。トークンの名前を入力し、[ロール]オプションを[書き込み]に設定します。[生成]をクリックして新しいトークンを生成します。このトークンを使用して、Falcon-7B-Instructモデルにアクセスし、アプリケーションを構築することができます。

環境の準備

アプリケーションに取り組む前に、コードが動作するための理想的な環境を作成します。そのために、必要なPythonライブラリをインストールする必要があります。まず、モデルをサポートするライブラリをインストールします。以下のライブラリを使用してpip installを行います。

$ pip install huggingface_hub 
$ pip install transformers

これらのコマンドは、HuggingFace HubとTransformersライブラリをインストールします。これらのライブラリは、HuggingFaceに存在するFalcon-7B-Instructモデルを呼び出します。次に、PythonのLangChainライブラリをインストールします。

$ pip install langchain

これにより、LangChainパッケージがPythonにインストールされます。これを使用して、Falcon Large Language Modelを使用した会話型アプリケーションを作成します。最後に、UIがないと会話型アプリケーションは完成しません。そのため、chainlitライブラリをダウンロードします。

$ pip install chainlit

これにより、ChainlitライブラリがPythonにインストールされます。このライブラリを使用して、会話型チャットアプリケーションのUIを構築します。chainlitをインストールした後、パッケージをテストする必要があります。そのために、ターミナルで以下のコマンドを使用します。

chainlit hello

このコマンドを入力すると、localhostとPORT 8000を持つ新しいウィンドウが表示されます。その後、UIが表示されます。これにより、chainlitライブラリが正しくインストールされ、Pythonの他のライブラリと連携できる準備が整いました。

チャットアプリケーションの作成

このセクションでは、アプリケーションの構築を開始します。必要なすべてのライブラリを備えた状態で、独自の会話型チャットアプリケーションを構築する準備が整いました。最初に、ライブラリをインポートし、HuggingFace Inference APIを環境オブジェクトに格納します。

import os
import chainlit as cl
from langchain import HuggingFaceHub, PromptTemplate, LLMChain

os.environ['API_KEY'] = 'Your API Key'
  • まず、os、chainlit、langchainライブラリをインポートします。
  • langchainから、HuggingFaceHubをインポートしています。このHuggingFaceHubを使用することで、Inference APIを介してFalcon-7B-Instructモデルを呼び出し、モデルによって生成された応答を受け取ることができます。
  • PromptTemplateは、LangChainの要素の1つであり、大規模言語モデルに基づいたアプリケーションの構築に必要です。これは、モデルがユーザーの質問をどのように解釈し、どのような文脈で回答するかを定義します。
  • 最後に、LangChainからLLMChainをインポートしています。LLMChainは、異なるLangChainコンポーネントをチェーン化するモジュールです。ここでは、Falcon-7B-Instruct大規模言語モデルをPromptTemplateとチェーンします。
  • その後、HuggingFace Inference APIを環境変数に格納します。つまり、os.environ[‘API_KEY’]です。

Falconモデルに指示する

次に、HuggingFaceHubモジュールを介してFalcon Instructモデルを推論します。これには、まずモデルへのパスをHugging Faceに提供する必要があります。コードは以下のようになります。

model_id = 'tiiuae/falcon-7b-instruct'

falcon_llm = HuggingFaceHub(huggingfacehub_api_token=os.environ['API_KEY'],
                            repo_id=model_id,
                            model_kwargs={"temperature":0.8,"max_new_tokens":2000})
  • まず、作業するモデルのIDを指定する必要があります。ここでは、Falcon-7B-Instructモデルです。このモデルのIDは、HuggingFaceのウェブサイトで直接見つけることができます。つまり、’tiiuae/falcon-7b-instruct’です。
  • 次に、APIトークンを環境変数に割り当て、repo_id、つまり作業するモデルのIDをHuggingFaceHubモジュールに渡します。
  • また、温度や最大新トークン数など、モデルのパラメータを指定します。温度はモデルがどれだけ創造的であるかを示し、1はより創造的を意味し、0は創造的ではないことを示します。

今、私たちは作業するモデルを明確に定義しました。そして、HuggingFace APIを使用することで、このモデルに接続し、クエリを実行してアプリケーションの構築を開始することができます。

プロンプトテンプレート

モデルの選択後、次にプロンプトテンプレートを定義します。プロンプトテンプレートは、モデルの振る舞いを指示します。ユーザーが提供した質問をモデルがどのように解釈するか、ユーザーのクエリに対して出力をどのように導き出すかを指定します。プロンプトテンプレートの定義に対するコードは次のようになります。

template = """

ユーザーのクエリに対して有用な回答を提供するAIアシスタントです。

{question}

"""
prompt = PromptTemplate(template=template, input_variables=['question'])

上記のテンプレート変数は、Falconモデルのプロンプトテンプレートのコンテキストを定義し設定します。ここでのコンテキストはシンプルで、AIはユーザーのクエリに対して有用な回答を提供する必要があります。それに続いて入力変数{question}があります。次に、このテンプレートとそれに定義された変数がPromptTemplate関数に与えられ、変数に割り当てられます。この変数は、後でモデルと連鎖させるプロンプトテンプレートであります。

両モデルを連鎖させる

今、Falcon LLMとプロンプトテンプレートの両方が準備できました。最後の部分は、これらのモデルを連鎖させることです。これにはLangChainライブラリのLLMChainオブジェクトを使用します。これに関するコードは次のようになります。

falcon_chain = LLMChain(llm=falcon_llm,
                        prompt=prompt,
                        verbose=True)

LLMChainの助けを借りて、Falcon-7B-Instructモデルを自身の作成したPromptTemplateと連鎖させました。また、verbose = Trueを設定しました。これはコードが実行される際に何が起こっているかを知るのに役立ちます。さて、モデルをテストしてみましょう。クエリを与えてモデルを実行します

print(falcon_chain.run("虹にはどんな色がありますか?"))

ここで、モデルに虹の色について尋ねました。虹にはVIBGYOR(紫、インディゴ、青、緑、黄、オレンジ、赤)の色が含まれています。Falcon 7B Instructモデルによって生成された出力は、質問にピッタリのものです。verboseオプションを設定することで、フォーマット後のプロンプトを見ることができ、連鎖の開始と終了位置もわかります。最後に、会話型のチャットアプリケーションのためのUIを作成する準備が整いました。

Chainlit – 大規模言語モデルのためのUI

このセクションでは、Chainlitパッケージを使用してアプリケーションのためのUIを作成します。Chainlitは、数分で大規模言語モデルのためのチャットインターフェースを構築できるPythonライブラリです。LangFlowや以前に作業したLangChainとも統合されています。Chainlitを使用してチャットインターフェースを作成するのは簡単です。次のコードを書く必要があります。

@cl.langchain_factory(use_async=False)

def factory():

    prompt = PromptTemplate(template=template, input_variables=['question'])
    falcon_chain = LLMChain(llm=falcon_llm,
                        prompt=prompt,
                        verbose=True)

    return falcon_chain

手順

  • まず、LangChainのChainlitデコレータ@cl.langchain_factoryから始めます。
  • 次に、Prompt TemplateとLangChainのLLMChainモジュールを含むファクトリ関数を定義します。ここで必要なコードは、Prompt TemplateとFalcon LLMを構築し連鎖するLangChainのLLMChainモジュールです。
  • 最後に、返される変数はLangChainインスタンスでなければなりません。ここでは、作成された最終の連鎖であるLLMChainインスタンスであるfalcon_chainを返します。
  • use_async = Falseは、LangChainエージェントの非同期実装を使用しないようにコードに指示します。

コードを実行しましょう!

以上です。コードを実行すると、チャットインターフェースが表示されます。しかし、これはどのように可能なのでしょうか。実際のところ、Chainlitがすべてを管理しています。裏では、ウェブフックの接続を管理し、サイトを訪れるユーザーごとに個別のLangChainインスタンス(Chain、Agentなど)を作成します。アプリケーションを実行するために、ターミナルで以下を入力します。

$ chainlit run app.py -w

-wは、アプリケーションコードをライブで変更するたびに自動で再読み込みすることを示します。これを入力した後、localhost:8000で新しいタブが開かれます。

これはオープニングページ、つまりChainlitのウェルカムスクリーンです。Chainlitは、単一のデコレータで完全なチャットインターフェースを構築します。このUIを介してFalconモデルと対話してみましょう

このUIとFalcon Instructモデルは正常に動作していることがわかります。モデルは質問に迅速に回答できます。ユーザーの文脈に基づいて2番目の質問を説明しようとしました(5歳児に説明する)。これは、これらのオープンソースの生成型AIモデルで達成できることの始まりです。わずかな修正や少数の修正で、問題指向の実際のシナリオベースのアプリケーションを作成できます。

チャットインターフェースはウェブサイトであるため、クラウドプラットフォームのいずれかにホストすることも完全に可能です。アプリケーションをコンテナ化し、Google Cloud、AWS、Azure、または他のクラウドサービスのいずれかのコンテナベースのサービスにデプロイしてみることができます。それにより、アプリケーションを外部の世界と共有することができます。

結論

このウォークスルーでは、新しいオープンソースのFalcon Large Languageモデル、LangChain、およびChainlitを使用して、シンプルなチャットアプリケーションを構築する方法を見てきました。これらの3つのパッケージを活用し、コードから動作するアプリケーションまで完全なソリューションを作成しました。また、HuggingFaceライブラリから数千の事前学習モデルにアクセスするためにHuggingFace Inference APIキーを取得する方法も見てきました。LangChainの助けを借りて、LLMをカスタムプロンプトテンプレートと結びつけました。最後に、Chainlitを使用して、LangChain Falconモデルを使用したチャットアプリケーションインターフェースを数分で作成することができました。

このガイドから得られる主なポイントは次のとおりです:

  • Falconはオープンソースのモデルであり、OpenLLM Leaderboardのトップに位置しています
  • Chainlitを使用すると、数分でLLMのUIを作成することができます
  • Inference APIを使用すると、HuggingFaceに存在するさまざまなモデルに接続できます
  • LangChainは、Large Languageモデルに対するカスタムプロンプトテンプレートの構築に役立ちます
  • Chainlitのシームレスな統合により、LLMアプリケーションをより迅速かつエラーフリーに構築できます

よくある質問

この記事に表示されるメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

レオナルドAI:Midjourneyの新たな競合相手

レオナルドAIは、ミッドジャーニーがこれまで築いてきた地位に挑戦する注目すべき代替手段として徐々に浮上しています

機械学習

「2024年に探索する必要のある10の最高のGPU」

イントロダクション 人工知能(AI)、機械学習(ML)、深層学習(DL)の時代において、驚異的な計算リソースの需要は最高潮に...

機械学習

印象的なパフォーマンス:TensorRT-LLMを使用したRTXで最大4倍高速化された大規模言語モデル(LLM) for Windows

Generative AIは、個人コンピューティングの歴史で最も重要なトレンドの一つであり、ゲーミング、創造性、ビデオ、生産性、開...

機械学習

赤い猫&アテナAIは夜間視認能力を備えた知能化軍用ドローンを製造する

軍事技術のリーディングカンパニーであるRed Cat Holdings, Inc.は、Athena AIとのパートナーシップにおいて、Teal 2の人工知...

データサイエンス

「誰も所有していないサービスを修復するために、アンブロックされたものを使う」

「サービスが誰にも所有されていないのは珍しいことではありませんほとんどの文書化もない状態で、Unblockedの魔法を使って、...

機械学習

オペレーションの頭脳:人工知能とデジタルツインで手術の未来を地図化するアトラスメディテック

アスリートが試合のためにトレーニングし、俳優が公演のためにリハーサルするように、外科医も手術の前に準備をします。 今、...