【miibo】ナレッジデータストア利用におけるチャンクの課題と解決策


著者：株式会社st4system  
企画・監修：私( @hiro-matsumoto )


（2025.2.4 追記）
miiboの [2025年2月 miiboリリースノート](https://miibo.readme.io/changelog/2025%E5%B9%B42%E6%9C%88-miibo%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%83%8E%E3%83%BC%E3%83%88)「ナレッジデータストアの全文採用機能」が新機能としてリリースされましたので、
早速チェックを付けて有効にしましたところ、
「GPT-4o-mini」でも「社長の提言集について（年度別一覧）」が正確に取得できるようになりました！

---
![hero.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/5870a995-e06d-2750-8a8d-6b19ad65dd1a.png)

## はじめに
AIチャットボットプラットフォーム「miibo」を利用して社長発信ブログのまとめボットを開発する中で直面した課題と、その解決プロセスをご紹介します。  
特に、年度ごとに蓄積されるナレッジ記事を正確に取得・表示する上で生じた問題と、その対処法に焦点を当てています。  
具体的には、ナレッジデータストアの設定やモデルの選択など、実際の開発・運用で発生したトラブルシューティングの経験をまとめました。

## 課題の背景
miiboのエージェント機能を用いて、ユーザーがクイックリプライ（ボタン）から年度を選択すると、その年度に投稿されたナレッジ記事の一覧を表示するというシンプルなUIを想定していました。

しかし、実際の運用では、以下のような問題が起こりました。

1. 年度別のナレッジが期待どおり表示されない  
2. 年度によって表示件数が大きく異なる  

これらの不具合はユーザー体験を損なうため、早急に原因究明と対策が必要でした。

## 環境
- **プラットフォーム**：miibo  
- **主な機能**：クイックリプライ（ボタン）による年度別一覧表示
<span />

- **プロンプトエディタ（RAG）への入力内容**：
```
#  「社長の提言集について（年度別一覧）」の動的クイックリプライ
- 1. ユーザーから「社長の提言集について（年度別一覧）」の発言があった際に、
「社長の提言集を年度別に表示します。」と返答するとともに、
全ての<item>の項目から、取りこぼしなく全ての値を、次のフォーマットで、出力してください。

[${<pubDate>の年月日から。フォーマット:YYYY} 年度]<br>
${<pubDate>の年月日},<a href="${<link>のURL}">${<title>の内容}</a><br>
${<pubDate>の年月日},<a href="${<link>のURL}">${<title>の内容}</a><br>

このように続けて出力してください。
```

- **ナレッジデータ**：  
  - 「社長の提言集サイト」のRSSフィード（全投稿を出力）
![rss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/c77bcc0b-d019-a0b7-7aa8-316ab88790df.png)

## 発生した具体的な問題と解決プロセス

### 課題1：出力結果の不完全性

#### 問題の発見
クイックリプライにある「社長の提言集について（年度別一覧）」を選択すると、以下のように期待されるデータ数と実際の出力数に差がありました。

```
2024年度：
・期待出力数：7
・テスト出力数：6

2023年度：
・期待出力数：9
・テスト出力数：4

2022年度：
・期待出力数：21
・テスト出力数：3
```

表示に欠落があることから、主に次の2点が原因として考えられました

- １. **データ取得の制限**  
   - ナレッジデータストアの設定やシステム側で上限がかかっている可能性  
   - 「一度に取得できるデータ数」に何らかの制限がある可能性  
<span />

- ２. **データ処理の問題**  
   - 取得後の処理過程で一部のデータが欠落している可能性  

#### 調査プロセス
- １. **ナレッジデータストア設定の確認**  
   - miibo管理画面 > エージェント設定 > 「AIによる応答」セクションにある「1度で使用するデータの数」の設定値を確認  
   データの数![data_count.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/822bbc4e-b48d-e688-352d-fa581f49f973.png)
<img src="attach:data_count.png">

- ２. **期待するデータ量との比較**  
   - 年度別に本来取得したい投稿数と設定値を照らし合わせ、十分な上限が設定されているかを調べる

#### 調査結果
- ナレッジデータストアの取得設定はデフォルト値の「0（自動調整）」になっていた  
- miiboのドキュメントによると、0は自動調整を意味し、0〜30の範囲で指定できるとのこと  
- 今回の使い方では、自動調整が期待値どおりに機能しない場合があると判明

#### 応答で使われた知識

#### 改善前
![knowledge_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/1bfc2608-8dfb-2159-e501-8be961407be5.png)

#### 解決アプローチ
- データ取得量を明示的に指定し、必要なデータを確実に取得できるように設定変更  
- 今回のナレッジの合計文字数は17,166文字であり、ナレッジデータストアに格納されるテキストは1,000文字の塊に分けて処理されるため、最大で18チャンクを必要データ数として設定すれば漏れなく取得できると考えられる  
  - ※18チャンクすべてをナレッジに入れる場合、実質すべてのナレッジをプロンプトに入れることになるため、RAGのメリットがあまりありません。そのため、チャンク化を行う前の前処理などを実施することを推奨いたします

#### 改善結果
設定変更後、2022年度と2023年度に関しては期待どおりデータを取得できるようになりましたが、2024年度の一部データのみ欠落する現象が続きました。そこで、さらなる原因究明を進めることにしました

```
2024年度：
・正解出力数：7
・テスト出力数：2

2023年度：
・正解出力数：9
・テスト出力数：9

2022年度：
・正解出力数：21
・テスト出力数：21
```

#### 改善後
![knowledge_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/15a6ae01-8312-d1c6-2d26-20498a4e732f.png)

### 課題2：モデルによる出力の不安定性

#### 問題の発見
ナレッジデータストアからはすべてのデータを取得できているものの、実際の応答メッセージとして返されるリストに欠落がありました

#### 調査プロセス
- １. **出力パターンの分析**  
   - 新しい年度ほど欠落しやすい状況を確認  
<span />

- ２. **モデルの動作確認**  
   - 当初は GPT-4o-miniを用いて検証  
   - 同じプロンプトでも、別のモデルを用いた場合は違う結果が得られるかをテスト  

**なお、プロンプトの大幅な見直しは行わず、同じ構成を保ったままモデルの違いを検証しています**

#### 解決アプローチ
- **モデル切り替えテスト**  
  - GPT-4o-miniからGPT-4oへ切り替え、同じプロンプトで出力の安定性を確認  
- **必要最小限のプロンプト整備**  
  - GPT-4o-miniが出力を省略する傾向があるのかを検証するため、期待する出力をプロンプトに直接入れ、おうむ返しを行ったときの出力を確認

#### 改善結果
実際に GPT-4o へ切り替えた結果、すべての年度のデータが期待どおりに返ってくるようになりました。最終的なテスト結果は以下の通りです。

```
2024年度：
・正解出力数：7
・テスト出力数：7

2023年度：
・正解出力数：9
・テスト出力数：9

2022年度：
・正解出力数：21
・テスト出力数：21
```

また、GPT-4o と GPT-4o-miniで取り扱えるコンテクストサイズは大きく変わらないとされています。今回の改善要因としては、**モデルが持つ内部ロジックの違い**によって結果が安定したと考えられます。

## 得られた知見

- １. **ナレッジデータストアの特性理解**  
   - デフォルト設定（0：自動調整）が実運用に合わない可能性を認識  
   - 必要に応じて一度の会話で使用するデータの数を明示的に指定する
<span />

- ２. **モデル切り替えの有効性**  
   - GPT-4o-mini と GPT-4o は、モデル内部の処理や応答傾向が異なる場合がある  
   - プロンプトが長文になるケースへの対応で、切り替えが効果的に働くことがある
<span />

- ３. **最小構成でのテスト結果からの示唆**  
   - GPT-4o-mini であっても、ナレッジを直接プロンプトに入れる“最小構成”であれば、問題なく全文を出力できることを確認  
   - ナレッジを効率よく取得・処理することで、GPT-4o-miniでも安定した応答が可能だと示唆される

## まとめ
今回、miiboのナレッジデータストアを活用したチャットボット開発で生じた問題を、以下のように解決しました

- １. **事象を正確に把握**  
   - どの年度のデータがどの程度漏れているかを数値で確認  
<span />

- ２. **ナレッジデータストア設定を最適化**  
   - 自動調整（0）ではなく明示的に上限を指定し、必要なデータをすべて取得可能にする  
<span />

- ３. **モデル切り替えによる再検証**  
   - GPT-4o-mini から GPT-4o への切り替えを実施  
   - 大幅なプロンプト変更は行わずとも、結果が安定する事例を確認  

これらの対応から、**設定だけでなくモデルの特性に着目する**ことが、安定したチャットボット応答を実現するために非常に重要であるとわかりました。  
今後も新しい投稿が増えるたびにテストを行い、最適な設定・モデル活用を維持することが求められます。

## 参考資料
- [miibo ナレッジデータストア](https://miibo.readme.io/docs/rag%E6%A7%8B%E7%AF%89%E3%83%8A%E3%83%AC%E3%83%83%E3%82%B8%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B9%E3%83%88%E3%82%A2%E3%81%AE%E5%88%A9%E7%94%A8)  
- [miibo チャンクの制御](https://miibo.readme.io/docs/rag%E6%A7%8B%E7%AF%89%E3%83%8A%E3%83%AC%E3%83%83%E3%82%B8%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B9%E3%83%88%E3%82%A2%E3%81%AE%E5%88%A9%E7%94%A8#%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%AE%E5%88%B6%E5%BE%A1)