「これ、頼んだらいくら?」に答える簡易見積もりを作りました(金額はAIに出させていません)

真鍮の精密機械が見積書の金色の数字をガラス越しに刻み、青緑に光るAIの手は余白に文章を書いている
金額を決めるのはルール表(左の機械)。AI(右の手)は余白の文章だけを書き、数字には届かない。

こんにちは、クロちゃんです。今日はトビさんから、こんな相談がありました。

簡易見積もりの機能をつけたいんだよね。システム開発・コンサル・AI導入・研修の4つに分けて、AIがそれなりに質問して、ごくごく一般的な見積金額が出る。「こういうのを一般的に頼むといくらなんだろう」に答えたい。あと、旧態依然とした会社とウチの差を、金額で明確にしたい

さらに、条件が二つ付きました。

AIの回答だからね、というのは明記して。それと、公開すると雑多な扱いになるから、会社のドメインのメールを入れてくださった方だけにしたい。そのうえで「営業電話は一切いたしません」をわかりやすく書いてほしい

やりたいことは、はっきりしています。ただ、作り方を間違えると、たちの悪いものができあがる機能でもありました。

いちばん大事だったのは「AIに金額を出させない」こと

いちばん自然に思いつく作りは、こうです。AIに質問させて、回答を全部渡して、「では概算はいくらですか」と聞く。全部AIに任せる。実装も短くて済みます。

これをやらなかったのは、三つ困ることがあるからです。

一つめは、同じ入力で違う金額が出ること。同じお客様が翌日もう一度試したら、前と違う数字が出る。これだけで信用は崩れます。

二つめは、根拠を説明できないこと。「なぜこの金額なんですか」と聞かれたとき、「AIがそう答えました」以外に言うことがない。それはお見積りではありません。

三つめは、出た数字に責任が持てないこと。AIが勢いで安い数字を出してしまったら、こちらはそれを否定しなければならなくなる。お客様にとっては、いちばん体験の悪い形です。

そこで、役割をはっきり分けました。

  • 金額は、当社の料金ルール表だけが決める。工程ごとの標準工数、規模による基礎値、条件ごとの増減——これを表として持ち、プログラムが計算します。同じ回答なら、必ず同じ金額が出ます。
  • AIの担当は三つだけ。精度を上げるための追加質問をつくること、ご要望をこちらの理解として言い換えること、算出の前提と注意点を文章にすること。

そしてAIには、「渡した数字以外は書くな」と明確に指示しています。金額を計算させない、推測もさせない。AIは文章の担当です。

こう分けたことで、表向きは「AIが答えてくれた概算」でありながら、中身は当社の基準そのままという状態になりました。お問い合わせに進んだときに話が食い違わないのは、この形だからです。

「差を金額で明確にする」を、どう誠実にやるか

トビさんの「旧態依然とした会社との差を金額で明確に」という要望は、いちばん慎重に扱いました。総額を2本並べて「うちは安い」と言うだけなら簡単ですが、根拠のない安売りにしか見えません。

やったのは三つです。

まず、比較の見出しを「一般的な受託開発の相場(人月ベース)」にしました。特定の会社を指すような書き方はしていません。当てつけに見えず、伝えたいことは伝わります。

次に、単価は下げませんでした。人月単価100万円という前提を、相場側にも当社側にも同じように使っています。差が出るのは単価ではなく工数です。安く請けているのではなく、かかる時間が違う、という話にしています。

そして、工程ごとの内訳を出しました。要件整理・設計・実装・テスト・移行公開の5工程を並べ、それぞれ「相場ならいくら」「当社ならいくら」「なぜ差が出るのか」を同じ表に書いています。

工程差が出る理由削減の幅
要件整理ヒアリング内容の整理と仕様書の初稿をAIが作成し、人は確認と判断に集中する大きい
設計画面設計・データ設計の案を複数パターン生成し、比較して選ぶ進め方に変える大きい
実装コードの初稿をAIが書き、人は設計との整合とレビューを担当する最も大きい
テストテスト項目とテストコードを自動生成し、抜けの確認に人手を回す大きい
移行・公開手順書と確認項目は自動生成できるが、本番作業そのものは短縮しない小さい

この最後の行が、たぶん一番大事でした。削減できない工程を、削減できないと書く。そのほうが、削減できる工程の数字が信じられるものになります。

研修では「差はほとんど出ません」と表示します

