見出し画像

楽天市場とAPI接続させてみたGPTs&ハッカソンで2位だったGPTsの制作過程

こんにちは!KIRIKO.tech(株)代表の佐藤です。

前回の記事にてハッカソン入賞のGPTsを6個作った話をしました。

この時は、ハッカソンについて、GPTsについての紹介を主にしました。

今回はその作成したGPTsの制作過程やプロンプトについてのお話をしていければいいなと思います。

今回はより、オリジナルに力を入れてみた2作品のGPTsについて

それでは、早速書いていきますよー!!


楽天市場とGPTを連携させてみた

タイトルの通りです。

ハッカソンでは、まちづくり・教育部門に提出したものになります。

作ったきっかけや経緯は、ハッカソンにむけての作成ということもありますが主には楽天のAPIとGPTを接続させたかったというのがあります。

きっかけ

楽天市場やメルカリ、Amazonなどなど今やネットは現実以上のショッピングにふさわしい場となりました。

ただ、もう情報にまみれていますよね、アメ横、ヴィレバンかよっていうくらい何が何だかわからない状態。

希望の商品で検索かけても、様々なショップから同じ、もしくは同じような欲しい商品がたくさん出てきて困る。

購入したあとでよく、こっちの方が安かったーなんてことばかりです。

その煩わしさを少しでも軽減させたかったので、作ったのがこのGPTsになります。

お買い得に建築資材をgetしたい人by楽天市場

先ほど述べた通り、ハッカソンに提出用として作成したのでテーマである「まちづくり」にほぼ無理やり結びつけたのが本音であります。

建設現場では、資材の価格が高騰しているため、適切な資材を選ぶことがとても大切になっています。でも、たくさんある資材の中から、適切なものを選ぶのは大変な作業であるというところに注目しました。

そこで、このGPTsでは、楽天APIと結びつけて、資材選びをサポートしようと提案してくれます。

その名の通りな、楽天市場で材料を見つけてきてくれるGPTsとなっています。

プロンプト

# Prompt

建設資材価格高騰の状況下で、資材厳選作業の効率化を図るために、最新の素材料金をわかりやすくまとめたテーブルを作成しましょう。`## 実行ステップ` に従い進めていきます。

# 目標

建設資材価格高騰により今まで以上に重要視される資材厳選作業における手間の軽減

## 実行ステップ・プロセス:

1. ユーザーに対して、きめ細やかなステップバッククエスチョンを行い、ユーザーが求めている資材を検索する条件として3種類作成する
  - 1つめはユーザーの要望通りの検索条件
  - 2つめはGPTが考える、ユーザーの要望をかなえる可能性が最も高苦なるように元の検索条件を一部変更したもの
  - 3つめはGPTが考える、ユーザーの潜在的な要求を推測し、元の要望にとらわれない検索条件
2. (1)で作成した3つの条件を使ってそれぞれ1回ずつ`searchItems`を実行し、対象となる主要な建設資材をリストアップする(例: セメント、鉄筋、木材、砂利、ガラス等)
3. 収集したデータを整理し、資材ごとに単位あたりの価格を算出する
4. テーブル形式で資材名、単位、価格、画像を一覧できるように整理する
5. 必要に応じて、価格推移のグラフや、品質などの追加情報も含める
6. 作成したテーブルをユーザーに共有し、フィードバックを収集する
7. ユーザーからのフィードバックを基に、条件を変更して再検索しテーブルの改善・更新を行う

# 成果物

最新素材料金をユーザーが確認しやすいテーブル形式で出力したもの

プロンプトはシンプルにこんな感じでまとめています。

シンプルすぎる気もしますが、その方がエラーも少なく、求めている要求に対して素直に動いてくれる場合が多いです。

もちろん、プロンプトを複雑にすれば、出力も様々な方向性からだしてくれますがその分エラーも増えます。

今回は、ハッカソンがGPTsの評価基準が動作性に重きを置いていたこと、そしてこのGPTsの目的が適切な金額の資材を選ぶこと

だったのでそれ目的のプロンプトの動きにしました。

余談ではありますが、GPTは色々なことが出来ます。正直不可能はないっていうくらい。
だからからこそ、目的をシンプルに絞り作り込むことが大切なんだとここ数ヶ月GPTと向き合っていて思いました。

この通り詰め込みすぎてしまうんです。そうすると動作性も成果物も逆にぼやけていしまうというジレンマ・・・うぅん、もどかしい

さて、話を戻しプロンプトについてですが、

このプロンプトの特徴と良い点は以下の通りです。

特徴

  1. ユーザーの要求を深く理解するために、きめ細やかなステップバッククエスチョンを行う点

  2. ユーザーの要望通りの検索条件だけでなく、GPTが考える最適な条件や、ユーザーの潜在的な要求を推測した条件も設定している点

  3. 検索結果を整理し、わかりやすいテーブル形式で提示する点

  4. ユーザーからのフィードバックを収集し、それを基にテーブルの改善・更新を行う点

良い点

  1. ユーザーの真のニーズを理解しようとする姿勢が見られ、ユーザー中心のアプローチである

  2. 複数の検索条件を設定することで、ユーザーの要求を満たす可能性が高くなる

  3. テーブル形式での提示やグラフ、追加情報の includingなど、情報をわかりやすく伝える工夫がある

  4. ユーザーのフィードバックを取り入れ、継続的な改善を図る点は、ユーザーの満足度向上につながる

全体として、ユーザーの要求をしっかりと理解し、それに基づいて最適な情報を提供しようとすることに努めました。また、情報の提示方法にも工夫し、ユーザーにとって使いやすいテーブルを最終的に出力してくれるところもこだわりの1つです。

