Python でチャットボット開発!LangChain を活用した実装ガイド
本記事は、この業界でディープラーニングエンジニアと Python プログラマーを 17 年経験している Dido Grigorov によって寄稿されたものです。

チャットボットは単純な質疑応答ツールから大幅な進化を遂げています。 大規模言語モデル(LLM)の力で会話のコンテキストを理解し、人間のような回答を生成することが可能で、カスタマーサポートアプリケーションやその他のバーチャルアシスタンスにおいて計り知れないほど貴重な存在となっています。
オープンソースフレームワークの LangChain は、モデルの統合、コンテキストの管理、プロンプトエンジニアリングを円滑化するツールを提供することで、そのような対話型チャットボットの構築プロセスを合理化します。
このブログ記事では、LangChain の仕組みとチャットボットと LLM の対話について詳しく見ていきます。 また、LangChain と GPT-3 を使用して正確かつ関連性の高い回答を返すコンテキスト認識型チャットボットの構築手順を段階的に説明します。
LLM(大規模言語モデル)を活用したチャットボットとは?
LLM の分野におけるチャットボットは、テキストや音声のインターフェースを通してユーザーとの人間のような会話をシミュレートする最先端のソフトウェアです。 このようなチャットボットは LLM の高度な機能、つまりは大量のテキストデータでトレーニングされたニューラルネットワークを利用します。この機能により、さまざまな入力プロンプトに対して人間のような回答を生成することが可能となっています。
とりわけ重要なのは、LLM ベースのチャットボットは回答を生成する際に会話の文脈を考慮できるということです。 そのため、数回のやりとりの中で整合性を維持しながら複雑な質問を処理し、ユーザーの意図に沿った出力を生成することができます。 また、このようなチャットボットはユーザーの入力に含まれる感情のトーンを判断し、ユーザーの気持ちに合わせて回答を調整します。
チャットボットは適応力とパーソナライズ力に非常に優れています。 ユーザーとの対話を通して学習できるため、個々人の好みやニーズに応じて回答を改善します。
LangChain とは?特徴とメリットを解説
LangChain は、大規模言語モデル(LLM)を使用したアプリを作成するために開発されたオープンソースのフレームワークです。 そのようなモデルから生成された情報をより適切にパーソナライズしながら、高い精度と関連性を維持するツールと抽象化能力が備わっています。
LLM を扱った記事では「プロンプトチェーン」という用語をよく見かけます。 プロンプトチェーンとは、人工知能と機械学習の文脈で使用される一連のプロンプトや命令を指しており、AI モデルを複数のステップを経て誘導し、より正確かつ詳細な、あるいは洗練された出力を生成できるようにすることを目的としたものです。 この手法はコーディング、問題解決、または生成などのさまざまなタスクに使用できます。
開発者は LangChain を使用して新しいプロンプトチェーンを作成できます。これはこのフレームワークの強みの一つです。 また、新しいデータセットを使用する際にモデルを再トレーニングすることなく既存のプロンプトテンプレートを変更することも可能です。
LangChain の仕組み | チャットボット開発にどう活かせるか
LangChain は、言語モデルを使用したアプリケーションの開発を簡素化するように設計されたフレームワークです。 開発者が自然言語処理(NLP)と大規模言語モデルを必要とするアプリケーションを効率よく構築・管理できるようにするツール一式を提供しています。 開発者は必要な結果(チャットボット、タスクの自動化、バーチャルアシスタンス、カスタマーサポートなど)を達成するために必要なステップを定義することで、LangChain を使用して言語モデルを特定のビジネスのコンテキストに柔軟に適応させることができます。
以下は、LangChain の仕組みを簡単にまとめたものです。
モデルの統合
LangChain は、OpenAI、Hugging Face、Cohere、Anyscale、Azure Models、Databricks、Ollama、Llama、GPT4All、Spacy、Pinecone、AWS Bedrock、MistralAI など、さまざまな言語モデルをサポートしています。 開発者は簡単にモデルを切り替えたり、1 つのアプリケーション内で複数のモデルを使用したりできます。 独自開発のモデル統合ソリューションを構築できるため、特定のアプリケーションに合った特定の機能を活用できます。
チェーン
LangChain の中心となっているのは、複数の異なる AI コンポーネントを連携させてコンテキストに合った回答を実現するチェーンという概念です。 チェーンはユーザープロンプトから最終的なモデルの出力までの一連の自動化されたアクションを表しており、 LangChain が提供するチェーンには以下の 2 種類があります。
- シーケンシャルチェーン: このチェーンを使用すると、モデルや関数の出力を別のモデルや関数の入力として使用できます。 これは、互いに依存する複数ステップのプロセスを作成する場合に大いに役立ちます。
- 並列チェーン: 複数のタスクを同時に実行可能で、それぞれの出力が最後に結合されます。 これは、完全に独立したサブタスクに分割可能なタスクを実行するのに最適です。
メモリ
LangChain では複数の異なる対話間で容易に情報の保存と取得を行えます。 これは、チャットボットや対話型エージェントなどでコンテキストを維持する必要がある場合には欠かせません。 メモリも以下の 2 種類が提供されています。
- 短期メモリ – 最近のセッションを記憶します。
- 長期メモリ – 前のセッションの情報を記憶することで、システムが過去のチャットとユーザーの好みを思い出す機能を強化します。
ツールとユーティリティ
LangChain には多数のツールが備わっていますが、最もよく使用されているのは
Prompt Engineering、Data Loaders、および Evaluators です。 プロンプトエンジニアリングに関して言えば、LangChain には言語モデルから最適な回答を得る上で非常に重要となる高品質なプロンプトを開発するためのユーティリティが含まれています。
csv、pdf、またはその他の形式のファイルを読み込む場合は、種類の異なる複数のデータを読み込んで前処理し、モデルの対話で利用できるようにする Data Loaders を使用できます。
評価は、機械学習モデルと大規模言語モデルを処理する上で非常に重要な役割を果たします。 そのため、LangChain は言語モデルやチェーンが生成した結果が必要な基準を満たせるかどうかをテストするための Evaluators というツールを提供しています。この基準や評価には以下が含まれます。
データセットの基準:
- 手動で精選された例: まずは質の高い多種多様な入力から始めます。
- 履歴ログ: 実際のユーザーデータとフィードバックを使用します。
- 合成データ: 最初のデータに基づいて例を生成します。
評価の種類:
- 人間による評価: 手動の評価とフィードバック。
- ヒューリスティック評価: ルールベースの関数。参照なしと参照ベースの両方。
- LLM による評価: LLM がエンコードされた基準に基づいて出力を評価します。
- ペアワイズ評価: 2 つの出力を比較し、最適な方を選択します。
アプリケーションの評価:
- ユニットテスト: 高速なヒューリスティックベースのチェックです。
- 回帰テスト: パフォーマンスの時間変化を評価します。
- バックテスト: 本番データを新しいバージョンで再実行します。
- オンライン評価: リアルタイムで評価を行い、多くの場合はガードレールや分類を目的としています。
エージェント
LangChain エージェントは基本的には LLM を利用してユーザーとの対話、タスクの実行、および自然言語入力に基づく決定を行う自律的なエンティティです。
アクション駆動型エージェントは、事前に定義されたタスクに最適なアクションを判断するために言語モデルを使用します。 一方、チャットボットのような対話型エージェントや対話型アプリケーションはそれらのエージェントを使用し、クエリに回答する際にはユーザーの入力と保存されたメモリも考慮します。
チャットボットと LLM の連携 | LangChain の活用方法
チャットボットの基礎となる LLM は自然言語理解(NLU)と自然言語生成(NLG)を使用します。これらは、大量のテキストデータでモデルを事前トレーニングすることによって実現されています。
自然言語理解(NLU)
- コンテキストの認識: LLM は会話に含まれる微妙なニュアンスと暗示を理解し、会話の流れを追うことができます。 このため、チャットボットはクライアントに対して論理的で文脈的に適切な回答を生成することが可能です。
- 意図の認識: 特殊な言語であるか非常に一般的な言語であるかを問わず、言語モデルはユーザーのクエリからその意図を理解できる必要があります。 ユーザーが達成したいことを認識し、その目標に到達するための最適な手段を特定します。
- センチメント分析: チャットボットは使用されている言葉のトーンからユーザーの感情を判定し、ユーザーの感情の状態に適応できます。これにより、ユーザーのエンゲージメントが高まります。
自然言語生成(NLG)
- 応答の生成: LLM に質問すると、文法と文脈の両方において正しい回答が返されます。 これは、言語モデルが大量の自然言語のテキスト形式データでトレーニングされており、人間の対話を模倣した回答を生成するためです。
- 創造性と柔軟性: LLM ベースのチャットボットは単純な回答だけでなく、ストーリーを語ったり、詩を作成したり、特定の技術問題を詳細に説明したりできるため、提供される内容について非常に柔軟であると考えられます。
パーソナライズ化と適応力
- 対話から学習: チャットボットにはユーザーの行動や選択内容から学習する能力があるため、対話をパーソナライズできます。 学習は継続的に行われているため、チャットボットによる質問への回答がより効果的かつ正確になっていると言えます。
- さまざまな分野への適応: LLM は特定の領域や専門分野に合わせて調整できるため、チャットボットはカスタマーリレーション、技術サポート、ヘルスケア分野の主題専門家の役目を果たせます。
LLM は複数の言語のテキストを理解して生成できるため、さまざまな言語の文脈でアプリケーションに適したものにできます。
LangChain を使ってチャットボットを開発する 5 つの手順
このプロジェクトでは、GPT-3 を利用してドキュメント内の回答を検索するチャットボットを構築します。 まずはオンライン記事からコンテンツを収集し、それを小さなチャンクに分割し、埋め込みを計算してから Deep Lake に保存します。 次はユーザークエリを使用して Deep Lake から最も関連性の高いチャンクを取得し、それを LLM を使用して最終的な回答を生成するためのプロンプトに組み込みます。
LLM の使用に際しては、根拠のない情報や誤った情報が生成されるリスクがあることに注意してください。 これは多くのカスタマーサポートのシナリオでは許容できないことかもしれません。しかし、それでもチャットボットはオペレーターがユーザーに回答を送信する前に下書きを確認するのに大いに役立ちます。
次は GPT-3 との会話の管理方法を詳しく説明し、このワークフローの有効性を示す例を提供します。
ステップ 1: プロジェクトの作成、前提条件、および必要なライブラリのインストール
まずはチャットボット用の PyCharm プロジェクトを作成します。 Pycharm を開いて “New Project”(新規プロジェクト)をクリックします。 そして、そのプロジェクトに名前を付けます。

