2023.07.04

FlowiseとChatGPTのFunction callingを活用して為替レートを分析してみた

はじめに

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

外国為替市場の変動は常に注目されていますが、投資家やトレーダーにとって最新の為替レート分析情報は不可欠です。そこで、OpenAIの優れた自然言語処理モデルであるChatGPTを使って、効率的にデータを分析できる方法を紹介します。ChatGPTのFunction callingを活用して最新の為替レート情報を取得し、そのデータを元にChatGPTで分析を行います。ただし、Function callingの実装には面倒な部分もありますが、その問題を解消するためにFlowiseを使うことができます。本ブログでは、FlowiseとChatGPTの機能呼び出しを組み合わせて、簡単かつ効率的に外国為替レートを取得する方法をご紹介します。

1.やりたいこと

  • 目的: USDJPYの最新為替レートを取得し、ChatGPTによる分析するChatbotを作りたい
  • 使用する技術: OpenAIのChatGPT function callingとFlowise
  • 実現手段:
    • DockerでFlowiseサーバーを構築
    • Alpha VantageのAPIを利用してUSDJPYの最新レートを取得
    • FlowiseでChatGPT利用するアプリを作る
    • ChatGPTのFunction callingを設定
    • ChatGPTの分析内容をユーザーに返却

    2.環境構築

    2-1.Flowiseサーバー構築

    Flowise」とは、「オープンソース及びノーコードでLLMアプリを作成するツール」です。
    ドラッグアンドドロップでカスタマイズLLM(大規模言語モデル)フローを構築できます。
    各種LLMを使用して、テキスト生成、言語翻訳、コード生成、質問応答などさまざまなタスクを実行できるフローグラフを視覚的に作成できます。

    Flowiseを利用するには、まずFlowiseサーバを構築する必要があります。以下の手順で構築しましょう。

    Flowiseリポジトリのクローン

    FlowiseのリポジトリをGitを使ってクローンします。コマンドプロンプトまたはターミナルを開き、以下のコマンドを実行してください。
    git clone https://github.com/FlowiseAI/Flowise.git
    

    Docker Composeの設定

    Flowiseを実行するためには、Docker Composeを使用します。まず、プロジェクトのルートにあるdockerフォルダに移動します。
    cd Flowise/docker
    

    .envファイルの作成

    dockerフォルダ内に.envファイルを作成します。.envファイルには、PORTを指定する必要があります。サンプルとして.env.exampleファイルが提供されているので、これをコピーして作成します。

    docker-composeの実行

    以下のコマンドを実行して、Flowiseを起動します。
    docker-compose up -d
    

    Flowiseの利用開始

    Flowiseが正常に起動すると、Webブラウザで http://localhost:3000 にアクセスできます。ここでFlowiseの環境構築は完了です。

    3.アプリの開発

    3-1.Forex為替レート情報取得APIの準備

    AlphaVantageは、多くの研究者、エンジニア、ビジネス専門家が使用する無料のストックAPIです。株価、為替(FX)、仮想通貨のデータだけでなく、テクニカル指標や経済指標なども取得できます。APIを利用するには、まずメールアドレスを登録し、無料のAPIキーを取得する必要があります。

    APIキーの取得方法

    AlphaVantageのホーム画面にアクセスし、「GET YOUR FREE API KEY TODAY」をクリックし、必要な情報を入力して送信すると、APIキーが自動的に発行されます。

    AlphaVantageの使い方

    AlphaVantageのドキュメンテーションに提供しているAPIの使い方を詳しく書いてありますので参照しましょう。
    今回はFXのUSDJPYの最新レートを取得したいので、ForexのIntradayを選択します。
    DOCUMENTATION内に、TIME_SERIES_INTRADAY APIの使い方が詳細に記載されています。今回はChatGPTのFunction Calling
    にもこのAPIの説明文を使うので後ほどコピーして利用します。

    USDJPYの為替レートを取得する

    今回USDJPYの為替レートを取得したいので、APIのURLは次のようになっています。
    https://www.alphavantage.co/query?function= TIME_SERIES_INTRADAY&from_symbol=USD&to_symbol=JPY&interval=60min&apikey=XXXX
    
    このURLの各パラメーターの意味は以下の通りです。
    function=TIME_SERIES_INTRADAY:1日内でのデータを見るための関数を指定します。
    from_symbol=USD:米ドルからの為替レートを取得します。
    to_symbol=JPY:日本円への為替レートを取得します。
    interval=60min:60分足のデータを取得します。
    apikey=XXXX:APIキーはデモ版のため、実際には取得した自分のAPIキーに変更します。
    これらのパラメーターを適宜変更することで、異なる通貨ペアや時間足の為替レートを取得することができます。また、他の項目についてはAlphaVantageのドキュメンテーションに従って詳細な説明を確認し、自分のニーズに合わせてAPIの使い方をカスタマイズすることが可能です。

    3-2.FlowiseでLLMアプリを開発する

    最新のFlowiseバージョンでは、APIエージェントを使用するとOpenAIの関数呼び出し(Function Calling)と連携することができます。

    APIエージェントの作成手順は非常に簡単で、以下のステップに従うだけです。

    1. Flowise IDEを開いて、左側のメニューから「Marketplaces」を選択します。
    2. 「Marketplaces」画面に移動したら、「API Agent」を選択します。
    3. APIエージェントのテンプレート画面が表示されますので、右上のメニューから「Use Template」ボタンをクリックします。
    4. 新しいアプリを開発画面にAPIエージェントのテンプレートが表示されます。今回はGET APIのみ使うのでPOSTの部分を削除しましょう。
    5. 開発画面に「chatOpenAI」にて以下の情報を入力しましょう
      • 「OpenAI API key」を入力する。記入箇所が2つあるので全部入力しましょう。
      • 「Model Name」を選択する。「gpt-3.5-turbo-16k-0613」または「gpt-4-32k-0613」などFunction callingをサポートするモデルを選びましょう。
      • 当たり前ですが、サポートしてないモデルを選択するとアプリを実行時にエラーになります。また、トークンの数が多めにサポートするモデルが良さそうです。
      • Tempuratureを設定する。ここではテンプレートのデフォルト値の0.9を設定します。
    6. API chainとChain toolの設定は後ほど解説しますが、最終的には以下のイメージの通りでアプリが完成しました。

    3-3.ChatGPT Function Callingの設定

    「Get API chain」のWidgetにて以下の内容で設定しましょう。

    「API Document」の設定

    API Parameters内容は、Alpha VantageのDocumentからそのままコピー使います。
    BASE URL: https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=USDJPY&interval=60min&apikey=XXXX&outputsize=compact
    
    API Documentation
    This API returns intraday time series of the equity specified, covering extended trading hours where applicable (e.g., 4:00am to 8:00pm Eastern Time for the US market). The intraday data is derived from the Securities Information Processor (SIP) market-aggregated data. You can query both raw (as-traded) and split/dividend-adjusted intraday data from this endpoint.
    
    
    API Parameters
    ❚ Required: function
    
    The time series of your choice. In this case, function=TIME_SERIES_INTRADAY
    
    ❚ Required: symbol
    
    The name of the equity of your choice. For example: symbol=IBM
    
    ❚ Required: interval
    
    Time interval between two consecutive data points in the time series. The following values are supported: 1min, 5min, 15min, 30min, 60min
    
    ❚ Optional: adjusted
    
    By default, adjusted=true and the output time series is adjusted by historical split and dividend events. Set adjusted=false to query raw (as-traded) intraday values.
    
    ❚ Optional: extended_hours
    
    By default, extended_hours=true and the output time series will include both the regular trading hours and the extended trading hours (4:00am to 8:00pm Eastern Time for the US market). Set extended_hours=false to query regular trading hours (9:30am to 16:00pm US Eastern Time) only.
    
    ❚ Optional: outputsize
    
    By default, outputsize=compact. Strings compact and full are accepted with the following specifications: compact returns only the latest 100 data points in the intraday time series; full returns the full-length intraday time series. The "compact" option is recommended if you would like to reduce the data size of each API call.
    
    ❚ Optional: datatype
    
    By default, datatype=json. Strings json and csv are accepted with the following specifications: json returns the intraday time series in JSON format; csv returns the time series as a CSV (comma separated value) file.
    
    ❚ Required: apikey
    
    Your API key. 
    

    「Additional Parameters」の設定

    「Additional Parameters」部分はAPI AgentのデフォルトChatGPT Promptを使います。
    You are given the below API Documentation:
    {api_docs}
    Using this documentation, generate the full API url to call for answering the user question.
    You should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call.
    
    Question:{question}
    API url:
    

    ここでUSDJPYの為替レートデータを取得するためChatGPTのFunction calling設定が完了しました。

    4.検証実施

    早速作成したLLMアプリを活用してみましょう!Flowiseの開発画面の右上にあるChatアイコンをクリックすると、チャット画面が表示されます。この画面でチャットを開始することができます。
    以下のスクリーンショットのように、アプリ作成当日の2023年6月30日のUSDJPYの最新の終値やその日にAPIから取得した全データポイントのClose priceを正しく回答してもらいました。これは結構良い感じですね!

    以下はChatbotに2023-06-30にUSDJPYのclose price動きについて分析してもらった結果です。
    USDJPYの2023年6月30日の価格動向は、以下の通りです。開始価格は144.2690で、最高価格は144.3510、最安値は144.2540、終値は144.2610でした。取引量は0でした。
    

    これまでの分析内容はまだ簡単なものですが、APIのデータを正しく活用しているため、非常に有望です。特に、Alpha VantageからUSDJPYの動きに関するニュースを取得して分析に取り入れることで、この通貨ペアの動向をさらにわかりやすく解析することができるかもしれません。しかし、その内容が長くなりすぎるため、このブログの対象外とさせていただきます。

    5.まとめ

    本ブログでは、ChatGPTのFunction callingを利用して最新のデータを取得し、ChatGPTによる分析する方法を紹介しました。また、LangchainをサポートするFlowiseの素晴らしい機能についても触れながら、ChatGPTのFunction callingの実装に関する面倒な部分を乗り越えるための簡単で直感的な手法を紹介しました。これにより、初心者でも簡単にChatGPTとLangchainを活用できるようになります。新しい方法を試してみることで、より効率的にデータ分析や言語処理を行い、革新的なアプリケーションの開発に向けた可能性を広げることができるでしょう。

    宣伝

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

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

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

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

    関連記事