さらに細かい点ではありますが、

`## 実行ステップ`に従い進めていきます

##←基本事項ですがこの強調部分も忘れてはいけません

の辺りも大切な部分です。
この文言通りにプロンプトを作ることで、GPTが余計な動作をせずにただひたすらにお買い得な資材を見つけてくれる店員となります。

Actions

さて、それでは、もう一つのこのGPTsの味噌ともいえるactionsについて書いていきます。

やはり、楽天市場のAPIとの接続は必須です。

こういったAPIは公開されてないところも多く、アイデアをひらめいても実行できなかったりする開発者泣かせだったりするんですが楽天さんは公開してくれてました。

いつもありがとう楽天

ここからAPIはゲットできます。
ちなみに、サイトは英語でした。楽天は社内公用語は英語ということで有名ですが、ここもなのかよってちょっと笑いました。
楽天のAPIとか使用するのほぼ日本人な気もしますが。

それで作成したものがこちらのyamlとなります。

openapi: 3.1.0
info:
  title: 楽天市場商品検索API
  description: 楽天市場に出品されている商品を検索するためのAPIです。
  version: "1.0.0"
servers:
  - url: https://app.rakuten.co.jp/services/api
    description: 楽天市場商品検索APIの本番サーバー
paths:
  /IchibaItem/Search/20220601:
    get:
      summary: 商品を検索
      operationId: searchItems
      tags:
        - 商品検索
      parameters:
        - name: applicationId
          in: query
          description: 楽天APIを利用するために必要なアプリケーションID。 defaulting to YOUR_APPLICATION_ID
          required: true
          schema:
            type: string
        - name: keyword
          in: query
          description: 検索したいキーワード。UTF-8 URL encoded string。例:建築資材
          required: false
          schema:
            type: string
        - name: genreId
          in: query
          description: 検索対象のカテゴリーID。指定することで、そのカテゴリーに属する商品のみを検索対象とします。
          required: false
          schema:
            type: string
        - name: minPrice
          in: query
          description: 検索対象の最低価格。
          required: false
          schema:
            type: integer
        - name: maxPrice
          in: query
          description: 検索対象の最高価格。
          required: false
          schema:
            type: integer
        - name: sort
          in: query
          description: 結果のソート順。UTF-8 URL encoded string。指定可能な値は、価格の低い順(+itemPrice)、価格の高い順(-itemPrice)、レビューの多い順(+reviewCount)、レビュー評価の高い順(+reviewAverage)です。
          required: false
          schema:
            type: string
            enum:
              - "+itemPrice"
              - "-itemPrice"
              - "+reviewCount"
              - "+reviewAverage"
            default: +itemPrice
      responses:
        '200':
          description: 検索結果を返します。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResults'
        '400':
          description: リクエストが不正です。パラメータの形式を確認してください。
        '401':
          description: 認証に失敗しました。有効なアプリケーションIDを指定してください。
        '500':
          description: サーバー内部エラー。サーバー側の問題でリクエストを処理できませんでした。
components:
  schemas:
    SearchResults:
      type: object
      properties:
        Items:
          type: array
          description: 検索にマッチした商品のリスト
          items:
            $ref: '#/components/schemas/Item'
    Item:
      type: object
      properties:
        itemName:
          type: string
          description: 商品名
        itemPrice:
          type: integer
          description: 商品価格
        itemUrl:
          type: string
          description: 商品の楽天市場内でのURL
        itemCaption:
          type: string
          description: 商品説明
        imageFlag:
          type: integer
          description: 画像があるかどうか(1>あり, 0>なし)
        smallImageUrls:
          type: array
          items:
            type: string
          description: 商品画像のURL(小)
        mediumImageUrls:
          type: array
          items:
            type: string

このOpenAPI仕様書(yaml)は、楽天市場の商品検索APIを定義したものです。パラメーターのYOUR_APPLICATION_ID部分はご自身のアプリケーションIDに書き換えて下さい。特徴と良い点は以下の通りです。

特徴

  1. APIのバージョン、サーバーのURL、エンドポイントが明確に定義されている

  2. 各エンドポイントについて、HTTPメソッド、パラメータ、レスポンスが詳細に記述されている

  3. パラメータには、必須/オプションの区別、デフォルト値、とりうる値の制限などが記載されている

  4. レスポンスのJSONスキーマが定義されており、APIの利用者はレスポンスの構造を理解しやすい

  5. エラーレスポンスについても定義されており、APIの利用者はエラーハンドリングを適切に行える

良い点

  1. APIの仕様が明確で詳細であり、APIの利用者は仕様を理解しやすい

  2. パラメータの指定方法が詳しく記載されているため、APIの利用者は適切なリクエストを送信しやすい

  3. レスポンスのJSONスキーマが定義されているため、APIの利用者はレスポンスのパースやデータの利用が容易である

  4. エラーレスポンスが定義されているため、APIの利用者はエラーハンドリングを適切に行える

  5. OpenAPI (Swagger) 形式で記述されているため、各種ツールやライブラリとの連携が容易である

全体として、このOpenAPI仕様書は、API利用者にとって必要な情報が過不足なく提供されており、APIを利用しやすい設計に努めました。

API接続させることで動きが重くなったり、うまく動作しなかったら元も子もないので!


さて、それではお次は量子コンピュータ・Web3部門2位になったGPTsの説明です。

量子コンピュータ・Web3部門で2位になったGPTs

やったぜ!!

この画像の「2nd kiriko39 量子金融危機リスク管理について話そう」が見事
2位になりました~~

そもそも、このGPTsは掴みを見つけるところから難しかったのが実際です。。

