260220-pdf-ai:PDF解析AIプロジェクト

AI/ML

概要

このリポジトリは、PDFドキュメントをアップロードして自動的に解析・要約・キーワード抽出を行い、さらに質問応答(Q&A)に対応するためのプロンプト駆動型の雛形プロジェクトです。TypeScriptとNext.js(設定ファイルが含まれていることから)で構成され、バックエンドAPIがモデルへ渡すシステムプロンプトとユーザープロンプトを精密に設計する「プロンプトアーキテクチャ」に重点を置いています。利用するモデルは README によれば Google の Gemini 2.5 Flash で、出力フォーマットを厳格にJSONで返す設計が特徴です。小規模ながら実用的なドキュメント分析フローの参考になります。

GitHub

リポジトリの統計情報

  • スター数: 2
  • フォーク数: 0
  • ウォッチャー数: 2
  • コミット数: 4
  • ファイル数: 11
  • メインの言語: TypeScript

主な特徴

  • Google Gemini 2.5 Flash を用いたプロンプト駆動のドキュメント解析設計
  • アップロード直後に自動で要約・キーワード・インサイトを抽出するワークフロー
  • 出力を厳密なJSON構造で返すことで後続処理(表示・検索・保存)を容易に
  • Next.js / TypeScript を想定した軽量な実装テンプレート

技術的なポイント

README で明示されている通り、本プロジェクトの中核は「プロンプトアーキテクチャ」です。具体的にはシステムプロンプトとユーザープロンプトを役割ごとに分離し、モデル(Gemini 2.5 Flash)へ渡す指示を厳密化して期待するJSONスキーマでの出力を強制しています。これにより、LLM 出力の不確実性を低減し、パース可能な構造データとして上流→下流処理へつなげやすくしています。

実装面では TypeScript と Next.js の設定ファイル(next.config.ts)や ESLint 設定が含まれており、API ルート(/api/analyze 等)を用意して PDF のアップロードと解析を処理する設計が想定されます。解析処理は以下のような流れになります:PDF を受け取ってテキスト化(OCR/テキスト抽出は README に明記されていませんが一般的に必要)、テキストをプロンプトへ埋め込み、Gemini に送信して「要約」「キーワード」「インサイト」などを JSON で受け取り、結果をフロントへ返す。モデル呼び出し時に返却JSONの厳格なスキーマを指定している点は、フロント側や保存時にバリデーションを容易にする良い設計です。

注意点としては、モデルが外部へ機密情報を送信する可能性や、巨大なPDFをそのままモデルに渡すことによるトークン制限、コスト管理が挙げられます。実運用ではテキスト分割(チャンク化)と要約→埋め込み→検索のような段階的処理や、出力JSONのスキーマ検証、Streamer/Retry の実装が必要になります。本リポジトリはプロンプト設計とAPIの雛形に重きを置いているため、実運用ではストレージ、認証、ログ、課金/コスト制御などを追加すると良いでしょう。

(約700字)

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • README.md: file
  • eslint.config.mjs: file
  • next.config.ts: file
  • package.json: file

…他 6 ファイル

まとめ

プロンプト設計にフォーカスしたPDF解析の小規模テンプレート。実運用の拡張がしやすい構成。

リポジトリ情報:

READMEの抜粋:

프롬프트 구성 (Prompt Architecture)

현재 프로젝트는 Google Gemini 2.5 Flash 모델을 사용하여 문서의 분석 및 질의응답을 처리합니다. 각 기능별로 사용되는 시스템 프롬프트 및 사용자 프롬프트는 다음과 같이 구성되어 있습니다.

1. 문서 자동 분석 및 요약 프롬프트 (/api/analyze)

사용자가 PDF 문서를 처음 업로드했을 때, 시스템이 자동으로 문서를 분석하고 핵심 요약 3선, 키워드, 인사이트를 도출하는 프롬프트입니다.

System Instruction (시스템 명령어)

You are an expert document analyzer. 
Analyze the provided document and return a JSON object with EXACTLY the following structure:
{
  "summaries": [
    {
      "title": "1. 초보자를 위한 쉬운...