Media > AI活用ユースケース > 法務 > 法務に届いた新しい相談について、過去の法律相談と顧問弁護士の意見書から似た相談を探し、当時の回答と根拠を相談番号付きで返す

法務に届いた新しい相談について、過去の法律相談と顧問弁護士の意見書から似た相談を探し、当時の回答と根拠を相談番号付きで返す

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

事業部門から法務に新しい相談が届いたとき、その文面に近い過去の法律相談を探し、当時どう答えたか、何を根拠にしたか、顧問弁護士の意見書があるかを相談番号付きで並べます。担当者は答えを考える前に、過去の自社の判断を一度で見渡せます。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Vertex AI/OpenSearch
対象業界
IT・SaaS/商社/製造/金融
対象部門
法務
対象業務
情報検索/比較検討
主な課題
判断に時間がかかる/属人化している/情報が見つからない
AIで行う処理
検索(RAG)
主な効果
判断支援/品質標準化/属人化解消/検索時間短縮
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
RAG・個別開発(大)
人間の確認
条件付き
現在工数
60h/月
AI導入後
20h/月
想定削減
67%
年間削減
480h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 事業部門が相談受付のフォームに相談の内容を書いて送る
  2. 法務部長が担当者を割り当て、相談台帳に受付番号と件名を書く
  3. 担当者が、台帳の件名を思いつく言葉で検索し、似た相談を探す
  4. 見つかれば、受付番号を手がかりにメールの受信箱を検索し、当時の回答を探して読む
  5. 顧問弁護士に照会した相談だったかを、案件のフォルダを開いて確かめ、意見書があれば読む
  6. 見つからなければ、古参の担当者に「前に似た相談はなかったか」を聞く
  7. 当時の回答が今回にも当てはまるかを考え、一から調べるか、当時の回答を下敷きにするかを決める
  8. 回答を書き、事業部門へ送る。台帳に完了日を書く
導入後(After)
  1. 人事業部門が相談受付のフォームに相談の内容を書いて送る
  2. 自動フォームの送信をきっかけに、相談の文面を受付番号と一緒に取り込む
  3. 自動相談の文面から、個人名と社外の固有名を検索用の符号に置き換える
  4. 自動過去の相談の索引を、文面の近さで検索する。問い合わせた担当者の役割で読める記録だけが対象になる
  5. 自動見つかった上位の相談について、当時の回答・根拠・意見書の番号・回答日・見直しの印を取り出す
  6. 自動生成AIが、検索で見つかった記録だけを使い、相談番号付きの一覧と、今回の相談との前提の違いを書く
  7. 自動相談番号と回答日が索引の値と一致するかを確かめる
  8. 人担当者が一覧を読み、元の回答と意見書を開いて、今回にどこまで使えるかを判断する
  9. 人回答を書き、事業部門へ送る。どの過去の相談を参考にしたかを記録する
  10. 自動回答が完了したら、今回の相談と回答を索引に加える
各工程の詳しい説明を読む
  1. 事業部門が相談受付のフォームに相談の内容を書いて送る
  2. 法務部長が担当者を割り当て、相談台帳に受付番号と件名を書く
  3. 担当者が、台帳の件名を思いつく言葉で検索し、似た相談を探す
  4. 見つかれば、受付番号を手がかりにメールの受信箱を検索し、当時の回答を探して読む
  5. 顧問弁護士に照会した相談だったかを、案件のフォルダを開いて確かめ、意見書があれば読む
  6. 見つからなければ、古参の担当者に「前に似た相談はなかったか」を聞く
  7. 当時の回答が今回にも当てはまるかを考え、一から調べるか、当時の回答を下敷きにするかを決める
  8. 回答を書き、事業部門へ送る。台帳に完了日を書く

(a)台帳の件名では見つからない。 件名は受付した人が付けた短い言葉で、「キャンペーンの件」「委託先の件」のように中身を表していないものが多くあります。同じ景品の上限の相談が、「Xキャンペーン相談」「プレゼント企画の確認」「景表法の件」という別々の件名で残っています。 言葉が一致しないと、似た相談があっても見つかりません。

(b)回答がメールにしか残っていない。 台帳で相談を見つけても、回答を読むにはメールを探し直します。当時の担当者が退職していると、そのメールボックスごと読めないこともあります。

(c)意見書が別の相談で読み返されない。 顧問弁護士の意見書が案件のフォルダに入ったまま、同じ論点を顧問弁護士に照会し直すことがあります。

(d)同じ相談に違う答えを返す。 担当者が過去の回答を見つけられないと、それぞれが一から考えて答えます。「前は大丈夫と言われた」と言われて初めて、食い違いに気づきます。

(e)古い回答をそのまま使ってしまう。 過去の回答を見つけても、その後の改定に気づかず当時の回答を下敷きにして答えてしまうことがあります。

  1. 【人】 事業部門が相談受付のフォームに相談の内容を書いて送る
  2. 【自動】 フォームの送信をきっかけに、相談の文面を受付番号と一緒に取り込む
  3. 【自動】 相談の文面から、個人名と社外の固有名を検索用の符号に置き換える
  4. 【自動】 過去の相談の索引を、文面の近さで検索する。問い合わせた担当者の役割で読める記録だけが対象になる
  5. 【自動】 見つかった上位の相談について、当時の回答・根拠・意見書の番号・回答日・見直しの印を取り出す
  6. 【自動】 生成AIが、検索で見つかった記録だけを使い、相談番号付きの一覧と、今回の相談との前提の違いを書く
  7. 【自動】 相談番号と回答日が索引の値と一致するかを確かめる
  8. 【人】 担当者が一覧を読み、元の回答と意見書を開いて、今回にどこまで使えるかを判断する
  9. 【人】 回答を書き、事業部門へ送る。どの過去の相談を参考にしたかを記録する
  10. 【自動】 回答が完了したら、今回の相談と回答を索引に加える

8番目が、この設計の分かれ目です。 一覧に出てくるのは「似た相談の記録」で、答えではありません。担当者は必ず元の回答を開き、回答日と見直しの印を見てから使います。 一覧の要約だけを見て答えると、古い回答を今回に当てはめる失敗(第3章の(e))を、かえって速く繰り返すことになります。

10番目で索引が育ち、次に同じ型の相談が来たときには今回の回答が候補に出ます。

02今回想定するシステム構成

構成図
【取り込み】相談の完了(台帳に完了日)/意見書の格納
   ▼【トリガー】完了のたび(夜間にまとめて)
AWS Lambda ── 相談・回答・意見書を1件の記録にまとめ、分野・回答日・閲覧区分を付ける
   ▼
Amazon OpenSearch Service(相談の索引。日本語の解析器+閲覧区分)

【受付】相談受付のフォーム(新しい相談の文面)
   ▼【トリガー】フォームの送信
AWS Lambda ── 個人名・社外の固有名を符号に置き換え、担当者の権限で検索
   ▼
Amazon OpenSearch Service
   ├─ more_like_this:新しい相談の文面に近い過去の相談
   ├─ 日本語の全文検索:法令名・制度名などの言葉の一致
   ├─ 文書単位の権限:担当者の役割で読める記録だけ
   └─ 項目単位の権限:意見書の本文は限られた役割だけ
   ▼
Claude(Amazon Bedrock)── 検索結果だけを使い、相談番号付きの一覧と前提の違いを書く
   ▼
AWS Lambda ── 相談番号・回答日の照合
   ▼
【担当者が元の回答と意見書を開いて判断】──▶ 事業部門へ回答
役割想定する製品代替候補
検索基盤Amazon OpenSearch Service(more_like_this、Sudachi、細かなアクセス制御)Azure AI Search、Vertex AI Search(Agent Search)
生成AIClaude(Amazon Bedrock。検索結果を相談番号付きで並べる)OpenAI API、Gemini API
連携AWS Lambda(取り込み、符号化、検索、照合)AWS Step Functions
保管Amazon S3(意見書の原本のPDFと、検索の記録)―
受付既存の相談受付のフォームと相談台帳―

相談受付のフォームと相談台帳は、新しく足すものではありません。 散っている記録を1つの索引に集め、受付のたびに引けるようにするだけです。

索引に Amazon OpenSearch Service を選ぶ理由は、権限の絞り込みを検索の中で行えることです。 細かなアクセス制御(fine-grained access control)はインデックス・文書・項目の単位のセキュリティを提供します。文書単位のセキュリティでは、ロールを作るときにインデックスのパターンと検索の条件を指定し、そのロールに割り当てたユーザーは条件に合う文書だけを見られるとされています。項目単位のセキュリティでは、含める項目か除く項目の一覧を指定でき、項目のマスキングでは項目を消す代わりに値を匿名化できます。

日本語の解析には、Sudachi のプラグインを使います。 公式の一覧では、Sudachi Analysis は日本語向けに推奨とされ、OpenSearch 1.3 以降で使えます。追加で関連付けるオプションのプラグインで、辞書ファイルを関連付け直しても、すぐにはドメインに反映されず、次のブルー/グリーンデプロイのときに更新されるとされています。もう一つの日本語の解析器 kuromoji は、すべてのドメインに含まれています。

似た相談を探すのは、more_like_this の検索です。 公式のドキュメントでは、入力された文書や文章を解析してそれを特徴づける語を選び、その語を含む他の文書を探す検索とされています。新しい相談の文面をそのまま like に入れられるのが、この題材に合っている点です。

03どうやって実装するのか

Step1

処理の起点を決める

トリガーは2つあります。 1つは索引を育てるための相談の完了、もう1つは検索を動かすための新しい相談の受付です。

索引への取り込みは、夜間にまとめて行います。 相談台帳に完了日が入った相談と、その日に共有フォルダへ格納された意見書を拾い、記録にまとめて索引に入れます。完了した相談だけを入れ、検討中の相談は入れません。 回答が固まっていない記録が候補に出ると、まだ誰も確かめていない見解が過去の回答のように扱われます。

検索は、相談受付のフォームの送信ごとに1件ずつ動かします。 部長が担当を割り当てる前に一覧ができていれば、「この相談は過去に誰が受けたか」を見て担当を決められます。

担当者が画面から言葉を足して検索し直すこともできるようにします(「業務委託 指揮命令 常駐」など)。この再検索も、担当者自身の権限で行います。

Step2

入力データを集める

データ中身取得元
新しい相談受付番号、相談部門、相談の文面、添付の有無、希望の回答期限相談受付のフォーム
過去の相談の記録相談番号、相談日、相談部門、分野、相談の要旨、回答の本文、回答日、担当者相談台帳とメール(取り込み時にまとめる)
根拠回答で挙げた法令・条項、ガイドライン、社内規程、参考にした過去の相談番号回答の本文から担当者が記入
顧問弁護士の意見書意見書の番号、照会日、照会の要旨、結論の部分、本文のPDF共有フォルダ
見直しの印回答後に関係する法令やガイドラインの改定があり、見直しが要るかの印と、その日付法務部が付ける
閲覧区分一般/人事/内部通報/訴訟・紛争 などの区分法務部長が付ける

質を決めるのは、下の3つです。 根拠の欄が空だと、一覧に出た回答が何に基づいていたかが分からず、今回にも使えるかを確かめる手がかりがありません。 見直しの印が無いと、古い回答と今も使える回答の区別がつきません。閲覧区分が無いと、検索の段階で権限を絞れません。

見直しの印は、法務部が付けるものです。 どの改定がどの回答に影響するかは、担当者が改定を読んで決めることで、生成AIには判定させません。

Step3

データの取得方法を決める

過去の記録は、相談番号を軸に3か所から集めます。

取るものどこからどうやって
相談番号・相談日・部門・担当・完了日相談台帳スプレッドシートの読み取り
回答の本文法務部の共有メールボックス件名の受付番号で該当のスレッドを引く
意見書の本文と結論の部分共有フォルダフォルダ名の相談番号で紐付け
根拠・見直しの印・閲覧区分相談台帳に足した列担当者・部長が記入

回答の本文は、メールのスレッドから「法務部が最後に送った回答」だけを取ります。 途中の確認のやり取りや、事業部門からの追加の質問まで入れると、索引の文面が長くなり、どの部分が回答なのかが分からなくなります。 最後の回答を本文にし、相談の要旨は受付のフォームの文面から取ります。

過去分の取り込みは、最初の1回だけ手間がかかります。 直近3年分から始め、古い記録は参照される頻度を見て足します。 意見書は、結論の段落を別の項目に分け、全文はPDFへのリンクで開く形にします。

Step4