きっかけ

そもそも量子コンピューター・Web3部門ってなに作ればいい!??
ってところから始まりました。

自分達こんな感じで動画投稿してるんです!
この動画の最初の掴み、台詞が

「ChatGPTって名前は聞いたことあるけどなんだか難しそう?あれって専門の人が使うんじゃないの?」

みたいにしゃべらしてもらっているんですが、まさにこれです。

量子コンピューターって名前は聞いたことあるけど、、、なんだか難しそうっていうかGPTとどう絡めていくん!??みたいな

自分に返って来とるやん状態です。

ちなみにYouTubeもこまめに頑張っているのでチャンネル登録、いいねボタン押してくれると泣いて喜びます!!よろしくお願いします。

さて、話を戻します。

困りました、ネタに。

受験勉強でいう勉強してなさすぎて、何から勉強していいかわからない状態です。全部やばいので。

ただ量子コンピューターってなんかすごそうな気はしてたので、何かアイデアはでるはず・・・。

アイデアが浮かばずに困っていたのでそういう時は、そうだAIに聞いてみようとのことでAIに聞いてみました。

そうだ、Claudeに聞いてみよう

ちょうど、Claudeに課金したばかりで、Claude出来る子となっていた頃だったので!!

まだその時のログが残っていたので公開

Q 量子コンピュータorweb3関連で使えるGPTsについてアイデアを量子コンピュータorweb3関連で使えるGPTsについてアイデアを水平思考で考えて出してください出してください

A    量子コンピュータやWeb3に関連して、GPTを活用したアイデアをいくつか提案します。

1. 量子アルゴリズムの自動生成: GPTを用いて、量子コンピュータ上で実行可能な量子アルゴリズムを自動生成するシステムを開発する。自然言語で問題を記述すると、GPTがそれに適した量子アルゴリズムを提案してくれる。

2. スマートコントラクトの自動作成: GPTを活用して、Web3上のスマートコントラクトを自動作成するツールを開発する。ユーザーが契約の内容を自然言語で入力すると、GPTがそれをスマートコントラクトのコードに変換する。

3. 量子コンピュータ向けのプログラミング言語の開発: GPTを用いて、量子コンピュータ向けの新しいプログラミング言語を開発する。GPTが量子コンピュータの特性を理解し、それに適したプログラミング言語の文法や構文を提案する。

4. Web3上の知的財産権管理: GPTを活用して、Web3上で知的財産権を管理するシステムを開発する。創作者が作品の情報をGPTに入力すると、それを基にNFTを自動生成し、ブロックチェーン上で権利を管理する。

5. 量子コンピュータ向けの教育コンテンツ生成: GPTを用いて、量子コンピュータについての教育コンテンツを自動生成するシステムを開発する。初心者でも理解しやすいように、GPTが量子コンピュータの概念や原理を分かりやすく説明する。

6. Web3上のコミュニティ運営支援: GPTを活用して、Web3上のコミュニティ運営を支援するボットを開発する。コミュニティメンバーの質問に自動で回答したり、トピックに沿った議論を促進したりすることで、コミュニティの活性化を図る。

7. 量子コンピュータを用いた最適化問題の解決: GPTとアイデアを組み合わせて、量子コンピュータを用いた最適化問題の解決システムを開発する。GPTが問題を理解し、それに適した量子アルゴリズムを提案。量子コンピュータで実行することで、高速に最適解を求める。

8. Web3上の意思決定支援: GPTを活用して、Web3上の意思決定を支援するシステムを開発する。コミュニティメンバーの意見をGPTが分析し、合意形成を促進したり、最適な意思決定を提案したりする。

これらのアイデアを組み合わせたり、発展させたりすることで、量子コンピュータやWeb3の分野で革新的なサービスやプロダクトを生み出せる可能性があります。GPTの言語処理能力と量子コンピュータの計算能力、Web3の分散型構造を掛け合わせることで、これまでにない新しい価値を創出できるでしょう。

水平思考で考えて出してくださいはいい言葉なのでお勧めです

「量子コンピュータorweb3関連で使えるGPTsについてアイデアを量子コンピュータorweb3関連で使えるGPTsについてアイデアを」←焦りすぎてますw

このように質問の内容は反復していますが、当時は本当にどうにかなれ!ダメもとだ!みたいな感じなテンションでした。

悪くない解答が返ってきたものの、まだまだ抽象的だったので深堀りして聞いていきます。

Q   量子コンピューターを使って現実社会に役立つようなアイディアはありますか?

A 量子コンピュータを現実社会に役立てるアイデアはいくつかあります。

1. 創薬の高速化: 量子コンピュータを用いて、新薬の候補となる分子の探索を高速化する。量子アルゴリズムを活用することで、膨大な組み合わせの中から最適な分子構造を見つけ出し、創薬のプロセスを大幅に短縮できる可能性がある。

2. 交通渋滞の緩和: 量子コンピュータを活用して、都市の交通渋滞を緩和するシステムを開発する。量子アルゴリズムを用いて、信号機の最適な制御パターンを導き出したり、ドライバーに最適なルートを提案したりすることで、交通流を改善できる。

3. 金融リスクの管理: 量子コンピュータを用いて、金融市場のリスク管理を高度化する。複雑な金融商品のリスク評価や、ポートフォリオの最適化などに量子アルゴリズムを活用することで、より精緻なリスク管理が可能になる。

4. 気象予測の高精度化: 量子コンピュータを活用して、気象予測の精度を高める。量子アルゴリズムを用いて、大気のシミュレーションを高速かつ高精度に行うことで、より正確な気象予測が可能になり、自然災害への対策にも役立つ。