プロジェクトのセットアップ準備が完了したら、’OPENAI_API_KEY
‘ を生成するために OpenAI API Platform のウェブサイトにログイン(またはその目的で OpenAI ウェブサイトに登録)します。 生成するには左のナビゲーションメニューで “API Keys” セクションに移動し、”+Create new secret key” ボタンをクリックします。 忘れずに鍵をコピーしてください。
その後、Activeloop のウェブサイトに登録して ‘ACTIVELOOP_TOKEN
‘ を取得します。 ログイン完了後に “Create API Token” ボタンをクリックすると、トークンを作成するためのページに進みます。 このトークンもコピーしてください。
トークンと鍵の両方を入手したら、PyCharm で構成の設定を開きます。実行/デバッグボタンの横にある三点リーダーボタンをクリックし、”Edit”(編集)を選択します。 以下のようなウィンドウが表示されます。

“Environment variables”(環境変数)というフィールドを探し、そのフィールドの右側にあるアイコンを見つけます。 それをクリックすると、以下のようなウィンドウが表示されます。

次は + ボタンをクリックし、環境変数の追加を始めてください。なお、環境変数の名前には注意してください。 これらの名前は前述の ‘OPENAI_API_KEY
‘ と ‘ACTIVELOOP_TOKEN
‘ と同じにする必要があります。 準備ができたら、最初のウィンドウで “OK” をリックし、2 つ目のウィンドウで “Apply”(適用) と “OK” をクリックします。
PyCharm は環境変数を追加で呼び出さなくても自動的に処理してくれるため、創造力が要求されるコード箇所により専念することができます。これは PyCharm の非常に大きなメリットであり、私が非常に気に入っている点です。
注意: Activeloop は、機械学習と人工知能用のデータインフラストラクチャとツールの開発に注力しているテクノロジー会社です。 同社は、特にディープラーニングやその他の AI アプリケーション向けに大規模なデータセットを管理、保存、および処理するプロセスを合理化することを目指しています。
Deep Lake は ActiveLoop の主力製品です。 AI でよく使用される大規模なデータセットに最適化された高効率なデータの保管、管理、およびアクセスの機能を提供しています。
必要なライブラリをインストールする
ここでは LangChain の ‘SeleniumURLLoader
‘ クラスを使用しますが、このクラスは ‘unstructured
‘ および ‘selenium
‘ Python ライブラリに依存しています。 pip を使用してこれらのライブラリをインストールします。 このコードはバージョン 0.7.7 に限定してテストされていますが、最新バージョンをインストールすることをお勧めします。
必要なライブラリをインストールするには、PyCharm ターミナルで以下のコマンドを使用します。
pip install unstructured selenium