AIへ渡す前に整形する

  1. 符号への置き換え … 新しい相談の文面に含まれる社員の氏名、取引先や個人の顧客の名前を、検索用の符号に置き換えます。名簿と取引先マスタにある名前を照合して置き換え、生成AIに渡す文面には実名を残しません
  2. 定型文の除去 … フォームの決まり文句(「お疲れさまです」「よろしくお願いします」)と署名を除きます。more_like_this が拾う語にこれらが入ると、中身と関係なく似た相談になります
  3. 文面の長さの確認 … 文面が極端に短いもの(「至急確認したい件があります」だけなど)は、検索をせず担当者に回します。特徴となる語が取れない文面では、検索結果が当てになりません
  4. 分野の推定と言葉の補い … フォームで選ばれた分野(契約・広告表示・労務・個人情報など)を検索の重み付けに使います。分野の選択は絞り込みには使いません。 事業部門が選び間違えていると、正しい分野の相談が出なくなるためです
  5. 取り込み時の記録の整形 … 過去の記録は、相談の要旨・回答の本文・意見書の結論を別々の項目に入れます。相談の要旨だけで似ているかを見る検索と、回答の中の言葉で引く検索を分けられるようにします
  6. 閲覧区分の付与の確認 … 区分が空の記録は索引に入れません。空のまま入れると、誰の権限でも見える記録になってしまいます

1番目と6番目は、どちらも見せてはいけないものを守る処理です。 1番目は生成AIへ渡す範囲を、6番目は検索で返す範囲を絞ります。どちらか一方だけでは足りません。

Step5

AIに処理させる

検索そのものは OpenSearch が行います。 新しい相談の文面を like に入れた more_like_this と、法令名・制度名の言葉の一致を組み合わせ、上位の相談を返します。

検索の部品何をするか設定の考え方
more_like_this相談の要旨の項目で、新しい相談に近い記録を探すmin_term_freq の既定は2。短い文面では語が1回しか出ないため、1に下げる
言葉の一致法令名・制度名・ガイドラインの名前で引く「下請」「景品」「委託」などの語を含む記録の点数を上げる
文書単位の権限担当者の役割で読める閲覧区分だけを返すロールに検索の条件として閲覧区分を書く
項目単位の権限意見書の本文の項目を、限られた役割以外には返さない結論の部分は返し、全文は返さない

more_like_this の既定値は、そのままでは短い相談に合いません。 公式のドキュメントでは、入力の中で出現回数が min_term_freq(既定は2)より少ない語は無視され、出現する文書の数が min_doc_freq(既定は5)より少ない語も無視されます。選ぶ語の数は max_query_terms(既定は25)、一致させる語の割合は minimum_should_match(既定は30%)です。フォームの相談は数行のことが多く、大事な語ほど1回しか出ません。 min_term_freq を1にしないと、肝心の語が落ちます。

unlike に渡した文章の語は、検索に影響させないために使えます。 定型の相談(ひな形の場所を聞くだけなど)が上位を占めるなら、その典型の文面を入れます。

生成AIにさせるのは、検索で見つかった記録の並べ直しだけです。

させること内容
一覧の作成上位の相談ごとに、相談番号・相談日・回答日・当時の回答の要点・根拠・意見書の有無を並べる
前提の違いの指摘今回の相談の文面と過去の相談の要旨を比べ、書かれている前提の違い(相手が個人か法人か、国内か海外か、金額の規模など)を挙げる
見直しの印の表示印が付いている記録は、その旨と印の日付を先頭に出す
根拠の写し回答の本文に書かれた法令・条項・ガイドラインの名前を、本文の表記のまま写す
させないこと理由
今回の相談への回答法的な判断は担当者が行う。記録に無い見解を書かせない
過去の回答が今も有効かの判定改定の影響は法務が見直しの印で付ける
根拠の補足回答に書かれていない条項を足すと、当時の根拠が変わる
相談の閲覧区分の判断区分は法務部長が付ける
顧問弁護士への照会の要否費用と時間を伴う判断で、担当者と部長が決める

いちばん起きやすいのは、2行目と3行目の失敗です。 生成AIは「改正されている可能性があります」と書き添えたり、回答に無い条文を補ったりします。どちらも根拠の無い文が一覧に混ざります。

Step6

指示内容を固定する

あなたは法務部の担当者を手伝う立場です。
新しい法律相談に対して、検索で見つかった過去の相談の記録を、相談番号付きで並べ直してください。
今回の相談への回答は書かないでください。

【使ってよい情報】
- 下の「検索で見つかった記録」に書かれていることだけ
- 記録に書かれていない法令・条項・判例・ガイドラインを持ち出さないでください

【1件ごとに書くこと】
1. 相談番号、相談日、回答日(記録の値をそのまま)
2. 当時の相談の要旨(2文以内)
3. 当時の回答の要点(回答の本文から、結論にあたる部分を2文以内で)
4. 根拠(回答の本文に書かれた法令・条項・ガイドライン・社内規程の名前を、表記を変えずに写す)
5. 顧問弁護士の意見書の番号と、意見書の結論(記録にあれば。なければ「なし」)
6. 見直しの印(印があれば「見直し要の印あり」と印の日付。なければ「印なし」)
7. 今回の相談との前提の違い(両方の文面に書かれている事実だけを比べる)