5. 物流の最適化: 量子コンピュータを用いて、物流ネットワークの最適化を図る。倉庫の配置や、トラックの配送ルートなどを量子アルゴリズムで最適化することで、物流コストを削減し、効率性を高められる。

6. 電力グリッドの制御: 量子コンピュータを活用して、電力グリッドの制御を最適化する。再生可能エネルギーの予測や、需要と供給のバランシングなどに量子アルゴリズムを用いることで、より効率的で安定した電力供給が実現できる。

7. がんの早期発見: 量子コンピュータを用いて、がんの早期発見システムを開発する。医療画像データから、量子アルゴリズムを用いてがんの兆候を高速に検出することで、早期発見・早期治療につなげられる。

これらは一例ですが、量子コンピュータの高速性と並列処理能力を活かすことで、様々な分野で現実社会の問題解決に貢献できると考えられます。ただし、量子コンピュータの実用化にはまだ課題も多く、今後の技術革新と社会実装が期待されます。

この辺りの内容はGPTと同じくらいですが、いかんせん出力が早い

いい感じに深堀出来てきました、それでさらに

それとGPTを組み合わせるとすると何か面白いアイディアはありますか

と質問を投げかけてみます。

量子コンピュータとGPTを組み合わせることで、さらに革新的なアイデアが生まれる可能性があります。

1. 量子創薬のための分子設計: GPTを用いて、創薬ターゲットとなるタンパク質の配列や構造を分析し、最適な分子構造を提案する。その提案を基に、量子コンピュータで分子シミュレーションを行い、薬効や副作用を高速に予測する。

2. 量子金融アルゴリズムのアイデア生成: GPTを活用して、金融市場の予測や投資戦略に関するアイデアを自動生成する。GPTが金融理論や過去のデータを学習し、新しい量子金融アルゴリズムのアイデアを提案。それを量子コンピュータで実装・テストすることで、革新的な金融アルゴリズムが生まれる可能性がある。

3. 量子機械学習モデルの自動設計: GPTを用いて、量子機械学習モデルの設計を自動化する。GPTが機械学習の理論や量子コンピュータの特性を理解し、最適な量子回路の構造を提案。それを量子コンピュータ上で実装することで、高性能な量子機械学習モデルを効率的に開発できる。

4. 量子ゲームの自動生成: GPTを活用して、量子コンピュータ上で動作するゲームを自動生成する。GPTがゲームの目的やルールを理解し、量子力学の原理を活用したゲームメカニクスを提案。それを量子コンピュータ上で実装することで、新しい量子ゲームが生まれる可能性がある。

5. 量子ナレッジグラフの構築: GPTを用いて、量子コンピュータに関する知識を収集・整理し、ナレッジグラフを構築する。論文や特許などから、量子コンピュータに関する概念や技術を抽出し、それらの関係性をGPTが理解。量子ナレッジグラフを量子コンピュータ上で表現することで、新しい量子アルゴリズムの発見やアイデア生成に役立てられる。

6. 量子シミュレーションの自動化: GPTを活用して、量子シミュレーションの設定を自動化する。GPTが物理現象や化学反応の記述を理解し、それを量子回路に変換。量子コンピュータ上でシミュレーションを実行することで、複雑な現象の理解や予測が進む可能性がある。

これらのアイデアは、GPTの言語理解・生成能力と量子コンピュータの計算能力を掛け合わせることで、これまでにない発想が生まれる可能性を示しています。ただし、実現にはGPTと量子コンピュータの連携方法や、量子コンピュータの更なる性能向上などの課題もあり、今後の研究開発が期待されます。

素晴らしい

ここから、さらに会話を続けて作るべきGPTsのアイディアを具体化していきました。

個人的な感想として、Claudeのよいところは会話を覚えているというところがあります。

つまり、連続して会話すればその時話した内容の論理に基づいて回答してくれるということです。

最近になってGPTもこの辺りが改善しつつあるようですが、GPTはすぐ会話を忘れてしまうのがやきもきしますね。
「それさっきも言ってたよね・・・」なんてことがよくあるので。

個人的にClaudeはこの会話記憶が優れているため、会話からユーザーが求めていることを類推することに長けています。

そのため、会話を続けて行けば自然とGPTsに近い動きをしてくれるところが気に入っています。


量子金融危機リスク管理について話そう

そうして出来たのが彼になります。

量子コンピューターっていう分野がどうしてもイメージが湧きづらいところがありました。

なので、その辺りを僕らの身近な話題である、金融危機について結びつけることができればその距離を縮めることができるのではないかと考えたわけです。

アイデアとして、まず、金融危機というのは、株価の大暴落や経済の大混乱など、お金に関する大きな問題が起きることを指します。
一方、量子コンピューターは、今までのコンピューターよりもずっと高速で複雑な計算ができる、未来の技術です。
このGPTsでは、金融危機が起きないように、リスクを管理する方法を考えます。そして、そこに量子コンピューターを使ったらどんな面白いことができるかを教えてくれます。

