guy-hartstein/company-research-agent
An agentic company research tool powered by LangGraph and Tavily that conducts deep diligence on companies using a multi-agent framework. It leverages OpenRouter on the backend for rapid inference with any leading model.
Company Research Agent – 概要
会社名を入力すると、構造化されたソース付きのブリーフィング(ビジネス概要、業界背景、最近のニュースなど)を取得できる小さな Web アプリです。主要な処理は FastAPI バックエンドが担い、LLM 駆動のステップからなるリサーチグラフと Tavily のウェブ検索/関連性サービスを調整します。React + Vite フロントエンドは進捗をブラウザにストリーミングし、最終的な Markdown レポートを PDF としてエクスポートできます。
コア機能
| 機能 | 仕組み |
|---|---|
| 自動リサーチ | Tavily にクエリを送信し、関連性をスコアリングし、URL を収集します。 |
| LLM 駆動の統合 | OpenRouter 経由でアクセス可能な任意のモデル(または OpenAI/Gemini キーを直接使用)を使用して、検索プロンプトを生成し、ソースを要約し、最終ブリーフィングを作成します。 |
| ライブストリーミング | UI は GET /research/{job_id}/stream からサーバー送信イベントを受信し、ジョブの進捗をリアルタイムで確認できます。 |
| PDF エクスポート | バックエンドは POST /generate-pdf を介して Markdown レポートを PDF に変換します。 |
| オプションの永続化 | MongoDB URI が指定されている場合、ジョブとレポートは後で取得できるように保存されます。 |
| モデルの柔軟性 | 設定 UI でモデルを選択します。同じモデルがパイプラインのすべてのステップで使用されます。 |
アーキテクチャ概要
React + Vite (フロントエンド) ←→ FastAPI (バックエンド)
│ │
└─ POST /research ──► リサーチグラフ
├─ アナライザー
├─ コレクター (Tavily)
├─ キュレーター (関連性スコアリング)
├─ ブリーフィング (LLM 統合)
└─ エディター (最終 Markdown)
バックエンドは以下と通信します:
- Tavily – ウェブ検索と関連性ランキング。
- LLM – OpenRouter 上の任意のモデル、または OpenAI/Gemini を直接使用して、プロンプト生成、要約、編集を行います。
- MongoDB(オプション)– ジョブ/レポートの保存。
はじめに(ローカル開発)
- バックエンド – Python 3.11+、venv を作成し、
requirements.txtをインストールし、.env.exampleを.envにコピーして OpenRouter/Tavily キーを入力します(MongoDB はオプション)。 - フロントエンド –
ui/.env.development.exampleをui/.env.development.localにコピーし、VITE_API_URLをhttp://localhost:8000に設定し、npm 依存関係をインストールします。 - 実行 –
uvicorn application:app --reload --port 8000(API)ui内でnpm run dev(UI)→http://localhost:5174を開きます。
- Docker – 同じ
.envファイルが存在する場合、docker compose up --buildで両方のサービスが起動します。
典型的なワークフロー
curl -X POST http://localhost:8000/research \
-H 'Content-Type: application/json' \
-d '{"company":"Tavily","company_url":"https://tavily.com","industry":"AI search","hq_location":"New York, USA","model":"anthropic/claude-sonnet-5.5"}'
- レスポンスには
job_idが含まれます。 - UI(または
GET …/streamリクエスト)が進捗イベントをストリーミングします。 - 完了後、
GET /research/{job_id}/reportで Markdown を取得し、POST /generate-pdfでダウンロード可能な PDF を作成します。
誰が使うのか?
- 投資家やアナリスト – 対象企業の迅速なソース付き概要が必要な場合。
- 事業開発チーム – パートナーや競合他社を調査する場合。
- 学生やジャーナリスト – 手動のウェブ検索なしで再現可能なブリーフィングを希望する場合。
- 開発者 – 他の LLM オーケストレーション型リサーチエージェントを構築するためのテンプレートを探している場合。
制限と考慮事項
- API キー依存 – 有効な OpenRouter(または OpenAI/Gemini)キーと Tavily キーを提供する必要があります。これらがないとサービスは実行できません。
- ソース品質 – 関連性スコアリングはヒューリスティックです。最終レポートは、取得したページから LLM が統合した内容を反映します。
- 永続化はオプション – MongoDB がない場合、各ジョブは現在のサーバー実行中のみメモリに保持されます。
- モデルコスト – OpenRouter 経由で大規模モデルを使用すると高額になる可能性があります。価格と品質のバランスが取れたモデルを選択してください。
ライセンス
Apache License 2.0 – 自由に使用、変更、配布できます。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト