2024.10.02

GPT-Researcherを活用した金融ニュース収集・分析システムの構築

1. はじめに

こんにちは。次世代システム研究室のT.D.Qです。
現代の金融市場において、最新のニュースを迅速にキャッチし、その情報をもとに投資判断を行うことは非常に重要です。
しかし、膨大な情報が日々流れる中で、正確で最新の情報を手動で収集し分析するのは時間と労力がかかります。

本記事では、GPT-Researcherという自律型エージェントを活用し、証券コードや会社名を入力するだけで、関連する最新のニュースを自動的に収集し、それをもとに投資家向けのレポートを作成するシステムの構築方法について紹介します。

この記事では、Pythonを使用してGPT-Researcherを動かし、ニュース収集からレポート生成までの全プロセスを自動化します。
また、収集したデータをもとにしたPDFレポートの生成も行います。

金融投資家やエンジニアにとって、このシステムは日々の投資判断に役立つだけでなく、情報の処理を効率化するツールとなるでしょう。

2. GPT-Researcherとは?

GPT-Researcherは、複数のAIエージェントを活用して、インターネット上から最新の情報を自動で収集し、その情報を基にレポートを作成する強力なツールです。
GPT-Researcherは、特定のリソースやURLに対して検索を行い、信頼性の高いデータをもとに正確なレポートを生成します。

GPT-Researcherの主な利点は、手作業で行うよりも遥かに迅速に情報を取得できる点と、レポートを自動で整理し、PDFやMarkdown形式で出力できる点です。これにより、金融投資家やエンジニアは重要な決定を下す際に時間を大幅に節約できます。

GPT-Researcherは、例えば以下のようなタスクに適しています:

  • 特定の証券コードや企業に関する最新ニュースの収集
  • 収集したニュースを基にしたトレンド分析と投資リスクの評価
  • 業界全体の市場動向の把握と将来予測

これにより、金融市場の動きを迅速にキャッチし、適切な投資判断を行うためのサポートをします。

3. システム構築手順

このセクションでは、GPT-Researcherを使用して、指定した証券コードや企業名に関連する最新ニュースを収集し、それに基づいた投資分析レポートを自動生成するシステムの構築手順について説明します。環境は、MacBook Pro M2, 32GB RAM, MacOS Ventura 13.5で構成されています。

3-1. 必要なツールのインストール

システムを構築するために必要なライブラリやツールをインストールします。以下は、Python 3.11以上のインストール手順です。

# Python 3.11のインストール(Homebrewを使用)
$ brew install [email protected]

# 仮想環境の作成
$ python3.11 -m venv venv

# 仮想環境のアクティブ化
$ source venv/bin/activate

以下は、今回開発するgpt-researcher-news プロジェクトの完全なディレクトリ構成と必要なファイルの説明です。

ディレクトリ構成

/gpt-researcher-news
│
├── .env                   # 環境変数を定義するファイル
├── config.py              # 設定をロードするクラス
├── main.py                # メインのエントリーポイント
├── report_generator.py    # レポートを生成するメインのコード
├── report_template.html   # PDFレポートのHTMLテンプレート
├── prompt.json            # GPT-Researcherに渡すプロンプトデータ
├── requirements.txt       # 必要なPythonライブラリを定義
├── reports/               # 生成されたPDFレポートを保存するディレクトリ
│   └── (PDF reports will be stored here)
└── README.md              # プロジェクトの説明を含むファイル

必要なパッケージをインストール

requirements.txt ファイルを作成し、プロジェクトで必要なPythonライブラリを追加しましょう。

gpt-researcher
markdown2
python-dotenv
weasyprint

次に、必要なパッケージをインストールします。

# パッケージのインストール
$ pip install -r requirements.txt

1. 環境変数を定義

.env ファイルは環境変数を定義する重要なファイルです。このファイルには、外部APIの認証キーやレポートを保存するディレクトリのパスが含まれます。OPENAIおよび情報検索TAVILYのAPI KEYは自分で事前に発行する必要があります。

OPENAI_API_KEY=your_openai_api_key
TAVILY_API_KEY=your_tavily_api_key
REPORTS_DIR=./reports/  # レポートが保存されるディレクトリ

2. config.py ファイルでシステムの設定を管理

config.py はシステムの設定を管理します。このファイルは、.env ファイルからAPIキーやレポートの保存先ディレクトリを取得し、システムで利用できるようにします。

import os
from dotenv import load_dotenv

class Config:
    def __init__(self):
        load_dotenv()
        self.openai_api_key = os.getenv("OPENAI_API_KEY")
        self.tavily_api_key = os.getenv("TAVILY_API_KEY")
        self.reports_dir = os.getenv("REPORTS_DIR", "./reports/")

        # LLM設定
        self.llm_provider = "openai"
        self.fast_llm_model = "gpt-3.5-turbo"
        self.smart_llm_model = "gpt-4"
        
        # その他の設定
        self.report_format = "apa"
        self.total_words = 1000
        self.max_iterations = 1

        self.research_sources_only = True
        self.allow_external_sources = False

