[GPT Crawler]簡単！公式ドキュメントGPT先生の作り方

## はじめに 
ふとX（Twitter）で
「URLを入れるとその情報をChatGPTに読み込ませられ、公式ドキュメントから教えてくれるGPTが完成」
なる投稿を見かけてやってみました！

もちろん公式ドキュメントを直接見に行くのが一番ではあるんですが、
お探しのものを見つけるのに時間がかかったり、慣れるまで専門用語が分かりづらかったり…
なんてことも多いですよね。

そんな時、ChatGPTに「小学生でも分かるように教えて」とお願いできたら、どれだけ楽でしょう。

今回は、**「公式ドキュメントのGPTs先生」を簡単に作れる方法** をご紹介します！
ポイントは**Builder.ioの[GPT Crawler](https://github.com/BuilderIO/gpt-crawler) **という便利ツール。

https://github.com/BuilderIO/gpt-crawler

URLを指定するだけで公式ドキュメントから情報を抜き出し、それをもとにChatGPTで動く自分専用の「先生」を作れるんです！



## GPT Crawlerって 

まずはGPT Crawlerについて簡単に説明します。

### GPT Crawlerとは？
GPT Crawlerは、ウェブサイトから情報を自動的に抽出し、AIモデルに適したデータ形式（JSON形式）に変換してくれるツールです。
それをそのままGPTsのKnowledgeに渡すことで正確性の高い、GPTとして活用できます。

例えば： 
- **公式ドキュメントの中身を抽出して、質問応答GPTを作る**
- **自社のWEBサイトの中身を読み込ませ、チャットボットを作る**
- **データを整理してAIトレーニングの素材に使う**


## GPT Crawler導入手順

今回はDockerを使って簡単な方法でやってみました！

https://github.com/BuilderIO/gpt-crawler/blob/main/containerapp/README.md

### 1. リポジトリクローン
まずはリボジトリからクローンしてきます。
```bash
git clone https://github.com/builderio/gpt-crawler
```

### 2. Dockerfileのあるディレクトリに移動する
```bash
cd gpt-crawler/containerapp
```

### 3. ```config.ts```を編集する

GPT Crawlerでは、どのウェブサイトをクロールするか、どの部分のデータを抽出するかを指定する必要があります。これを設定ファイルで行います。
最低限url,match,maxPagesToCrawlは設定します。

```typescript:containerapp/data/config.ts
import { Config } from "./src/config";

export const defaultConfig: Config = {
  // クロールを開始するURL
  url: "https://www.builder.io/c/docs/developers",
  // クロール対象のURLパターン
  match: "https://www.builder.io/c/docs/**",
  // クロールする最大ページ数
  maxPagesToCrawl: 50,
  // 出力ファイルの名前
  outputFileName: "../data/output.json",
};
```
 
  - `url`：最初にアクセスするURLを指定します。例えば公式ドキュメントのトップページのURLを入れてください。
 
  - `match`：クロール対象とするURLパターンを指定します。例えばドキュメント内のページだけを対象にしたい場合は、`https://example.com/docs/**`のように指定します。
  
  - `maxPagesToCrawl`：クロールするページ数の上限を設定します。初回は少なめ（50〜100ページ程度）から始めると良いでしょう。
 
  - `outputFileName`：抽出結果を保存するJSONファイル名です。



### 4. クロールを実行する 

設定を編集したら、いよいよクロールを実行します！
 
**コマンドを実行** 

```bash
. ./run.sh 
```
 
GPT Crawlerが指定したウェブサイトをクロールし、データを抽出してJSON形式で保存します。以下のような出力が得られるはずです：

```bash
Crawling started...
Found 20 pages to crawl.
Crawled: https://example.com/docs/intro
Crawled: https://example.com/docs/setup
...
Crawling completed. Data saved to output.json
```
 
### 5. 結果を確認
実行が完了したら、`containerapp/data`フォルダ内に`output.json`(outputFileNameに設定したもの)というファイルが生成され、指定した内容がJSON形式でまとめられています。

```json
[
  {
    "url": "https://example.com/docs/intro",
    "content": "このページでは製品の概要について説明します..."
  },
  {
    "url": "https://example.com/docs/setup",
    "content": "セットアップ手順は次の通りです..."
  }
]
```

## ChatGPTに組み込む

サイトからデータを抽出し、整形したJSONファイルを用意するところまで完了しました。次は、このデータを使ってカスタムGPTを作成し、質問応答ができるように組み込みます！

### ChatGPTの「カスタムGPT」機能とは？ 
OpenAIの「カスタムGPT」機能を使うと、アップロードしたデータを基に動作する自分専用のGPTを作成できます。
例えば、抽出した公式ドキュメントをアップロードすれば、その情報に特化した質問応答ができるようになります。


### カスタムGPTを作成する手順 

整形したJSONデータをChatGPTに取り込んでカスタムGPTを作成します。

1. [ChatGPT](https://chat.openai.com/)にアクセスし、アカウントにログイン

2. 画面右上のユーザーアイコンをクリックし、**「My GPTs」**を選択
（ここで、カスタムGPTの作成や管理が行えます）

3. 新しいGPTを作成 をクリック
    - 名前 ：わかりやすい名前を設定（例: 「公式ドキュメントGPT先生」）
    - 説明 ：用途や目的を簡単に記載（例: 「公式ドキュメントに基づいて質問に答えるアシスタントです」）

4. 「Knowledge(知識)」セクションで、ファイルをアップロード

5. あとは保存すればOK

これでこのデータを基にアップロードした内容に関しては精度の高いGPTが動作するようになります。


## カスタムGPTを試してみよう 

カスタムGPTを作成したら、実際に使ってみましょう。

ChatGPTのチャット画面に戻り、作成したカスタムGPTを選択します。
以下のような質問を試してみてください：

- 「セットアップ手順を教えて」

- 「この製品の概要を簡単に説明して」

- 「初心者向けにサンプルコードを教えて」


下記のように付け加えると、より具体的な回答を得ることができます。

- 「初心者向けに優しく説明して」と指示を加える

- 「ステップバイステップで教えて」と依頼する


## ついでに

カスタムGPTの細かな回答内容は、対話しながらどのような仕様にするか決めるのも良さそうですが、
プロンプトジェネレーターなどを使ってあらかじめ必要な内容を指示欄に入れておくと簡単でした。

```
「〇〇についての質問に分かり易く答えてくれるカスタムGPT」の指示欄に記載するプロンプト
```

上記のような何のためのプロンプトを作りたいか入れるといい感じの内容を教えてくれます。

#### OpenAi API の Chat Playground についているジェネレーター

https://platform.openai.com/playground/chat?models=gpt-4o

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3680973/1c0fbab0-a021-3aea-4c4b-d6c39cfedd57.png)



## 注意点

カスタムGPTを作成し、公式ドキュメントを活用できる状態になりましたが、使う時にはいくつか注意すべき点があります。

### データ利用ポリシーを確認
違反が発覚すると、法的トラブルになる可能性があるので、以下を必ず確認しましょう：
 
- 著作権の有無 ：データを使用する際に許可が必要かどうか
 
- スクレイピングポリシー ：ウェブサイトがデータの抽出を許可しているか
 
- 非営利利用か商用利用か ：どのような目的で利用可能か

- 個人情報や機密情報の取り扱いに注意


### あくまで補助的な使い方をする
- データを渡しているとしてもハルシネーションは発生する可能性はあります。
- あくまで、補助的な使い方で正確な情報を知る必要がある場合は、必ず公式ドキュメントを直接見に行きましょう！


## さいごに

- やることはコマンドを１行書いて実行するだけという簡単さ！
- URLからデータ抽出してGPTs作るまでにかかる時間は5分程度です！すごっ！
- なんでも最初のとっかかりは、めちゃめちゃ優しく、丁寧に教えて欲しいので活用していこうと思います。。。
- ただ、クローリングは気を付けることが多いのでむやみやたらにはやめた方がよさそうです💦