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