3. エントリーポイントの実装

main.py は、このシステムのエントリーポイントとなるファイルです。ユーザーから証券コードを入力し、その証券コードに関連するニュースを収集し、レポートを生成します。

import asyncio
from report_generator import ReportGenerator

# ユーザーから証券コードを入力
ticker_symbol = input("証券コードを入力してください (例: 9449): ")

# レポートを生成
report_generator = ReportGenerator(ticker_symbol)
asyncio.run(report_generator.generate_report())

4. GPT-Researcherでレポートを生成

report_generator.py は、ニュースを収集し、GPT-Researcherでレポートを生成し、PDFとして保存する機能を持つファイルです。Config クラスを使って設定データを取得し、生成されたレポートは WeasyPrint を使用してPDFに変換されます。

import asyncio
import json
import markdown2 
from gpt_researcher import GPTResearcher
from config import Config
from weasyprint import HTML

class ReportGenerator:
    def __init__(self, ticker_symbol, prompt_file="prompt.json"):
        self.ticker_symbol = ticker_symbol
        self.config = Config()
        self.prompt_file = prompt_file
        self.prompt_data = self.load_prompt()

    def load_prompt(self):
        with open(self.prompt_file, "r", encoding="utf-8") as file:
            prompt_data = json.load(file)
        prompt_data["query"] = prompt_data["query"].replace("{ticker_symbol}", self.ticker_symbol)
        return prompt_data

    async def generate_report(self):
        researcher = GPTResearcher(query=self.prompt_data["query"], report_type="research_report")
        await researcher.conduct_research()
        report_text = await researcher.write_report()
        self.save_report_as_pdf(report_text)
        return report_text

    def save_report_as_pdf(self, report_text):
        with open("report_template.html", "r", encoding="utf-8") as template_file:
            html_template = template_file.read()
        
        report_html = markdown2.markdown(report_text)

        html_content = html_template.format(
            ticker_symbol=self.ticker_symbol,
            report_text=report_html
        )
        pdf_file = f"{self.config.reports_dir}/{self.ticker_symbol}_financial_report.pdf"
        HTML(string=html_content).write_pdf(pdf_file)
        print(f"PDFレポートが {pdf_file} に保存されました。")

5. レポートのテンプレートを定義

このreport_template.htmlファイルは、PDFとして出力されるレポートのテンプレートを定義しています。証券コードとレポートの内容が動的に挿入されます。

<html>
<body>
    <div class="section">
        <h2>レポート内容</h2>
        <p>{report_text}</p>
    </div>
</body>
</html>

6. prompt.jsonでプロンプトデータが定義

GPT-Researcherに渡すプロンプトデータが定義されたファイルです。このプロンプトは、ニュース収集と分析に関する指示を含んでいます。

{
    "query": "{ticker_symbol} に関するニュースを収集し、金融投資家の視点から次の要素について詳細に分析してください。\n1. 業績への影響: 最新ニュースが {ticker_symbol} の財務業績や株価にどのような影響を与える可能性があるか分析してください。\n2. 市場トレンド: 同業他社や業界全体のトレンドと比較して、{ticker_symbol} の競争力や市場の動向を考察してください。\n3. 投資リスクと機会: 短期的および長期的な投資リスクと機会を評価し、今後の投資判断に影響を与える要因を提示してください。\n各セクションには、収集したニュース記事のURLとその要約を含めてください。**調査日より1週間過去の記事は絶対に使わないでください。レポートは日本語で書いて下さい。**"
}  

4. 動作確認

4-1. プログラム実行

構築したシステムを実行するには、以下のコマンドを使用します。

# GPT-Researcherの実行
$ python main.py
証券コードを入力してください (例: 9449): GMOインターネットグループ株式会社

正常に実行されると、指定した証券コードや企業名に関連する最新のニュースを収集し、分析されたレポートがPDF形式で生成されます。

4-2. ニュース収集の確認

以下のログデータから、調査対象会社の公式サイトや日本の有名な金融関連サイトから情報が収集されていることが確認できますね。