【厳守事項】
- 記録に書かれていない項目は「記載なし」としてください。推測で埋めないでください。
- 当時の回答が現在も通用するかどうかを書かないでください。
  「改正されている可能性があります」のような一般論も書かないでください。
- 根拠の欄には、回答の本文に書かれていたものだけを書いてください。
  関係しそうな条文を補わないでください。
- 前提の違いは、今回の相談の文面と過去の相談の要旨の両方に書かれている事実だけで比べてください。
  片方にしか書かれていないことは「今回の文面からは不明」としてください。
- 似ている理由を説明する必要はありません。順位も変えないでください。
- 符号(P001、C001 など)は符号のまま書いてください。
- 記録が0件のときは、一覧を作らず「該当なし」とだけ返してください。

【新しい相談】{new_consultation}
【検索で見つかった記録(順位順)】{search_hits}

「改正されている可能性がありますのような一般論も書かない」を明記しないと、ほぼ必ず書き添えます。 一般論として書かれた注意は、印の付いた記録にも付いていない記録にも同じように付くため、見直しの印の意味が薄れます。 注意は印の有無だけに任せます。

「片方にしか書かれていないことは不明とする」も同じ理由です。 書かれていない事情を「おそらく法人」と補うと、担当者は事業部門に確かめるべき点を見落とします。不明と出れば、それが確認事項になります。

順位を変えさせないのは、検索の結果を検証できるようにするためです。 順位は OpenSearch の点数のままにします。

Step7

出力形式を固定する

次の形のJSONで受け取り、画面では表にして見せます。

{
  "intake_no": "",
  "status": "listed | no_hits | input_too_short",
  "hits": [
    {
      "rank": 1,
      "consult_no": "",
      "consult_date": "",
      "answer_date": "",
      "summary": "",
      "answer_point": "",
      "grounds": [""],
      "opinion": { "no": "", "conclusion": "" },
      "review_flag": { "flagged": false, "flag_date": "" },
      "differences": [
        { "point": "", "past": "", "current": "" }
      ]
    }
  ],
  "unknown_in_current": [""]
}

JSONで受け取る理由は3つあります。

1つ目は、相談番号と日付を機械で照合できることです。 consult_no、consult_date、answer_date を索引の値と突き合わせ、一致しない行があれば一覧ごと出さずに担当者へ知らせます。 生成AIが相談番号を写し間違えると、担当者は別の相談の回答を読むことになります。

2つ目は、見直しの印を先頭に出せることです。 review_flag.flagged が真の行は、画面で色を変え、回答の要点よりも先に印の日付を表示します。

3つ目は、unknown_in_current を事業部門への確認事項にできることです。 前提の違いを比べる中で「今回の文面からは不明」となった点を集め、担当者が事業部門に聞き返す質問の一覧として使います。

Step8

システムへ連携する

つなぎ先方式内容
相談受付のフォーム送信の通知新しい相談の文面と受付番号を受け取る
相談台帳スプレッドシートの読み取り完了した相談、根拠、見直しの印、閲覧区分を読む
共有メールボックス読み取り受付番号でスレッドを引き、最後の回答を取る
共有フォルダ読み取り意見書のPDFと結論の部分を取る
Amazon OpenSearch Service検索のAPI担当者の権限で more_like_this と言葉の検索を行う
Claude(Amazon Bedrock)API呼び出し検索結果を相談番号付きの一覧にする
相談台帳書き込み(1列だけ)担当者が選んだ「参考にした相談番号」を記録する

検索は、担当者の権限で行います。 Lambda が自分の強い権限で検索してから結果を絞るのではなく、担当者のロールに対応する権限で OpenSearch に問い合わせます。 公式のドキュメントでは、ロールの割り当てがなければクラスターへの要求はすべて権限のエラーになるとされています。

相談台帳への書き込みは、参考にした相談番号の列だけです。 回答の本文も、見直しの印も、この構成からは書きません。記録の中身を変えるのは、いつも人です。

Step9

人が確認する