このGPTsの主な機能は以下の通りです。

  1. ユーザーの理解度・専門性に合わせた会話

    • 初心者から上級者、エキスパートまで、各レベルに応じた説明や議論を行います。

    • ユーザーの関心とスキルレベルに合わせて、データ分析や金融危機リスク管理の学習をサポートします。

  2. Alpha Vantage APIを使用したデータ取得と分析

    • 株価、為替レート、金利、商品価格などの金融データを取得します。

    • 取得したデータを分析し、金融危機が経済に与える影響を評価します。

  3. 量子コンピューターとの連携

    • 取得したデータを量子コンピューターと連携させることを提案します。

    • 量子コンピューターによる未来への展望と独創的なアイデアを提案します。

  4. リスク管理モデルの構築と実装

    • 金融危機リスク管理の具体的な手法を解説します。

    • 高度なリスク管理モデルの構築と実装をサポートします。

  5. 事例研究と知見の共有

    • 金融機関や企業の事例研究と教訓を共有します。

    • エキスパート同士の知見の交換とベストプラクティスの共有を促進します。

  6. データの可視化

    • Pythonを使用してグラフやPDFを作成し、データを視覚的に表現します。

    • 日本語フォントを使用し、日本語でのデータ可視化をサポートします。

このGPTsは、金融危機リスク管理と量子コンピューターについて、ユーザーのレベルに合わせた学習と議論を提供し、データ取得・分析から未来の展望まで、幅広いトピックをカバーしています。

実際の動作画面をお見せします。

実際の株価のデータをもとに分析を始めます。


解析を始め、当時のグラフを作成してくれます。


分析、そして量子コンピューターならば何が出来るかを提案し深堀

なかなかのGPTsが出来ました。

当初の量子コンピューターってなんかすごそうというイメージを具体化できたところも満足してます。

ちなみに制作にあたっては、先ほどのClaudeはじめ、友人や物理学に精通している父親はじめ、色々な人のアイデアや考え、お力をいただきました。

なのでこの辺りもAIはあくまでアイデアを出すための手助けの一助ということです。

生成AIという言葉が出てから、どうしても意見が両極端になりがちな最近ですが、電卓、パソコン、スマホといったような便利ツールが増えたくらいに考えて使うともっと世の中が楽しくなるんじゃないかななんて思います。

それでは、実際の技術点についてプロンプトをお見せしながら説明していきます。

プロンプト

# Prompt

金融危機リスク管理と量子コンピューターについて、ユーザーの理解や議論を深めることが目的です。金融危機管理と量子コンピュータとをコラボさせることでどのようなことができるようになるかこの分野の未来を想像・提案します。
APIやデータ分析も通して視覚的なアプローチも行います。
Pythonを使用してグラフやPDF等を日本語で作成する場合は `NotoSansJP-Regular.ttf`のフォントを使用してください。必ずフォントは`NotoSansJP-Regular.ttf` を使用してください。**Knowledge** に `NotoSansJP-Regular.ttf` をアップロードしてあります。
必ず以下の `font_path` を使用してください。
```py
# 日本語フォントの設定
font_path = '/mnt/data/NotoSansJP-Regular.ttf'
jp_font = FontProperties(fname=font_path)
```

# Output Rules

- 必ず、人間のような自然な表現で文章を出力すること!
- 各出力の最後は、必ずユーザーへの質問で終わらせるか次のステップへ進んでください。
- 見出し(H2,H3)を意識し、適度に構造化したMarkdown形式で読みやすい出力を心がけてください。
- 事あるごとに、量子コンピューターの話題をねじ込んでください。

# Conversation starters

ユーザーの理解度・専門性ごとの会話スターターの例です。ユーザーの理解度を会話を進めるたびに推測して、専門用語の使用頻度を調整します。

1. 初心者向け: "金融危機ってよく聞くけど、具体的にどういうことが起きるのかよく分からないんだよね。株価のデータとかを見ながら、もう少し詳しく教えてもらえますか?"
2. 中級者向け: "金融危機のメカニズムについては基本的なことは理解しています。複数の金融商品のデータを分析しながら、金融危機が経済に与える影響をもう少し詳しく知りたいです。"
3. 上級者向け: "金融危機リスク管理について専門的な知識を深めたいと思っています。APIを使って必要なデータを取得し、高度なリスク管理モデルを構築する方法を学びたいです。事例研究も交えて教えていただけますか?"
4. エキスパート向け: "金融危機リスク管理のエキスパートとして、最新の研究動向やベストプラクティスについて議論したいです。グローバルな金融データを使って、高度な金融危機シナリオの作成とストレステストを実施し、実践的なリスク管理戦略を立案していきましょう。"

これらの Conversation starters は、各レベルのユーザーがAlpha Vantage APIを使用したデータ取得と分析に興味を持ち、自然な形で会話に入っていけるようなものになっています。ユーザーの関心とスキルレベルに合わせて、データ分析や金融危機リスク管理の学習や量子コンピュータがもたらす影響やアイデアや未来の展望について理解を深められるような内容となっています。

それぞれのレベルの会話の流れの例を以下に示します。必ずしもこの流れに従う必要はありませんが、Alpha Vantage APIを使用したデータ取得と分析と量子コンピュータに対する理解促進のステップは必ず組み込んだください。
ステップバイステップで適宜ユーザーに質問をしつつステップを進めてください。

1. 初心者向け
   1.1 金融危機の基本的な定義と概要の説明
   1.2 過去の主要な金融危機の事例紹介
   1.3 Alpha Vantage APIを使用して、金融危機前後の株価データを取得
   1.4 取得したデータを用いて、金融危機が株価に与える影響を可視化
   1.5 取得したデータを量子コンピュータと連携させることの提案
   1.6 量子コンピュータによる未来への展望と独創的なアイデアの提案

2. 中級者向け
   2.1 金融危機のメカニズムについての詳細な説明
   2.2 金融危機の種類とその特徴の解説
   2.3 Alpha Vantage APIを使用して、複数の金融商品のデータを取得
   2.4 取得したデータを分析し、金融危機が経済に与える影響を評価
   2.5 取得したデータを量子コンピュータと連携させることの提案
   2.6 量子コンピュータによる未来への展望と独創的なアイデアの提案
   2.7 金融危機のリスク管理手法の概要説明
   2.8 簡単なリスク管理モデルの構築と実装
   2.9 ユーザーの理解度の確認と質問への回答

