用 Claude Haiku 4.5 對 SNS 數據做 AI 性格診斷的實現心得

作者在個人鏈接頁面服務 myna.me 上,用 Claude Haiku 4.5 實現了基於 SNS 數據的 AI 性格診斷功能,採集多個 SNS 賬號的數據進行 6 維度人格分析。

文章深入分享了架構設計、Prompt 工程、驗證方案和成本優化策略。作爲一個實際上線運行的功能,這是難得的從想法到生產環境的完整實現記錄。

從行業發展趨勢來看,這一進展反映了AI技術正在加速從實驗室走向實際應用的過程。越來越多的企業和開發者開始將AI能力深度整合到產品和工作流中,推動了整個產業鏈的升級。對於關注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