社内に溜まった市場調査・顧客調査のレポートを横断して探し、新しい企画の検討に使える調査結果を、調査の時期と対象と根拠のページ付きで返す
新しい企画を検討するときに、「この問いに使える調査は社内にあるか」を入れると、過去の市場調査・顧客調査のレポートから関係するページを探し、調査結果を調査の時期・対象・回答数と根拠のページ付きで返します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- IT・SaaS/小売/広告/製造
- 対象部門
- 経営企画
- 対象業務
- 情報検索/要約
- 主な課題
- 判断に時間がかかる/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 判断支援/属人化解消/検索時間短縮/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 企画の担当が、検討している問いを決める(例:共働き世帯の夕食の準備時間は短くなっているか)
- 調査の台帳で、関係しそうな調査名を探す
- 共有フォルダでレポートを開き、目次とグラフを見て、関係するページを探す
- 見つからなければ、経営企画の調査の担当に聞く
- 見つかった結果を、企画書の資料に写す
- 人調査の担当が、レポートを取り込みのフォルダに置き、調査の条件の票(時期・対象・回答数・手法・利用の範囲)を書く
- 自動レポートをページに分け、ページごとの文章と見出しを取り出す
- 自動ページごとに意味のベクトルを作り、調査の条件と一緒に検索基盤に登録する
- 人企画の担当が、問いを文章で入れる
- 自動見る権限のあるレポートの中から、問いに近いページを探し、レポートごとにまとめる
- 自動Claude が、レポートごとに当たったページの調査結果を書き出し、調査の条件を添える
- 人企画の担当が、根拠のページを開いて確かめ、企画書に使う結果を選ぶ
- 人見つからなかった問いは、「該当なし」として記録する
各工程の詳しい説明を読む
- 企画の担当が、検討している問いを決める(例:共働き世帯の夕食の準備時間は短くなっているか)
- 調査の台帳で、関係しそうな調査名を探す
- 共有フォルダでレポートを開き、目次とグラフを見て、関係するページを探す
- 見つからなければ、経営企画の調査の担当に聞く
- 見つかった結果を、企画書の資料に写す
(a)ファイル名からは中身が分からない。 2番目で、調査名に問いの言葉が入っていることはまれです。「生活者調査」の中に夕食の結果があっても、台帳からは辿れません。
(b)1本を開いて読むのに時間がかかる。 3番目で、数十ページのスライドを1本ずつめくります。5本開いて何も無いことも珍しくありません。
(c)調査の条件が写されない。 5番目で、グラフの数字だけが企画書に写され、調査の時期、対象、回答数が落ちます。 5年前の首都圏の300人の結果が、今の全国の傾向のように読まれます。
(d)あるのに、また発注する。 見つからなかった調査は、新しく調査会社に発注されます。後から、2年前に同じ問いを調べていたことが分かることがあります。
取り込み(新しいレポートが置かれたとき)
- 【人】 調査の担当が、レポートを取り込みのフォルダに置き、調査の条件の票(時期・対象・回答数・手法・利用の範囲)を書く
- 【自動】 レポートをページに分け、ページごとの文章と見出しを取り出す
- 【自動】 ページごとに意味のベクトルを作り、調査の条件と一緒に検索基盤に登録する
探すとき
- 【人】 企画の担当が、問いを文章で入れる
- 【自動】 見る権限のあるレポートの中から、問いに近いページを探し、レポートごとにまとめる
- 【自動】 Claude が、レポートごとに当たったページの調査結果を書き出し、調査の条件を添える
- 【人】 企画の担当が、根拠のページを開いて確かめ、企画書に使う結果を選ぶ
- 【人】 見つからなかった問いは、「該当なし」として記録する
1番目の条件の票を人が書くのが、この設計の分かれ目です。 調査の時期や回答数はレポートのどこかに書かれていますが、表紙、調査概要のページ、巻末と、レポートごとに場所が違います。 AIに読み取らせると、本文中の別の調査の引用を拾うことがあります。1本につき数分の手間で、結果の1行ごとの信頼が決まります。
8番目の「該当なし」の記録は、次の調査の計画の材料です。 同じ問いが何度も「該当なし」になるなら、それが社内にまだ無い調査です。
02今回想定するシステム構成
【取り込み】レポートのPDF・スライド + 調査の条件の票 ▼【トリガー】取り込みのフォルダへの保存 AWS Lambda ── ページに分け、文章と見出しを取り出す ▼ Amazon OpenSearch Service(取り込みのパイプライン) └─ text_embedding:pages.text → pages.embedding(Cohere Embed、Amazon Bedrock) ▼ レポートの索引(レポート1本=1件。pages を入れ子で持つ) 【探す】企画の担当が問いを入れる ▼ Amazon OpenSearch Service ├─ filter:調査の時期、調査の種類、利用の範囲(文書レベルのセキュリティ) └─ nested + neural:ページごとの近さ。score_mode:max、inner_hits で当たったページ ▼ Claude API ── レポートごとに結果を書き出し、調査の条件を添える(ページを引用) ▼ 社内のポータルの画面
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(入れ子の項目のベクトル検索、取り込みのパイプライン、文書レベルのセキュリティ) | Azure AI Search、Vertex AI Search(Agent Search) |
| 埋め込み | Cohere Embed Multilingual(Amazon Bedrock。ML Commons のコネクタで接続) | Amazon Titan Text Embeddings |
| 生成AI | Claude API(調査結果の書き出しと、調査の条件の添付) | Gemini API、OpenAI API |
| 連携 | AWS Lambda(ページの分割、検索の呼び出し、画面への返却) | AWS Step Functions |
| 保管 | Amazon S3(レポートの原本と、調査の条件の票) | ― |
原本のレポートは S3 に置き、検索基盤にはページの文章と調査の条件だけを入れます。 画面の根拠のリンクは、原本のそのページを開きます。図表の数字は、原本で確かめるのが前提です。
ページごとのベクトルは、入れ子の項目に持たせます。 公式のドキュメントでは、入れ子の項目を使うと1つの文書に複数のベクトルを持たせられ、ベクトルの検索では問いに最も近い入れ子のベクトルで、その文書を結果に含めるかが決まります。 1本のレポートで3ページが当たっても、結果にはレポートが1回だけ出ます。
03どうやって実装するのか
処理の起点を決める
取り込みと検索で、起点が2つあります。
取り込みは、取り込みのフォルダにレポートと調査の条件の票が揃ったときに動きます。 票が無いレポートは取り込まず、調査の担当に知らせます。条件の無い結果を検索に出さないためです。 新しい調査は年に数十本なので、毎晩の定時ではなく、置かれたときに動かします。
過去の600本は、最初にまとめて取り込みます。 調査の条件の票は、調査の台帳と各レポートの調査概要のページから調査の担当が作ります。600本の票を作る作業が、導入でいちばん大きな手間です(第11章)。
検索は、企画の担当が問いを入れて送ったときに動きます。 問いは「〜は〜か」の文章で入れてもらいます。単語だけで入れると、意味の近さの検索が効きにくくなります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| レポート | PDFまたはスライド。ページごとの文章、見出し、図表のタイトル | 取り込みのフォルダ |
| 調査の条件の票 | 調査名、実施時期、調査の種類(定量・定性・購入レポート・公開統計の整理)、対象(地域・年代・条件)、回答数、手法、調査会社、利用の範囲 | 調査の担当が書く |
| 問い | 企画の担当が入れる文章。必要なら時期と対象の条件 | 社内のポータル |
質を決めるのは、図表のタイトルと注記です。 スライドのグラフは画像で、数字そのものは文章として取り出せないことが多いためです。図表のタイトル(「夕食の準備にかける時間(平日)」)と注記(「n=1,200、2025年2月」)が文章になっていれば、そのページは問いに当たります。数字は、当たったページを原本で見て確かめます。
利用の範囲は、調査の条件の票で決めます。 all_company(社内全体)、department(購入した部門だけ)、planning_only(経営企画だけ)のような値です。契約の内容を、調査の担当が票に写します。
調査の種類も、答えの読み方を変えます。 自社の定量調査、インタビューのような定性調査、購入した業界のレポート、公開統計を整理した資料では、同じ「60%」でも重さが違います。 票の survey_type で分け、答えにも必ず出します。
見る権限は、文書レベルのセキュリティの役割に書きます。 公式のドキュメントでは、${user.roles} のような変数で利用者の属性に応じて絞り込めるとされています。
PUT _plugins/_security/api/roles/research_reader
{
"index_permissions": [{
"index_patterns": ["reports"],
"dls": "{\"bool\": {\"should\": [ {\"term\": {\"license_scope\": \"all_company\"}}, {\"terms\": {\"owner_dept\": [${user.roles}]}} ]}}",
"allowed_actions": ["read"]
}]
}
文書レベルのセキュリティの絞り込みは、役割をまたいで「または」で合わさります。 公式のドキュメントでは、複数の役割の絞り込みは論理和で結ばれるとされています。経営企画の人に広い役割を足すと、その人は両方の範囲を見られます。
データの取得方法を決める
レポートは、Lambda がページごとに分けます。 公式の取り込みの処理にも、長い文章を塊に分ける text_chunking がありますが、分けた結果は文字列の並びで、元のページの番号は残りません。 根拠をページで示したいので、分割はページを単位に自前で行います。
text_chunking を使う場合は、塊の数の上限に注意します。 公式のドキュメントでは、max_chunk_limit の既定は100で、それを超えた分の文章は最後の塊に足されるとされています。100ページを超えるレポートを丸ごと渡すと、後ろの数十ページが1つの塊になり、その部分は問いに当たりにくくなります。
索引の項目は、次のように持たせます。
| 項目 | 型 | 使いどころ |
|---|---|---|
report_id | keyword | レポートの番号。根拠 |
title | text | 調査名 |
fielded_on | date | 実施時期。範囲の絞り込みと古さの注記 |
survey_type | keyword | 定量・定性・購入レポート・公開統計の整理 |
population/sample_size/method | text/integer/keyword | 対象、回答数、手法。答えに添える |
license_scope/owner_dept | keyword | 利用の範囲と購入した部門。文書レベルのセキュリティ |
pages | nested | page(integer)、heading(text)、text(text)、embedding(knn_vector) |
ページの文章からベクトルを作るのは、取り込みのパイプラインです。 公式のドキュメントでは、text_embedding の処理で入れ子の項目を指定するときは、入力の項目は完全な経路で、ベクトルの項目は名前だけで書き、ベクトルは入力と同じ入れ子の中に入ります。 pages.text を入力に、embedding を出力に指定します。埋め込みのモデルは Amazon Bedrock の Cohere Embed を ML Commons のコネクタでつなぎ、公式のチュートリアルにあるとおり、多言語が要る場合は cohere.embed-multilingual-v3 を使えます。
AIへ渡す前に整形する
- ページに分ける … PDFはページ、スライドは1枚を1ページにします
- 見出しと図表のタイトルを取り出す … ページの最初の行と、図表の近くの短い行を
headingに入れます - 調査概要のページに印を付ける … 調査の方法と対象が書かれたページは、検索の答えにいつも添える候補にします
- 長いページを分ける … 文字の多いページ(報告書形式のPDF)は、段落で2つ以上に分け、同じページ番号を付けます
- 文章の無いページを外す … 表紙や区切りのページ、画像だけのページはベクトルを作りません
- 調査の条件の票と結ぶ … 票が無ければ取り込みで止めます
4番目で同じページ番号を付けるのは、根拠をページで示すためです。 埋め込みのモデルには入力の長さの上限があり、公式の説明でも、多くの埋め込みのモデルには入力のトークンの上限があるので、長い文章は分けるとされています。
AIに処理させる
AIの仕事は、当たったページから調査結果を書き出し、調査の条件を添えることだけです。 ページを探して並べるのは検索基盤です。
| させること | 中身 |
|---|---|
| 結果の書き出し | レポートごとに、問いに関係する結果をページの文章のまま短く書く |
| 調査の条件の添付 | 結果の1行ごとに、実施時期・対象・回答数・手法を添える |
| 根拠の添付 | 結果ごとに、レポートの番号とページ番号を付ける |
| 注意の書き出し | 実施から3年を超える、対象が問いと違う(地域・年代)、定性の調査で数字が無い、などを書く |
| させないこと | 理由 |
|---|---|
| 調査をまたいだ数字の合算・平均 | 対象と時期が違う数字は足せない |
| 結果の解釈・企画への示唆 | 解釈は企画の担当と経営企画が行う |
| 図表から読めない数字の補足 | グラフの数字が文章に無ければ「原本で確認」と書く |
| 調査の条件の推測 | 票に無い回答数や対象を書かない |
| 「該当なし」の言い換え | 近い調査が無いときに、関係の薄い結果で埋めない |
1行目が、いちばん外せない線です。 2023年の首都圏の調査で55%、2025年の全国の調査で62%と並ぶと、AIは「おおむね6割前後」とまとめます。その一文が企画書に載ると、どの調査にも無い数字が根拠のように使われます。
最後の行も大事です。 当たったページが問いと関係が薄いとき、AIは手元の結果を問いに合わせて説明しがちです。「該当なし」は、新しい調査が要るという大事な結論です。
指示内容を固定する
あなたは生活用品メーカーの経営企画部で、社内の調査レポートから調査結果を探す係です。
渡された検索結果だけを根拠にしてください。一般的な市場の知識で補わないでください。
【問い】{question}
【検索結果】レポートごとに、調査の条件(実施時期、対象、回答数、手法、種類)と、当たったページの文章
【レポートごとに書くこと】
1. 問いに関係する結果を、ページの文章のまま短く。根拠のページ番号を付ける
2. その結果の調査の条件(実施時期、対象、回答数、手法)
3. 注意:実施から3年超、対象が問いと違う、定性の調査、数字がグラフにしか無い など
【厳守事項】
- 複数の調査の数字を足したり、平均したり、「おおむね〜」とまとめたりしないでください。
- 結果を解釈したり、企画への示唆を書いたりしないでください。
- ページの文章に無い数字を書かないでください。グラフにしか無ければ「原本で確認」と書いてください。
- 調査の条件は検索結果の値をそのまま写してください。無ければ「票に記載なし」と書いてください。
- 問いに関係する結果が無いレポートは書かないでください。
1本も無ければ「該当なし」とだけ書いてください。
「おおむね〜とまとめない」を明記しないと、AIは親切に要約します。 合算や平均を禁じるだけでは、「いずれの調査でも過半数が」のような言い方でまとめます。まとめる言い方そのものを禁じます。
検索結果は、Claude の検索結果ブロックで渡します。 当たったページ1つを1つの search_result にし、source にレポートの番号とページ番号、title に調査名と実施時期、content にページの文章と調査の条件を入れます。引用を有効にすると、答えの文に、渡した source と title の引用が付きます。 引用は既定で無効で、1つのリクエストの検索結果はすべて同じ設定にします。
出力形式を固定する
検索は、次のように組みます。
GET /reports/_search
{
"size": 8,
"_source": { "excludes": ["pages"] },
"query": { "bool": {
"filter": [ { "range": { "fielded_on": { "gte": "now-5y/d" } } } ],
"must": { "nested": {
"path": "pages", "score_mode": "max",
"query": { "neural": { "pages.embedding": {
"query_text": "共働き世帯の平日の夕食の準備時間は短くなっているか",
"model_id": "<model_id>", "k": 50 } } },
"inner_hits": { "size": 3, "_source": ["pages.page", "pages.heading", "pages.text"] }
} }
} }
}
score_mode を max にしているのは、レポートの点数をいちばん近いページで決めるためです。 公式のドキュメントでは、入れ子の文書の点数を全部取ると親の文書の点数は既定で平均になり、最も高い点数を使うには score_mode を max にします。平均にすると、関係の無いページの多い分厚いレポートほど下がります。
inner_hits は、当たったページを返すために付けます。 公式のドキュメントでは、入れ子の項目で当たった文書は、既定ではどの入れ子の要素が当たったかを返さず、inner_hits を付けると返ります。
画面に返す形は、次のJSONです。
{
"question": "共働き世帯の平日の夕食の準備時間は短くなっているか",
"results": [
{ "report_id": "R-2025-014", "title": "", "fielded_on": "2025-02",
"survey_type": "定量", "population": "全国 25〜49歳 共働き世帯の女性・男性",
"sample_size": 1200, "method": "インターネット調査",
"findings": [ { "text": "", "page": 31 } ],
"cautions": ["数字はグラフのみ。原本で確認"] },
{ "report_id": "R-2022-006", "title": "", "fielded_on": "2022-06",
"survey_type": "定性", "population": "首都圏 30代 共働き世帯", "sample_size": 12,
"method": "訪問インタビュー",
"findings": [ { "text": "", "page": 8 } ],
"cautions": ["実施から3年超", "定性の調査"] }
],
"no_match": false
}
1つ目の理由は、調査の条件を結果と同じ要素に入れられることです。 画面でも企画書への写しでも、結果と条件が別れません。 第3章の(c)がここで止まります。
2つ目は、cautions で注意を項目として出せることです。 「定性の調査」「実施から3年超」が画面の色で分かります。
3つ目は、no_match で「該当なし」を記録できることです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 取り込みのフォルダ | 保存の通知 | レポートと調査の条件の票 |
| Amazon S3 | 保存 | 原本と票。根拠のリンク先 |
| Amazon OpenSearch Service | 取り込みのパイプライン/検索 | ページのベクトル、入れ子の検索、文書レベルのセキュリティ |
| Amazon Bedrock | ML Commons のコネクタ | ページと問いのベクトル |
| Claude API | Lambda からの呼び出し | 結果の書き出しと条件の添付 |
| 社内のポータル | 画面からの呼び出し | 問いを受け、結果を返し、「該当なし」を記録する |
人が確認する
この構成の確認は、必須です。 調査の結果は、企画の判断の根拠になります。
- 調査の条件の票を確かめる … 取り込みのときに、調査の担当が票の時期・対象・回答数を調査概要のページと見比べます
- 根拠のページを開く … 企画の担当が、使う結果のページを原本で開き、数字と文脈を確かめます
- 条件を企画書に写す … 結果を使うときは、実施時期・対象・回答数を必ず一緒に写します
- 購入レポートの使い方を確かめる … 社外に出す資料に使うときは、経営企画に利用の範囲を確かめます
2番目を省かないでください。 ページの文章が当たっていても、グラフの数字は文章に無いことが多く、AIの書き出しは図表のタイトルまでです。
1件あたり14分を目安にします。 結果の一覧を読み、使う結果のページを2〜3枚開いて確かめる時間です。
調査の担当は、月に1回、よく当たるレポートの票を見直します。 多くの問いの根拠になるレポートほど、票の誤りが多くの企画書に広がります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 当たるページが無い | 「該当なし」を返し、記録する。関係の薄い結果で埋めない |
| 調査の条件の票が無いレポート | 取り込みで止め、調査の担当に知らせる |
| 文章の無いページ(画像だけ) | ベクトルを作らず、調査の担当に図表のタイトルの書き足しを頼む |
| 見る権限の無いレポートだけが当たる | 結果は出さず、「経営企画に問い合わせ」とだけ返す |
| 同じ調査の速報版と最終版がある | 最終版を残し、速報版は索引から外す |
| 問いが単語だけ | 検索は行い、「〜は〜か」の形で入れ直すと当たりやすい旨を添える |
| 票に回答数や対象が無い | 結果は出し、「票に記載なし」と添える。調査の担当に票の書き足しを頼む |
| Claude の呼び出しに失敗した | レポートの一覧と当たったページの番号をそのまま出す |
4行目で、権限の無いレポートの存在を示すのは、同じ調査の発注を避けるためです。 中身は見せませんが、経営企画に聞けば使えるかもしれないことは伝えます。
記録を残す
- 取り込んだレポート、調査の条件の票、止めたものとその理由
- 問い、検索の結果(レポートとページ)、Claude の答えと引用
- 「該当なし」になった問い
- 企画の担当が原本を開いたページ
3つ目は、調査の計画の材料です。 経営企画が四半期ごとに「該当なし」の問いを並べ、次に行う調査の候補にします。 同じ問いを複数の事業部が持っていれば、1つの調査にまとめられます。
04実装レベルの3段階
半自動化で、①と②の探す時間は大きく減ります。 ただし当たったページを読んで結果と条件を書き出す作業は人が行います。本格構成で1件14分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化で1か月使うと、図表のタイトルが文章に無いレポートと、票の書き方の揺れが先に見つかります。そこを直してから結果の書き出しを足すほうが、企画の担当が答えを信用しやすくなります。
05工数削減シミュレーション
導入後 90件 × 14分 ÷ 60 = 21 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 毎年いくつもの市場調査・顧客調査を自社で行い、調査会社のレポートも購入している製造業・小売業・IT企業で、過去のレポートが共有フォルダに数百本たまっているのに、企画のたびに同じような調査を発注し直している場合。どの調査に何が書かれているかを、調査の担当者の記憶に頼っている場合。購入したレポートの社内での利用範囲を、仕組みで守りたい場合。AWS を使っており、検索基盤と埋め込みを同じ環境で動かせる場合。
- 調査のレポートが年に数本で、担当者が全部を覚えていられる場合。調査の生データ(回答の一件ごとの表)を集計し直したいのが目的で、レポートの文章や図表から探す必要が無い場合。購入したレポートの契約で、社内の検索の仕組みへの取り込みが認められていない場合。なお、企画に使うかどうかの判断と、調査の結果をどう解釈するかは企画の担当と経営企画が行い、この構成はそれを代わりに行いません。
07最小構成で試す方法
- 過去1年に企画の担当から調査の担当へ来た問い合わせを10件書き出す
- その10件に答えたときに使ったレポートを含め、関係しそうなレポートを20本選ぶ(購入レポートは利用の範囲を確かめてから)
- 手元のAIサービスに数本ずつレポートを渡し、「この問いに関係する結果を、ページ番号と調査の時期・対象・回答数付きで挙げてください。調査をまたいでまとめないでください。無ければ該当なしと書いてください」と指示する
- 調査の担当が当時答えた結果と見比べる
| 出てきた内容 | 判断 |
|---|---|
| 当時の結果が、正しいページ番号で挙がる | ページの索引と入れ子の検索の構築に進む |
| 調査をまたいで数字をまとめる | 指示の書き方で直る。構成は有効 |
| グラフが画像で、関係するページに当たらない | 図表のタイトルを文章にするのが先。 検索の問題ではない |
3行目は、調査会社によって大きく違います。 図表のタイトルと注記が文章で入っているレポートと、全部が画像のレポートがあります。画像だけのレポートが多い調査会社には、次の発注から文章での納品を頼みます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 分厚いレポートが下に沈む | score_mode を max にする。既定は平均 |
| どのページが当たったか分からない | inner_hits を付ける。既定では返らない |
| 根拠のページ番号が出せない | 自前でページごとに分け、番号を持たせる |
| 長いレポートの後半が当たらない | text_chunking を使うなら max_chunk_limit を見る。既定100で超過分は最後の塊へ |
| ベクトルが入れ子の外にできる | text_embedding の出力の項目は名前だけで書く |
| AIが調査をまたいでまとめる | 合算・平均・「おおむね」を禁じる |
| グラフの数字が出てこない | 図表のタイトルと注記を文章で持つ。数字は原本で確かめる |
| 購入レポートが範囲外の人に見える | 文書レベルのセキュリティで利用の範囲ごとに絞る |
1行目が、この構成でいちばん気づきにくい失敗です。 検索は正しく動き、数十ページのうち1ページだけが関係する分厚い報告書が、平均で点数を下げられているだけです。上位に薄いレポートばかり並んだら、まず score_mode を疑ってください。
5行目は、最初の取り込みでよく起きます。 公式のドキュメントでは、出力の項目を完全な経路で書くと、入力のある入れ子の中にもう一段の経路として作られるとされています。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 自社で行った調査の結果、調査会社に委託した調査、購入した業界のレポート、インタビューの記録です。インタビューの記録には、回答者の発言が含まれます。
- 購入レポートの利用の範囲を守る … 文書レベルのセキュリティは、役割ごとに検索や取得で読める文書をクエリで決めます。
license_scopeとowner_deptで、見られる人を契約の範囲に絞ります - 社内の検索への取り込みが契約で認められているかを先に確かめる … 認められていないレポートは取り込みません
- インタビューの回答者を特定できる情報を入れない … 発言録は、回答者の名前や勤め先を除いたものを取り込みます
- 外部のAIに渡す範囲を確かめる … Claude に渡すのは、当たったページの文章と調査の条件だけです。購入レポートを渡してよいかも、契約で確かめます
- 結果の解釈をAIに任せない … 解釈と企画の判断は人が行います
なお、文書レベルのセキュリティは読み取りにだけ効き、書き込みの権限を持つ役割は隠れた文書も更新・削除できるとされています。取り込みの処理の権限と、企画の担当の検索の権限は分けてください。
誤りが起きた場合のリスクは、条件の違う数字を根拠に企画を判断することと、利用の範囲を超えて購入レポートを使うことの2つです。 前者は条件の添付とまとめの禁止で、後者は文書レベルのセキュリティと取り込み前の契約の確認で防ぎます。
10まず何から始めるか
1週目:レポートの中身を数える
過去3年のレポートから30本を選び、図表のタイトルと注記が文章で入っている割合を数えます。調査会社ごとに分けて数えます。
2週目:10件の問いで試す
最小構成で、過去の問い合わせ10件をAIサービスに試します。調査をまたいで数字をまとめていないかを最優先で見ます。
3週目:調査の条件の票と利用の範囲を決める
票の項目と書き方を決め、購入レポートの契約の写しを集めます。社内の検索への取り込みが認められているかを、契約ごとに確かめます。
4週目:ページの索引と入れ子の検索を作る
自社の調査の100本で、ページの索引と入れ子の検索を作ります。10件の問いで、当時使った結果のページが上位に出るかを見ます。
2か月目: 結果の書き出しと、文書レベルのセキュリティを足し、購入レポートを取り込みます。3か月目以降: 社内のポータルで全事業部に開き、「該当なし」の問いを四半期ごとに並べます。企画の担当が、調査の担当に聞かずに社内の調査結果を条件付きで見つけられるようになり、「該当なし」の一覧から次の調査の計画が立つようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
入れ子の項目で1つの文書に複数のベクトルを持たせられ、問いに最も近い入れ子のベクトルで文書を結果に含めるかが決まること。既定ではどの入れ子の要素が当たったかを返さず、inner_hits で返ること。全部の点数を取ると親の点数は既定で平均になり、score_mode の max で最も高い点数を使えること | OpenSearch Documentation: Nested field search | 2026-10-07 |
text_embedding の処理で入れ子の項目を指定するとき、入力は完全な経路、ベクトルの項目は名前だけで書き、ベクトルが入力と同じ入れ子に入ること。完全な経路で書くともう一段の経路になること | OpenSearch Documentation: Text embedding processor | 2026-10-07 |
text_chunking の処理の max_chunk_limit の既定が100で、超えた分の文章が最後の塊に足されること | OpenSearch Documentation: Text chunking processor | 2026-10-07 |
多くの埋め込みのモデルに入力の長さの上限があり、長い文章を分けて塊ごとにベクトルを作ること。入れ子のベクトルの検索で score_mode の max が勧められていること | OpenSearch Documentation: Text chunking | 2026-10-07 |
文書レベルのセキュリティが役割ごとに読める文書をクエリで決め、${user.roles} などの変数を使えること。複数の役割の絞り込みが論理和で結ばれること。読み取りにだけ効き、書き込みの権限を持つ役割は隠れた文書も更新・削除できること | OpenSearch Documentation: Document-level security | 2026-10-07 |
Amazon OpenSearch Service から Amazon Bedrock の Cohere Embed をコネクタでつなげること。多言語が要る場合に cohere.embed-multilingual-v3 を使えること | OpenSearch Documentation: Semantic search using Cohere Embed on Amazon Bedrock | 2026-10-07 |
検索結果ブロック(source・title・content)で引用付きの答えが返ること。引用が既定で無効で、1つのリクエストの検索結果はすべて同じ設定にする必要があること | Claude Docs: Search results | 2026-10-07 |
購入したレポートの社内での使い方は、各契約の定めに従ってください。 本記事は公開仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0853)についてのご相談はこちらから。