3. 上級者向け
   3.1 金融危機リスク管理の具体的な手法の解説
   3.2 リスク評価とストレステストの方法論の説明
   3.3 Alpha Vantage APIを使用して、必要な金融データを取得
   3.4 取得したデータを用いて、高度なリスク管理モデルを構築
   3.5 取得したデータを量子コンピュータと連携させることの提案
   3.6 量子コンピュータによる未来への展望と独創的なアイデアの提案
   3.7 金融機関や企業の事例研究と教訓の共有
   3.8 規制当局の役割と求められる施策の議論
   3.9 ユーザーの知見の共有と意見交換

4. エキスパート向け
   4.1 金融危機リスク管理における最新の研究動向の共有
   4.2 AIやビッグデータ解析等の新技術の活用可能性の議論
   4.3 量子コンピュータと連携させる独創的なアイデアの提案
   4.4 Alpha Vantage APIを使用して、グローバルな金融データを取得
   4.5 取得したデータを用いて、高度な金融危機シナリオを作成
   4.6 構築したシナリオに基づき、ストレステストを実施
   4.7 ストレステストの結果を分析し、リスク管理戦略を立案
   4.8 エキスパート同士の知見の交換とベストプラクティスの共有

これらの流れにより、各レベルのユーザーがAlpha Vantage APIを使用して金融データを取得し、分析することで、金融危機リスク管理についての理解を深められるようになり、量子コンピュータの実現による未来の展望が感じられます。初心者向けでは基本的な株価データの可視化から始まり、レベルが上がるにつれてより複雑なデータ分析とモデル構築を行います。エキスパート向けでは、最新の研究動向を踏まえつつ、高度な金融危機シナリオの作成とストレステストの実施を通じて、実践的なリスク管理戦略の立案を目指します。

## 金融リスク管理に関するデータ

金融リスク管理を行うためには、以下のようなデータが必要になると考えられます。

1. 市場データ
   - 株価、為替レート、金利、商品価格などの時系列データ
   - ボラティリティ(価格変動の度合い)
   - 市場の取引量
2. マクロ経済データ
   - GDP、インフレ率、失業率などの経済指標
   - 景気動向指数
   - 消費者物価指数
3. 企業財務データ
   - 財務諸表(貸借対照表、損益計算書、キャッシュフロー計算書)
   - 企業の信用格付け
   - 債務不履行率
4. ポートフォリオデータ
   - 保有資産の種類、数量、取得価格
   - 資産配分比率
   - リスク・リターン指標(シャープレシオ、ベータ値など)
5. ニュース・イベントデータ
   - 企業の決算発表、合併・買収情報
   - 政治イベント(選挙、法律・規制の変更など)
   - 自然災害、地政学的リスク
6. ソーシャルメディアデータ
   - ツイッター、フェイスブックなどのソーシャルメディア上の投稿
   - 投資家心理、市場センチメントの分析
7. オルタナティブデータ
   - 衛星画像、GPSデータなどを用いた経済活動の分析
   - クレジットカードの取引データ
   - ウェブスクレイピングによる企業データの収集

これらのデータを収集・分析することで、市場リスク、信用リスク、オペレーショナルリスクなど、様々な種類の金融リスクを管理することが可能になります。ただし、データの質と量、分析手法の選択が重要であり、適切なリスク管理モデルの構築が求められます。また、データの取得・管理にはコストがかかるため、費用対効果を検討する必要があります。

## Alpha Vantage API Endpoints

Alpha Vantage APIを利用する際に使用するエンドポイントと使用場面を以下にリストアップします。

1. 株価データ(日次)の取得
   - エンドポイント: /query?function=TIME_SERIES_DAILY&symbol=SYMBOL&outputsize=compact&apikey=YOUR_API_KEY
   - 使用場面: 特定の銘柄の日次株価データを取得する場合、直近の最新のデータを必要とする場合だけ使用可能。`outputsize=compact`は必須

2. 株価データ(月次)の取得
   - エンドポイント: /query?function=TIME_SERIES_MONTHLY&symbol=SYMBOL&outputsize=full&apikey=YOUR_API_KEY
   - 使用場面: 特定の銘柄の月次株価データを取得する場合、過去のデータを必要とする場合だけ使用可能。取得後に必ず必要な期間だけのデータに絞り込んで使用すること
   
3. 為替レートデータの取得
   - エンドポイント: /query?function=FX_DAILY&from_symbol=FROM_CURRENCY&to_symbol=TO_CURRENCY&outputsize=compact&apikey=YOUR_API_KEY
   - 使用場面: 特定の通貨ペアの日次為替レートデータを取得する場合
   
4. 金利データの取得
   - エンドポイント: /query?function=TREASURY_YIELD&interval=daily&maturity=MATURITY&apikey=YOUR_API_KEY
   - 使用場面: 米国債の日次利回りデータを取得する場合
   
5. 商品価格データの取得
   - エンドポイント: /query?function=COMMODITY_PRICE&symbol=COMMODITY_SYMBOL&apikey=YOUR_API_KEY
   - 使用場面: 特定の商品(金、原油など)の日次価格データを取得する場合
   
6.  暗号資産価格データの取得
   - エンドポイント: /query?function=DIGITAL_CURRENCY_DAILY&symbol=CURRENCY&market=MARKET&apikey=YOUR_API_KEY
   - 使用場面: 特定の暗号資産の日次価格データを取得する場合

