S&P500エージェントMVPローンチ:SECデータに基づく金融質問への回答
10年分のSECデータを使って金融の質問に答えるAIエージェントを構築しました。ストリーミングの課題もようやく解決し、リアルタイムかつ検証可能になりました。
更新(2026年): S&P 500エージェントは廃止されました。この投稿はオリジナルのMVPローンチを記録として残しています。Sydneyは現在、ブログコンテンツとChandlerの製品にフォーカスしています。現在のSydneyを試す →
こんにちは、
S&P500エージェントの苦労に関する前回の投稿以来、MVP版が完成したことをお知らせできてうれしいです! :D この最小限の実用製品でできることと、どのようにして生まれたかをご説明します。
このMVPで何ができるか?
- 10年分のデータを掘り下げる: エージェントのデータベースには、SEC EDGARに提出された過去10年分の企業ファクトが含まれています。かなりすごいでしょう?
- 信頼できる回答: SECに提出された実際のファクトに基づいているため、回答の品質を信頼できます。
- ファクトチェックしやすい: エージェントは常に最終回答に参照データを含めます。疑問に思ったら、自分でチェックできます!
- 複雑な質問にも対応: 「2020年から2022年のAppleとMicrosoftの収益を比較して」や「2020年から2022年にかけてMicrosoftの営業利益率はどう変化した?」のような準複雑なクエリにも対応できます。なぜ準複雑かというと、エージェントはこれらの幅広い質問を小さな質問に「推論」して分解し、データベースから情報を検索し、すべてをまとめる必要があるからです。
- 例えば、最初の質問に答えるには、エージェントは2020年、2021年、2022年の各企業の個別収益を知り、比較を行う必要があります。
- ほぼ最新: カットオフ日は2024年8月です。それ以降にSECに提出されたものはこのMVP版には含まれていません。
- HTMLストリーミング: ストリーミングが動作します!やった! :D 結局、DRFとReactはネイティブにストリーミングをサポートしているので、langgraphと組み合わせて、読みやすい形式で表示されるレスポンシブな会話フローが実現しました。HTMLストリーミングにはしばらく苦労していました。
内部の仕組みを少し
ここまで読んでいる方は、おそらくこのMVPをどのように構築し、以前述べた課題をどう克服したかをもっと知りたいでしょう。では、少し技術的な話に入りましょう!
- データのスリム化: 完全な10-Kまたは10-Qレポートの代わりに、SECに提出された「ファクト」を使用しています。これにより、データベースは2GB未満と大幅にコンパクトになりました!以下は、公開企業がSECに提出した内容の例です:
"AccruedRoyaltiesCurrent": \{
"label": "Accrued Royalties, Current"
\},
"AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment": \{
"label": "Accumulated Depreciation, Depletion and Amortization, Property, Plant, and Equipment"
\},
"AccumulatedOtherComprehensiveIncomeLossNetOfTax": \{
"label": "Accumulated Other Comprehensive Income (Loss), Net of Tax"
\},
"AccumulatedOtherComprehensiveIncomeLossOtherThanTemporaryImpairmentNotCreditLossNetOfTaxAvailableforsaleDebtSecurities": \{
"label": "Accumulated Other Comprehensive Income (Loss), Other than Temporary Impairment, Not Credit Loss, Net of Tax, Available-for-sale, Debt Securities"
\},
"AdditionalPaidInCapitalCommonStock": {
"label": "Additional Paid in Capital, Common Stock"
これにより、非常に高価な(月額$600〜$700の範囲)大規模で高速なベクトルストアを使用する必要もなくなりました。
2. Cloud SQL PostgreSQLをメインデータベースとして使用: メインデータベースとしてCloud SQL PostgreSQLを使用しています。すでにGCPのCloud Run CI/CDを使用していたため、Googleのサービスに統一するのは理にかなっていました。これは私にとって全く新しいコンセプトだったため、ローカルからクラウドへのデータベース移行方法と、プライベートIPを使用してCloud SQLデータベースと連携するようバックエンドを設定する方法を学ぶ必要がありました。GCPのドキュメントは役立ちました。
3. ReactとDjangoの組み合わせ: ReactフロントエンドとDjango Rest Framework(DRF)バックエンドをCloud SQLデータベースと共に本番デプロイするのは初めてでした。試行錯誤の連続でしたが、ChatGPTのo1-previewとAnthropic Claude 3.5 Sonnetが大きな助けになりました。解決している問題の十分なコンテキストを提供すれば、本当にパワフルです。
4. スマートエージェント: エージェントはLanggraphを使って構築されています。Google検索と金融質問回答ツールの2つのメインツールを持ち、質問に基づいてどちらを使うか判断します。
5. SQLクエリはどのように生成されるか?
汎用的/幅広いユーザーの質問をデータベースに適したSQLクエリに変換するのは簡単ではありません。主な理由の一つは、企業がSECに財務ファクトを提出する際、一般の人にとって直感的ではない財務の概念/用語を使用するからです。
例えば、「収益」は以下のような複数のファクトで表される場合があります:
- Revenue
- Revenue from Contract with Customer, Excluding Assessed Tax
- Revenue from related Parties
- Deferred Revenue
- など...
企業間で、同じ概念に異なるラベルを使用できます。例えば、Appleは「Revenue from Contract with Customer, Excluding Assessed Tax」を使用し、Teslaは「Revenue」を使用します。
「営業利益率」を尋ねた場合、それは企業がSECに提出するファクトではないかもしれません。代わりに、総収益とOperating Income (Loss)を提出します。
もう一つの状況は、企業が時間の経過とともに名称を変更する場合で、SQLクエリに旧名と新名の両方が含まれていることを確認する必要があります。
では、特定の幅広い質問に対して適切なファクト/ラベルを選択するようマシンにどう指示するか?
最も関連性の高いファクトやラベルを見つけるためにWeaviateによるハイブリッド検索を使用し、これらをLLMモデルに返送します。
6. ブレークダウンテストが鍵
最終的な本番デプロイの前に、プロセスをステップに分解し、各ステップをテストしました:
1. ローカルデータベースでのDRFバックエンドのローカルテスト
2. ローカルデータベースでのDockerコンテナバックエンドのテスト
3. PostgreSQLデータベースのCloud SQLへの移行とテスト
4. Cloud SQLでのDockerコンテナバックエンドのテスト
5. Reactフロントエンドのローカルテスト
6. 本番バックエンドとCloud SQLでのReactフロントエンドテスト
7. 本番環境でのWordPressへのReactフロントエンドの移行
8. エンドツーエンドテスト
このステップバイステップのアプローチは辛い経験から学びました。最初はいくつかのステップをスキップして大きなチャンクでテストしていましたが、言語モデル(LLM)では問題がどこにあるかを正確に特定できませんでした。
次は何か?
- コールドスタート問題の修正: 現在、エージェントが最初の質問に答えるのに少し時間がかかります。コスト効率の良いソリューションに取り組んでいます。
- ユーザーへの中間ステップの表示: 「2020年から2022年のAppleとMicrosoftの収益を比較して」のような複雑な質問に答える際、エージェントが最終回答を生成するのに時間がかかります。エージェントが取り組んでいるステップをリアルタイムで表示すれば、ユーザーエクスペリエンスが向上するかもしれません。
- 10-K/10-Qテキストコンテンツの充実: 10-Kと10-Q提出書類からより関連性のあるテキストコンテンツを含め、より詳細な回答を提供する予定です。
今回は以上です。MVP版を試してみて、感想を聞かせてください!金融データやSEC提出書類を使って何か構築してみたことはありますか?あなたの経験を聞きたいです。以下にコメントするか、直接メール(chandler@chandlernguyen.com)でご連絡ください。
よろしくお願いします、Chandler





