Claude Haiku 4.5でSNSデータからAI性格診断を実装した話
プロフィールリンクサービスmyna.meに、Claude Haiku 4.5を使ってユーザーの複数SNSアカウントのデータから6軸パーソナリティ分析を行うAI性格診断機能を実装しました。
アーキテクチャ設計、プロンプトエンジニアリング、バリデーション、コスト最適化戦略を詳しく共有。実際に本番環境で稼働する機能として、アイデアから本番までの貴重な完全実装記録です。
Claude Haiku 4.5でSNSデータからAI性格診断を実装した話
Claude Haiku 4.5でSNSデータからAI性格診断を実装した話
プロフィールリンクサービスmyna.meに、Claude Haiku 4.5を使ったAI性格診断機能を実装しました。
ユーザーが接続した複数のSNSアカウントから投稿データを収集し、AIが6軸のパーソナリティ分析を行う機能です。この記事では、実装のアーキテクチャ、プロンプト設計、バリデーション、コスト最適化について解説します。
myna.meは「全リンクが本人認証済み」のプロフィールリンクサービスです。OAuth認証や認証コードで接続されたSNSアカウントのみがプロフィールに表示されるため、なりすましを防止できます。
現在、X(Twitter)・GitHub・YouTube・Facebook・Qiita・Bluesky・Mastodon・LINE・Zenn・noteなど11プラットフォームに対応しています。
(Twitter, GitHub, YouTube, Facebook, Qiita, Mastodon, Bluesky, Zenn, note)
Claude Haiku 4.5でNLP推論
処理の流れはシンプルですが、9つのプラットフォームAPIとの統合、LLMの出力バリデーション、クールダウン管理など、実装上の工夫がいくつかあります。
AI性格診断の精度を上げるため、ユーザーが接続した最大9つのプラットフォームからデータを収集します。
1. OAuthトークン経由(6プラットフォーム)
OAuth認証で取得したアクセストークンを使い、各プラットフォームのAPIからデータを取得します。
2. パブリックAPI経由(3プラットフォーム)
OAuthトークンを持たないプラットフォームはパブリックAPIを利用します。
AT Protocol (app.bsky.feed.getAuthorFeed)
zenn.dev/api/articles?username=xxx
note.com/api/v2/creators/xxx
// 各プラットフォームのデータ収集を並列実行
const results = await Promise.allSettled([
fetchTwitterData(accounts),
fetchGitHubData(accounts),
fetchYouTubeData(accounts),
// 失敗したプラットフォームは無視して続行
const successfulData = results
.filter((r): r is PromiseFulfilledResult<PlatformData> =>
r.status === 'fulfilled' && r.value !== null
ここで重要なのは Promise.allSettled を使うことです。Promise.all だと1つのAPIが失敗しただけで全体が失敗しますが、allSettled なら取得できたデータだけで診断を進められます。
SNSデータだけでなく、myna.me上のプロフィール情報もコンテキストとして活用します。
bio / bioEn: 自己紹介文(日英)
Trust Score: 信頼性スコア(0-100)
これにより、SNS投稿だけでは見えないユーザーの全体像をAIに伝えることができます。
AI性格診断の品質を左右するのがプロンプト設計です。構造化されたプロンプトでJSON出力を強制し、6軸のスコアリングを安定させます。
オリジナルコンテンツの割合、多様なトピック
const systemPrompt = `You are a personality analyst AI.
Analyze the user's social media data and provide a 6-axis personality assessment.
- Return ONLY valid JSON, no markdown
- All scores must be integers between 0-100
- Provide analysis in the user's language`;
${platformDataSummary}
myna.me Profile Context
- Subtitle: ${subtitle}
- Trust Score: ${trustScore}/100
- Connected Platforms: ${platformCount}
- Timeline Entries: ${timelineCount}
Required Output Format
"creativity": <0-100>,
"sociability": <0-100>,
"analytical": <0-100>,
"leadership": <0-100>,
"expertise": <0-100>,
"expressiveness": <0-100>
"summary": "<2-3 sentence personality summary>",
"strengths": ["<strength1>", "<strength2>", "<strength3>"],
"style": "<one-word personality style label>"
モデル選択: なぜClaude Haiku 4.5か
Claude Haiku 4.5を選んだ理由は明確です。
コスト: Sonnetの約1/5のコストで、ユーザーごとの診断コストを数円に抑えられる
速度: 応答が速いため、UXが良い(診断結果の待ち時間が短い)
十分な精度: 性格診断のような「正解が一つではない」タスクでは、Haikuの出力品質で十分
Claude Haiku 4.5のモデルID: claude-haiku-4-5-20251001