Skip to content

[PDF インポート 1/3] ADR 起票: 手持ち PDF 経歴書のフォーム流し込み #526

Description

@yusuke0610

背景(#517

転職者はほぼ全員、手持ちの経歴書 PDF を持っており、空フォームを前に手入力を始める瞬間が最大の離脱ポイント。手持ち PDF をアップロード → LLM で構造化抽出 → フォームに流し込む機能でコールドスタート問題を解消する。

歴史的経緯(ADR に必ず記載): 「職務経歴書 PDF の AI 抽出」は過去に存在し撤去された機能(ADR-0004 で導入 → ADR-0008 で撤去)。旧設計の敗因は generate() が失敗時に空文字を返しエラーが UI に届かなかったこと。今回は ADR-0010/0018 の不変条件に乗せることで構造的に再発を防ぐ。

作業内容(PR 1本: ADR のみ)

  • ADR 新規作成。以下の設計判断を含める:
    • v1 はテキスト埋め込み PDF のみ対応。スキャン PDF(画像)は OCR / vision が必要でコストも失敗モードも別物のため非対応とし、判定して日本語メッセージで案内
    • 実装は services/agent/ 配下(ADR-0010 の「LLM は services/agent/ のみ」を維持)。構造化出力で Resume スキーマに抽出、DB 非更新でフォーム注入機構([フォーム注入 1/2] Resume payload → フォーム state 注入機構(共有部品) #524)に渡す
    • エラー契約: 抽出失敗・パース失敗・非対応 PDF を明示的な日本語 HTTP エラーで返す(旧設計の空文字握りつぶしの再発防止)
    • PDF テキスト抽出ライブラリの選定(WeasyPrint は生成専用のため別途必要。pypdf 等)と依存追加の判断
    • 同期(ADR-0018 の 60s 実績)か非同期(ADR-0020 パターン)かの判断
    • レート制限([Agent 整理 2/4] ユーザ単位レート制限の導入(課金撤去の前提) #521)の対象に含める
  • docs/adr/README.md 索引更新(同一 PR)

受け入れ条件

  • make lint-adr-index green
  • ADR-0004/0008 の経緯と教訓が記載され、旧設計との差分が明確

Metadata

Metadata

Assignees

No one assigned

    Labels

    agentDevForge Agentbugバグ修正documentationImprovements or additions to documentationfeature新機能webフロントエンド (web)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions