Implementing AI Personality Diagnosis from SNS Data with Claude Haiku 4.5
The author implemented an AI personality diagnosis feature for myna.me using Claude Haiku 4.5, collecting data from multiple connected SNS accounts to perform 6-axis personality analysis.
Shares in depth: architecture design, prompt engineering, validation approach, and cost optimization. As a feature running in production, this is a valuable complete implementation record from concept to deployment.
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