社内の開発者から出る「この共通部品・社内APIはどう使うか」「この書き方は開発規約に合うか」の質問に、開発規約・設計書・社内APIの仕様を根拠にチャットで答える
開発者が「この社内APIはどう呼ぶか」「この書き方は規約に合うか」をチャットで聞くと、プロジェクトが使っている版を台帳から引き、その版の仕様と開発規約・設計書から根拠付きで答えます。判断の要るものは共通基盤チームへ回します。
- 生成AI
- Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 連携・自動化
- Python
- 対象業界
- EC/IT・SaaS/小売/金融
- 対象部門
- 情報システム/研究開発
- 対象業務
- 問い合わせ対応/情報検索
- 主な課題
- 問い合わせが多い/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 対応スピード向上/属人化解消/教育コスト削減
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 開発者が、やりたいことと書いたコードの一部を、質問用のチャンネルに書き込む
- 担当者が、どのプロジェクトか、社内APIと共通部品のどの版を使っているかを聞き返す
- 社内Wiki、仕様のページ、README を開いて、該当する箇所を探す
- 設計書を見る必要があれば、そのシステムの設計書に自分が入れるかを確かめて開く
- 使い方と、該当する規約の条項を答え、必要ならコードの例を書く
- 規約に無い書き方や、規約の例外を求めるものは、チームで相談して答える
- よく出る質問は、気づいた人が社内Wikiのよくある質問に足す
- 人開発者が、社内チャットの開発支援ボットに質問する(例:「顧客APIで退会済みの顧客を除いて一覧を取りたい。プロジェクトは EC-CART」)
- 自動中継プログラムが、書き込んだ人の ID とプロジェクトのコードを受け取る
- 自動質問の文に、パスワードやアクセスキーに見える文字列が無いかを確かめ、あれば質問を止めて消すよう促す
- 自動プロジェクトの台帳から、使っている社内APIと共通部品の版を引く
- 自動質問を「使い方」「規約」「その他」に分け、足りない条件(使う社内APIや部品の名前、言語)を選択肢で聞き返す
- 自動回す条件(規約の例外、まだ公開していないAPI、認証と暗号の実装、障害中の不具合)に当たれば、答えを作らずに共通基盤チームへ回す
- 自動版と文書の種類で絞り込み、Agent Search(旧 Vertex AI Search)の answer メソッドが、質問した人が見られる文書だけから根拠付きで答える
- 自動回答に出たAPIのパスと部品の関数の名前を、その版のAPIの一覧と照らし、無い名前なら回答を出さずに回す
- 人開発者は、根拠の仕様のページと規約の条項を開いてから実装する
- 人共通基盤チームは、回ってきた質問だけを、聞き取り済みの条件を見て判断する
各工程の詳しい説明を読む
- 開発者が、やりたいことと書いたコードの一部を、質問用のチャンネルに書き込む
- 担当者が、どのプロジェクトか、社内APIと共通部品のどの版を使っているかを聞き返す
- 社内Wiki、仕様のページ、README を開いて、該当する箇所を探す
- 設計書を見る必要があれば、そのシステムの設計書に自分が入れるかを確かめて開く
- 使い方と、該当する規約の条項を答え、必要ならコードの例を書く
- 規約に無い書き方や、規約の例外を求めるものは、チームで相談して答える
- よく出る質問は、気づいた人が社内Wikiのよくある質問に足す
(a)版を聞き返すところから始まる。 「顧客APIで退会者を除きたい」と書かれても、v1 と v2 で項目の名前も絞り込みの書き方も違います。担当者はプロジェクトの台帳を開き直し、ここで数分かかります。 聞き返さずに答えると、別の版の書き方を教えてしまいます。
(b)古い版の情報が、検索で先に出る。 社内Wikiのよくある質問には、v1 の頃に書いた答えが残っています。開発者が自分で探して古い答えをまねると、レビューで指摘されるか、本番で動きません。
(c)規約に書いてあるのに、質問が来る。 例外の扱い、ログに出してよい項目、命名の決まりなど、規約にそのまま書いてある内容を説明する質問が、全体のかなりを占めます。それでも開発者が規約を開かないのは、百ページを超える規約のどこを見ればよいかが分からないからです。
(d)判断の要る話が、普通の質問に混ざる。 「納期が近いので、この規約は今回だけ外したい」は使い方の質問ではなく、規約の例外の申請です。 チャットの流れに埋もれると、誰も決めないまま実装が進みます。
- 【人】 開発者が、社内チャットの開発支援ボットに質問する(例:「顧客APIで退会済みの顧客を除いて一覧を取りたい。プロジェクトは EC-CART」)
- 【自動】 中継プログラムが、書き込んだ人の ID とプロジェクトのコードを受け取る
- 【自動】 質問の文に、パスワードやアクセスキーに見える文字列が無いかを確かめ、あれば質問を止めて消すよう促す
- 【自動】 プロジェクトの台帳から、使っている社内APIと共通部品の版を引く
- 【自動】 質問を「使い方」「規約」「その他」に分け、足りない条件(使う社内APIや部品の名前、言語)を選択肢で聞き返す
- 【自動】 回す条件(規約の例外、まだ公開していないAPI、認証と暗号の実装、障害中の不具合)に当たれば、答えを作らずに共通基盤チームへ回す
- 【自動】 版と文書の種類で絞り込み、Agent Search(旧 Vertex AI Search)の answer メソッドが、質問した人が見られる文書だけから根拠付きで答える
- 【自動】 回答に出たAPIのパスと部品の関数の名前を、その版のAPIの一覧と照らし、無い名前なら回答を出さずに回す
- 【人】 開発者は、根拠の仕様のページと規約の条項を開いてから実装する
- 【人】 共通基盤チームは、回ってきた質問だけを、聞き取り済みの条件を見て判断する
4番目が、この設計の分かれ目です。 版は台帳の値で決まり、AIの判断は入りません。 AIに任せると、「v1 では〜、v2 では〜」と両方を並べるか、新しい版の書き方だけを返します。
8番目を後段の検査に置いているのも、意図してのことです。 モデルは、それらしいパスや関数の名前を作ることがあります。名前を一覧と照らせば、存在しないAPIの呼び方を教える回答を、文の読み方に頼らずに止められます。
02今回想定するシステム構成
開発支援ボット(社内チャットの質問用チャンネル) ▼【トリガー】質問の書き込み(社員・協力会社の ID 付き) 中継プログラム(Python、Cloud Run) ├──▶ 秘密の文字列の検知 → 質問を止める ├──▶ プロジェクトの台帳:プロジェクト → 社内APIと共通部品の版 ├──▶ 質問の種類の判定 → 聞き返しの選択肢 ├──▶ 回す条件 → 共通基盤チームの待ち行列 ▼ Agent Search(Vertex AI Search)── answer メソッド │ データストア:開発規約+設計書+社内APIの仕様(版ごと) │ +共通部品の説明(版ごと)+過去の回答 │ アクセス制御:文書ごとに見てよいグループ │ 絞り込み:doc_type/api/api_version/lib_version ▼ 中継プログラム ── 回答のパスと関数の名前がその版の一覧にあるかを確かめる ├──▶ 回答・根拠を返す └──▶ 一覧に無い・答えられない → 共通基盤チームの待ち行列
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Vertex AI Search(Agent Search)の answer メソッド | Azure AI Search、Amazon OpenSearch Service |
| 生成AI | Gemini(answer メソッドの回答の生成に使うモデル) | ─ |
| 連携 | 中継プログラム(Python。Cloud Run で動かし、チャット・台帳・検索・待ち行列をつなぐ) | Node.js で同じものを書く |
| 認証 | 社内の ID 基盤(Google の ID と同期し、協力会社の人も同じ基盤で管理) | Workforce Identity Federation で外部の ID を使う |
| 保管 | Cloud Storage(規約・設計書・仕様・説明の原本とメタデータ) | ─ |
プロジェクトの台帳と、社内APIの一覧は、新しく足すものではありません。 中継プログラムは台帳から版を、OpenAPI の定義ファイルからその版のパスの一覧を読むだけで、どちらにも書き込みません。最初の準備は、台帳の「使っている版」の列を埋めることです。
検索の土台は、Agent Search(Vertex AI Search から改称中)の answer メソッドです。 検索の結果から回答を作り、出典を付けられます。前のセッションの ID を渡すとやり取りを続けられ、質問の言い換えは既定で有効です。回答の文ごとに根拠の強さのスコアを返す設定と、スコアの低い回答を落とす設定があります。
アクセス制御は、検索した人が元の文書を見られる範囲に結果を絞る機能です。 Cloud Storage の文書なら、メタデータの acl_info に見てよい人とグループを書きます。設定はデータストアの作成時にしか選べず、あとから有効にも無効にもできません。 1つの文書に付けられる読み手は3,000までで、グループも1つと数えるので、人ではなくグループで書きます。 なお、この機能はプレビューの扱いです。
03どうやって実装するのか
処理の起点を決める
起点は、開発者が開発支援ボットに質問を書き込んだことです。 書き込んだ人の ID から、社員か協力会社か、どのチームのグループに入っているかを決めます。回したときにどの担当者の待ち行列に載せるかは、質問した社内APIや部品の持ち主で決めます。
プロジェクトのコードを必須にします。 チャンネルごとにプロジェクトが決まっている場合は、チャンネルから引きます。コードが無いと版が決まらず、版が決まらないと答えを作りません。
1件の質問は、1つのセッションで最後まで続けます。 「では件数が多いときは」のような続けての質問も同じセッションでつなぎ、別のAPIの話は新しいセッションで始めます。 前のAPIの名前が言い換えの中に残るからです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 質問 | 開発者が書いた質問の文、貼ったコードの一部、選んだ聞き返しの値 | 社内チャット |
| 質問した人の情報 | 社員/協力会社、所属するグループ | 社内の ID 基盤 |
| プロジェクトの台帳 | プロジェクトのコード、使っている社内APIと共通部品の版、言語 | 共通基盤チームの表 |
| 開発規約 | 命名、例外、ログ、テスト、セキュリティの条項 | 社内Wiki |
| 設計書 | システムごとの方式設計、連携の設計 | 文書管理 |
| 社内APIの仕様 | パス、パラメータ、応答、エラー、廃止の予定(版ごと) | OpenAPI の定義ファイル |
| 共通部品の説明 | 関数、設定、使い方の例(版ごと) | リポジトリの README とドキュメント |
| 過去の回答 | 質問、答え、対象の版、置き換えの有無 | 質問用チャンネルの過去の記録を整えたもの |
| 回す条件の表 | 回す値(規約の例外、未公開のAPI、認証と暗号、障害中) | 共通基盤チームが作る表 |
質を決めるのは、版の付け方です。 社内APIの仕様と共通部品の説明は、版ごとに別の文書として取り込み、版の番号をメタデータに持たせます。 同じページに「v2 から変わりました」と書き足す運用だと、検索の断片に旧版と新版の記載が混ざります。
貼られたコードは、検索の文に入れません。 検索の文に入れるのは、質問の文と、中継プログラムが決めた条件だけです。コードを丸ごと入れると、変数の名前に引っぱられて関係の無い断片が上に来ます。
データの取得方法を決める
規約・設計書・仕様・説明・過去の回答は、Cloud Storage に置いてデータストアに取り込みます。 文書ごとのメタデータに、文書の種類、社内APIや部品の名前、版、見てよいグループを持たせます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 文書の種類(規約/設計書/仕様/説明/回答) | メタデータ | 絞り込みと、根拠の表示の順 |
| APIや部品の名前 | メタデータ | 聞き取った対象の文書だけに絞る |
| 版 | メタデータ | 台帳で決めた版の仕様と説明だけに絞る |
| 見てよいグループ | acl_info | 質問した人が見られない設計書を結果に出さない |
形式は、取り込める形にそろえます。 レイアウトパーサーが扱うのは HTML、PDF、DOCX、PPTX、XLSX などで、Markdown は公式の一覧に載っていません。 README は HTML に変換してから置きます。OpenAPI の定義ファイルは、パスとメソッドごとに1ページの HTML に起こし、見出しにパスを、本文にパラメータと応答とエラーを書きます。
絞り込みの式は、APIの名前と版と文書の種類で書きます。 項目を索引可能にしておけば、api: ANY("customer", "COMMON") AND api_version: ANY("v1", "ALL") AND superseded: ANY("false") のように、そのAPIのその版の仕様と、版によらない規約と、置き換えられていない回答だけを引けます。ALL は版によらない規約に付けます。
AIへ渡す前に整形する
- 定義ファイルを起こす … OpenAPI の定義から、パスとメソッドごとのページを版ごとに作ります
- パスの一覧を作る … 版ごとに、存在するパスと、共通部品の公開している関数の名前を書き出します
- README を変換する … HTML に変換し、版の番号を付けます
- 規約を条項ごとに分ける … 条項の番号と見出しが付いた形で取り込みます
- 過去の回答を整える … 対象の版と置き換えの有無を付け、パスワードや接続先の書かれた回答は除きます
- 見てよいグループを付ける … 設計書ごとに、文書管理の権限と同じグループを
acl_infoに書きます - 見出しを断片に含める … データストアの作成時に分割を有効にし、
includeAncestorHeadingsを有効にします
6番目と7番目は、データストアを作る前に決めます。 アクセス制御も分割も、作成のあとでは有効にも無効にもできません。 見出しを含める設定は既定では無効で、APIのページは見出しが無いとどのパスの説明か分かりません。 分割の大きさは100〜500トークンで、既定は500です。
2番目が、この構成でいちばん効きます。 一覧は定義ファイルから機械的に作るので、仕様のページを直し忘れても、一覧は実際の定義のとおりになります。
1番目から3番目は、版を出す手順に組み込みます。 共通基盤チームが新しい版を出すたびに、定義ファイルからのページの作成、一覧の作成、README の変換が自動で走り、データストアへの取り込みまでが同じ流れで終わるようにします。手で取り込む運用にすると、新しい版の文書だけが無い期間ができます。
AIに処理させる
させるのは、台帳で決めた版のAPI・部品の仕様と規約から、やりたいことの書き方と守る規約の条項を見つけ、根拠を付けて短く返すことです。 版を決めること、秘密の文字列を止めること、回すかどうかは、中継プログラムが行います。
| 要素 | 中身 | 根拠 |
|---|---|---|
| 使い方 | 呼ぶパスとパラメータ、使う関数と設定 | 仕様、説明 |
| 守る規約 | 関係する条項の番号と要点 | 開発規約 |
| 注意 | 廃止の予定、エラーの扱い | 仕様 |
| 根拠の場所 | 仕様のページ、規約の条項、設計書の節 | 全部 |
answer メソッドの設定は次のようにします。
| 設定 | 値 | 理由 |
|---|---|---|
session | 質問ごとのセッション | 聞き返しと続けての質問をつなぐ |
includeCitations | 有効 | 仕様のページと規約の条項を付ける |
ignoreLowRelevantContent | 有効 | 文書に無い話に答えない |
ignoreNonAnswerSeekingQuery | 有効 | あいさつや雑談で検索しない |
groundingSpec の filteringLevel | FILTERING_LEVEL_HIGH | 根拠の弱い回答を出さない |
filter | APIや部品の名前、版、置き換えの有無 | 別の版の記載を混ぜない |
preamble | 下の指示 | 答え方の規則を与える |
| させないこと | 理由 |
|---|---|
| 版を決める | 台帳の値で決める |
| 仕様に無いパスやパラメータを書く | 存在しない呼び方を教えることになる |
| 規約の例外を認める | 共通基盤チームとアーキテクトが決める |
| コードレビューの合否 | レビューの担当者が決める |
| 一般的な書き方で補う | 社内の規約と違いうる |
2行目がいちばん起きやすい失敗です。 仕様に近い記載が見つかると、モデルは足りないところを一般的なAPIの作法で埋め、それらしいパラメータを書きます。 書き方で禁じ、名前は後段の一覧で照らします。
指示内容を固定する
answer メソッドの preamble に、次の指示を入れます。
あなたは共通基盤チームの担当者として、
社内の開発者から、共通部品・社内APIの使い方と開発規約の質問に答えます。
読むのは、実装の手を止めてチャットを見ている開発者です。短く答えてください。
【前提】
検索の文の最初に、プロジェクト、言語、対象の社内APIや部品の名前、
台帳で決まった版が並んでいます。
版はすでに決まっています。その版の記載だけを使って答えてください。
【答え方】
1. 最初に、呼ぶパスとパラメータ、または使う関数と設定を、仕様の記載のとおりに書いてください。
2. 次に、守る規約の条項の番号と要点を書いてください。
3. 仕様に廃止の予定やエラーの扱いがあれば書いてください。
4. 根拠にした仕様のページ、規約の条項、設計書の節を書いてください。
5. コードの例は、仕様と説明に例があるときだけ、その例を写して示してください。
【厳守事項】
- 検索結果の文書に書かれていることだけで答えてください。
一般的な書き方や他社のライブラリの例で補わないでください。
- 仕様に無いパス、パラメータ、関数の名前を書かないでください。
- 別の版の書き方を書かないでください。「版によって異なる」と書かないでください。
- 規約を外してよいと書かないでください。
- 「レビューを通る」「問題ない」と書かないでください。
- 該当する記載が見つからないときは、
「仕様と規約に該当する記載が見つかりません。共通基盤チームへ回します」
とだけ書いてください。
「仕様に無い名前を書かない」「例は写して示す」が、この指示の要です。 コードの例を自由に書かせると、仕様に無い引数が一つ混ざるだけで、開発者はその例を貼って動かず、また質問します。 例は文書にあるものだけにし、名前は後段で照らします。
検索の文は、中継プログラムが組み立てます。 例えば「プロジェクト:EC-CART、言語:Java、対象:顧客API v1、共通ログ部品 3.2。退会済みの顧客を除いて一覧を取るには」のように、条件を先に並べ、開発者の質問の文を最後に足します。
出力形式を固定する
answer メソッドの応答を、中継プログラムが次の形に整えて、チャットと記録に渡します。
{
"inquiry_id": "",
"session_id": "",
"project": "EC-CART",
"category": "usage | guideline | other",
"conditions": { "language": "", "targets": [ { "name": "customer-api", "version": "v1" } ] },
"secret_detected": false,
"status": "answered | escalated | skipped | blocked",
"escalate_reason": "guideline_exception | unreleased_api | auth_crypto | incident | name_not_in_spec | version_unknown | not_in_docs | skipped | user_request | none",
"answer_text": "",
"mentioned_names": [ { "kind": "path | function", "name": "", "in_spec": true } ],
"refs": [ { "doc_type": "guideline | design | api_spec | lib_doc | qa", "title": "", "section": "", "version": "", "uri": "" } ],
"feedback": "resolved | escalated_after | wrong | none"
}
1つ目の理由は、mentioned_names を回答の文と別に持てることです。 中継プログラムが回答の文からパスと関数の名前を拾い、その版の一覧と照らして in_spec を入れます。1つでも false があれば、回答を出さずに name_not_in_spec で回します。
2つ目は、conditions.targets に版を残せることです。 同じ質問でも版で答えが違うので、後から回答を見直すときに、どの版の前提で答えたかがすぐ分かります。
3つ目は、escalate_reason で回った理由を数えられることです。 not_in_docs が多いAPIは仕様の書き足しが要るもの、version_unknown が多ければ台帳の版の列が埋まっていないことが分かります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 社内チャット | ボットの受信と返信 | 質問を受け、聞き返しと回答をスレッドに返す |
| 社内の ID 基盤 | ログインとグループ | 社員/協力会社と、所属するグループを決める |
| プロジェクトの台帳 | 読み取り | 使っている版を引く |
| APIと部品の名前の一覧 | 読み取り | 回答の名前を照らす |
| Agent Search | answer メソッドの呼び出し | 見てよい文書だけから回答を作る |
| 共通基盤チームの待ち行列 | 書き込み | 回す質問を、条件と一緒に担当別に載せる |
| 問い合わせの記録 | 書き込み | 質問・条件・回答・評価を残す |
リポジトリと台帳には、書き込みません。 回答から仕様の誤りが分かっても、ボットからは直しません。仕様の直しは、共通基盤チームが定義ファイルを直して版を出す手順で行います。
人が確認する
開発者は、回答を読んだあと、根拠の仕様のページを開いてから実装します。 回答の上には、台帳から引いた版を並べて表示します。
- 版が合っているかを見る … 自分のプロジェクトが本当にその版を使っているかを確かめます
- 根拠を開く … 仕様のページと規約の条項を開き、回答と同じかを見ます
- 評価を付ける … 解決した/共通基盤チームへ回した/誤りを選びます
1番目を軽く見ないでください。 台帳の版の列は、版を上げた開発チームが書き換え忘れることがあります。 回答が動かなかったら、まず台帳と実際の依存の設定を見比べます。
共通基盤チームは、回ってきた質問だけを見ます。 guideline_exception はアーキテクトと相談して決め、認めた例外は規約の例外の一覧に足します。
目標は、480件をならして1件6分です。 ボットで解決した質問の記録の確認と、回ってきた質問を担当者が判断する時間の平均です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 質問にパスワードやアクセスキーに見える文字列がある | 答えを作らず blocked。書き込みの削除と、秘密の値の変更を促す |
| プロジェクトのコードが台帳に無い | 打ち直しを促し、見つからなければ version_unknown で回す |
| 台帳の版が空 | 答えを作らず version_unknown で回し、台帳の記入を頼む |
| 規約の例外を求める | 答えを作らず guideline_exception で回す |
| まだ公開していないAPIの質問 | 答えを作らず unreleased_api で回す |
| 認証・暗号の実装の質問 | 答えを作らず auth_crypto で回す |
| 回答の名前が一覧に無い | 回答を出さず name_not_in_spec で回す |
| 検索の呼び出しが失敗する | 「回答を作れませんでした」と表示し、チャンネルの担当者を示す |
6行目は、答えられても回します。 認証と暗号は、仕様どおりに書いても使い方を一つ誤るだけで穴になります。 共通基盤チームが毎回目を通す範囲として、最初から決めておきます。
記録を残す
- 質問の文、選んだ聞き返しの値、日時、書き込んだ人の区分
- 台帳から引いた版と、そのときの台帳の更新日
- 中継プログラムが組み立てた検索の文と、使った絞り込みの式
- answer メソッドの応答の全文(回答、出典、根拠のスコア、回答しなかった理由)
- 回答から拾った名前と、一覧との照合の結果
- 回す・回さないの判定と、その理由、共通基盤チームが最終的に答えた内容
貼られたコードは、記録に残しません。 秘密の文字列の検知をすり抜けたものが混ざるおそれがあるからです。残すのは質問の文と条件だけにします。
2行目は、版を上げたあとで効きます。 「この回答は v1 の前提だった」と分かれば、v2 に移ったプロジェクトに同じ回答を引かせない置き換えの範囲が決まります。
04実装レベルの3段階
半自動化で、1件15分が10分程度になります。 探す時間は縮みますが、版の聞き返しと回答を書く手間が残ります。本格構成で6分になり、この段階が本記事の想定です。 差が大きいのは、版が台帳から最初に決まり、開発者が自分で答えを受け取るからです。 段階を飛ばさないでください。 半自動化の1か月で、どの版の文書が足りないか、どの質問を回すべきかが見えます。そこを直してから開発者に開くほうが、誤りの評価が減ります。
05工数削減シミュレーション
導入後 480件 × 6分 ÷ 60 = 48 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 社内と協力会社あわせて百名以上の開発者が、共通部品(認証・ログ・帳票などのライブラリ)と社内APIを使って複数のシステムを作っている会社。開発規約と社内APIの仕様が文書になっていて、共通基盤チームのチャットに「どう呼ぶのか」「規約に合うか」という質問が毎月数百件届いている場合。社内APIや共通部品に複数の版が並行して動いている場合。
- 開発者が十数名で、共通基盤の担当者が全員の質問にその場で答えられる場合。開発規約や社内APIの仕様が文書になっておらず、ソースコードと担当者の記憶にしかない場合(根拠にする文書が無いので、まず仕様と規約を書き起こすのが先です)。コードレビューの合否をAIに任せたい場合(この構成は規約と仕様の該当箇所を示すだけで、合否はレビューの担当者が決めます)。
07最小構成で試す方法
- 過去3か月に質問用のチャンネルに届いた質問から30件を選ぶ(版の違いで答えが変わった質問と、規約を読み上げただけの質問を数件ずつ入れる)
- その30件について、担当者がどの仕様と規約を見てどう答えたかを記録から拾う
- 該当する版の仕様のページ、共通部品の説明、開発規約を、手元のAIサービスに資料として読み込ませる
- プロジェクトと版を条件として貼り、「添付の資料だけを根拠に、使い方と守る規約を答えてください。資料に無いパスや関数は書かず、別の版の書き方も書かないでください」と指示する
- 出てきた回答を、当時の担当者の回答と突き合わせる
| 出てきた内容 | 判断 |
|---|---|
| 当時と同じ根拠で同じ答えが出た | データストアの構築に進む |
| 資料に無いパラメータを書いた | 指示の書き方と名前の照合で直る。構成は有効 |
| 該当する記載が仕様に無い | 仕様の書き足しが先。 検索の問題ではない |
3行目が出たら、 その質問を共通基盤チームの仕様の改訂の候補に入れ、同じ30件で試し直してください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 仕様に無いパラメータを書く | 書き方を禁じ、回答の名前を版ごとの一覧と照らす |
| 別の版の書き方で答える | 台帳で版を決めて絞り込み、版ごとに別の文書にする |
| 見てはいけない設計書の内容が出る | 作成時にアクセス制御を有効にし、グループで acl_info を書く |
| README が取り込めない | Markdown は一覧に無い。HTML に変換して置く |
| APIのページがどのパスのものか分からない | 作成時に includeAncestorHeadings を有効にする。後から変えられない |
| 質問にアクセスキーが貼られる | 検知して止め、記録にも残さない |
| 台帳の版が古い | 回答の上に版を表示し、version_unknown の件数を見る |
| 規約の例外がボットで決まってしまう | 回す条件に入れ、アーキテクトが決める |
上の3行が、この構成の失敗のほとんどです。 どれも、正しい文書を引いているのに、その版とその人には当てはまらないという失敗です。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 開発規約、設計書、社内APIの仕様、共通部品の説明、過去の回答、開発者の質問の文です。設計書には、決済や人事のシステムの方式や接続先が含まれます。
- 見てよい範囲を元の権限と合わせる … 設計書の
acl_infoは文書管理の権限と同じグループで書き、協力会社の人が入るグループと社員だけのグループを分けます - 秘密の値を入れさせない … パスワード、アクセスキー、接続先の文字列は、質問の段階で検知して止めます。過去の回答を取り込むときも除きます
- 規約の例外とレビューの合否をAIに決めさせない … ボットが示すのは規約の条項と仕様の記載までで、例外を認めるか、レビューを通すかは人が決めます
- 認証と暗号の質問は人が見る … 答えられる記載があっても回し、共通基盤チームが毎回目を通します
- 協力会社との契約と照らす … 協力会社の開発者に設計書の内容を返すことが、委託の契約の秘密保持の範囲に入っているかを先に確かめます
誤りが起きた場合のリスクは、存在しない呼び方や別の版の書き方で実装されることと、見てはいけない設計書の内容が返ることの2つです。 前者は台帳の版と名前の照合で、後者はアクセス制御で防ぎます。
10まず何から始めるか
1週目:台帳の版の列を埋める
40本のシステムについて、使っている社内APIと共通部品の版を台帳に書きます。あわせて、定義ファイルから版ごとのパスの一覧を作る仕組みを用意します。
2週目:30件で試す
過去の質問から30件を選び、手元のAIサービスに該当する版の仕様と規約を読み込ませて聞きます。資料に無いパラメータを書いていないか、別の版の書き方が混ざっていないかを最優先で見ます。
3週目:見てよいグループと回す条件を決める
設計書ごとに見てよいグループを決め、文書管理の権限と突き合わせます。「規約の例外」「未公開のAPI」「認証と暗号」「障害中」を中心に回す条件の表を作ります。
4週目:データストアを作る
アクセス制御・分割・見出しの設定を決めて、規約・設計書・仕様・説明・回答を取り込みます。共通基盤チームが検索画面で使い、自分の回答と比べます。
2か月目: 中継プログラムとボットを作り、プロジェクトを3つに絞って試します。回った理由を毎週数えます。3か月目以降: 全プロジェクトに広げ、1件15分が何分になったかを実測します。共通基盤チームに届く質問が、規約の例外と仕様に無いものだけになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Vertex AI Search が Agent Search へ改称中であること。answer メソッドが前のセッションの ID でやり取りを続けられ、質問の言い換えが既定で有効なこと。includeCitations、ignoreLowRelevantContent、ignoreNonAnswerSeekingQuery、preamble、filter。groundingSpec の filteringLevel(FILTERING_LEVEL_LOW/HIGH)で根拠のスコアの低い回答を落とせること、文ごとに根拠のスコアが付くこと | Google Cloud: Get answers and follow-ups | 2026-10-08 |
絞り込みの ANY()、比較の演算子、AND/OR、項目を索引可能にする必要があること | Google Cloud: Filter search for structured or unstructured data | 2026-10-08 |
レイアウトパーサーが HTML・PDF・DOCX・PPTX・XLSX・XLSM の表と見出しを検出すること(TXT はデジタルパーサーのみで、Markdown は記載が無いこと)。分割の大きさが100〜500トークン(既定500)、includeAncestorHeadings が既定で無効、分割は作成後に切り替えられないこと | Google Cloud: Parse and chunk documents | 2026-10-08 |
アクセス制御が検索した人の見られる文書に結果を絞ること、Cloud Storage の非構造化データではメタデータの acl_info の readers に user_id/group_id を書くこと、データストアの作成時にしか選べないこと、1文書の読み手が3,000まででグループも1と数えること、ID 基盤の設定が要ること、プレビューであること | Google Cloud: Set up data source access control | 2026-10-08 |
規約の例外を認めるか、レビューを通すかは、自社の共通基盤チームとアーキテクトの判断に従ってください。 本記事は Google Cloud の公式ドキュメントで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0959)についてのご相談はこちらから。
