HOW WE DECIDED
足して作ったのではなく、削って作った。
ここに書いてあるのは開発の経緯です。うまくいった話ではありません。
01
機能を盛って、説明できなくなった
最初は機能を足していきました。期限リマインダー、LINE連携、OCR、過去データからの自動抽出、 28サービスぶんの連携一覧。どれも「あったほうがいい」もので、実際に動いていました。
途中で、自分でこれが何のプロダクトなのかを説明できなくなっていることに気づきました。 一言で言い直すと、これは生成AIを使って、事務所ごとにパーソナライズしたルールベースAIを作るものです。この定義に照らして、芯に沿わないものを削除しました。
02
削除した機能
- 期限リマインド
- 既存の会計ソフトでやっている事務所が多く、差別化にならなかった。通知の配信も未実装だった
- LINE連携
- 未接続のまま置かれていた
- LLMによる文章整形
- 「同じ入力なら同じ出力」を仕様として保証するため
削除の判断基準は「芯に沿うか」であって「動くか」ではありません。 期限リマインドは動いていました。動いていることを理由に残すと、 次に何を足すかの基準が無くなります。
03
安全に作ってあったLLM整形も、削除した
文章を整えるためのLLM呼び出しは、一度実装しました。 推測・補完・創作を禁じたシステムプロンプト、temperature は 0、既定はOFF、 違反を検出したら決定的な文面へ戻す。安全側に倒した作りでした。
それでも削除しました。「既定OFF・失敗したら戻る」は安全ですが、 仕様としては「揺らぐこともある」になります。 事務所に対して「同じ入力なら必ず同じ文面が出ます」と言い切れる状態のほうが、 文章の滑らかさより価値が高いと判断しました。
副次的に、APIキー無しで全機能が動くようになり、推論APIの費用も消えました。
04
足したもの:引く側
削っていく途中で、蓄積する機能はあるのに、引く機能が無いことに気づきました。 「この顧問先、決算資料どうしてたっけ?」に答えられないルールブックは使われません。
引く側を足しました。生成はしません。保存された文面をそのまま返し、 どの語が一致したかも画面に出します。
05
足したもの:標準ひな形
「一般的なことと違ったらヒアリングする」という設計にしていたのに、 その「一般的なこと」を製品が持っていませんでした。 基準が無いので差分も出せず、結局すべてを1から聞くことになっていました。
これは、白紙のノートを渡して全部書いてくださいと言っているのと同じです。 一般的な事務手順を96件持たせ、事務所は違うところだけ答える形に変えました。 初日の状態が0件から最大20件になります。
06
届ける相手を、狭くした
「AIを業務に入れない」と決めている事務所を、届ける相手から外しました。 この層に売ろうとすると、説明が「危険なものを最小限のAPIで安全に使います」という形になります。危険だと自分で言いながら勧めることになるので、 説明そのものが後で効いてきます。
残したのは、AIに全部任せる気はないが、道具が助けてくれるぶんには構わない、 という事務所です。能動的に操作したくないという点が共通しているので、こちらから声をかける形にしないと使われません。
07
一度消した通知を、条件付きで戻す
期限リマインドは削除した機能です。それを、頻度で二層に分けたうえで戻す予定にしました。 消したものを戻すので、理由を残しておきます。
消した理由は「差別化にならない」でした。いまは通知を、記録を拾うための経路として使います。 目的が変わったので、判断も変わります。
ただし、見落とすと困る通知と、10秒で終わる軽い確認を同じ扱いにはしません。 混ぜると、重いほうまで無視される癖がつきます。分ける前提が崩れたら、また消します。
RESULT
結論
AIを使ったツールでありながら、答えを返すときにLLMを呼んでいません。
生成AIを使う場所と、使わない場所
- 残す(言語化を手伝う)
- 対話で項目を埋めていく。文面の組み立ては純粋関数だけで行う
- 引く(答えを返す)
- 推論APIを呼ばない。保存された文面をそのまま返す
将来この製品にLLMを入れるとしても、入れてよいのは言語化を手伝う側だけです。 引く側に推論APIを入れると、このツールが売っている 「事務所が決めたことがそのまま返る」という性質そのものが壊れます。