はじめに
自社サービス dreami.jp で提供しているAI概算見積もり機能について、技術面での構成や工夫した点をまとめます。中小規模のシステム開発案件に対して、要件をヒアリングしながらAIが概算費用を算出し、PDFで送付するというものです。
実際にこちらで試せます → https://dreami.jp
技術構成
- フロントエンド: Next.js (App Router)
- バックエンド: FastAPI (Python)
- AI: Gemini API
- PDF生成: バックエンドで概算見積もり結果をPDF化し、メール送付
- メール送信: Resend
シンプルな構成ですが、「ヒアリング → AI判定 → PDF生成 → 送付」という一連の流れを非同期で処理する必要があり、そこに工夫のしどころがありました。
工夫した点
1. 非同期処理での進捗表示
見積もり処理はAI判定を挟むため数秒〜十数秒かかります。ユーザーを待たせている間、処理段階(受付 → 構成生成中 → 完了)をリアルタイムに返すことで、体感の待ち時間を減らす作りにしています。
2. スパム・乱用防止の上限設計
見積もり生成エンドポイントは誰でも叩ける性質上、悪意ある連続リクエストへの耐性が必要でした。IP・セッション単位での件数上限を設け、コストが青天井にならないようにしています。AI APIの呼び出しはそのままコストに直結するので、ここは特に慎重に設計しました。
3. 「概算であること」の明示
AIによる見積もりはあくまで参考値であり、正式な見積もりではないことをUI・PDF双方に明記しています。ハルシネーション対策としてプロンプト側でも工夫していますが、それでも「AIが出した数字がそのまま独り歩きする」リスクはゼロにはできないため、期待値のコントロールを設計段階から意識しました。
苦労した点
- プロンプト設計: 業種・規模・機能要望が千差万別な自然文入力から、一貫した粒度で見積もりを出すのは思ったより難しく、何度も調整を重ねました
- 精度と納得感のバランス: 精度を求めすぎるとヒアリング項目が増えてUXが悪化し、簡易にしすぎると見積もりの信頼性が下がる、というトレードオフがありました
このあたりの具体的なプロンプト内容やスコアリングロジックは、サービスの差別化要素でもあるため今回は割愛しますが、アーキテクチャや設計判断で気になる点があればコメントで聞いてください。
まとめ
「AI × 見積もり」という組み合わせは、要件を明文化するハードルを下げる効果があると感じています。FastAPIとGemini APIのシンプルな組み合わせでも、非同期処理とコスト管理さえ押さえれば実用に足るものが作れました。
実際の画面はこちらから確認できます → https://dreami.jp