Skip to content

[PDF インポート 2/3] backend: PDF テキスト抽出 + 構造化出力エンドポイント #527

Description

@yusuke0610

背景(#517

PDF インポート ADR(前段 issue)に従い、backend のエンドポイントを実装する。

作業内容(PR 1本)

  • PDF テキスト抽出(ADR で選定したライブラリ)。依存追加 → uv lock 再生成・backend/uv.lock コミット
  • テキスト埋め込み有無の判定。スキャン PDF は messages.json の日本語メッセージで非対応エラーを返す
  • services/agent/ 配下に抽出サービスを実装:
    • 構造化出力で Resume スキーマ互換の payload を返す(Haiku)
    • Agent の不変条件を継承: 機械制約はスキーマ / 品質制約はプロンプト(プロンプトは app/prompts/)、リトライ 1 回、LLMError / パース失敗は 502 の日本語エラー契約
    • DB 非更新: レスポンスは payload のみ。保存はユーザがフォームから実行
  • エンドポイント追加(multipart upload)。ファイルサイズ上限・PDF 以外の拒否のバリデーション
  • レート制限([Agent 整理 2/4] ユーザ単位レート制限の導入(課金撤去の前提) #521)の対象に組み込む
  • 決定論部分(テキスト前処理・判定ロジック)は TDD 対象
  • make codegen-types 再生成・コミット

受け入れ条件

  • make ci green
  • テキスト PDF で Resume 互換 payload が返り、スキャン PDF・非 PDF・サイズ超過がそれぞれ日本語エラーで区別される
  • 作業前に .claude/rules/backend/agent.md を読むこと(Agent 変更時の必須ルール)

Metadata

Metadata

Assignees

No one assigned

    Labels

    agentDevForge Agentbackendバックエンドbugバグ修正

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions