2023.12.18

GPTsカスタムアクション入門:為替PL計算ツールの作り方

こんにちは。グループ研究開発本部 次世代システム研究室のT.D.Qです。

本日は、GPTsのカスタムアクションを使用して為替PL計算ツールを簡単に作成する方法についてお話しします。最近の進展で、ChatGPT上でGPTの機能を簡単に実装できるようになりました。これは、深いプログラミングの知識がなくても、GPT Builderを使って、誰でも自分のGPT機能を手軽に作成できることを意味します。

特に、GPTにカスタムアクションを定義することで、ChatGPTが外部サービスやAPIと連携できるようになることです。これらのアクションは、ChatGPTのプラグインのように機能し、カスタマイズの幅が広いため、GPTが外部データを統合し、実世界との相互作用を実現することが可能になります。

1. やりたいこと

今回の記事の目的は、ドル円の損益を自動的に計算するGPTsの開発です。このための手順は以下の通りです。

  1. 最新のドル円為替レートを取得:最初のステップとして、AlphaVantage APIを実行して最新のドル円為替レートを取得します。このプロセスはGPTsのカスタムアクション機能を通じて行われます。
  2. Spreadsheetからのデータ取得:続いて、Google Spreadsheetを用いてドルのポジションと購入価格のデータを取得します。このステップでは、Google Apps Scriptの実装が重要となります。
  3. 為替損益の計算:得られた為替レートと財務データを組み合わせ、GPTsに内蔵されたCode Interpreter(Advanced Data Analysis)を使用して為替損益を計算します。この計算により、市場の変動に応じた損益の正確な分析が可能になります。

この一連の流れにより、為替市場の動向に迅速かつ正確に対応することができ、財務管理の効率化を図ることができます。

2. GPTsの初期化

初期設定はChatGPT Plusに搭載しているGPT Builderを使用して行います。これには、目的のGPTの基本設定(名前、アイコン、説明文など)が含まれます。GPT Builderは直感的なインターフェースを提供し、カスタマイズが容易です。

GPT設定内容

名前:Forex Assistant

説明:データ分析、計算、コード実行に優れた外為エキスパート

Instructions:GPT Builderが説明から自動生成してくれた。完成まで数回更新されます。

会話開始の設定はサンプルとして以下の4件設定する:

  • 「本日の価格を基に、Spreadsheet上の米ドルの数量と購入価格に基づいて損益を計算してください。」
  • 「本日のレートを使用して、10,000円を米ドルに換算してください。」
  • 「AlphaVantageからの最新の円/米ドルのレートは何ですか?」
  • 「Spreadsheetを更新して、円から他の通貨へのレートを記入してください。」

また、損益計算にはCode Interpreterを使用しますので、設定画面で「Code Interpreter」をチェックしておくことが重要です。

3. Custom Action設定

Custom Actionの設定プロセスには、APIのスキーマ記入と認証設定が含まれます。GPT Builderを使用してAPIのスキーマを作成することは、一般的なケースでは効果的ですが、より複雑なAPIの場合、時間を無駄に消費するリスクがあります。このような状況では、スキーマ作成に特化したGPTs Action CreatorEvolution Chamber等の利用を推奨します。これらのツールを使用することで、GPT Builderからの不明瞭な回答や不必要なチャットの発生を避けることができ、スキーマ作成プロセスをより効率的かつ正確に進めることが可能になります。

3-1. AlphaVantage APIの設定

今回の記事では、AlphaVantageが提供する無料のFX_DAILY APIを使用し、最新のドル円為替レートを取得します。AlphaVantageの公式ページからAPIキーを発行し、以下のURLに設定することで利用可能です。

https://www.alphavantage.co/query?function=FX_DAILY&from_symbol=USD&to_symbol=JPY&apikey=XXXXXXX

3-2. Schemaの作成

対象のFX_DAILY APIの仕様書ページをGPTs Action Creatorに渡して作成してもらいました。


openapi: 3.0.0
info:
  title: Alpha Vantage FX Daily Time Series API
  version: 1.0.0
servers:
  - url: https://www.alphavantage.co
paths:
  /query:
    get:
      summary: Get daily time series of FX currency pairs
      operationId: getFxDaily
      x-openai-isConsequential: false
      parameters:
        - name: function
          in: query
          required: true
          description: The time series function, set to FX_DAILY
          schema:
            type: string
            default: FX_DAILY
        - name: from_symbol
          in: query
          required: true
          description: The three-letter symbol of the base currency
          schema:
            type: string
        - name: to_symbol
          in: query
          required: true
          description: The three-letter symbol of the target currency
          schema:
            type: string
        - name: outputsize
          in: query
          required: false
          description: The output size (compact/full)
          schema:
            type: string
            default: compact
        - name: datatype
          in: query
          required: false
          description: The data type (json/csv)
          schema:
            type: string
            default: json
        - name: apikey
          in: query
          required: true
          description: Your API key for authentication
          schema:
            type: string
            default:XXXXXXXXX

