VC Finder (投資家発見ツール)
製品URLまたは説明文を入力。業界とステージを検出。5社の比較可能な資金調達済み企業を発見。2つの調査トラックを実行:それらの比較企業に投資したVC(トラックA)、およびこの分野に関して投資テーゼを公開しているVC(トラックB)。出典付きでランク付けされた投資家リストとアウトリーチフックを返します。
ゼロ幻覚ポリシー: 出力内のすべての事実は、特定のTavily検索結果または取得した製品ページにトレース可能でなければなりません。これは以下に適用されます:
- 比較企業名:Tavilyの検索結果に存在しなければならず、AIの学習知識に基づいてはいけません
- VCファンド名:Tavilyの検索結果にそのままの形で存在しなければなりません
- 小切手サイズ、ステージフォーカス、ポートフォリオ企業:検索スニペットから取得し、AI知識からは取得しません
- ファンド概要と投資テーゼの要約:検索スニペットからのみ抽出。詳細が検索データにない場合は「検索データに見つかりませんでした」と記載し、学習知識から補完しないでください。
よくある間違い
| エージェントがやりがちなこと... | なぜそれが間違いか |
|---|---|
| a16zやSequoiaのような有名VCを追加する | 証拠のない有名VCはノイズです。この特定の製品についてTavily検索結果に現れたVCのみを含めてください。名前を挙げるだけでは創業者の時間の無駄です。 |
| 学習知識から比較企業を生成する | 比較企業はTavily検索結果(ステップ6)から取得しなければなりません。AIの知識による企業は証拠ではありません。記憶から提案された企業は、資金調達状況が間違っていたり、真の比較対象でない可能性があります。 |
| 5件のトラックA検索すべてが0件を返した場合に続行する | トラックAの結果がゼロということは、比較企業が間違っているか、ニッチすぎることを意味します。中止し、より広い検索クエリでステップ6を再実行し、再試行してください。 |
| 記事や投稿を引用せずにトラックBのVCを含める | 出典のないテーゼは幻覚と区別がつきません。創業者はそれを検証できず、リストの信頼性はすべて失われます。 |
| 学習知識からファンド概要を補完する | ファンド概要はTavilyスニペットテキストからのみ取得しなければなりません。スニペットがファンドを説明していない場合は、「検索データに見つかりませんでした」と書いてください。 |
| ウェブサイトの見た目からステージを検出する | ステージはステップ4で検出された特定のCTAシグナルから取得しなければなりません。 |
| 一般的なアウトリーチフックを書く | すべてのアウトリーチフックは、この特定の製品の差別化要因と、検索データからの特定のVCポートフォリオシグナルまたはテーゼの引用を記載しなければなりません。 |
| ユーザーが説明も提供した場合にURL取得をスキップする | 常にURLを取得してください。ライブページは、ユーザーの説明が省略しているステージシグナルを明らかにすることがよくあります。 |
ステップ1: セットアップ確認
echo "TAVILY_API_KEY: ${TAVILY_API_KEY:+set}"
echo "FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:-not set, Tavily extract will be used as fallback}"
TAVILY_API_KEYがない場合: 停止。ユーザーに伝えてください:「TAVILY_API_KEYはVC投資とテーゼを調査するために必要です。これに対するフォールバックはありません。app.tavily.comで取得してください。無料枠:月1000クレジット(約125回のフル実行)。.envファイルに追加してください。」
FIRECRAWL_API_KEYのみがない場合: サイレントに続行。Tavily extractがURL取得に使用されます。
ステップ2: 入力の収集
必要なもの:
- 製品URL(必須、ユーザーが直接製品説明を貼り付ける場合を除く)
- オプション:ターゲットステージのヒント(pre-seed、seed、series-a、series-b)——指定された場合はそれを使用し、ステージ検出をスキップ
- オプション:地理的嗜好(US、Europe、global)——指定がない場合はデフォルトでUS
ユーザーが貼り付けた説明のみ(URLなし)を提供した場合: ステップ3〜4をスキップ。貼り付けられたテキストを product_content としてステップ5に直接進みます。stage_source を user_description に設定します。
URLも説明も提供されていない場合: 尋ねてください:「あなたの製品またはスタートアップのURLは何ですか?または、簡単な説明を貼り付けてください:何をするものか、誰のためか、どのステージにいるか(pre-seed、seed、Series A)。」
出力ファイル名のためにURLから製品スラッグを導出:
PRODUCT_SLUG=$(python3 -c "
from urllib.parse import urlparse
url = 'URL_HERE'
host = urlparse(url).netloc.replace('www.', '')
print(host.split('.')[0])
")
ステップ3: 製品ページの取得
プライマリ: Firecrawl(FIRECRAWL_API_KEYが設定されている場合)
curl -s -X POST https://api.firecrawl.dev/v1/scrape \
-H "Authorization: Bearer $FIRECRAWL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "URL_HERE", "formats": ["markdown"], "onlyMainContent": true}' \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
content = d.get('data', {}).get('markdown', '') or d.get('markdown', '')
print(f'Fetched: {len(content)} characters')
open('/tmp/vc-product-raw.md', 'w').write(content)
"
フォールバック: Tavily extract(FIRECRAWL_API_KEYが設定されていない場合)
curl -s -X POST https://api.tavily.com/extract \
-H "Content-Type: application/json" \
-d "{\"api_key\": \"$TAVILY_API_KEY\", \"urls\": [\"URL_HERE\"]}" \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
content = d.get('results', [{}])[0].get('raw_content', '')
print(f'Fetched via Tavily extract: {len(content)} characters')
open('/tmp/vc-product-raw.md', 'w').write(content)
"
ステップレベルのチェックポイント:
python3 -c "
content = open('/tmp/vc-product-raw.md').read()
if len(content) < 200:
print('ERROR: Page returned fewer than 200 characters.')
else:
print(f'Content OK: {len(content)} characters')
"
コンテンツが200文字未満の場合: 取得を停止。ユーザーに伝えてください:「製品ページから読み取り可能なコンテンツが返されませんでした。これは通常、サイトがJavaScriptでレンダリングされており、ブラウザが必要であることを意味します。製品の説明を直接貼り付けてください:何をするものか、誰のためか、どのステージにいるか。」
product_content として貼り付けられた説明を使用してステップ5に進みます。
ステップ4: ステージシグナルのローカル検出(API不要)
分析ステップの前に、取得したマークダウンを正規表現で解析します。
python3 << 'PYEOF'
import re, json
content = open('/tmp/vc-product-raw.md').read().lower()
stage_signals = []
if re.search(r'join\s+(the\s+)?waitlist|sign\s+up\s+for\s+beta|early\s+access|request\s+(an?\s+)?invite|get\s+notified', content):
stage_signals.append({'signal': 'waitlist or beta CTA', 'stage_hint': 'pre-seed'})
if re.search(r'start\s+(your\s+)?free\s+trial|try\s+(it\s+)?for\s+free|request\s+a?\s+demo|book\s+a?\s+demo|schedule\s+a?\s+demo', content):
stage_signals.append({'signal': 'free trial or demo CTA', 'stage_hint': 'seed'})
if re.search(r'contact\s+sales|talk\s+to\s+(our\s+)?sales|see\s+pricing|view\s+pricing|plans\s+and\s+pricing', content):
stage_signals.append({'signal': 'pricing or sales CTA', 'stage_hint': 'series-a'})
if re.search(r'case\s+stud(y|ies)|customer\s+stor(y|ies)|trusted\s+by\s+[\d,]+|used\s+by\s+[\d,]+', content):
stage_signals.append({'signal': 'case studies or customer count', 'stage_hint': 'series-a'})
if re.search(r'enterprise\s+(plan|pricing|tier)|we.?re\s+hiring|join\s+our\s+team|open\s+positions', content):
stage_signals.append({'signal': 'enterprise tier or job openings', 'stage_hint': 'series-a-or-b'})
funding_match = re.search(
r'raised\s+\$[\d,.]+\s*[mk]?|series\s+[abc]\s+round|seed\s+round|(\$[\d,.]+\s*[mk]?\s+(?:seed|series\s+[abc]))',
content
)
if funding_match:
stage_signals.append({'signal': f'funding text: {funding_match.group(0).strip()}', 'stage_hint': 'announced'})
if not stage_signals:
dominant = 'unknown'
elif any(s['stage_hint'] == 'announced' for s in stage_signals):
dominant = 'announced'
elif any(s['stage_hint'] == 'series-a-or-b' for s in stage_signals):
dominant = 'series-a'
elif any(s['stage_hint'] == 'series-a' for s in stage_signals):
dominant = 'series-a'
elif any(s['stage_hint'] == 'seed' for s in stage_signals):
dominant = 'seed'
else:
dominant = 'pre-seed'
confidence = 'high' if len(stage_signals) >= 2 else ('medium' if len(stage_signals) == 1 else 'low')
result = {'signals': stage_signals, 'dominant_stage': dominant, 'confidence': confidence}
json.dump(result, open('/tmp/vc-stage-signals.json', 'w'), indent=2)
print(f'Stage: {dominant} ({confidence} confidence) from {len(stage_signals)} signal(s)')
for s in stage_signals:
print(f' - {s["signal"]} -> {s["stage_hint"]}')
PYEOF
ステップ5: 製品分析(分類法、ステージ、ICP)
製品コンテンツとステージシグナルを表示:
python3 -c "
import json
content = open('/tmp/vc-product-raw.md').read()[:6000]
signals = json.load(open('/tmp/vc-stage-signals.json'))
print('=== 製品ページ(最初の6000文字)===')
print(content)
print()
print('=== 検出されたステージシグナル ===')
print(json.dumps(signals, indent=2))
"
AIへの指示: 上記の製品ページコンテンツを分析。分類法、ICP、ステージ分類のみを生成してください。まだ比較企業は生成しないでください(それはステップ6のライブ検索で行います)。
/tmp/vc-product-analysis.json に書き込み:
product_name: ページからone_line_description: 何をするものか、誰のためか、コアバリュープロポジション。20語未満。マーケティング用語は避ける。industry_taxonomy:l1(トップレベル:fintech / healthtech / developer tools / consumer / など)、l2(セクター:sales technology / logistics software / など)、l3(特定のニッチ:outbound prospecting / last-mile routing / など)。「technology」や「software」だけのような曖昧なラベルは許可されません。icp:buyer_persona(職種)、company_type、company_sizedetected_stage: pre-seed / seed / series-a / series-b / unknownstage_confidence: high / medium / lowstage_evidence: ページ上のどのCTAまたはテキストがこれを導いたかを引用した一文。「明確なシグナルは見つかりませんでした」とunknownの場合は記述。geography_bias: US / Europe / global / unclearcomparable_companies: 空の配列[]のままにする——ステップ6で埋められます
python3 << 'PYEOF'
import json
analysis = {
# 上記の分析から記入
"comparable_companies": []
}
json.dump(analysis, open('/tmp/vc-product-analysis.json', 'w'), indent=2)
print('製品分析を書き込みました。')
PYEOF
確認:
python3 -c "
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
print('製品:', a['product_name'])
print('業界:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('ステージ:', a['detected_stage'], '(' + a['stage_confidence'] + ' confidence)')
"
ステップ5b: 検証済みファンドデータセットに対する事前マッチング
製品分類法を、25の検証済みVCファンド(ファンドウェブサイトから収集)の厳選データセットに対して実行します。ゼロ幻覚のファンドマッチとトラックA用のシード比較企業を生成します。Tavilyクレジットは消費しません。
タグマッピングのために製品分析を表示:
python3 -c "
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
print('分類法:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('ステージ:', a['detected_stage'])
print('地理:', a['geography_bias'])
"
AIへの指示: 製品分類法をファンドデータセットで使用される標準タグにマッピングします。利用可能なタグ:
DevTools、Infrastructure、Open Source、B2B SaaS、AI、Data、FinTech、HealthTech、Enterprise、Consumer、Marketplaces、E-commerce、Crypto、DeepTech、Cybersecurity、Generalist
この製品を説明する2〜4つのタグを選択。detected_stage を Pre-seed、Seed、Series A、または Growth にマッピング。geography_bias を US、Europe、India、または Global にマッピング。
製品コンテキストを書き込み:
python3 << 'PYEOF'
import json
# 上記の分類法分析に基づいて記入
context = {
"extracted_tags": ["TagA", "TagB"], # 上記のリストから2〜4つのタグ
"stage_hint": "Seed", # Pre-seed / Seed / Series A / Growth
"geography_hint": "US" # US / Europe / India / Global
}
json.dump(context, open('/tmp/vc-product-context.json', 'w'), indent=2)
print('製品コンテキスト:', context)
PYEOF
埋め込まれた厳選データセットに対してスコアリングを実行:
python3 << 'PYEOF'
import json
context = json.load(open('/tmp/vc-product-context.json'))
VC_FUNDS = [
{"fund_name":"Y Combinator","thesis":"We provide seed funding for startups. We invest in deeply technical teams building massive companies across all domains.","check_size":"$500k","stage_focus":["Pre-seed","Seed"],"industry_tags":["Generalist","B2B SaaS","DevTools","AI"],"geography_focus":["Global"],"notable_portfolio":["Stripe","Airbnb","GitLab"],"website":"https://www.ycombinator.com"},
{"fund_name":"boldstart ventures","thesis":"Day one partner for developer first, crypto, and SaaS founders. We love deeply technical founders solving hard infrastructure problems.","check_size":"$1M - $3M","stage_focus":["Pre-seed","Seed"],"industry_tags":["DevTools","Infrastructure","Crypto"],"geography_focus":["Global","US"],"notable_portfolio":["Snyk","Blockdaemon","Superhuman"],"website":"https://boldstart.vc"},
{"fund_name":"Heavybit","thesis":"The leading investor in developer-first startups. We help technical founders launch, gain traction, and build enterprise-ready companies.","check_size":"$1M - $5M","stage_focus":["Seed","Series A"],"industry_tags":["DevTools","Infrastructure","Open Source"],"geography_focus":["Global","US"],"notable_portfolio":["PagerDuty","Sanity","Netlify"],"website":"https://www.heavybit.com"},
{"fund_name":"Amplify Partners","thesis":"We invest in technical founders building the next generation of IT infrastructure, developer tools, and data platforms.","check_size":"$2M - $8M","stage_focus":["Seed","Series A"],"industry_tags":["DevTools","Infrastructure","AI","Data"],"geography_focus":["US"],"notable_portfolio":["Datadog","OCTO","dbt Labs"],"website":"https://www.amplifypartners.com"},
{"fund_name":"OSS Capital","thesis":"We exclusively back early-stage founders building Commercial Open Source Software (COSS) companies.","check_size":"$500k - $2M","stage_focus":["Pre-seed","Seed","Series A"],"industry_tags":["Open Source","DevTools"],"geography_focus":["Global"],"notable_portfolio":["Cal.com","Appsmith","Hoppscotch"],"website":"https://oss.capital"}
// ... このリストは翻訳で切り捨てられています。完全なリストは原文スキルマークダウンにあります。
]
scored = []
for fund in VC_FUNDS:
# タグの一致に基づいてスコアリング
matching_tags = set(fund["industry_tags"]) & set(context["extracted_tags"])
tag_score = len(matching_tags) * 10
# ステージの一致に基づいてスコアリング
stage_score = 5 if context["stage_hint"] in fund["stage_focus"] else 0
# 地理の一致に基づいてスコアリング
geo_score = 5 if context["geography_hint"] in fund["geography_focus"] else (2 if "Global" in fund["geography_focus"] else 0)
total_score = tag_score + stage_score + geo_score
if total_score > 0:
scored.append({
"fund": fund["fund_name"],
"score": total_score,
"matching_tags": list(matching_tags),
"check_size": fund["check_size"],
"stage_focus": fund["stage_focus"],
"geography_focus": fund["geography_focus"],
"notable_portfolio": fund["notable_portfolio"],
"website": fund["website"]
})
scored.sort(key=lambda x: x["score"], reverse=True)
# スコアが最も高い上位5件を選択(またはそれ以下)
top_funds = scored[:5]
result = {
"product_context": context,
"matched_funds": top_funds
}
json.dump(result, open('/tmp/vc-curated-matches.json', 'w'), indent=2)
print(f'厳選データセットマッチング完了:{len(top_funds)}件のファンドがマッチ')
for f in top_funds:
print(f' - {f["fund"]}(スコア:{f["score"]}、一致タグ:{f["matching_tags"]})')
PYEOF
ステップレベルのチェックポイント:
python3 -c "
import json
data = json.load(open('/tmp/vc-curated-matches.json'))
print(f'厳選マッチ:{len(data["matched_funds"])}件のファンド')
for f in data['matched_funds']:
print(f' - {f["fund"]}(スコア:{f["score"]})')
"
厳選マッチが0件の場合: エラーではありません。製品が非常にニッチであるか、新しいカテゴリである可能性があります。ステップ6でTavily検索を使用して続行します。
ステップ6: スタートアップ検出(Tavily検索)
製品分析を使用して検索クエリを構築:
python3 << 'PYEOF'
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
print('業界:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('ステージ:', a['detected_stage'])
PYEOF
AIへの指示: 製品の詳細と上記の分類法を使用して、資金調達済みの競合他社を検出するための3つの固有のTavily検索クエリを作成してください。各クエリは、すでに資金調達を発表した企業を発見することに焦点を当てる必要があります。クエリは、製品のl3ニッチ、ターゲットユーザー、またはコア機能を指定すべきであり、「AIスタートアップ」のような曖昧なものではありません。
実行:
for QUERY in "QUERY_1_HERE" "QUERY_2_HERE" "QUERY_3_HERE"; do
echo "=== 検索クエリ: $QUERY ==="
curl -s -X POST https://api.tavily.com/search \
-H "Content-Type: application/json" \
-d "{
\"api_key\": \"$TAVILY_API_KEY\",
\"query\": \"$QUERY\",
\"search_depth\": \"advanced\",
\"max_results\": 10,
\"include_answer\": false,
\"include_images\": false
}" | python3 -c "
import sys, json
d = json.load(sys.stdin)
results = d.get('results', [])
for r in results:
title = r.get('title', '')
url = r.get('url', '')
content = r.get('content', '')[:400]
print(f'タイトル: {title}')
print(f'URL: {url}')
print(f'コンテンツ: {content}')
print()
"
done
AIへの指示: 上記の検索結果をレビュー。製品のニッチおよびステージに真に合致する、資金調達済みの企業を最大5社特定します。企業名と詳細を次に書き込みます:
python3 << 'PYEOF'
import json
# 上記の検索結果に基づいて記入
comparables = [
{
"company_name": "CompanyName",
"source_url": "URL_from_search_results",
"funding_info": "資金調達の詳細(スニペットから)",
"one_liner": "一行説明",
"relevance_reason": "この企業がなぜ比較対象として適切か"
}
]
analysis = json.load(open('/tmp/vc-product-analysis.json'))
analysis['comparable_companies'] = comparables
json.dump(analysis, open('/tmp/vc-product-analysis.json', 'w'), indent=2)
print(f'{len(comparables)}件の比較企業を追加')
PYEOF
検証:
python3 -c "
import json
a = json.load(open('/tmp/vc-product-analysis.json'))
c = a['comparable_companies']
print(f'比較企業: {len(c)}件')
for comp in c:
print(f' - {comp["company_name"]}')
"
比較企業が0件の場合: これは重要です。トラックA(比較企業への投資家調査)は実行できません。より広い検索クエリで再試行するか、ユーザーに通知して続行方法を尋ねてください。
ステップ7: トラックA — 比較企業への投資家調査
各比較企業について、投資家を検索:
python3 << 'PYEOF'
import json, subprocess, sys
analysis = json.load(open('/tmp/vc-product-analysis.json'))
comparables = analysis['comparable_companies']
investor_map = {}
for comp in comparables:
name = comp['company_name']
print(f'\n=== 調査: {name}の投資家 ===')
query = f"investors who funded {name} startup venture capital"
result = subprocess.run([
'curl', '-s', '-X', 'POST', 'https://api.tavily.com/search',
'-H', 'Content-Type: application/json',
'-d', json.dumps({
'api_key': '$TAVILY_API_KEY',
'query': query,
'search_depth': 'advanced',
'max_results': 5,
'include_answer': False,
'include_images': False
})
], capture_output=True, text=True)
try:
data = json.loads(result.stdout)
results = data.get('results', [])
for r in results:
title = r.get('title', '')
url = r.get('url', '')
content = r.get('content', '')[:600]
print(f' - ソース: {title}')
print(f' URL: {url}')
print(f' コンテンツ: {content}')
print()
investor_map[name] = results
except Exception as e:
print(f' 検索エラー: {e}')
investor_map[name] = []
# 後で使用するために保存
json.dump(investor_map, open('/tmp/vc-track-a-results.json', 'w'), indent=2)
print('\nトラックA調査が完了しました。')
PYEOF
ステップ8: トラックB — 分野に関する投資テーゼの調査
python3 << 'PYEOF'
import json, subprocess
analysis = json.load(open('/tmp/vc-product-analysis.json'))
# 製品のニッチに焦点を当てたクエリを構築
queries = [
f"venture capital thesis about {analysis['industry_taxonomy']['l3']} investing 2024",
f"VC firms investing in {analysis['industry_taxonomy']['l2']} sector",
f"investors interested in {analysis['industry_taxonomy']['l1']} startups thesis"
]
thesis_map = {}
for i, query in enumerate(queries):
print(f'\n=== テーゼ検索 {i+1}: {query} ===')
result = subprocess.run([
'curl', '-s', '-X', 'POST', 'https://api.tavily.com/search',
'-H', 'Content-Type: application/json',
'-d', json.dumps({
'api_key': '$TAVILY_API_KEY',
'query': query,
'search_depth': 'advanced',
'max_results': 5,
'include_answer': False,
'include_images': False
})
], capture_output=True, text=True)
try:
data = json.loads(result.stdout)
results = data.get('results', [])
for r in results:
title = r.get('title', '')
url = r.get('url', '')
content = r.get('content', '')[:600]
print(f' - ソース: {title}')
print(f' URL: {url}')
print(f' コンテンツ: {content}')
print()
thesis_map[query] = results
except Exception as e:
print(f' 検索エラー: {e}')
thesis_map[query] = []
json.dump(thesis_map, open('/tmp/vc-track-b-results.json', 'w'), indent=2)
print('\nトラックB調査が完了しました。')
PYEOF
ステップ9: すべてのデータを結合して投資家リストを作成
python3 << 'PYEOF'
import json
analysis = json.load(open('/tmp/vc-product-analysis.json'))
curated = json.load(open('/tmp/vc-curated-matches.json'))
track_a = json.load(open('/tmp/vc-track-a-results.json'))
track_b = json.load(open('/tmp/vc-track-b-results.json'))
# 出力構造の構築
output = {
"product": {
"name": analysis.get('product_name', '不明'),
"description": analysis.get('one_line_description', ''),
"industry": analysis['industry_taxonomy'],
"stage": analysis['detected_stage'],
"stage_confidence": analysis['stage_confidence'],
"stage_evidence": analysis['stage_evidence'],
"geography_bias": analysis['geography_bias'],
"icp": analysis['icp']
},
"comparable_companies": analysis['comparable_companies'],
"investor_recommendations": {
"curated_matches": [],
"track_a_investors": [],
"track_b_vcs": []
}
}
# 厳選マッチを追加
for fund in curated.get('matched_funds', []):
output["investor_recommendations"]["curated_matches"].append({
"fund_name": fund['fund'],
"match_score": fund['score'],
"matching_tags": fund['matching_tags'],
"check_size": fund['check_size'],
"stage_focus": fund['stage_focus'],
"notable_portfolio": fund['notable_portfolio'],
"website": fund['website'],
"source": "curated dataset"
})
# トラックAの結果を処理(AIが検索結果を解釈)
print("=== トラックA結果の処理 ===")
print(json.dumps(track_a, indent=2)[:2000])
print("...")
# AIへの指示: 上記のトラックAの生検索結果を使用して、
# 各比較企業に投資したVCファンドを抽出します。
# ファンド名は検索結果から抽出し、知識ベースからは抽出しません。
# 各ファンドについて以下を含めます:
# - fund_name(検索結果からの文字通り)
# - source_url(検索結果のURL)
# - extracted_snippet(ファンドが言及されている具体的なテキスト)
# トラックBの結果を処理(AIが検索結果を解釈)
print("\n=== トラックB結果の処理 ===")
print(json.dumps(track_b, indent=2)[:2000])
print("...")
# AIへの指示: 上記のトラックBの生検索結果を使用して、
# この分野に関する投資テーゼを公開しているVCファームを抽出します。
# 各ファンドについて以下を含めます:
# - fund_name(検索結果からの文字通り)
# - source_url(テーゼが発見された記事/投稿のURL)
# - thesis_excerpt(検索結果からの具体的なテーゼ引用)
json.dump(output, open('/tmp/vc-investor-list.json', 'w'), indent=2)
print('\n投資家リストのドラフトが完了しました。')
PYEOF
ステップ10: レポートの作成
python3 << 'PYEOF'
import json
output = json.load(open('/tmp/vc-investor-list.json'))
product = output['product']
report = f"""# 投資家調査レポート: {product['name']}
## 製品概要
{product['description']}
**業界:** {product['industry']['l1']} > {product['industry']['l2']} > {product['industry']['l3']}
**検出ステージ:** {product['stage']}(確信度:{product['stage_confidence']})
**ステージの根拠:** {product['stage_evidence']}
**ICP:** {product['icp']['buyer_persona']} @ {product['icp']['company_type']}({product['icp']['company_size']})
**地理的バイアス:** {product['geography_bias']}
---
## 比較企業
| 企業名 | 説明 | 資金調達情報 | 関連性 |
|---|---|---|---|
"""
for comp in output['comparable_companies']:
report += f"| {comp['company_name']} | {comp['one_liner']} | {comp['funding_info']} | {comp['relevance_reason']} |\n"
report += """
---
## 推奨投資家
### 厳選データセットマッチ
| ファンド名 | 一致スコア | 小切手サイズ | ステージ | ポートフォリオ | ウェブサイト |
|---|---|---|---|---|---|
"""
for fund in output['investor_recommendations']['curated_matches']:
portfolio = ', '.join(fund['notable_portfolio'][:3])
report += f"| {fund['fund_name']} | {fund['match_score']} | {fund['check_size']} | {', '.join(fund['stage_focus'])} | {portfolio} | {fund['website']} |\n"
report += """
### トラックA結果(比較企業の投資家)
"""
for comp in output['comparable_companies']:
report += f"\n**{comp['company_name']}の投資家:**\n"
# AIがここに関連投資家を記入
report += "*[AIがトラックAの検索結果から投資家情報を記入]*\n"
report += """
### トラックB結果(分野投資テーゼVC)
"""
# AIがここにテーゼ情報を記入
report += "*[AIがトラックBの検索結果から投資家とテーゼ情報を記入]*\n"
report += """
---
## アウトリーチフック
### 厳選ファンド向け
"""
for fund in output['investor_recommendations']['curated_matches'][:3]:
report += f"\n**{fund['fund_name']}:** [製品の差別化要因と{fund['fund_name']}のポートフォリオシグナル/テーゼを結びつけるカスタムフック]\n"
report += """
### トラックA投資家向け
*[比較企業の投資家向けのカスタムフック、この製品が何をユニークにしているかを参照]*
### トラックB VC向け
*[この製品とVCの公開テーゼとの整合性を参照するカスタムフック]*
---
## データソース
**製品ページ:** [URL_HERE]
**比較企業のソース:** Tavily検索結果(詳細は各企業のsource_urlを参照)
**投資家データ:** Tavily検索結果 + 検証済みファンドデータセット
**テーゼソース:** Tavily検索結果(詳細は各エントリのsource_urlを参照)
"""
# レポートをファイルに保存
with open('/tmp/vc-investor-report.md', 'w') as f:
f.write(report)
print('レポートが /tmp/vc-investor-report.md に保存されました。')
print(f'レポート長: {len(report)}文字')
PYEOF
ステップ11: 最終出力
レポートを表示:
cat /tmp/vc-investor-report.md
ユーザーに伝えてください:
「投資家調査が完了しました。以下を生成しました:
/tmp/vc-investor-report.md:完全なレポート(比較企業、厳選ファンドマッチ、トラックA/B結果、アウトリーチフックを含む)
レポート内の各エントリは、Tavily検索結果または製品ページからの出典が明記されています。
次のステップの提案:
- 各VCのポートフォリオを確認し、具体的な関連性を特定する
- アウトリーチフックを詳細化し、製品の差別化要因を強調する
- これらの投資家のパートナーとのコネクションを探す」