担当者は、一覧を答えとして使いません。 一覧は、どの過去の記録を開くべきかを決めるためのものです。

  1. 見直しの印を先に見る … 印のある記録は、印を付けた理由(改定の内容)を確かめてから読みます。印のある回答を下敷きにするときは、改定後の内容で一から確かめます
  2. 元の回答を開く … 一覧の要点ではなく、メールの回答の本文を読みます。要点は2文に縮めたもので、条件や留保が落ちていることがあります
  3. 意見書は結論だけで判断しない … 意見書がある記録は、PDFの全文を読める担当者が前提と結論の両方を確かめます
  4. 前提の違いを事業部門に確かめる … unknown_in_current の項目を、事業部門への質問として送ります
  5. 参考にした相談番号を記録する … どの記録を下敷きにしたか、使わなかったならその理由を、台帳の列に書きます

2番目を省かないでください。 過去の回答には「ただし、〜の場合は別途ご相談ください」という留保が付いていることが多く、要点の2文にはそれが入りません。

目標は、120件をならして1件10分です。 多くは「前提が違うので一から検討」と判断することになりますが、過去の判断を知ったうえで始められます。

Step10

例外に対処する

起きること対応
文面が短く、特徴となる語が取れない検索せず input_too_short で担当者へ。事業部門に詳細を聞く
検索結果が0件no_hits。新しい型の相談として扱い、回答後に索引に入れる
上位がすべて見直しの印付き一覧は出すが、先頭に「上位はすべて見直し要」と表示する
相談番号・日付が索引の値と一致しない一覧を出さず担当者へ。生成AIの出力を捨てて検索結果だけを表示する
閲覧区分が空の記録が取り込まれようとした取り込まず、部長へ区分の記入を依頼する
担当者の権限で読めない記録が近い検索結果に出ない。出ないことを担当者には知らせない
回答の本文がメールから取れない相談台帳の件名と要旨だけで記録を作り、「回答本文なし」の印を付ける
意見書のPDFが文字として読めない結論の部分を人が入力するまで、意見書の項目を空にする
生成AIが応答しない検索結果だけを表にして出す。一覧の要約が無くても記録は開ける

6行目は意図した動きです。 担当者の権限で読めない記録は、近い相談があっても検索結果に出ません。「権限が無いため表示できない記録があります」と出すと、その種類の相談が過去にあったこと自体が伝わってしまいます。 内部通報や人事の処分の相談では、それだけで秘密が漏れます。限られた役割の担当者は、自分の権限で検索すればその記録を見られます。

4行目で出力を捨てるのは、どこが正しいかを担当者が確かめるより、検索結果の表だけを出すほうが速く確実だからです。

Step11

記録を残す

  • 新しい相談の受付番号と、符号に置き換えた後の文面(実名の文面は相談受付のフォーム側にだけ残す)
  • 検索の条件(more_like_this の設定値、言葉の検索の語、担当者のロール)と、返った相談番号と点数
  • 生成AIに渡した記録と、返ってきた一覧のJSON
  • 照合の結果(一致・不一致)
  • 担当者が参考にした相談番号と、使わなかった記録とその理由
  • 見直しの印の付与と解除の履歴(誰が、いつ、どの改定を理由に)

5つ目が、この構成を良くしていく材料になります。 上位に出たのに使われなかった記録が多い分野は、検索の設定か記録の書き方に問題があります。「前提が違う」で使われない記録が続くなら、相談の要旨の書き方に前提を入れるように台帳の運用を直します。

6つ目は、過去の回答を誰がいつ「古い」と判断したかの記録です。 改定のたびに印を付けた理由が残っていれば、後から改定がもう一度あったときに、どの回答を見直すべきかが分かります。

04実装レベルの3段階

最小構成:30件の一覧と新しい相談を手でAIの画面に貼り、近い相談を選ばせる / 小さな一覧の中での近い相談の選び出し
半自動化:上記+過去の相談を OpenSearch の索引に入れ、担当者が画面から検索する / 全件からの検索と、相談番号付きの一覧
本格構成:上記+受付ごとに自動で検索し、閲覧区分で絞り、生成AIが前提の違いまで並べ、回答の完了で索引を育てる / 受付から一覧の作成と、索引の更新まで