3-3. 認証周りの設定

API認証の設定はAPIの使用において非常に重要です。公式のAPI説明書に従って正確に設定することは、予期せぬエラーを防ぐために不可欠です。誤った設定は、解決が困難なエラーを引き起こす原因となることがあります。
通常、API Keyの設定はGPT Builderの「Configure」タブ内の「Authentication」ボタンを通じて行われます。これにより、GPT Builderが提供する認証情報設定画面でAPI Keyを設定することが可能です。しかし、今回利用したAPIでは、この方法でAPI Keyが正しく認識されない問題が発生しました。そのため、Schemaに直接API Keyを記入する必要が生じました。
セキュリティ面での懸念もあり、このような問題は望ましくありませんので、OpenAIには今後、この種の問題に対する改善を期待しています。正確で安全なAPI Keyの設定方法は、APIを効果的に利用するために極めて重要です。開発者は、API Keyの設定において最大限の注意を払い、可能な限りセキュリティを確保する方法を模索する必要があります。

4. USDのポジションと購入価格を取得

次に、米ドル(USD)のポジションと購入価格を取得するため、別のCustom Actionを追加して設定しましょう。これを行うには、GPT Builderの「Configure」タブ内にある「Action」セクションで「Create new action」ボタンをクリックします。この操作により、新しいCustom Actionを追加し、USDのポジションと購入価格の取得に必要な設定を行うことができます。

今回、米ドル(USD)の数量と購入価格情報をGoogle Spreadsheetに記録しています。GPTsがこのSpreadsheetに記載された内容を取得する必要があります。これを実現するために、GPTsとSpreadsheetの間でGoogle Apps Scriptを使用します。対象Spreadsheetの「拡張機能」メニューから「Apps Script」を選択することで、Spreadsheetに紐づくGoogle Apps Scriptの編集画面にアクセスできます。この画面で、SpreadsheetとGPTsの連携に必要なスクリプトを作成および編集できます。

4-1. Google Apps Scriptの実装

Google Apps Scriptの編集画面で、以下のソースコードを記入しましょう。このScriptは、指定されたGoogleスプレッドシートからデータを取得し、JSON形式で返すWeb APIとして機能します。GPTsはこのScriptの特定機能(doGet)を実行して、Google Spreadsheetから米ドル(USD)の数量と購入価格を取得し、GPTsに返却します。

function doGet() {
  console.log("Start GPTs Custom Actions API");

  // 指定されたSpreadsheetIDを持つSpreadsheetを開き、'History'シートを取得
  const sheet = SpreadsheetApp.openById("1NtU5DmPlapkX426Fu34jhxxxxxxx")
                               .getSheetByName('History');
  // シートから全データを取得
  const data = sheet.getDataRange().getValues();
  // 空白行を除外してデータをフィルタリング
  const jsonData = data.filter(row => row[0].toString().trim() !== '');

  // フィルタリングされたデータをログに記録
  console.log("Content: " + JSON.stringify(jsonData));

  // JSON形式のデータをテキスト出力として返却
  return ContentService.createTextOutput(JSON.stringify(jsonData))
                       .setMimeType(ContentService.MimeType.JSON);
}

4-2. Google Apps Scriptの公開

外部からの実行を可能にするためには、Google Apps ScriptのGUI上で「Deploy」機能を使用して、上記のソースコードをWebアプリケーションとして公開する必要があります。これを実現するためには、Google Apps ScriptのGUI上で「デプロイ」ボタンをクリックし、表示される公開手順に従ってウェブアプリを公開します。
公開が完了すると、Google AppsはウェブアプリのURLを発行します。このURLは、GPTsのActionからアクセスする際に必要になるため、公開後には必ずメモしておくことが重要です。

4-3. Schemaの作成

GPTsからGoogle Appsによって発行されたウェブアプリのAPIを実行するためには、適切なSchemaを作成して設定する必要があります。このSchemaの作成には、GPTs Action Creatorを活用して簡単に作成できます。下記のSchemaは、特定のGoogle Apps Scriptによって提供されるWeb APIの仕様を定義し、米ドル(USD)の数量と購入価格データを取得するためのエンドポイントとその詳細を含んでいます。この手順で、GPTsは指定されたAPIエンドポイントにアクセスし、必要なデータを効率的に取得することが可能になります。今回のSchemaは、YAMLとJSONのどちらでも定義可能ですが、このケースではJSON形式を使用します。

{
  "openapi": "3.0.0",
  "info": {
    "title": "Get USD amount and bought price data",
    "description": "Retrieves USD amount and bought price data for PL calculation.",
    "version": "v1.0.0"
  },
  "servers": [
    {
      "url": "https://script.google.com"
    }
  ],
  "paths": {
    "/a/macros/gmo.jp/s/AKfycbwMzLPbRjuiXxD-a_xxxxxxxxxxxxx/exec": {
      "get": {
        "description": "Get USD Amount and bought price",
        "operationId": "GetCurrentPosition",
        "parameters": [],
        "deprecated": false
      }
    }
  },
  "components": {
    "schemas": {}
  }
}

4−4. GAS認証の設定

今回開発する「Forex Assistant」GPTsを使用する際、GPTsからデプロイ済みのウェブアプリを実行するには事前の許可が必要ですが、実際には実行時にこの許可を得ることができます。このため、ウェブアプリの認証処理に関して、GPTsの「Configure」セクションで特別な設定を施す必要はありません。

5. Code InterpreterでPL計算

ChatGPTは自然言語処理において優れた能力を持っていますが、複雑な計算処理には制限があります。特に、利益と損失(P&L)の計算のような精度が求められる数学的計算を100%正確に行うためには、Code Interpreter機能の使用が必要です。
GPTsのCode Interpreter機能は、複雑な計算を正確に実行するために特別に設計されており、指定した機能の計算ロジックから自動的にPython等ソースコードを生成して直接実行します。これをChatGPTと組み合わせることで、自然言語処理と数学的計算の両方の強みを活かすことができます。P&L計算にCode Interpreterを使用する必要性を明確にするために、GPT Builderの「Configure」タブで「Code Interpreter」を有効にし、その後「Create」タブで次のプロンプトを実行することをお勧めします:
「利益と損失(P&L)計算には、数学的計算の正確性を確保するために必ずCode Interpreterを使用してください。」
このプロンプトを実行すると、GPTsのInstructionはこの特定の挙動を反映するように更新されます。これにより、ユーザーはChatGPTの自然言語処理能力とCode Interpreterの計算精度の両方を利用でき、より正確で効率的なP&L計算が可能になります。

6. 検証

開発プロセスがほぼ完了したため、次は「Forex Assistant」GPTsの機能検証を実施しましょう。検証を行うためには、まずGPTsのデフォルトプロンプト「本日の価格を基に、Spreadsheet上の米ドルの数量と購入価格に基づいて損益を計算してください。」を実行します。
このプロンプトをクリックすると、外部APIやウェブアプリに接続する前に、システムがアクセス許可を求めます。このため、「許可」ボタンを押して操作を続けましょう。
検証の結果、最新の為替レートや米ドルの数量、購入時の価格などの各種データを問題なく取得できました。また、損益結果(P&L)も正しく計算されています。これは非常に良い兆候です。

7. デバッグについて

APIの挙動を正確に理解し、問題を迅速に解決するためには、デバッグプロセスが不可欠です。GPT Builderの機能を活用することで、APIの問題を効率的に特定し、解決できます。開発者にとって、これらのツールの活用は大変重要です。
GPTsのカスタムアクションを実行する際によく遭遇する問題には、APIキーの無効エラーやデバッグ情報の不足があります。これらは、APIの適切な設定や詳細なデバッグ情報の把握によって解決可能です。
最近のGPT Builderの機能更新により、外部APIへのアクセス時のレスポンスなどのデバッグ情報が提供されるようになりました。これにより、APIへのアクセスや応答の確認が容易になり、開発プロセスが改善されています。しかし、ChatGPT4のセキュリティ制限のため、実行したAPIのHTTPリクエストなどの一部情報が出力されないことがあります。このような場合、以下のイメージのようにデバッグ情報を確認できます。

問題の原因を特定するためには、GPT BuilderでAPIのSchemaを使ってプロンプトを作成し、APIの挙動をデバッグすることが推奨されます。
また、以下のイメージのように、Code Interpreter機能によって生成されたソースコードも確認できます。これは開発に非常に便利です。

8. 最後に

今回のブログで、GPTsを用いた為替PL計算ツールの開発プロセスを丁寧に解説しました。外部APIからのデータ収集、Spreadsheetとの連携、そしてCode Interpreterを利用した精密計算など、GPTsの多様な機能を駆使することで、効率的な開発が可能であることをお伝えしました。最終的には、「Forex Assistant」GPTsの開発から機能検証まで完了し、外部データの取得と正確な損益計算が実現できました。
確かに、GPT Builderの直感的な操作性は素晴らしい点ですが、この記事では特にカスタムアクションの素晴らしさに焦点を当てました。外部ウェブサービスやAPIとの連携、ソースコードの自動生成および実行機能をフル活用することで、カスタムGPT機能の驚くべき潜在能力が明らかになりました。GPTsの可能性の広がりは、まさに無限大です。この記事を通して、GPTsがビジネス効率化や問題解決にどのように貢献できるかの一端を確認できたと思います。これらの技術を活用して、これからも新しい可能性を探求し続けることは、大変楽しみですね。

9. 宣伝

次世代システム研究室では、最新のテクノロジーを調査・検証しながら、様々なインターネットアプリケーションの開発を行うアーキテクトを募集しています。募集職種一覧からご応募をお待ちしています。

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ

関連記事