INFO:     [18:37:04] 💰 Finance Agent
INFO:     [18:37:05] 🗂️ I will conduct my research based on the following queries: ['GMOインターネットグループ株式会社 最新ニュース 2024年9月', 'GMOインターネットグループ 株価影響 2024年9月', 'GMOインターネットグループ 投資リスクと機会 2024年9月', 'GMOインターネットグループ株式会社 に関するニュースを収集し、金融投資家の視点から次の要素について詳細に分析してください。\n1. 業績への影響: 最新ニュースが GMOインターネットグループ株式会社 の財務業績や株価にどのような影響を与える可能性があるか分析してください。\n2. 市場トレンド: 同業他社や業界全体のトレンドと比較して、GMOインターネットグループ株式会社 の競争力や市場の動向を考察してください。\n3. 投資リスクと機会: 短期的および長期的な投資リスクと機会を評価し、今後の投資判断に影響を与える要因を提示してください。\n各セクションには、収集したニュース記事のURLとその要約を含めてください。**調査日より1週間過去の記事は絶対に使わないでください。レポートは日本語で書いて下さい。**']...
INFO:     [18:37:05] 
🔍 Running research for 'GMOインターネットグループ株式会社 最新ニュース 2024年9月'...
INFO:     [18:37:05] 
🔍 Running research for 'GMOインターネットグループ 株価影響 2024年9月'...
INFO:     [18:37:05] 
🔍 Running research for 'GMOインターネットグループ 投資リスクと機会 2024年9月'...
INFO:     [18:37:05] 
INFO:     [18:37:08] ✅ Added source url to research: https://www.gmo.jp/news/search/1/all/

INFO:     [18:37:08] ✅ Added source url to research: https://ir.gmo.jp/?bid=dom01

INFO:     [18:37:08] ✅ Added source url to research: https://www.gmo.jp/news/article/9167/

INFO:     [18:37:08] ✅ Added source url to research: https://prtimes.jp/main/html/rd/p/000004567.000000136.html

INFO:     [18:37:08] ✅ Added source url to research: https://www.gmo.jp/news/search/1/gmo/

INFO:     [18:37:08] 🤔 Researching for relevant information across multiple sources...

INFO:     [18:37:08] 📚 Getting relevant content based on query: GMOインターネットグループ株式会社 最新ニュース 2024年9月...
INFO:     [18:37:08] ✅ Added source url to research: https://www.gmo.jp/news/article/9168/

INFO:     [18:37:08] ✅ Added source url to research: https://ir.gmo.jp/roadshow/20240808/

INFO:     [18:37:08] ✅ Added source url to research: https://prtimes.jp/main/html/rd/p/000004576.000000136.html

INFO:     [18:37:08] ✅ Added source url to research: https://www.r-i.co.jp/news_release_cfp/2024/09/news_release_cfp_20240930_22411_jpn.pdf

INFO:     [18:37:08] ✅ Added source url to research: https://www.gmo.jp/pdf/news/gmo_news_9168.pdf

INFO:     [18:37:08] 🤔 Researching for relevant information across multiple sources...

INFO:     [18:37:08] ✅ Added source url to research: https://www.nikkei.com/nkd/company/?scode=9449

INFO:     [18:37:08] ✅ Added source url to research: https://www.nikkei.com/nkd/company/kigyo/?scode=9449

INFO:     [18:37:08] ✅ Added source url to research: https://www.bloomberg.co.jp/quote/9449:JP

INFO:     [18:37:08] ✅ Added source url to research: https://shikiho.toyokeizai.net/stocks/9449

INFO:     [18:37:08] ✅ Added source url to research: https://finance.yahoo.co.jp/quote/9449.T

INFO:     [18:37:08] 🤔 Researching for relevant information across multiple sources...

INFO:     [18:37:09] 📚 Getting relevant content based on query: GMOインターネットグループ 投資リスクと機会 2024年9月...
INFO:     [18:37:12] 📃 Source: https://ir.gmo.jp/?bid=dom01
〜〜一部抜粋〜〜
INFO:     [18:42:13] Finalized research step.
💸 Total Research Costs: $0.016231100000000002
〜〜一部抜粋〜〜
PDFレポートが ./reports/GMOインターネットグループ株式会社_financial_report.pdf に保存されました。

4-3. PDF出力の確認

添付画像は、GPT-Researcherで生成されたレポートです。内容は非常に優れており、対象企業に関する金融情報が的確にまとめられています。このプログラムを活用することで、Crontabなどを使って複数の銘柄について毎日自動的に金融関連のニュースを収集し、レポートを作成できますね。

本プログラムを実行する時刻は10月1日の18時ごろでしたが、最新記事を収集して分析してくれることを確認できました。良さそうですね。

4. 結論

本記事では、GPT-Researcherを活用して最新の金融ニュースを収集し、それを分析してレポートとして出力するシステムの構築方法を詳しく説明しました。
このシステムは、Python環境で簡単にセットアップでき、GPTの強力な分析能力を活用することで、投資家にとって有用な情報を迅速に提供できます。

さらに、生成されたレポートはPDFとして保存され、金融市場のトレンド、投資リスク、業績への影響を包括的に把握するための材料として活用できます。
今後の拡張として、LangChainや他のAIフレームワークと連携することで、より高度な分析や自動化が可能となるでしょう。

GPT-Researcherを活用したこのシステムにより、常に最新の情報に基づいた投資判断が行えるようになり、迅速で信頼性の高い分析が可能になります。ぜひ、プロジェクトを実行し、結果を確認してください。

宣伝

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

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

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

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

関連記事