
Zendeskの過去のチケットをNotebookLMで参照するRAG環境を構築してみた
こんにちは、業務効率化ソリューション部の入井です。
Zendeskを利用していて「過去のあの問い合わせ、どう対応したっけ?」と探すのに手間取った経験はありませんか?
今回、そんな時に役立つかもしれない、対話形式で過去のZendeskチケットの内容を検索・活用できる、いわゆるRAG環境をNotebookLMで構築する検証を行ったので、その手順をご紹介します。
なお、今回の記事は、Backlogの課題で同様の仕組みを作った以下の記事を参考にさせていただいています。
全体像
今回は、以下のような手順で検証しました。
- Zendeskのチケット情報をMarkdown形式で出力(自作ツールによりZendesk API経由で取得)
- 出力したMarkdownファイルをNotebookLMの「ソース」としてアップロード
- NotebookLMにて、過去の問い合わせ内容などへの質問が適切に回答されるか確認
検証のために作成したツール
今回の検証にあたり、Node.js(TypeScript)で以下のツールを作成しました。
-
- Zendeskのチケット情報(件名、コメントのやりとりなど)を取得し、1つのMarkdownファイルとして出力するCLIツール
- 特定のタグやフォームでチケットをフィルタリング可能
- NotebookLMが解釈しやすいように、情報を整理してフォーマット
-
- Zendesk APIを使用するためのクライアントライブラリ
- 単純なAPIリクエストだけでなく、Rate Limitを考慮したリクエスト制限機能なども実装
- 上記のZendesk Exporterが内部的に利用
いずれのツールもClaude CodeによるVibe Codingメインで作成しました。
生成AIの力で爆速で開発をすることができましたが、実際に活用する中で気づいた点が色々ありますので、こちらは別ブログ記事で書きたいと思います。
実際の検証手順
Zendeskのチケット情報出力
最初に、Zendesk Exporterのリポジトリをクローンし、依存パッケージをインストール後、ビルドを実行します。
git clone https://github.com/iridon0920/zendesk-exporter.git
cd zendesk-exporter
npm install
npm run build
準備が整ったら、以下のようにコマンドを1つ実行するだけでチケットのエクスポートが開始されます。なお、今回は検証のため「検証用インポート」というタグを持つチケットのみを出力するよう指定しています。その他、特定フォームに紐づくチケットのみ出力することも可能です。
npx zendesk-exporter tickets --subdomain 該当Zendeskサブドメイン --email エージェントのメールアドレス --token APIトークン --tags 検証用インポート
コマンドが正常に完了すると、プロジェクト内にtickets.mdというMarkdownファイルが生成されます。(--outputオプションで出力パスは調整可能)
以下の例のようなフォーマットで各チケット内の情報が出力されるようになっています。
# チケット #1226: キーボードの一部のキーが反応しません
## 基本情報
| 項目 | 値 |
|------|-----|
| チケットID | 1226 |
| ステータス | closed |
| 優先度 | normal |
| タイプ | N/A |
| 作成日時 | 2024/05/21 01:00:00 |
| 更新日時 | 2025/06/28 19:01:46 |
| 作成者 | irii-test-2 |
| 担当者 | 入井 啓太 |
| タグ | 検証用インポート |
## 説明
「A」と「Q」のキーだけが反応しなくなりました。飲み物などはこぼしていません。
## カスタムフィールド
## コメント履歴
### irii-test-2(リクエスタ) - 2024/05/21 01:00:00
「A」と「Q」のキーだけが反応しなくなりました。飲み物などはこぼしていません。
---
### 入井 啓太(エージェント) - 2024/05/21 01:15:25
お問い合わせありがとうございます。
一度、別のUSBポートにキーボードを接続するか、可能であれば別のPCでキーボードが正常に動作するかご確認いただけますでしょうか。それで問題が解決しない場合は、キーボード自体の故障の可能性が高いです。
---
### irii-test-2(リクエスタ) - 2024/05/21 18:50:14
別のPCに繋いだら同じキーが反応しませんでした。キーボードの故障のようです。買い換えようと思います。ありがとうございました。
---
なお、今回の検証で使用したチケットの内容についても、生成AIを使って作成しました。このような適度にそれらしいダミーデータの作成にも生成AIは非常に有効です。
NotebookLMへのアップロード
出力したMarkdownファイルをNotebookLMにアップロードします。
NotebookLMにアクセスして新しいノートを作成したら、「ソース」の追加ボタンから先ほど生成されたMarkdownファイルをアップロードしてください。
すると、以下のような環境ができあがります。ファイルアップロード以外に特に操作はしていないのですが、ソースデータを自動的に解釈して、ノートについての分かりやすい解説を生成してくれています。
NotebookLMでの動作確認
構築した環境で実際に過去の問い合わせについて質問してみます。
上記のMarkdown出力例に記載されている「キーボードの特定のキーが反応しない場合の対処法は?」という内容で質問してみます。
すると、NotebookLMはソース内の過去チケットデータから関連する情報を探し出し、以下の画像のように原因と解決策を要約して提示してくれました。回答テキスト中の①や②というボタンをクリックすることで、回答の出典となったソースの具体的な箇所も参照可能で、回答の信頼性も確認しやすくなっています。また、IDも出力されているので、必要に応じて実際のZendeskで該当チケットを確認することも可能です。
次に、問い合わせ傾向の分析もしてみました。
「PCのトラブルについての問い合わせは、どのようなものが多いですか?」という質問に対して、以下の画像のように分かりやすく分類して傾向を提示してくれました。
このような定性的な分析は、FAQの拡充や機能改善のヒントを得るのに役立ちそうです。
もちろん万能ではなく、NotebookLMのAIが複数のソースを結合して情報を解釈した結果、少しズレた回答をしてしまうケースがありました。NotebookLMは、特定のソースをもとに回答させることでいわゆるハルシネーションを起こしにくくなっていますが、それでも誤回答のリスクはあるようです。対策としては、やはりAIの回答をそのまま鵜呑みにせず、出典元をきちんと確認することが必要になりそうです。
また、以下の記事ではNotebookLMでのハルシネーションのリスクをプロンプト等の工夫によって軽減する方法が紹介されており、参考になります。
パフォーマンス面では、ソースのデータ量が大きい場合、質問から回答までかなりの時間がかかってしまうこともあります。こちらはノートごとに適切な役割分担をし、登録するソースの量が多くなりすぎないように調整することで改善が見込めます。
さいごに
今回の検証を通して、手軽にRAG環境を構築するためのツールとしてNotebookLMの便利さを実感しました。自然言語で柔軟な検索が実現できるため、従来の検索よりも遥かに情報が探索しやすくなっています。
今回はZendeskで試しましたが、他のサービスでも同様の仕組みは簡単に構築できそうです。
なお、今回は手動でNotebookLMへソースを登録しましたが、将来的にNotebookLMのAPIが公開されれば、チケットのエクスポートからソースへの登録までを完全に自動化することが可能です。例えば、チケット情報を定期的にNotebookLMに同期する仕組みを構築すれば、自然に成長するナレッジベースが簡単に実現できそうです。
今回作成したツールはGitHubで公開していますので、気になる方はぜひ試してみてください。