「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モデルを使用します。
- スタンフォード大学とGoogleからのこのAI論文は、生成エージェントを紹介しています生成エージェントは、人間の振る舞いをシミュレートするインタラクティブな計算エージェントです
- 「SegGPT」にお会いください:コンテキスト推論を通じて画像または動画の任意のセグメンテーションタスクを実行する汎用モデル
- 「識別可能であるが可視性がない:プライバシー保護に配慮した人物再識別スキーム(論文要約)」
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- 「トップAIコンテンツ生成ツール(2023年)」
- 「AUDITに会おう:潜在拡散モデルに基づく指示に従ったオーディオ編集モデル」
- 「トップAIオーディオエンハンサー(2023年)」
- 「Auto-GPTに会ってください:GPT-4などのLLMの力を示す実験的なオープンソースアプリケーションで、異なる種類のタスクを自律的に開発および管理する能力を示します」
- 2023年のコード生成/コーディングにおけるトップな生成AIツール
- 「AnimateDiffとは モデル特有の調整なしでパーソナライズされたテキストからイメージ(T2I)モデルをアニメーション生成器に拡張するための効果的なAIフレームワーク」
- コードの解読:機械学習が故障診断と原因分析の秘密を明らかにする