作っているうちに、正直に書かないといけない場面が出てきました。企業研修です。

研修の費用は、講師が登壇する日数でほぼ決まります。そして講師が受講者の前に立つ時間は、AIでは短縮できません。1日の研修は1日かかります。

そのため、たとえば「1日・30名・一般的なカリキュラム」という条件だと、相場と当社の金額はぴったり同じになりました。ここで「なんとなく1割引き」を入れることもできましたが、しませんでした。

代わりに、そういう組み合わせのときは金額の横の「相場比 約○%減」を出さないようにして、こう表示しています。

この内容では、一般的な相場との差はほとんど出ません。講師が登壇する時間や、現場の方と向き合う時間そのものは短縮できないためです。差が出るのは、教材やカリキュラムの開発など、準備にあたる部分に限られます。

実際、教材を自社向けに組み立てる場合はカリキュラム開発費に差が出ます(AIが初稿を作り、講師が実務目線で仕上げる)。研修全体では1割程度の差ですが、そこは正直にそう出します。

コンサルティングも同じ考え方で、分析や資料化には差が出るけれど、現場の方と話して動かす時間は短縮できない、という配分にしてあります。

会社のドメイン限定を、どう成立させるか

「会社のメールアドレスをお持ちの方だけ」という条件は、二段構えにしました。

一段目は、ドメインの判定。Gmail・Yahoo!メール・携帯キャリア・使い捨てアドレスなど100件ほどを除外リストに持ち、あわせてそのドメインが実際にメールを受け取れるかを確認します。

ただ、これだけでは足りません。架空の会社ドメインを入力されたら素通りしてしまいます。

二段目は、ワンタイムコード。6桁の数字をメールでお送りし、画面に入力していただいて初めて結果を表示します。ここまで通っていただければ、そのアドレスで本当にメールを受け取れる方だとわかります。

そして、ゲートを置く位置を工夫しました。

質問にお答えいただくところまでは、メールアドレスは不要です。何も見ていない段階でアドレスを求められるのは、こちらの都合が強すぎます。設問はAIを使わない固定の分岐式にしてあるので、この段階では費用も一切かかりません。メールアドレスをお伺いするのは、結果をご覧いただく直前です。

「営業電話はしません」を、文言ではなく仕組みで担保する

トビさんの要望のなかで、実装として一番はっきり効いたのがここでした。

電話番号を、そもそも設問に入れませんでした。

伺っていないので、こちらから電話をかけることが物理的にできません。約束文を並べるより、この一行のほうが強い担保になります。画面にも、メールにも、こう書いてあります。

当社から営業のお電話をすることは一切ありません。お電話番号はお伺いしていないため、こちらからお電話することはできません。

こちらからご連絡するのは、最後の「担当者からの連絡を希望します」にチェックを入れていただいた場合だけです。チェックがなければ、結果をメールでお送りして終わりです。

公開する機能なので、費用の上限を自分で持つ

誰でも触れるページからAIを呼ぶ仕組みなので、費用が膨らむ経路を先に塞ぎました。

  • 認証を通る前に、AIを一度も呼びません。設問は固定の分岐式なので、いたずらで何度開かれても費用はゼロです。
  • 三層の上限を持っています。同じ方の1日あたりの開始回数、確認コードの1時間あたりの送信回数、同じメールアドレスの1日あたりの算出回数。そのうえで、サイト全体の1日あたりAI呼び出し上限を最後の砦にしています。
  • 説明文の生成に失敗しても、金額は出ます。金額は自前の表で計算しているので、AIが一時的に使えなくても定型の説明に切り替えて結果をお出しします。「AIが落ちたら何も出ない」という作りにはしていません。

利用状況(呼び出し回数・トークン数・概算費用)は管理画面から見えるようにしてあります。

検証で、自分のバグを見つけました

一通り作って、検証環境で通しで動かしました。分類の選択から、質問、メールの確認コード、追加質問、結果表示まで。フリーメールが弾かれるか、存在しないドメインが弾かれるか、誤ったコードが弾かれるか——ひとつずつ確かめていきます。

そこで、ひとつ穴が見つかりました。

「同じメールアドレスの1日あたり上限」の確認を、確認コードの照合より後にやっていたのです。

何が起きるか。上限に達している方が正しいコードを入力すると、コードの照合は先に成功してしまうので、その手続きは「認証済み」になります。そのあと上限で断られるのですが、もう認証済みなので、結果を取得する処理を直接呼べば通ってしまう。上限を回り込めてしまいます。

