ランドオペレータ向けAI見積システム - 依頼文から見積書までの自動化
旅行会社から届く見積依頼を、メール本文やExcel・PDFのまま受け取り、AIが条件を構造化して自社タリフ(料金表)から見積書を作成するSaaSを開発しました。繁忙期に見積を返しきれず失注する、という業界共通の課題に対するシステムです。
プロジェクト概要
- 依頼メール・Excel・PDF・画像をそのまま投入できる入力設計
- AIによる条件(人数・日程・宿泊・車両・食事)の構造化
- 自社タリフとマークアップルールにもとづく見積の自動組み立て
- 見積書のPDF / Excel出力
- 人による承認を経ないと送付できないワークフロー
依頼者の目指した目標と解決したい課題
ランドオペレータ(現地手配会社)は、旅行会社から届く見積依頼に対して、宿泊・車両・食事・ガイドなどを組み合わせた料金を算出して回答します。この業務には2つの構造的な問題がありました。
1つは繁忙期の取りこぼしです。依頼は集中して届く一方、見積を作成できる人数は簡単には増やせません。返信が翌日になった案件から順に他社へ流れていくため、忙しさのピークがそのまま失注のピークになっていました。
もう1つは属人化です。タリフの読み方も、シーズンや人数帯に応じたマークアップの当て方も、経験のある担当者の頭の中にありました。その担当者が不在の日には見積が止まり、引き継ぎ資料をつくっても実際には引き継げない、という状態でした。
「人を増やさずに、返せる件数を増やす」ことが目標でした。
開発したシステムの特徴
- 入力形式を問わない受け取り:
- 依頼メールの本文をそのまま貼り付け可能
- Excel・PDF・画像の添付にも対応
- 依頼元にフォーマットの変更を強いない設計
- AIによる条件の構造化:
- 人数・日程・宿泊・車両・食事といった見積に必要な条件を依頼文から抽出
- 読み取りに確信が持てない項目には「要確認」の印を付け、担当者の目を誘導する
- タリフのマスタ管理:
- シーズン・人数帯・マークアップルールをマスタとして保持
- 誰が担当しても同じ根拠で同じ見積が出る
- 既存のExcelタリフは、AI取り込みで移行できる(PDFやスクリーンショットからの取り込みにも対応)
- 取り込み結果は登録前に一覧で確認・修正でき、行単位で選んで登録できる
- 承認を挟むワークフロー:
- AIが作るのは下書きまで
- 金額・日程・人数は画面上で確認・修正でき、担当者が承認するまで顧客に送付されない
- テナント分離:
- タリフは仕入原価そのものにあたるため、テナントごとに分離して保管
- AI提供事業者との契約上、送信したデータがモデルの学習に使われない構成
技術的背景
Ruby on Rails をベースに、Hotwire(Turbo / Stimulus)で構築しています。見積作成の画面は、明細行の追加・削除、タリフの選択、金額の再計算といった細かい操作が連続する性質のものですが、専用のStimulusコントローラを機能ごとに分割することで、SPAフレームワークを導入せずに実現しています。
このシステムで最も設計判断を要したのは、LLMをどこまで信用するかの線引きです。依頼文の読み取りをAIに任せる以上、誤読は必ず起こります。そこで「AIの出力は下書きであり、人の承認なしには外に出ない」ことをワークフローとして固定し、さらに読み取り精度が低い項目を明示することで、確認すべき箇所を担当者に伝える設計としました。精度そのものを追うのではなく、誤りが混入しても業務が壊れない構造を優先しています。
タリフは各社の仕入原価であり、競争力の源泉にあたる情報です。そのためテナントごとのデータ分離と、AI提供事業者へ送信したデータが学習に使われないことを、設計と契約の両面で担保しています。
ホスティングにはfly.ioを使用しています。
解決された問題
依頼が集中する時期でも、届いた順に見積を返せるようになりました。入力形式を問わないため、依頼元に新しいフォーマットを要求する必要もありません。
タリフとマークアップのルールがマスタとしてシステムに載ったことで、見積作成が特定の担当者に依存しなくなりました。ベテランの判断基準が、個人の経験から会社の資産に移っています。
チーム構成
- (KW) プロジェクトマネージャー
- (KW) バックエンドエンジニア×2
- (KW) フロントエンドエンジニア
- (KW) プロンプトエンジニア
(KW) はKaito Wingsが担当
プロジェクト期間
- 要件定義・業務ヒアリング - 2ヶ月
- 開発・AI精度調整 - 5ヶ月
- 試験導入・改善 - 継続
システム構成
- Ruby on Rails
- Hotwire (Turbo, Stimulus)
- importmap
- LLM API(条件の構造化・タリフ取り込み)
- fly.io (ホスティング)