Appearance
自動化パイプライン全体像
概要
BUSON では、求人データの収集から求職者へのマッチングまでを一連の自動化パイプラインで実現しています。
| 項目 | 内容 |
|---|---|
| パイプライン数 | 6 種類(CLI スクリプト 4 + API 駆動 2) |
| 使用 AI | Gemini 3 Flash Preview / text-embedding-004 |
| 外部サービス | Resume-Converter(C# マイクロサービス) |
| データベース | Supabase(PostgreSQL + pgvector) |
| ブラウザ自動化 | Playwright(Chromium ヘッドレス) |
このページの使い方
全体像を把握するためのハブページです。各パイプラインの詳細は個別ページへのリンクから確認してください。
パイプライン全体図
全自動化パイプラインの全体像です。青 = CLI スクリプト(手動実行)、オレンジ = API 駆動(フロントエンド操作)で区別しています。
パイプライン依存関係
各パイプラインには実行順序の依存関係があります。矢印は「先に実行が必要」な関係を示します。
実行順序に注意
求人サジェスト機能を利用するには、以下が全て完了している必要があります:
- 求人クローリング → 2. 求人エンリッチメント → 3. Embedding 生成(求人側)
- 求職者ドキュメント処理(求職者側)
典型的な運用フロー
新しい求人を追加してサジェストが使えるようになるまでの流れ:
bash
# Step 1: 求人データを取得
cd backend
npm run crawl:herp
npm run crawl:jobcan
# ... 他の媒体も実行
# Step 2: 企業情報を補完
npm run enrich:companies
# Step 3: 求人情報をAI分析
npm run enrich:jobs
# Step 4: Embeddingを生成
npx tsx src/scripts/embed-jobs.ts
# → これでフロントエンドから「おすすめ求人サジェスト」が利用可能にデータフロー
主要テーブル間のデータの流れを示します。
各パイプラインの概要
1. 求人クローリング
各エントリー媒体(ATS)から求人情報を自動取得し、jobs テーブルに保存します。
| 項目 | 内容 |
|---|---|
| 対応媒体数 | 13 媒体(求人 12 + 求職者取込 1) |
| 取得方式 | Playwright(12 媒体)/ HTTP fetch(HERP のみ) |
| 実行方法 | cd backend && npm run crawl:<媒体名> |
| 出力先 | jobs テーブル + companies テーブル(自動作成) |
| 共通オプション | --dry-run --limit N --company "名前" --verbose --inspect |
対応媒体: HERP, ジョブカン, Talentio, Wantedly Agent, かんりくん, PERSONA, axol(AKKODIS / AVANT / 大和総研), jposting, Greenhouse, HITO-Link, AGRE ARMS
詳細
求人クローラー を参照してください。
2. 企業エンリッチメント
企業名から公式情報を AI で自動収集し、面談シートに必要なフィールドを補完します。
| 項目 | 内容 |
|---|---|
| AI モデル | Gemini 3 Flash Preview + Google Search Grounding |
| 実行方法 | cd backend && npm run enrich:companies |
| 補完フィールド | homepage_url nearest_station employee_count stock_market company_overview |
| レート制限 | 各社 2 秒間隔 + API エラー時 3 回リトライ(初回 1 秒、指数バックオフ) |
| ステータス管理 | enrichment_status: pending → success / failed |
情報源の制約: 公式サイト・IR ページ・公式採用ページのみ。求人サイト・口コミサイト・Wikipedia は使用しません。
詳細
企業エンリッチメント を参照してください。
3. 求人エンリッチメント(2 段階)
Stage 1: AI 分析
求人の説明文から構造化データを抽出し、AI 説明文とカテゴリマッピングを生成します。
| 項目 | 内容 |
|---|---|
| AI モデル | Gemini 3 Flash Preview + Google Search Grounding |
| 実行方法 | cd backend && npm run enrich:jobs |
| 1 回の API で実行するタスク | カテゴリ分類 + AI 説明文生成 + 構造化要件抽出 |
| 出力先 | jobs.ai_description jobs.structured_requirements job_category_mappings |
| レート制限 | 各件 2 秒間隔 + API エラー時 3 回リトライ(初回 1 秒、指数バックオフ) |
構造化要件(16 フィールド): min_salary, max_salary, required_skills, min_experience_years, work_style, work_locations, target_seniority, industry_domain, career_paths, culture_keywords, english_requirement, team_size, position_summary, environment, selling_points, agent_notes
Stage 2: Embedding 生成
AI 説明文と構造化要件からベクトル表現を生成し、類似度検索を可能にします。
| 項目 | 内容 |
|---|---|
| AI モデル | text-embedding-004(768 次元) |
| 実行方法 | cd backend && npx tsx src/scripts/embed-jobs.ts |
| 入力 | ai_description + structured_requirements を日本語テキストに変換 |
| 出力先 | jobs.ai_description_embedding(vector(768)) |
| バッチ処理 | 50 件ずつ、2 秒間隔 |
詳細
求人エンリッチメント を参照してください。
4. 求職者ドキュメント処理
求職者の履歴書・職務経歴書をアップロードし、AI で構造化データに変換します。
| 項目 | 内容 |
|---|---|
| 対応形式 | PDF / DOCX / XLSX(最大 10MB) |
| 処理方式 | BUSON Backend → Resume-Converter(C#)→ Supabase に書き戻し |
| 実行方法 | フロントエンド: 求職者詳細画面のアップロードボタン |
| 出力先 | candidate_documents.parsed_data(JSONB) |
抽出される構造化データ(parsed_data)
| フィールド | 型 | 説明 |
|---|---|---|
name | string | 氏名 |
name_kana | string | 氏名(かな) |
birth_date | string | 生年月日 |
address | string | 住所 |
phone | string | 電話番号 |
email | string | メールアドレス |
education | Array | 学歴(学校名、学部、卒業年) |
work_history | Array | 職歴(企業名、職種、期間、業務内容) |
skills | string[] | スキル一覧 |
certifications | Array | 資格(名称、取得日) |
self_pr | string | 自己 PR |
さらに、candidate_document_sessions テーブルにはプロジェクト単位の詳細な職歴データ(技術スタック、チーム規模、実績など)が保存されます。
Word 文書の再生成
パース完了後、構造化データから書式統一された Word 文書(履歴書 / 職務経歴書)を生成できます。
POST /api/v1/candidates/:id/documents/:documentId/generate-word
Body: { "type": "resume" | "career" }5. 求職者 AI 分析
求職者の経歴データと性格特性を AI で分析し、エージェント業務を支援します。
| 項目 | 内容 |
|---|---|
| AI モデル | Gemini 3 Flash Preview(Temperature: 0.3) |
| 実行方法 | フロントエンド: 求職者詳細画面のボタン |
| 入力データ | BIG5 性格特性 + 職歴データ + 面談メモ + 求人レコメンド結果 |
| 出力先 | candidates.ai_summary(Markdown テキスト) |
出力セクション: 性格特性 / 経歴の特徴 / 面談での印象 / 適した求人の傾向
6. おすすめ求人サジェスト
求職者の経歴・スキル・希望条件を分析し、最適な求人 5 件を AI で提案します。
| 項目 | 内容 |
|---|---|
| AI モデル | Gemini 3 Flash Preview + text-embedding-004 |
| 実行方法 | フロントエンド: 求職者詳細画面の「おすすめ求人を探す」ボタン |
| 処理時間 | 約 12〜15 秒(非同期処理) |
| 出力先 | candidate_job_recommendations(上位 5 件) |
処理フロー:
- 求職者データ収集(3 テーブルから並列取得)
- プロフィールテキスト生成 → Embedding + カテゴリ判定(並列実行)
- 統合ベクトル検索(カテゴリ + 年収 + コサイン距離)→ 上位 15 件
- フォールバック: カテゴリフィルタで 5 件未満の場合、フィルタなしで再検索
- LLM 精査でスコアリング → 上位 5 件を保存
詳細
おすすめ求人サジェスト を参照してください。
使用技術まとめ
AI / ML
| 技術 | 用途 | 使用箇所 |
|---|---|---|
| Gemini 3 Flash Preview | テキスト生成、JSON 構造化抽出 | 企業/求人エンリッチメント、カテゴリ判定、LLM 精査、AI サマリー |
| text-embedding-004 | 768 次元ベクトル生成 | 求人 Embedding、求職者プロフィール Embedding |
| Google Search Grounding | Web 検索で AI の回答精度を向上 | 企業/求人エンリッチメント |
| pgvector | ベクトル類似度検索(コサイン距離) | 求人サジェスト |
外部サービス
| サービス | 用途 |
|---|---|
| Resume-Converter | 履歴書 / 職務経歴書の OCR・パース(C# マイクロサービス) |
| Supabase | PostgreSQL + Storage + PostgREST |
| Playwright | ヘッドレスブラウザによる Web スクレイピング |
関連ファイル
| 役割 | パス |
|---|---|
| 求人クローラー群 | backend/src/scripts/crawlers/ |
| 企業エンリッチメントスクリプト | backend/src/scripts/enrich-companies.ts |
| 求人エンリッチメントスクリプト | backend/src/scripts/enrich-jobs.ts |
| Embedding 生成スクリプト | backend/src/scripts/embed-jobs.ts |
| Gemini クライアント | backend/src/infrastructure/external/gemini/GeminiClient.ts |
| Resume-Converter クライアント | backend/src/infrastructure/external/ResumeConverterClient.ts |
| 求人サジェストサービス | backend/src/application/services/JobRecommendationService.ts |
| AI サマリーサービス | backend/src/application/services/CandidateAiSummaryService.ts |