背景・動機
大学のバス時刻表は、学校祭などのイベントや学期ごとにダイヤの変更が発生します。これまでは毎回手作業で時刻を変更していましたが、管理的にも時間的にも非効率であると感じ、自動化システムの開発に着手しました。
解決したかった課題
- 手作業による入力コストの削減: 時刻表には100件を超える時刻が記載されていますが、PDFの形式上の制約から単純なコピー&ペーストができず、手入力に大幅な時間を要していました。
- 予期せぬフォーマット変更への対応: 時刻表はバス運行組織が作成しているため直接的なデータ連携の手段がなく、予期せぬレイアウトや書式変更が発生するリスクが常にありました。
技術選定の理由
- Go言語によるCLI開発:
学習目的に加え、ビルド後にシングルバイナリとして出力される点を高く評価しました。実行先での環境構築や依存関係の解決が不要になり、バッチ処理としての運用・デプロイが極めて容易になります。
- Gemini APIの採用:
GPTなどの他のLLMと比較検討した結果、PDFなどのドキュメント解析精度とコストパフォーマンス(API料金)のバランスが最も優れている点から選定しました。
実装のポイント
- データパイプラインの構築: PDF読み込み → テキスト抽出 → プロンプト構築 → Gemini API呼び出し → JSONバリデーション という一連の流れを自動化しました。
- プロンプトエンジニアリング: 不規則なレイアウトに対応するため、プロンプトを工夫して抽出精度を最大化しています。
- 堅牢なエラーハンドリング: APIの呼び出し失敗や部分的なデータ抽出エラーに備え、自動リトライ機構などを実装しています。
現在の状況・今後の課題
現在はコアとなる抽出ロジックが完成していますが、本番環境へのデプロイに向けて、抽出精度のテストとチューニングを重点的に進めています。