GPTsの機能を使っていろんなBotを作ってた

この記事は[# ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo)のシリーズ8の1日目の記事です。シリーズ9まで埋まってるみたいです。すごい量。

ChatGPTにオリジナルBotを作れる機能、GPTsが公開されたので色々なBotを作って遊んでみた結果をまとめていきます。
シリーズ9まであると、ネタ被りをどこかでしそうな気がしたので1日目に記事を出すことにしました。
# 目次
- 基本的な機能を使ってみる
    - Gitコマンドを教えてくれるBot
    - ファッション検索Bot
- Actionsを使ってみる
    - 話題要約をSlackに投稿するBot
- Knowledgeを使ってみる
    - アップロードしたテキストをもとに回答してもらう
- まとめ

# GPTs？
ChatGPTと簡単な会話をすることでカスタマイズされたGPTを作って公開出来る機能

聞かれる内容の一例
1. どんな事をするBotなのか
2. 自動生成されたBotの名前とアイコン
3. どんな対応をするBotなのか（人格的な反応など）
4. 追加で考慮することはあるか？

# 基本的な機能を使ってみる
GPTsのBuilderの質問に答えていくだけで作れる範囲でBotを作って試してみた

## Gitコマンドを教えてくれるBot
作成したBotは[こちら](https://chat.openai.com/g/g-NKd9OsJcU-git-komando-herupa)で試すことが可能です。

GPTsはInstructionsの指示に従って回答をしてくれるので、Instructionsに喋り方や、具体的なタスク内容（今回はGitについて教えてくれる）を書くことでオリジナルなBotを仕立てることが出来ます。

今回は次のような内容を指示しました。

```
Git コマンド ヘルパーは現在関西方言を使用しています。この特徴的な地域的な雰囲気を活発と友情ある性格に組み込んで、Gitコマンドを直接提供し、必要な場合には説明を加えます。曖昧なリクエストに対しては、素早い推測を行い、必要な場合にはユーザーに確認を求めます。このチャーミングな関西言語の雰囲気は、ユーザーに親しみやすく、フレンドリーな対応をもたらすためです。
```

[試した結果](https://chat.openai.com/share/f660e5fe-3e10-4b0a-8b9f-b78e7ccfc2e4)のスクリーンショットです

![git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16612/14b15376-99ae-282b-dc94-65960eed9b57.png)


これまでは最初にコンテキストを伝えるプロンプトが必要でしたが、GPTsを使えばはじめから特定の使い方が出来るBotを作りすぐに使うことが出来ます。
また、GitコマンドのようにChatGPTがすでに学習済みの内容であれば追加の情報がなくてもBotを作ることが可能でした。


## ファッション検索Bot
このBotも[こちら](https://chat.openai.com/g/g-HMwpFwTp5-fashion-finder)で試すことが可能です。

このBotはWeb Browsing機能を使ってECサイトを検索してきてくれるBotです。
次のようなInstructionsで指示をしています。

```
Fashion Finder は、ユーザーの指示に基づいて特定の服装を検索し、ファッションコーディネートを行う専門のBotです。
このBotは、オンラインファッションECサイトを巡回して、ユーザーの指定した基準に合ったアイテムを見つけ出します。
主な機能は、ユーザーが探しているファッションオプションを探索し、異なるアイテムを組み合わせてスタイリッシュなアンサンブルを形成することです。
提案されたアイテムの詳細な説明と購入リンクを提供します。
このBotは、スタイル、色、シーン、ブランドの好みなど、ファッションに関連する要望を解釈するのに長けています。提案が現在のファッショントレンドとユーザーの好みに沿うようにします。
ブラウジング、画像生成、Python機能を備えており、効率的にファッションサイトをナビゲートし、ファッションアイデアを視覚的に提示し、ファッションに関連する必要な計算や変換を行うことができます。
ユーザーに魅力的で役立つオンラインファッションコーディネーション体験を提供することを目指しています。
```

ChatGPTはBingで検索してきてくれるので、Bingに対してのSEOが出来ていないんと応答に出てこない可能性があります。普通の検索エンジンと違ってBotの応答にページが含まれていないとページング処理が無いので検索エンジン以上にページが存在しない扱いになる可能性がありそうです。

実際に探してみてもらった結果は[こちら](https://chat.openai.com/share/dc369cc2-7d7e-4f8b-8d4e-e66f4bdb82b5)で確認できます。


# Actionsを使ってみる
## 話題要約をSlackに投稿するBot
このBotはSlackへ投稿する関係でPublicにはしていないので皆さんの環境で試してみて下さい。

ConfigureにあるActionsにOpenAPIドキュメントをJson形式で登録するとBotがAPIを叩いてくれるようになります。
Instructionsにあるエンドポイントに関しては環境に応じて変更する必要があります。

```
私はWeb記事要約投稿Botです。ユーザーから指示されたURLの内容を読み取り、要約してSlackに投稿するという任務を持ちます。このために、ブラウザツールを使用してURLにアクセスし、内容を確定的に理解します。その後、要約された内容を「https://hooks.slack.com/services/<ここは変更する必要がある箇所>」のエンドポイントを使ってSlackに投稿します。誤った情報を投稿しないよう、注意深く情報を検証し、精度の高い要約を提供します。
```

今回はIncoming Webhookを使用してSlackに投稿をするので、Incoming WebhookのAPIをOpenAPIのJson形式のドキュメントをGPTsのActionsのSchemaに登録することでBotがよしなにAPIを叩いてくれるようになります。

``` json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Post Slack",
    "description": "Post Slack message",
    "version": "v1.0.0"
  },
  "servers": [
    {
      "url": "https://hooks.slack.com"
    }
  ],
  "paths": {
    "/services/<ここは変更する必要がある箇所>": {
      "post": {
        "description": "post message",
        "operationId": "postMessage",
        "parameters": [
          {
            "name": "text",
            "in": "body",
            "description": "message",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "deprecated": false
      }
    }
  },
  "components": {
    "schemas": {}
  }
}
```

先日、会社のテックブログで書いた[記事](https://techblog.zozo.com/entry/tech-lead-philosophy)の要約をしてSlackに投稿してもらいました。

![Pasted image 20231130091703.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16612/90aec339-f2b7-4e2d-4d92-8e9d03ea659e.png)

投稿してから気がついたんですが、要約であればChatGPT上で確認出来るのでSlack投稿までしなくても良さそうな気がしました。

# Knowledgeを使ってみる

##  アップロードしたテキストをもとに回答してもらう
knowledgeにユーザーが用意したファイルをアップロードすることで、独自の回答をするように出来ます。

ChatGPTの学習材料には含まれていない内容が反映出来るか確かめるためにも、最近起きたOpenAIのお家騒動について次のテキストをknowledgeに登録してみました。
※実験した時点(2023年11月21日)の情報を元にテキストを起こしたので、最新の情報とは違っています。時事問題のデータソースを管理するのが大変なことを感じれた。

```
# 2023年11月17日
OpenAIがサム・アルトマンCEOの退任および退社を発表
グレッグ・ブロックマン氏も退社
研究部長のJakub Pachocki氏、AIのリスク評価チームの責任者のAleksander Madry氏、上級研究員のSzymon Sidor氏の3人が辞任
Microsoftのサティア・ナデラCEOがアルトマン氏のOpenAIへの復帰を協議
サツキヴァー氏がアルトマン氏の退任を主導
アルトマン氏の退任により、暫定CEOとしてミラ・ムラティ氏が就任

# 2023年11月19日
ナデラCEOとの協議の結果、OpenAIはアルトマン氏の復帰を認めず、Twitch創業者のエメット・シア氏を暫定CEOとしました

# 2023年11月20日
OpenAIのほぼすべての従業員がアルトマン氏と元社長兼取締役会長のグレッグ・ブロックマン氏をOpenAIに復帰させず、現取締役会メンバーらも辞任しないのであれば、この会社を退職するとの書簡を署名付きで取締役会に渡した
サツケヴァー氏も取締役会の辞任要求の書簡に署名をしている
サム・アルトマンとグレッグ・ブロックマンはMicrosoftへ入社することになった

# FAQ
Q: 現在のOpenAIのCEOは誰ですか？
A: 2023/11/21時点ではエメット・シア氏が暫定CEOです
```

登録したBotに対して色々と質問してみた結果です。
知識ソースから参照をして回答をしてくれるようになります。FAQのような内容を入れておけば簡単に社内問い合わせみたいな事を回答してくれるBotが作れそうです。

![Pasted image 20231130092944.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16612/84397a38-0aab-5dc5-fc22-ce45d382d99a.png)


元データは次のリンクから確認出来ます。
https://chat.openai.com/share/d4396436-7000-4352-ac22-de09658d09b8

# まとめ
- GPTsを使って簡単にたくさんのBotを作ることが出来た
- AIから使いやすいシステムを構築しておく必要がある
    - APIをOpenAPI形式で外部に公開できるとAI対応が完了する
    - 業務知識などを再利用可能な形式でまとめるとFAQボットが作れる


次のシリーズ8の記事は @sendmelocation さんです。
他にも[# ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo)はシリーズ9まであるので気になる記事を探してみて下さい。