最小構成では件数がさばけません。 30件の一覧を毎回貼るので、数千件の過去の相談からは探せません。確かめるための段階です。 半自動化で、1件30分が15分程度になります。 探す場所は1つになりますが、開いて読む時間と聞き取りは残ります。本格構成で10分になり、この段階が本記事の想定です。 差が出るのは、一覧に見直しの印と前提の違いが並び、開くべき記録を絞り込めるからです。 段階を飛ばさないでください。 半自動化で検索を繰り返すと、閲覧区分の付け方や要旨の書き方の不足が見えてきます。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
6 名
月間件数
120 件
1件あたり現在時間
30 分
1件あたり導入後時間
10 分
現在  120件 × 30分 ÷ 60 = 60 時間/月
導入後 120件 × 10分 ÷ 60 = 20 時間/月
月間削減時間
40h
削減率
67%
年間削減時間
480h
年間金額換算(時間単価4,500円)
216万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 事業部門からの法律相談を法務部がメールや相談フォームで受けており、年に千件を超える相談の履歴が受付の台帳・メール・共有フォルダに分かれて残っているIT企業・メーカー・商社・金融機関の法務部。同じような相談に担当者ごとに違う答えを返している、あるいは「前にも同じ相談があったはず」と古参の担当者に聞いて回っている場合。顧問弁護士の意見書が案件ごとのフォルダに埋もれ、別の相談で読み返されていない場合。AWS を使っており、検索基盤と生成AIを同じ環境で動かせる場合。
向いていない
  1. 法律相談が月に数件で、担当者が全件を覚えていられる場合。過去の相談と回答が記録として残っておらず、口頭や電話で済ませてきた場合(先に受付の記録を始める必要がある)。法務の担当が1名で、引き継ぎや担当間のばらつきが問題になっていない場合。なお、新しい相談にどう答えるかの法的な判断と、顧問弁護士へ照会するかどうかの判断は法務の担当者が行い、この構成はそれを代わりに行いません。

07最小構成で試す方法

  1. 過去1年の完了した相談から、よく似た型が繰り返されている相談を30件選ぶ(同じ型が3件以上あるものを含める)
  2. その30件について、相談の要旨・回答の本文・回答日・根拠をスプレッドシートにまとめる
  3. 最近届いた新しい相談を10件選び、手元のAIサービスに、30件の一覧と新しい相談を1件ずつ貼り付ける
  4. 「この一覧から、新しい相談に近い過去の相談を3件まで選び、相談番号・回答日・当時の回答の要点・根拠を並べてください。今回の回答は書かないでください。一覧に無いことを書かないでください」と指示する
  5. 出てきた相談番号を、担当者が自分で探したときに選んだ相談と突き合わせる

30件は実際の記録で作り、閲覧区分が一般のものだけを選びます。 人事や内部通報の相談は入れません。

出てきた内容判断
担当者が選んだのと同じ相談が上位に出た索引と検索の構築に進む
近い相談は出たが、回答に無い条文を補った指示の書き方で直る。構成は有効
似ていない相談ばかりが出る相談の要旨の書き方が先。 件名だけの記録では似ているかを判断できない

3行目が出たら、要旨の欄に「誰が、誰に対して、何をしようとしているか」を書く運用から始めてください。 検索の仕組みが無くても、引き継ぎの質を上げます。

08実装時につまずきやすいポイント

問題対策
短い相談で近い記録が出ないmin_term_freq の既定は2。 1に下げ、定型文を除いてから渡す
定型の相談ばかりが上位に出る典型の文面を unlike に入れる
検討中の相談が候補に出る完了した相談だけを取り込む
閲覧区分が空の記録が誰にでも見える区分が空なら取り込まない。取り込み時に必ず確かめる
強い権限で検索してから結果を絞っている担当者の権限で検索する。 生成AIへ渡る前に絞る
「表示できない記録があります」と出してしまう出さない。記録があること自体が秘密になる
辞書を直したのに検索が変わらないSudachi の辞書は次のブルー/グリーンデプロイで更新。急ぐなら新しい索引へ再インデックス
生成AIが「改正の可能性」を書き添える一般論を禁じ、見直しは印だけで示す
生成AIが根拠の条文を補う本文の表記のまま写すことを指示し、本文に無い語を検知する
相談番号の写し間違い索引の値と照合し、不一致なら一覧を捨てる
古い回答を下敷きにして答える見直しの印を先頭に表示し、印の運用を法務部で決める
要点だけ読んで留保を落とす元の回答を開くことを確認の手順に入れる

