fbpx

LlamaIndexを使って、ChatGPTに、社内にある情報から回答させてみる #ChatGPT #AI #プログラミング

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

LlamaIndexとは

ChatGPT関連のAI技術を紹介するシリーズです。
今回はLlamaIndexの検証をしてみました。

AIの分野では、fine-tuningと呼ばれる「既存のモデルに追加の学習データを与えて、モデルを特定領域に向けて強化する」手法があります。
これとは別に、モデルへの入力時に特定の情報を与えて、それを踏まえた回答をさせることによって「モデルが特定領域の情報を知っているかのように回答させる」という手法もあります。

ChatGPTの裏で動いているGPT-3.5やGPT-4といったモデルでは今のところfine-tuning機能は公開されていないため、上記のようなことを実現したい場合には後者の方法を採用する必要があります。(あるいはGPT-3でfine-tuningを行うという手もあります。)

LlamaIndexは、後者の機能を簡単に実現するためのライブラリです。
その仕組みや使い方は既に参考となる記事が出回っていますので、詳細はそちらに譲ります。

本記事では実際に使ってみた内容・結果と、そこからの考察を共有していきます。

活用できそうな領域

LlamaIndexは、例えば以下のような領域に活用できるでしょう。

  • 社内のドキュメントを読み込ませておき、自然言語で検索する。
  • 顧客からの質疑に対する回答情報を読み込ませておき、自動で応答するチャットボット。
  • 最新の製品情報を読み込ませておき、検索する。
  • 操作マニュアルを読み込ませておき、操作方法を教えてもらう。
  • 社内のプログラムソースコードを読み込ませておき、実現したいことを入力して実現方法を教えてもらう。

検証

実際にLlamaIndexを使って簡単なシステムを開発し、検証してみました。

検証内容

検証方法

以下のようなシステムを作成し、いくつかの問い合わせを入力して、その結果を確認してみます。

  1. Tech blogはWordPressで運用されています。WordPressのAPIを叩いて、全記事を取得します。
  2. 取得した全記事を、記事ごとにファイルとして保存します。
  3. ファイルの内容は「タイトル+改行+改行+本文」とし、本文はHTMLを除去したプレーンテキストに変換しておきます。
  4. (ここまで、事前にデータを準備するための別プログラム。ここから、検証用のシステム本体。)
  5. LlamaIndexを使って、全ファイルをインデクス化します。
  6. (ここまで、事前のデータ準備。)
  7. ユーザーからの問い合わせはプログラムの起動引数で指定されて、システムが実行されます。
  8. LlamaIndexが問い合わせを行うOpenAI APIは、デフォルトだとtext-davinciが使われますが、安価で高性能なgpt-3.5-turboを使うように変更しておきます。
  9. 作成済みのインデクスを読み込みます。
  10. ユーザーからの問い合わせをLlamaIndexへ渡します。
  11. LlamaIndexはユーザーからの問い合わせをベクター化し、インデクス化しておいたファイル一覧から「ユーザからの問い合わせに近い内容が含まれているもの」を探します。
  12. LlamaIndexは「ユーザからの問い合わせに近い内容が含まれているもの」の内容とともに「この情報から回答してください」といった具合でユーザーからの問い合わせをOpenAI APIへ投げて、回答を得ます。
  13. LlamaIndexが得たgpt-3.5-turboからの回答を表示します。

検証結果

その1

質問内容:

スクラムフェス大阪 には誰のセッションがある?

本システムの回答:

スクラムフェス大阪には笹健太と小坂淳貴のセッションがあります。

ChatGPTを直接使った場合の回答:

申し訳ありませんが、私の知識は2021年9月までのものであり、最新の情報は持っていません。そのため、2023年のスクラムフェス大阪のセッションについては把握していません。最新の情報を入手するために、公式ウェブサイトや関連のイベント情報をご確認いただくことをおすすめします。

考察:

  • ChatGPTが知っている情報は2021年9月までのものですが、LlamaIndexを使えばChatGPTが知らない情報からも回答を得ることができました。

その2

質問内容:

クリエーションラインとGitLabとの関係は?

本システムの回答:

クリエーションラインはGitLabの認定リセラーであり、GitLabとのパートナー契約を締結しています。クリエーションラインはGitLabの販売、導入コンサルティング、インテグレーション、運用サポートサービス、トレーニングサービ スを提供しています。

ChatGPTを直接使った場合の回答:

クリエーションライン(Creation Line)は、私にはよく知られていないかもしれません。ただし、GitLabについてはお答えできます。

GitLabは、ソフトウェア開発やプロジェクト管理のためのオープンソースのプラットフォームです。GitLabは、バージョン管理システムであるGitをベースにしており、ソースコードの共有、トラッキング、バージョン管理をサポートしています。

GitLabは、複数の開発者が同じプロジェクトで協力することを容易にし、プロジェクトの進捗状況を追跡し、変更の履歴を管理することができます。また、バグトラッキング、連続的インテグレーション(CI)、連続的デリバリ(CD)などの開発プロセスをサポートしています。

したがって、GitLabはソフトウェア開発のためのプラットフォームであり、コードのバージョン管理やチームの協力を効率的に行うためのツールです。クリエーションラインとGitLabの具体的な関係については、追加の情報が必要です。もしクリエーションラインに関する具体的な情報があれば、お教えいただければと思います。

考察:

  • ChatGPTがうまく回答できない内容も、複数の記事に含まれている内容からまとめて適切な回答を得ることができました。

その3

質問内容:

Auto-GPTとGPT Engineerのメリデメを教えて

本システムの回答:

Auto-GPTとGPT Engineerのメリデメは以下の通りです。
Auto-GPTのメリデメ:
メリット:
- タスク遂行に特化しており、目的を与えると自ら手順を考えて実行してくれる。
- ChatGPTを利用しているため、幅広い質問や依頼に対応可能。
デメリット:
- 人間が指示して軌道修正する必要がある。
- ローカルPCにインストールして使う必要がある。

GPT Engineerのメリデメ:
メリット:
- アプリ開発やプログラミングに特化しており、作りたいアプリの仕様を伝えると自動的にプログラムが生成される。
- ソースファイルや起動スクリプトの生成まで行われるため、開発時間を短縮できる。
デメリット:
- ChatGPTやAuto-GPTと比較して、誤りや曖昧さ、冗長さなどの欠点がある可能性がある。
- GPT Engineer自体の仕様によっては制約があるかもしれない。
- 使用にはGPT Engineerをインストールする必要がある。

ChatGPTを直接使った場合の回答:

Auto-GPTとGPT Engineerは、GPT-3のエンジニアリングおよび使用方法に関連する概念です。

Auto-GPTは、OpenAIが提供する自動生成されたテキスト生成モデルです。一般的に、Auto-GPTはユーザーがテキストのプロンプトを与えると、それに基づいて自動的に文章を生成します。Auto-GPTのメリットは、使いやすさと効率性です。ユーザーは単にプロンプトを与えるだけで、高品質の文章を得ることができます。また、Auto-GPTは多様なトピックやジャンルに対応しており、広範な情報を瞬時に生成することができます。

一方、GPT Engineerは、GPT-3をカスタマイズおよび調整するためのエンジニアリングスキルを持つ人々を指す用語です。GPT Engineerのメリットは、モデルの微調整や適応性の向上が可能であることです。GPT-3は非常に強力なモデルですが、特定のタスクやドメインに合わせて調整することで、より優れたパフォーマンスを発揮することができます。GPT Engineerは、モデルの制約や問題点を特定し、適切な調整を行う能力を持っています。

一方で、Auto-GPTのデメリットは、生成される文章が完全に自動化されているため、時には不正確な情報や不適切な回答が生成される可能性があることです。また、Auto-GPTはコンテキストに依存せず、独立した文章を生成するため、特定の会話や対話のフローを持つことができません。

GPT Engineerのデメリットは、エンジニアリングスキルと専門知識が必要であることです。GPT-3のカスタマイズや調整は複雑な作業であり、適切な知識と経験が必要です。また、GPT-3の使用には高いコンピューティングリソースと計算時間が必要です。

要約すると、Auto-GPTは使いやすく効率的なテキスト生成モデルですが、制御やカスタマイズの柔軟性には欠ける場合があります。一方、GPT Engineerはカスタマイズや微調整が可能ですが、専門的な知識とリソースが必要です。適切な状況に応じて、どちらのアプローチを選択するかを考慮する必要があります。

考察:

  • ChatGPTを直接使った場合に比べて、限定的な情報をピンポイントで得ることができました。

その4

質問内容:

虹はなぜ7色?

本システムの回答:

The given context information does not provide any information about why a rainbow has seven colors.

ChatGPTを直接使った場合の回答:

虹が7色で表現されるのは、光の分光現象に基づいています。虹は、太陽光が雨滴によって分散・屈折・反射されることで生じる光学現象です。

太陽光は、さまざまな波長の光から成り立っています。雨滴に太陽光が当たると、雨滴内部で光は屈折し、さらに反射します。この過程によって、光は分散され、異なる波長の成分が分かれて現れます。

分散された光は、異なる波長に対応する色として私たちの目に映ります。この分散された光が地面に届くと、私たちは虹を見ることができます。

分光現象において、光の波長は連続的に変化しますが、古くから一般的に7つの色が識別されてきました。これらの色は、赤、橙、黄、緑、青、藍(あい)、および紫です。

この7色の識別は、17世紀の英国の科学者であるアイザック・ニュートンによって行われました。ニュートンは光をプリズムに通し、プリズムが光を分散させることを観察しました。彼はそれぞれの波長の光が異なる角度で屈折することに気づき、それぞれの波長に対応する色を特定しました。

なお、実際の光スペクトルは無限に連続しており、分光現象によって見える色の数も理論的には無数に存在します。しかし、一般的にはニュートンの分類に基づいた7色の虹が広く認識されています。

考察:

  • 一般的な内容でも、インデクスに含まれていない情報は回答できないようです。

検証のまとめ

  • LlamaIndexを使えば、ChatGPTが知らない情報を、ChatGPTをFine Tuningせずに教えることができ、その内容から回答させることができます。
  • LlamaIndex経由で教えていない情報はChatGPTが回答で利用できません。
    • ChatGPTのベースの知識も利用したい場合は、質問文に「提供した情報で回答できない場合は、それ以外の情報も使って回答してください。」と付け加えるなどの工夫でうまく行く場合があります。

We're Hiring!

クリエーションラインでは、このような新たな技術を積極的に取り入れ、弊社が目指すビジョン「IT技術によるイノベーションにより顧客とともに社会の進化を実現する」を一緒に進めていく開発メンバーを募集しております。
ご関心のある方は弊社のお問い合わせページより、是非お気軽にご連絡ください! 一緒に社会を変えたい開発者・エンジニアの皆様の応募を心よりお待ちしております!

Author

教育系エンジニア。開発やR&Dで最前線の技術を実践しつつ、後進の育成にも魂を燃やす。排出者は数千名。無類の子ども好きで、平日夕方は仕事を中抜けして近所の子どもと遊ぶ毎日。小学校でのプログラミング授業なども経験あり。

上村国慶の記事一覧

新規CTA