次は langchain
、deeplake
、および openai
をインストールする必要があります。 これを行うには、ターミナル(Selenium で使用したのと同じウィンドウ)で以下のコマンドを使用し、すべてのインストールが完了するまで少し待ちます。
pip install langchain==0.0.208 deeplake openai==0.27.8 psutil tiktoken
すべてのライブラリが適切にインストールされたことを確認するには、チャットボットアプリに必要な以下の行を追加して “Run”(実行)ボタンをクリックします。
from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import DeepLake from langchain.text_splitter import CharacterTextSplitter from langchain import OpenAI from langchain.document_loaders import SeleniumURLLoader from langchain import PromptTemplate
ライブラリは PyCharm の設定を使用する方法でもインストールできます。 設定を開き、”Project”(プロジェクト) -> “Python Interpreter”(Python インタープリター)の画面に移動します。 次に + ボタンを探し、パッケージを検索して “Install Package”(パッケージのインストール)をクリックします。 完了したら画面を閉じ、次のウィンドウで “Apply”(適用)と “OK” を続けてクリックします。

ステップ 2: 内容のチャンクへの分割と埋め込みの計算
前述のように、このチャットボットはオンライン記事から取得するコンテンツと「対話」します。そこで、Digitaltrends.com をデータのソースに選び、まずは 8 つの記事を選びました。 これらのソースはすべて Python リストにまとめられ、“articles” という変数に代入されています。
articles = ['https://www.digitaltrends.com/computing/claude-sonnet-vs-gpt-4o-comparison/', 'https://www.digitaltrends.com/computing/apple-intelligence-proves-that-macbooks-need-something-more/', 'https://www.digitaltrends.com/computing/how-to-use-openai-chatgpt-text-generation-chatbot/', 'https://www.digitaltrends.com/computing/character-ai-how-to-use/', 'https://www.digitaltrends.com/computing/how-to-upload-pdf-to-chatgpt/']
指定された URL からドキュメントを読み込み、’CharacterTextSplitter
‘ を使用してそれらをチャンクサイズ 1000 の重複しないチャンクに分割します。
# Use the selenium to load the documents loader = SeleniumURLLoader(urls=articles) docs_not_splitted = loader.load() # Split the documents into smaller chunks text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) docs = text_splitter.split_documents(docs_not_splitted)
この時点までコードを実行すると、特に問題なければ以下の出力が得られます。
[Document(page_content="techcrunch\n\ntechcrunch\n\nWe, TechCrunch, are part of the Yahoo family of brandsThe sites and apps that we own and operate, including Yahoo and AOL, and our digital advertising service, Yahoo Advertising.Yahoo family of brands.\n\n When you use our sites and apps, we use \n\nCookiesCookies (including similar technologies such as web storage) allow the operators of websites and apps to store and read information from your device. Learn more in our cookie policy.cookies to:\n\nprovide our sites and apps to you\n\nauthenticate users, apply security measures, and prevent spam and abuse, and\n\nmeasure your use of our sites and apps\n\n If you click '", metadata={'source': ……………]
次は OpenAIEmbeddings を使用して埋め込みを生成し、クラウドでホストされている Deep Lake ベクトルストアにそれを保存します。 理想を言えば、本番環境ではウェブサイト全体またはコースのレッスンを Deep Lake データセットにアップロードし、数千件、さらには数百万件ものドキュメントを検索できるようにしたいところです。
クラウド内のサーバーレス Deep Lake データセットを活用すると、ベクトルストアを専用のマシンにセットアップしなくても、複数の場所にあるアプリケーションが一元化されたデータセットにシームレスにアクセスできるようになります。
埋め込みとドキュメントをチャンクにする理由
LangChain を使用してチャットボットを構築する場合、チャットボットの効率、正確性、およびパフォーマンスに関連するいくつかの理由により、埋め込みとドキュメントのチャンク化が不可欠になります。
埋め込みはテキスト(単語、文、段落、またはドキュメント)の意味論上の意味を捉え、それをベクトルで表現したものです。 埋め込みは単語の文脈と意味を数値形式でカプセル化します。 これにより、チャットボットはニュアンス、同義語、および単語間の関係を捉えて理解し、文脈的に適切な回答を生成することが可能となっています。
チャットボットは埋め込みを利用してユーザーのクエリと意味論的に最も関連性のある情報のチャンクを照合できるため(文言に違いがある場合も可能)、ナレッジベースから最も関連性の高い回答や情報をすぐに発見して取得できます。
それとは逆に、チャンク化には大きなドキュメントをより小さな扱いやすい単位やチャンクに分割する作業が伴います。 チャンクが小さいほど、大きな単一のドキュメントよりも高速に処理・分析できます。 その結果、チャットボットからの回答時間が短縮されます。
ドキュメントのチャンク化すると、出力の関連性を高めるのにも役立ちます。ユーザーが質問する際、その対象はドキュメントの特定箇所のみであることが多いためです。 チャンク化によってシステムが関連する部分のみを特定して取得できるようになるため、チャットボットがより正確で精度の高い回答を提供できるようになります。
では、アプリケーションに戻りましょう。以下のコードを Activeloop の組織 ID を含める形で更新してください。 組織 ID はデフォルトでユーザー名と同じであることを覚えておきましょう。
# TODO: use your organization id here. (by default, org id is your username) my_activeloop_org_id = "didogrigorov" my_activeloop_dataset_name = "jetbrains_article_dataset" dataset_path = f"hub://{my_activeloop_org_id}/{my_activeloop_dataset_name}" db = DeepLake(dataset_path=dataset_path, embedding_function=embeddings) # add documents to our Deep Lake dataset db.add_documents(docs)
私は Python のコメントに TODO メモを直接追加できるという PyCharm の素晴らしい機能も気に入っています。 「TODO」を大文字で入力すると、すべてのメモが PyCharm 内の 1 箇所に集約され、そこですべての項目を確認できます。
# TODO: use your organization id here. (by default, org id is your username)
項目をクリックすると、PyCharm にその項目が存在するコード内の場所が直接表示されます。 開発者の方には非常に便利だと思います。いつでも以下のように使用できます。

この時点までコードを実行すると、特に問題なければ以下の出力が表示されます。

特定のクエリに最も類似したチャンクを見つけるには、Deep Lake ベクトルストアが提供する similarity_search メソッド を使用できます。
# Check the top relevant documents to a specific query query = "how to check disk usage in linux?" docs = db.similarity_search(query) print(docs[0].page_content)
ステップ 3: GPT-3 用プロンプトの作成
ロールプロンプティング、関連するナレッジベースデータ、およびユーザーの質問を組み込んだプロンプトテンプレートを設計することにします。 このテンプレートでは、チャットボットのペルソナを優れたカスタマーサポート担当者に設定します。 このテンプレートは、事前に整形された記事の引用を含む chunks_formatted と顧客の質問を表す query の 2 つの入力変数を受け付けます。 その目標は、捏造された情報や不正確な情報を避け、特定のチャンクだけに基づく正確な回答を生成することです。
ステップ 4: チャットボットの機能の構築
回答を生成するため、まずはユーザーのクエリに最も類似した top-k(top-3 など)のチャンクを取得します。 その後、これらのチャンクはプロンプトに整形され、temperature を 0 に設定して GPT-3 モデルに送信されます。
# user question query = "How to check disk usage in linux?" # retrieve relevant chunks docs = db.similarity_search(query) retrieved_chunks = [doc.page_content for doc in docs] # format the prompt chunks_formatted = "\n\n".join(retrieved_chunks) prompt_formatted = prompt.format(chunks_formatted=chunks_formatted, query=query) # generate answer llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0) answer = llm(prompt_formatted) print(answer)
何も問題なければ、以下のような出力が得られます。
To upload a PDF to ChatGPT, first log into the website and click the paperclip icon next to the text input field. Then, select the PDF from your local hard drive, Google Drive, or Microsoft OneDrive. Once attached, type your query or question into the prompt field and click the upload button. Give the system time to analyze the PDF and provide you with a response.
ステップ 5: 会話履歴の構築
# Create conversational memory memory = ConversationBufferMemory(memory_key="chat_history", input_key="input") # Define a prompt template that includes memory template = """You are an exceptional customer support chatbot that gently answers questions. {chat_history} You know the following context information. {chunks_formatted} Answer the following question from a customer. Use only information from the previous context information. Do not invent stuff. Question: {input} Answer:""" prompt = PromptTemplate( input_variables=["chat_history", "chunks_formatted", "input"], template=template, ) # Initialize the OpenAI model llm = OpenAI(openai_api_key="YOUR API KEY", model="gpt-3.5-turbo-instruct", temperature=0) # Create the LLMChain with memory chain = LLMChain( llm=llm, prompt=prompt, memory=memory ) # User query query = "What was the 5th point about on the question how to remove spotify account?" # Retrieve relevant chunks docs = db.similarity_search(query) retrieved_chunks = [doc.page_content for doc in docs] # Format the chunks for the prompt chunks_formatted = "\n\n".join(retrieved_chunks) # Prepare the input for the chain input_data = { "input": query, "chunks_formatted": chunks_formatted, "chat_history": memory.buffer } # Simulate a conversation response = chain.predict(**input_data) print(response)
このコードの内容を一つずつ見ていきましょう。
まずは ‘ConversationBufferMemory
‘ を使用して会話のメモリをセットアップします。 これにより、チャットボットが進行中のチャット履歴を記憶し、’input_key=”input”
‘ を使用して受け取ったユーザーの入力を管理できるようになります。
次に、プロンプトテンプレートを設計します。 このテンプレートはチャットボット用のスクリプトのようなもので、チャット履歴のセクション、収集した情報のチャンク、および現在のユーザーの質問(入力)が含まれます。 この構造は、チャットボットが文脈と回答すべき質問を正確に認識するのに役立ちます。
その後、言語モデルチェーンまたは ‘LLMChain
‘ の初期化に移ります。 これは、コンポーネントを組み立てることだと考えましょう。プロンプトテンプレート、言語モデル、および最初の方でセットアップしたメモリを使用し、それらを 1 つのワークフローに組み合わせます。
ユーザークエリを処理するタイミングで入力を準備します。 それには、ユーザーの質問(’input
‘)と関連する情報チャンク(’chunks_formatted
‘)が含まれる辞書を作成する必要があります。 このセットアップにより、チャットボットが十分な情報を含む回答を作成するために必要なすべての情報が含まれることになります。
最後に回答を生成します。 準備した入力データを渡して ‘chain.predict
‘ メソッドを呼び出します。 このメソッドは構築したワークフローを通じてこの入力を処理し、チャットボットの回答を出力し、それを表示します。
このアプローチにより、チャットボットは情報に基づく円滑な会話を維持し、過去の対話を記憶し、文脈に基づく関連性の高い回答を提供することができます。
メソッドの上にカーソルを置き、CTRL キーを押してクリックできるという PyCharm の仕組みも気に入っています。この機能を構築する際には大いに役立ちました。

まとめ
GPT-3 は、プロンプトで提供されるコンテキスト情報に基づいて特定の質問に回答できる対話型チャットボットを作成するのに優れています。 ただし、モデルがそのコンテキストのみに基づいて回答を生成するようにするのは難しい場合があります。なぜなら、多くの場合に根拠のない情報を発生させる(つまり、誤っている可能性のある新しい情報を生成する)傾向があるからです。 そのような誤った情報のどのように影響するかは、ユースケースによって異なります。
まとめると、今回は提供されたコードと戦略に従い、LangChain を使用してコンテキストを認識する質疑応答システムを開発しました。 このプロセスにはドキュメントをチャンクに分割する、その埋め込みを計算する、類似したチャンクを発見する取得部分を実装する、GPT-3 用のプロンプトを作成する、GPT-3 モデルを使ってテキストを生成するというタスクが含まれていました。 このアプローチにより、GPT-3 を活用して強力かつ文脈的に正確なチャットボットを作成できる可能性が示される一方、誤った情報を生成するリスクに注意することの重要性が強調されています。