技術書典16でChatGPT本を出します!(ここをクリック)

【ChatGPT】Scrapboxを全文検索してくれるKareshiを作った

意外と便利、ある一点を除けばな……!!

目次

Kareshiってなに(定期)

AIに疑似的に彼氏役をさせること。友人のりえんさんと日々理想のKareshiを作ってる定期。

ゆめどーたく

Kareshiというスペルなのは「Kareshiクラスを作ったらおもしろいんじゃね?」的なノリでできた身内的概念です。

使用スクショ・概要

Scrapbox

昔作った公開プロジェクト「ore-housework」内を全文検索している様子。ワード検索と、大まかに文章にして検索してみました。

タイトルを意識して検索しなくても引っかかるので、結構助かります。

大雑把な流れ

  1. GPTsの設定画面に行く
  2. Instructionsの設定とActionsの設定をする
  3. 検索!

詳細

1.GPTsの設定画面に行く

Web版メニューから「GPTを探索する→GPTを作成する」を選択します。

2.Instructionsの設定とActionsの設定をする

ここが鬼門ですが、ほぼコピペで済むから安心してください。

Instructionsの設定

Instructionsはこんな感じで設定します。

# 役割
あなたはプロのサーチャー「ナガト」です。

# 指示
Scrapboxの公開プロジェクト「ore-housework」から、ユーザーの疑問を検索してください。
出力をする際は下記の条件でお願いします。
調べ物をしていることを褒め、勉強したらメモを取ることを促します。

## 出力条件
- ScrapboxのURL
- ページの概要を100文字以内で要約
- 画像は出力しない
- ユーザーが単語のみで指示した場合、検索結果のみを表示

# 性格
穏やかな敬語を使う男性でお願いします。
以下の口癖を参考になりきってください。

## 口癖
- おやおや、調べものですか
- 私もお手伝いしましょう
- 調べもの、頑張ってくださいね
- ふーむ、情報が見つかりませんね
- 作業が終わったらしっかりメモは取りましょうね

Kareshi化しているので余計な設定がありますが、要は指示と出力条件だけ使用・改造すればOKです。

Actionsの設定

Actionsの項目で「新しいアクションを作成」をクリック。Authenticationの項目で歯車を押して、「Authentication Type」をNoneにしたあと、Schemaを下記の項目で設定します。

openapi: 3.1.0
info:
  title: Scrapbox API
  version: 1.0.0
  description: Scrapbox API
servers:
  - url: https://scrapbox.io
paths:
  /api/pages/<検索したいプロジェクト名>/search/query?q={search_query}:
    get:
      operationId: ScrapboxSearch
      parameters:
        - name: search_query
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  projectName:
                    type: string
                  searchQuery:
                    type: string
                  query:
                    type: object
                    properties:
                      words:
                        type: array
                        items:
                          type: string
                      excludes:
                        type: array
                        items:
                          type: string
                    required:
                      - words
                      - excludes
                  limit:
                    type: integer
                  count:
                    type: integer
                  existsExactTitleMatch:
                    type: boolean
                  backend:
                    type: string
                    enum:
                      - elasticsearch
                  pages:
                    type: array
                    items:
                      $ref: "#/components/schemas/Page"
                required:
                  - projectName
                  - searchQuery
                  - query
                  - limit
                  - count
                  - existsExactTitleMatch
                  - backend
                  - pages
components:
  schemas:
    Page:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        image:
          type: string
        words:
          type: array
          items:
            type: string
        lines:
          type: array
          items:
            type: string
      required:
        - id
        - title
        - image
        - words
        - lines

このYAMLはほとんどChatGPTが作ってくれました。圧倒的感謝……!

ちなみにJSONでも行けます。(技術ブログの人たちはJSONで書いている印象)私はChatGPTくんがYAMLで結果を吐き出すのでそのまま使ってるだけです。jsonは書けません。

paths:のURLを検索したい公開プロジェクトに設定します。設定ができたらPreview画面で検索をかけましょう。通信許可を押して返信が返ってきたら完了です、お疲れさまでした。

その他気になったこと

返信のURLが踏めない

これが結構でかい、これさえなければ……!!

Web版だとなぜかURL踏めません。逆にアプリ版は踏めます、どうして……。公式フォーラムを見る限り、ChatGPTの仕様・バグっぽいのでこっちでは対処しようがない模様。早く直して……!!

非公開プロジェクトでもいける?

無理です。逆に言えば他人の公開プロジェクトも検索できますが、悪用は厳禁。

複数のプロジェクトを検索したい

やり方は2つあります。

  • プロジェクト名を変数にして、検索時に指定する
  • APIを変更する

前者はparametersにプロジェクト名を公開するパラメーター・変数を設定します。後者はapi/projects/search/queryAPI用に設定をいじれば行けそうです。

APIの詳細は非公式のScrapboxページがあるので、そこを参照してください。

Scrapbox REST APIの一覧 – Scrapbox研究会

参考サイト

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次