上の7行は、一覧に何が出るかを決める部分、下の5行は出てきたものをどう扱うかの部分です。 後者はどれも、似た相談が見つかったことを答えが見つかったことと取り違える失敗につながります。見直しの印と元の回答の確認を、運用の手順に組み込んでください。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 社員と取引先と顧客の名前、取引の条件、社内の処分や紛争の経緯、顧問弁護士の意見書です。社内で最も機密性の高い記録の一つです。

  1. 閲覧の範囲を検索の段階で絞る … 細かなアクセス制御の文書単位のセキュリティで、担当者の役割に合う記録だけを返します。 生成AIに渡してから絞る設計にしません
  2. 意見書の全文を読める役割を限る … 項目単位のセキュリティで、意見書の本文の項目を限られた役割にだけ返します。一覧には結論の部分だけを出し、全文はPDFを開ける人だけが読みます
  3. 生成AIに実名を渡さない … 新しい相談の文面は、名簿と取引先マスタで符号に置き換えてから渡します。過去の記録も、索引に入れる段階で符号化した版を作ります
  4. この構成は法的な判断を代替しません … 新しい相談にどう答えるか、過去の回答が今も通用するか、顧問弁護士に照会するかは、法務の担当者と部長が決めることです。 この構成が出すのは、自社の過去の記録の一覧だけです
  5. 見直しの印の運用を決める … 法令やガイドラインの改定を知ったときに、誰が、どの分野の記録に印を付けるかを決めておきます。印が付かないまま古い回答が上位に出続けるのが、この構成の最も大きな危険です
  6. ログも法務部の中に閉じる … 検索のログには相談の内容と担当者が残ります。ログの索引にも同じ権限をかけます
  7. 細かなアクセス制御は最初から有効にする … HTTPS、保存データの暗号化、ノード間の暗号化が前提で、一度有効にすると無効にできません

誤りが起きた場合のリスクは、見せてはいけない相談を見せることと、古い回答をそのまま使うことの2つです。 どちらも検索の精度ではなく、記録の管理の問題です。

10まず何から始めるか

1週目:閲覧区分と見直しの印の列を台帳に足す

相談台帳に、閲覧区分の列、根拠の列、見直しの印の列、参考にした相談番号の列を足します。どの役割がどの区分を読めるかを、法務部長が決めます。

2週目:30件で試す

過去1年の一般区分の相談から30件を選び、要旨・回答・根拠をまとめて、最近の相談10件で近い相談を選ばせます。担当者が自分で選んだ相談と同じものが出るかを最優先で見ます。

3週目:要旨の書き方をそろえる

似ていない相談が出た記録の要旨を、「誰が、誰に対して、何をしようとしているか」を書く形にそろえます。

4週目:索引を作り、担当者が画面から引けるようにする

OpenSearch のドメインを細かなアクセス制御を有効にして作り、Sudachi を関連付け、直近3年分の一般区分の相談から取り込みます。この時点では受付との自動連携はせず、担当者が画面から検索します。

2か月目: 閲覧区分ごとのロールを作り、人事・紛争の記録を取り込みます。受付のフォームと連携し、送信ごとの自動検索を始めます。3か月目以降: 生成AIの一覧と前提の違い、相談番号の照合を足し、1件30分が何分になったかを実測します。改定のたびに見直しの印が付く運用が回り始めた時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-07/最終更新:2026-10-07
確認した内容情報源確認日
Sudachi Analysis が日本語向けに推奨とされ OpenSearch 1.3 以降で使えること。kuromoji がすべてのドメインに含まれること。オプションのプラグインであり、Sudachi の辞書ファイルを関連付け直しても即時には反映されず、次のブルー/グリーンデプロイで更新されること。新しいパッケージで新しい索引を作り再インデックスする方法もあることAWS: Plugins by engine version in Amazon OpenSearch Service2026-10-07
細かなアクセス制御がインデックス・文書・項目の単位のセキュリティを提供すること。文書単位のセキュリティがロールに指定した検索の条件に合う文書だけを見せること。項目単位のセキュリティと項目のマスキング。HTTPS・保存データの暗号化・ノード間の暗号化が必要で、一度有効にすると無効にできないこと。ロールを割り当てなければ要求はすべて権限のエラーになることAWS: Fine-grained access control in Amazon OpenSearch Service2026-10-07
more_like_this が入力を特徴づける語を選んで他の文書を探すこと。like に自由な文章や索引の文書を渡せること。unlike の役割。min_term_freq(既定2)、min_doc_freq(既定5)、max_query_terms(既定25)、minimum_should_match(既定30%)。対象の項目が text か keyword 型であることOpenSearch Documentation: More like this2026-10-07

新しい相談にどう答えるか、過去の回答が今も使えるかは、法務の担当者と顧問弁護士の判断によります。 本記事は公開されている製品の仕様で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0730)についてのご相談はこちらから。

AI活用について相談する
目次