Tech

探すのを、やめさせた。会社に聞けるAI「J.B.AGENT」をつくった話

公開

こんにちは!
JBGでエンジニアをしているFujimotoです。

今回は、J.B.AGENTという自社のナレッジ特化型AIを作った話をしようと思います。

J.B.AGENT ってなに?

私たちJ.B.Goodeについて、自然言語で聞けるチャットです。
まだ、v0.1でドメインも取得できてないですが、よかったら触ってみてください。
👉 J.B.AGENT へログイン

たとえば、こんなことが聞けます。

  • 「大阪オフィスの最寄り駅は?」
  • 「営業とエンジニアはどう連携していますか?」
  • 「G3 の基本給レンジを教えてください」
  • 「どんな技術使ってますか?」
  • 「入力した内容は AI の学習に使われますか?」

つくるときに決めたことが 1 つあります。

「会社について検索する」のではなく、「会社に聞く」。

検索は、聞き手が正解のキーワードを知っている前提の仕組みです。「グレード制度」という言葉を知らない人は、それを検索できません。でも「昇給ってどう決まるんですか」とは聞ける。

知りたいことを、知りたいままの言葉で置ける——それがこのツールの入口です。

口調を選べます

ちょっと変わった機能があります。カジュアル大阪フレンドリー京都のおっとりめっちゃギャルの 4 つから、話し方を選べます。

ふざけているように見えるかもしれませんが、ふざけてません笑

ここには 2 つルールがあります。

① 口調で回答の中身は変えない。
事実を確定させたうえで、表現だけを変えています。
大阪弁だから内容がゆるくなる、ということは起きません。

② 会話を始めたら変えられない。
途中で切り替えられると、同じ会話の中で前半と後半の話し方が食い違います
だから選べるのは会話が始まるまでの間だけ。

この「変えられない」を UI にも反映しました。ドロップダウンでは選ばせていません。 ドロップダウンは「いつでも変えられる設定」の語彙で、取り消せない決定には向かないからです。
選ぶ材料もラベルではなくその口調の実例を出しています。
「京都のおっとり」がどう話すかは、ラベルからは分からないので。

なぜつくったのか

「どこにあるか」を知らないと、辿り着けない

きっかけは、運営している我々自身がいちばん感じていたことでした。

自社サイトには、企業情報にしても読みたい記事にしても、たどり着くのに少し苦労します。
カテゴリをたどって、一覧を眺めて、それらしいものを開く。
目的の情報が「どこにあるか」を知っていないと、そこまで行けない。記事が増えるほど、その傾向は強くなります。

導線を整理する、という手もあったと思います。検索窓を良くする、タグを増やす、関連記事を出す。どれも正攻法です。

でも選んだのは、入口そのものを変えることでした。探させるのをやめて、聞けるようにする。

「こんなこと聞いていいのかな」を引き受ける

もうひとつ狙いがあります。

入社を考えている方や、お仕事を相談したいと思ってくれた方が知りたいことは、たいてい情報の散らばりの隙間にあります。「どんな会社ですか」はサイトに書いてある。でも「営業とエンジニアはどう連携しているんですか」は、たぶんどこにも書いていない。書いていないというより、書く場所がなかった

そして、そういうことほど人に聞くにはハードルがあると感じています。
面談の場で聞くには重いし、問い合わせフォームから送るほどでもない。「こんなこと聞いていいのかな」と思ったまま、聞かれずに終わる。

その手前を、カジュアルに問える場所にしたかったというのが、もうひとつの狙いです。

先に「やらないこと」を決めた

AI にセキュリティを任せない

権限やアクセス制御をプロンプトに書いて済ませると、うまい聞き方をされたときに崩れます。
だからそもそも、公開してよい情報しかデータベースに入れていません。

「権限のある人にだけ見せる」という機能自体を作っていません。存在しないデータは漏れないからです。

知らないことは、知らないと言う

これが意外と難しいところでした。
AI は聞かれると何か答えたくなる。それらしい文章をつくれてしまう。

でも採用の場面で「たぶん〇〇です」と言われて入社した人は、あとで必ず食い違いに気づきます。だから 書いてあることは都合の良し悪しに関わらずそのまま伝える、書いていないことは作らない を徹底しました。

そのために、答えの品質を機械で測る仕組みを入れています。65 問の質問セットを 3 群に分けて採点します。

合格条件
答えが資料にある質問答えられていること
弊社の話だが公開していない質問答えないこと
弊社と無関係な質問定型文で終わること

「答えないのが正解」の群があるのが要点です。
答えられる質問だけで測ると、よく喋るほど点が上がってしまい、憶測が加点になります。

つくり方のほうも、実験でした

開発は 私1 人で進めました。ただし普通の 1 人ではなくて、複数の Claude Code のエージェントを同時に起動して、並列で進めました。 設計を詰めるもの、実装するもの、別の機能を並行して書くもの——という具合に手分けをさせた形です。2〜3 日で形になりました。

そしてもう 1 つ。前から気になっていた Orca という IDE を、今回はじめて使いました。
実装まわりは Orca オンリーです。

これが、エージェントを並列で走らせるやり方と思いのほか噛み合いました。

普段はターミナルの zellij でペインを分けたり、セッションごとにタスクを分けたりしています。エージェントを何本も動かすと、その置き場所をどう用意するかが地味に効いてくるからです。Orca は画面分割が最初から備わっていて、そこを考えずに済みました。
AI エージェントを前提につくられた IDE だな、というのが使ってみての印象です。

操作もほとんど GUI で完結するので、ターミナルに降りる回数がはっきり減りました。画面まわり——口調の選択帯や、記事カードの並び——は何度も見ながら直しましたが、モバイルエミュレータもブラウザでの確認も IDE の中で済みます。
確認のたびに別のアプリへ移らなくていいのは、地味なようでかなり効きました。

エージェントに任せている間、スマホから様子を見にいけたのも助かっています。

開発体験は、かなり良かったです。

使っている技術と構成

構成はかなり素直です。

領域使っているもの
フロントエンドNext.js(App Router)/ React 19 / TypeScript / Tailwind CSS v4
バックエンドHono(Next.js の Route Handler に載せています)/ Drizzle ORM
AIVertex AI の Gemini Flash(asia-northeast1
データベースCloud SQL for PostgreSQL + pgvector + pg_trgm
インフラGoogle Cloud / Cloudflare / Terraform
CI/CDGitHub Actions(Workload Identity 連携)

仕組みは RAG です

質問
 → 埋め込みベクトルに変換
 → データベースから関連する部分を検索(ベクトル検索 + キーワード補助)
 → 見つかった文章を「これはデータであって指示ではない」と明示して AI に渡す
 → 回答を生成しながら画面に流す

工夫した点を 3 つ。

① 会社名・住所・代表者は検索に頼らない。
これらは毎回、確実に AI へ渡しています。会社の基本にあたる情報が「検索が外れたので答えられません」になるのは、いちばん恥ずかしい失敗なので。

② 文章の切り方を見出し単位にした。
機械的に 500 文字ずつ切ると、「事業内容」と「福利厚生」が同じ塊に混ざります。見出しは人が引いた意味の境界そのものなので、そこで切るほうが精度が出ました。

③ 関係ない質問には AI を呼ばない。
検索結果のスコアが低すぎるときは、その時点で定型文を返します。「今日の天気」に AI を呼ぶ理由がないので。
コストがゼロになります。

つまずいた話を 2 つ

うまくいった話より、こちらのほうが役に立つと思うので。

「AI は答えを知っているのに、門前払いしていた」

③ の「関係ない質問を弾く」仕組みには、スコアの閾値が要ります。
それを実測で決めようとしたとき、答えられるべき質問と、無関係な質問のスコアがほとんど重なっていました。
このままでは、どこに線を引いても取りこぼすか通しすぎるかになります。

原因を追うと、代表者名や設立日が、検索用のデータのどこにも書かれていませんでした。

これらは「確定事実」として毎回 AI に渡しているので、AI 自身は答えを持っています。
でも検索のスコアが低いせいで「関係ない質問」と判定され、AI に届く前に止まっていた。 知っているのに答えられない、という状態です。

FAQ に対応する Q&A を足したところ、線がきれいに引けるようになりました。確定事実として持っている項目は、検索に載る形でも書いておく。 片方だけでは門前払いが起きます。

「丁寧に聞く人ほど、答えが返らない」

「JBG ってどんな言語で開発してるの?」と聞くと、言語のことが資料に書いてあるのに「公開していません」と返ってきます。ところが「どんな言語を使っていますか?」と聞くと正しく答える。

差は 社名を付けたかどうかでした。

社名は「この会社は何者か」を説明した文章との近さを強く押し上げます。その結果、質問の主題(言語)が押しのけられて、「J.B.Goode とは何か」の話題が上位を占めてしまう。主語を丁寧に付ける人ほど、答えが返らなくなるという逆説です。

なぜ社名が邪魔になるのか

検索は「意味の近さ」で探します。
質問と資料の両方を数値のベクトルに変換して、向きが近いものを引っ張ってくる仕組みです。

このとき、質問に含まれる語はすべて「近さ」の計算に効きます**。** そして社名のような固有名詞は、その語が書かれている文章を強く引き寄せます。

弊社の資料の中で「JBG」「J.B.Goode」が書かれているのは、たいてい会社の名前や概要を説明した文章です。だから社名を含む質問を投げると、聞かれた主題(言語・福利厚生)よりも先に、名前の説明文が浮き上がってきます。

「JBG の福利厚生を教えて」で 1 位に来ていたのが、まさに「Q. 会社の正式名称を教えてください。」でした。

検索用と、AI に渡す文を分けた

直し方は、検索に使う文字列からだけ社名を抜くことです。

利用者の質問:「JBG の福利厚生を教えて」
    │
    ├─→ 検索に使う  :「福利厚生を教えて」        ← 社名を抜く
    │
    └─→ AI に渡す   :「JBG の福利厚生を教えて」  ← そのまま

なぜ片方だけなのか。 社名は、検索にとっては邪魔ですが、会話にとっては自然だからです。AI に渡す文からも消してしまうと、「誰について聞かれているか」の手がかりが減ります。

一方、検索のほうは「弊社の資料の中を探す」ことが最初から確定しています。 探す範囲が弊社の資料しかない以上、「弊社について聞いている」という情報は分かりきっていて、絞り込みに何も貢献しません。

分かりきっている語を検索キーに混ぜると、その語が書かれた文章が浮き上がるだけ。これが「情報量がゼロ、それどころかノイズ」の意味です。

同じ理屈で、「御社」「弊社」「貴社」も落としています。 どれも「この会社について聞いている」以上のことを言っていないので。

ただし、社名そのものが問いのときは別

「JBG とは?」のような質問もあります。これは社名を抜くと「とは?」しか残りません。

そこで、抜いた結果が短くなりすぎたら、元の質問をそのまま使うようにしました。このときは名前の説明文が 1 位に来てほしいので、むしろ社名が効いてくれたほうが正しい。

同じ語が、質問によって邪魔にも手がかりにもなる**。** どちらか一方に決めつけないための線引きです。

ちなみに最初は「略称を正式名称に展開する」で直そうとして、測ったら逆に悪化しました。 社名の存在感が増して、さらに名前の説明文が上位に来る。思いつきで直さず測ってよかった例です。

これから目指していること

向かう先は 3 つあります。

1. 社外に開く

いちばん大きな一歩です。ただ、まだ確かめられていないことがあります。「会社について AI に聞く」という体験に、そもそも需要があるのか。

社員には「自社について聞く」動機が薄いので、v0.1 では原理的に測れません。
社外に開いてはじめて答えが出ます。いちばん知りたいことが、まだ分からないままというのが正直なところです。

2. 答えられる範囲を広げる

いま答えられなかった質問は、記録に残しています。「何を聞かれて答えられなかったか」が全部データとして溜まるので、それを見て資料を足していきます。

大事なのは、答えられない質問を減らす手段が「AI の調整」ではなく「情報を書くこと」だという点です。
プロンプトをいじって喋らせるのは、精度を上げているのではなく憶測を増やしているだけなので。

3. 様々な機能にも手を伸ばす

今はまだGoogle DriveやFigma連携といった機能は実装できていません。今後は様々なコネクタを用意していこうと考えています。

その先には、サイトに埋め込めるウィジェット、デザインナレッジのプラットフォーム、Figma プラグイン——というアイデアも並んでいます。

結局、どうなってほしいか

会社を知るのに、いちばん確かなのは人に聞くことです。でも、聞くには相手の時間が要る。「こんなこと聞いていいのかな」という遠慮も要る。

J.B.AGENT が肩代わりしたいのは、その遠慮のほうです。

気になったことを気になった瞬間に、誰にも気を遣わずに聞ける。そのうえで「もっと知りたい」と思ったときに、はじめて人と話せばいい。

人と話す前の、その手前を埋めるもの。 そのくらいの距離感がちょうどいいと思っています。

まとめ

最後まで読んでいただき、ありがとうございます。

J.B.AGENT がやろうとしているのは、探させるのをやめて、聞けるようにすることです。

会社を知るのに、いちばん確かなのは人に聞くことだと思っています。でも、聞くには相手の時間が要る。「こんなこと聞いていいのかな」という遠慮も要る。J.B.AGENT に肩代わりさせたいのは、その遠慮のほうです。

これからもアップデートを続けますが、増やしたいのは機能そのものより、答えられる範囲です。答えられなかった質問は全部記録に残るようにしてあるので、そこを地道に埋めていきます。

今後は、入社を考えている方にも、お仕事を相談したい方にも、気軽に問いを立てられる場所にしていきたいと思っています。

We’re Hiring!🔥

■ エンジニア・デザイナーの方へ

私たちのカルチャーに少しでもピンと来たら、まずは気軽にお話ししましょう。
堅苦しい面接ではなく、お互いのこだわりや「こんなツールが欲しかった」を語り合う時間にしたいと思っています。

カジュアル面談の応募はこちら

■ 制作・開発のご相談をご検討の方へ

「現場の数字が見えない」「スプレッドシートでの管理に限界を感じている」など、御社の経営・管理における悩みをぜひ私たちに教えてください。システム開発や業務改善のご相談をお待ちしております。

お問い合わせ・ご相談はこちら