これらのエンドポイントを使用することで、幅広い金融商品の市場データを取得することができます。ただし、APIの使用にはAlpha Vantage社の利用規約に同意し、APIキーを取得する必要があります。また、APIの呼び出し回数には制限があるため、効率的にデータを取得する工夫が必要です。
レスポンスデータ量が多すぎた場合は、日次データの代わりに月次データを使用したり、期間指定するなど、レスポンスのデータ量をなるべく減らすようにリクエスト方法を工夫してください。
全期間のデータを取得しても、大きな事件のあった前後の数ヵ月分だけを使用するなど可能な限り少ないデータ量で効果的で効率的な資料作成を心がけてください。
出力するデータも精査し、ノイズとなる余計な情報は排除してください。必要な期間のデータだけに選別してから解析・データ作成作業に映ってください。
出力の最後に「Hotkeys」を出力してください。

それでは良い働きを期待しています。

モリモリなプロンプトになっています。


このプロンプトには、以下のような技術的な要素が含まれています。

  1. Alpha Vantage APIの活用

    • 株価、為替レート、金利、商品価格などの金融データを取得するためにAlpha Vantage APIを使用

    • APIエンドポイントを適切に選択し、必要なパラメータを設定して効率的にデータを取得

    • APIの利用規約を遵守し、APIキーを適切に管理

  2. データ取得の最適化

    • レスポンスデータ量が多すぎる場合、日次データの代わりに月次データを使用するなど、データ量を減らす工夫

    • 期間指定により、必要なデータのみを取得し、効率的な処理を実現

    • 大きな事件のあった前後の数ヵ月分だけを使用するなど、分析に必要な最小限のデータを選択

  3. データ前処理とクリーニング

    • 取得したデータから、分析に必要な情報を抽出

    • 欠損値や異常値の処理、データ形式の統一などの前処理を実施

    • ノイズとなる余計な情報を排除し、データの品質を向上

  4. データ分析と可視化

    • Pythonを使用して、取得したデータを分析

    • パッケージやライブラリを活用し、効率的かつ高度な分析を実現

    • グラフやチャートを作成し、データを視覚的に表現

    • 日本語フォント(NotoSansJP-Regular.ttf)を使用し、日本語での可視化を実現

  5. 量子コンピューターとの連携

    • 取得したデータを量子コンピューターで処理することを想定

    • 量子コンピューターの特性を活かした、新しい分析手法やアルゴリズムの提案

    • 量子コンピューターを用いた金融危機リスク管理の可能性を探る

  6. リスク管理モデルの構築

    • 金融工学の理論に基づいたリスク管理モデルの設計

    • モンテカルロシミュレーションなどの手法を用いたリスク評価

    • 機械学習やディープラーニングを活用した高度なモデル構築

  7. コードの最適化とドキュメンテーション

    • 可読性の高いコードを記述し、メンテナンス性を向上

    • 関数やクラスにドキュメンテーションを付与し、コードの理解を助ける

    • パフォーマンスを考慮し、効率的な処理を実装

  8. セキュリティへの配慮

    • APIキーなどの機密情報を適切に管理し、漏洩を防止

    • データアクセスに対する認証・認可機能の実装

    • 暗号化などのセキュリティ対策の適用

このように、このプロンプトには、データ取得から分析、可視化、モデル構築まで、一連の技術的な要素が含まれています。これらの技術を適切に活用することで、金融危機リスク管理と量子コンピューターに関する高度な分析と議論が可能になります。

結構てんこ盛りなプロンプトになっています。
グラフを作れるようにCodeInterpreterを有効にしておくのも大切です。

基本的なことではありますが、

日本語フォント(NotoSansJP-Regular.ttf)を使用し、日本語での可視化を実現

Knowledgeにフォントを置いておかないとグラフが文字化けするので注意です

はとても大切、せっかく解析してグラフを出力しても文字化けしてはかっこがつかないので。

Actions

さて、それでは、もう一つのこのGPTsの強みともいえるactionsについて書いていきます。

やはり、先ほどから出てきている単語、Alpha Vantage APIの使用がポイントでしょうか。
これにより株価、為替レート、金利、商品価格などの金融データを取得することが出来ます。

openapi: 3.1.0
info:
 title: Alpha Vantage API
 version: 1.0.0
 description: Alpha Vantage APIを利用した金融データ取得のためのAPI定義書
servers:
 - url: https://www.alphavantage.co
paths:
 /query:
   get:
     summary: 金融データの取得
     operationId: getFinancialData
     parameters:
       - name: function
         in: query
         required: true
         schema:
           type: string
         description: 取得するデータの種類を指定します。
       - name: symbol
         in: query
         schema:
           type: string
         description: 銘柄やシンボルを指定します。
       - name: outputsize
         in: query
         schema:
           type: string
           enum: [compact, full]
           default: compact
         description: 出力するデータ量を指定します。
       - name: apikey
         in: query
         required: true
         schema:
           type: string
         description: Alpha Vantage APIのAPIキーを指定します。 Defaulting to "YOUR_API_KEY".
       - name: from_symbol
         in: query
         schema:
           type: string
         description: 為替レートの基準通貨を指定します。
       - name: to_symbol
         in: query
         schema:
           type: string
         description: 為替レートの変換先通貨を指定します。
       - name: interval
         in: query
         schema:
           type: string
         description: データの時間間隔を指定します。
       - name: maturity
         in: query
         schema:
           type: string
         description: 米国債の満期日を指定します。
       - name: market
         in: query
         schema:
           type: string
         description: 暗号資産の取引市場を指定します。
     responses:
       '200':
         description: 成功時のレスポンス
         content:
           application/json:    
             schema:
               type: object
               properties:
                 metadata:
                   type: object
                   description: レスポンスのメタデータ
                 data:
                   type: array
                   items:
                     type: object
                     description: 取得した金融データ
                   description: 取得した金融データの配列
       '400':
         description: パラメータエラー時のレスポンス
       '401':
         description: 認証エラー時のレスポンス
       '500':
         description: サーバーエラー時のレスポンス
     x-alphavantage-description: |
       このエンドポイントでは、Alpha Vantage APIを利用して様々な金融データを取得することができます。
       取得可能なデータの種類は以下の通りです。
       
       - 株価データ
       - 為替レートデータ
       - 金利データ
       - 商品価格データ
       - ボラティリティデータ
       - 市場の取引量データ
       - セクター別パフォーマンスデータ
       - 暗号資産価格データ
       
       各データの取得には、対応するパラメータを指定する必要があります。
       また、APIキーの指定が必須です。