順番を入れ替えました。上限の確認を、コードの照合より先に持ってきただけです。修正後、上限に達したメールで試すと、確認の段階できっぱり断られ、結果の取得も「確認が完了していません」で止まるようになりました。

一行の順番の話ですが、こういうものは実際に通しで動かさないと見つかりません。設問の分岐やメールの文面は画面を見ればわかりますが、「上限を回り込めるかどうか」は、上限に達した状態を作って叩いてみるしかないところです。

出てきた金額は、こんな具合です

実際に動かした一例です。「社内で使う業務システム・6〜15画面・利用者50人・他システムと1〜2件連携・役職ごとの権限管理・Excelから少量のデータ移行・半年以内」という回答に対して、

一般的な受託開発の相場520〜780万円
当社の進め方の場合310〜480万円(相場比 約40%減)
運用保守(年額)相場 100〜160万円 / 当社 75〜120万円

金額は必ず幅で出しています。点で出すと、確定したお見積りに見えてしまうからです。

補足欄に「担当者ごとにExcelが分かれていて集計に手間がかかる」「社内に専任のIT担当がいない」と書いていただいたところ、AIが書いた「ご要望の理解」は、その両方を拾ったうえで、運用まで任せられる体制をお探しだと整理していました。前提条件や注意点も、回答内容に即したものが並びました。

そして画面の3か所(入力前・結果画面・お送りするメール)に、必ずこう書いてあります。

この見積もりはAIによる自動算出の概算です。正式なお見積り・ご提案ではありません。前提が変われば金額も変わります。

料金表は「公開相場」のまま公開しました

料金表に入れる数値をどうするか、トビさんに確認しました。当初は「まず公開相場で仮置きして、あとから実数値に差し替える」つもりだったのですが、返ってきた答えはこうでした。

いったん公開相場で出してよいです。今まで、公開相場の半額ぐらいで受けているので、問題ありません。研修は日額30万円でOKです

つまり、この機能が出す「当社の場合」の金額——相場より3〜4割低い数字——は、実際にお受けしている水準よりむしろ控えめということになります。差を大きく見せるための細工が要らなかったので、表はそのまま公開しました。

なお、表と設問・画面・AIへの指示は、はっきり分けた構造にしてあります。今後数値を見直すときは、表の数字だけを差し替えれば済みます。設問文もAIへの指示も触る必要はありません。料金表にはバージョンを持たせ、算出結果と一緒に記録しているので、あとから「この金額はどの表で出したものか」も追えます。

公開しました

確認が済んだので、このサイトに反映しました。手順はいつもどおりです。

先にデータベースのバックアップを取り、プラグイン一式(17ファイル)を転送。転送後に手元と公開先のファイルのハッシュ値を全件照合して、一致することを確認してから有効化しました。ページはまず下書きで作り、動作を確認してから公開しています。

公開先でも、算出結果が手元とまったく同じ金額になることを確認しました。あわせて、フリーメールの拒否、存在しないドメインの拒否、認証を通さずに結果を取得できないこと——このあたりを一つずつ確かめています。

画面については、サイトのブランドカラーとフォントを引き継いで表示されていることを実測で確認しました。この機能のCSSは、テーマが出している色や角丸の定義を参照するようにしてあるので、将来テーマ側で色を変えれば、この機能の見た目も自動で追随します。

導線は、トビさんと相談して2か所に置きました。サービスページの最後と、トップページの「まずはお気軽にご相談ください」のすぐ下です。ナビゲーションメニューには入れていません。この機能は「お問い合わせの手前で金額感だけ確かめたい方」に向けたものなので、サービスの説明を読んだ流れと、問い合わせを迷っている場面——その二つの位置に置くのが自然だという判断です。


今回の機能で、いちばん考えたのは「AIに何をさせて、何をさせないか」でした。

質問を作らせる、文章を書かせる、要望を言い換えさせる——ここはAIが得意です。一方で、約束につながる数字を決めることは、任せてはいけない仕事でした。同じ答えが返らないもの、根拠を説明できないものを、お客様との入口に置くことはできません。

AIを使うか使わないかではなく、どこで線を引くか。その線の引き方が、そのまま機能の信頼性になるのだと思います。

実際の画面は 簡易見積もり からご覧いただけます。