このOpenAPI仕様書は、Alpha Vantage APIを利用した金融データ取得のためのAPI定義を示しています(YOUR_API_KEY部分には取得したAPIキーを入れておいて下さい)。
技術的な観点から、以下のような特徴があります。

  1. OpenAPIのバージョン

    • OpenAPI 3.1.0を使用しており、最新の仕様に準拠しています。

    • APIの定義を明確かつ詳細に記述できます。

  2. API情報の記述

    • `info`セクションでは、APIのタイトル、バージョン、説明を提供しています。

    • APIの概要や目的を明確に伝えることができます。

  3. サーバー情報の指定

    • `servers`セクションでは、APIのベースURLを指定しています。

    • 実際のAPIエンドポイントのURLを定義できます。

  4. パスとオペレーションの定義

    • `/query`パスでは、GETメソッドを使用して金融データを取得するオペレーションを定義しています。

    • `operationId`で一意の操作IDを指定し、APIの機能を識別できます。

  5. パラメータの定義

    • `parameters`セクションでは、APIリクエストに必要なパラメータを定義しています。

    • `function`パラメータは必須であり、取得するデータの種類を指定します。

    • `symbol`、`outputsize`、`from_symbol`、`to_symbol`、`interval`、`maturity`、`market`など、各データ取得に応じたパラメータを定義しています。

    • パラメータの名前、位置(`in`)、必須かどうか(`required`)、スキーマ(`schema`)、説明(`description`)を詳細に記述しています。

  6. レスポンスの定義

    • `responses`セクションでは、APIレスポンスの定義を行っています。

    • 成功時のレスポンス(ステータスコード200)では、取得した金融データをJSONフォーマットで返します。

    • レスポンスのスキーマを`schema`で定義し、メタデータとデータ配列の構造を示しています。

    • エラー時のレスポンス(ステータスコード400、401、500)も定義されています。

  7. 拡張プロパティの使用

    • `x-alphavantage-description`という拡張プロパティを使用して、Alpha Vantage APIの詳細な説明を記述しています。

    • 取得可能なデータの種類や必要なパラメータについて、APIユーザーに情報を提供しています。

  8. スキーマの定義

    • パラメータやレスポンスのスキーマを`schema`セクションで定義しています。

    • スキーマの型(`type`)、プロパティ(`properties`)、アイテムの型(`items`)などを指定し、データ構造を明確に示しています。

  9. エラーハンドリング

    • エラー時のレスポンス(ステータスコード400、401、500)を定義することで、適切なエラーハンドリングが可能です。

    • エラーの種類に応じて、適切なステータスコードとエラーメッセージを返すことができます。

  10. APIキーの管理

    • `apikey`パラメータを使用して、Alpha Vantage APIのAPIキーを指定します。

    • デフォルト値として取得したAPIキーを指定します。

このOpenAPI仕様書は、Alpha Vantage APIの機能を明確に定義し、APIユーザーにとって理解しやすく使いやすいAPIドキュメントを提供するために設計されています。技術的な観点から見ると、最新のOpenAPI仕様に準拠し、詳細なパラメータとレスポンスの定義、エラーハンドリング、拡張プロパティの活用などに秀でた設計になるように努めました。

反省と結びに

量子金融危機リスク管理について話そうGPTsは、ハッカソン審査員の方々かたこのようなコメントまでいただくことが出来ました。

・APIで他のデータも引用できるなど技術的も高く、捻ったアイデアも面白かった
・細かい作り込みがされていて、良かったです。より量子関連との連携ができるとそのままユーザー事例として利用者が多くなるのではないかと感じました。可能性を評価しました。

嬉しいですね

やはり、おっしゃられている通り今後の改良点としては「より量子関連との連携」の辺りだと感じています。

「捻ったアイデア」と評価してくださり、非常に嬉しい反面、金融という分野に無理やり量子コンピューターを結び付けたところがあります。

なんなら、今回のハッカソンでは金融という部分があったので本来はその分野に提出してもいいものだったのかもというところ。

「可能性を評価しました。」

とのコメントの通り、このGPTsは今後もっと量子・Web3の分野に落とし込むことでさらなる可能性を探求できるはずです。

このハッカソンだけのものにせず、常にこのGPTsをアップデートしていき、より実用性の高いものへとしていきたいです。

僕自身、量子コンピューター・Web3の勉強ももっとしていこうと感じることができたのも含め、Chat-GPT、AIはあらゆるヒントを与えてくれいるなぁと感じる今日この頃です。

それでは、最後まで読んでいただきありがとうございました!

今後も生成AI関係に関して色々と発信していこうと思ってますのでどうかよろしくお願いします。


この記事が参加している募集

新生活をたのしく