AIの判断精度を向上させるために知識を参照できるMCPを作った
AIの自動化を進める中で、要求に対する最適な手段を決める「判断」がなかなか収束せず、思うような結果が得られない課題に直面していました。
この判断精度を上げるために、AIが自律的に参照できる知識システムをMCPで構築したので、そのまとめ。
毎回プロンプトで人間が指示するのではなく、AIが自身の判断で必要な知識を参照できるようにすることで、より精度の高い判断ができるようになるのではないかと考えたアプローチです。
AIの自動化をずっと実現したいんですが、判断が絡むところがどうしても発散しがちで、どうしても収束してくれない問題に絶賛はまっています。
どうにか自動化できないか、以前にマルチエージェントでの自動化を試していました。Anthropicのこの辺りを参考にしつつ。
How we built our multi-agent research system
この時作ったマルチエージェントの具体的な仕組みとしては、
- マネージャーエージェント、計画エージェント、レビューエージェント、調査エージェントみたいな感じでプロンプトを分ける
- 要求や要望を入力
- マネージャーエージェントがループで処理して「いい感じ」と判断したら完了
というもの。マルチエージェントワークフローみたいなものです。
一定期間使いつつ回してみましたが、思ったような手段を提案してくれませんでした。
具体的な問題として:
- 過大評価: 必要以上に大がかりな計画が提案される
- 不十分: 逆に簡素すぎて実用性に欠ける内容
- 非効率: 明らかに遠回りなアプローチの推奨
エージェントを複数立ててループ処理しても、根本的な判断の精度は改善されませんでした。
原因を考えてみたところ、技術的な仕組みやプロンプトの改善余地もあると考えられますが、最も大きな要因は自分の思考パターンや判断軸がAIに適切に伝わっていないことだと推測。この点が共有されていないためにずれてしまい、結果として判断が異なると判定してしまうのかなと。
この課題を解決するために、本システムを開発しました。
シンプルなドキュメント参照MCPサーバーとして実装しました。
- 自律性: AIが必要と判断したタイミングで能動的に情報にアクセスできる
- 直接性: 人間の介在や明示的指示なしに情報を参照できる
- 汎用性: プロジェクトやディレクトリに依存せず、どこでも使える
システムは3つのコンポーネントで構成されています:
1. Web UI(メモリ管理)
人間が知識ドキュメントを登録・編集・管理するためのUIです。
2. MCPサーバー(AI向けツール)
AIが使用できる2つのツールを提供:
list_memories
: 利用可能なメモリの一覧を取得get_memory
: 特定のメモリの詳細情報を取得
AIが自身の判断で「この情報が必要かも」と考えたタイミングで、能動的にメモリを参照します。
3. ログシステム
ツールの使用ログを記録・表示し、AIの情報参照パターンを可視化できます。
AIに適切にメモリシステムを活用してもらうため、グローバルなCLAUDE.mdに以下のガイドラインを設定しました:
# Memory-Aware Agent Guidelines
## memorypシステムの活用方針
**memorypには、オーナーの思考パターン、判断基準、価値観、方針、利用可能なリソースなどが記録されています。** あらゆるタスク実行時に積極的に参照し、オーナーの潜在的意図に沿った行動・判断を行ってください。
### 参照タイミング
- **タスク開始時**: `list_memories`で関連メモリを特定
- **計画・判断時**: アプローチ選択や優先順位決定前に関連方針を確認
- **迷った時**: オーナーの過去の判断基準や価値観を参照
### 活用方法
1. `list_memories`で関連しそうなメモリを特定
2. `get_memory`で詳細確認し、行動方針に反映
3. 手段選択、進め方、品質基準の指針として活用
### 効率的な利用
- **初回のみ取得**: 一度取得したメモリは記憶し、覚えている場合は同じ会話内では再取得不要
- **必要時のみ参照**: 関連性が明確な場合のみメモリを取得
- **適切な範囲**: 全メモリを取得するのではなく、タスクに関連するもののみに絞る
### 判断領域の例
- 手法・ツール選択
- 品質・優先順位の判断
- コミュニケーション・進行方法
- アウトプットの形式・粒度
### 注意点
- 関連性が低いメモリは無理に参考にしない
- 複数メモリがある場合は統合して判断
- 情報の新しさを現在の状況と照らし合わせる
**目標**: 単なるタスク完了ではなく、オーナーの価値観に沿った最適解の提供
まだ使い始めたところで、精度向上などは不明。とりあえず登録情報も少ないので、随時増やして検討。
以下あたりを追加したいと考えているので、このあたりも追加して様子を見ていきたいと思っています。
テキスト検索でのドキュメント取得 欲しいと思った情報を効率的に探せるように、テキスト検索機能をつける。
今はlist_memoriesでメモリ一覧を取得していますが、これだと毎回メモリ一覧を取得する必要があって非効率。欲しいと思った情報に関連するドキュメントを効率よく探せるように、テキスト検索やベクトル検索に対応したい。
AI主導のメモリ管理 AIが自分でメモリを登録・編集できるようにする。使っていたり、やり取りをした結果「この情報が定期的に欲しい」と思ったら、AIが自発的にメモリとして蓄積してくれるような仕組み。
使用パターンの可視化 ツールのログから使用頻度を確認できる簡単なダッシュボード。どのメモリがよく参照されて、どれが使われていないかが分かれば、メモリの整理にも役立ちそう。
メタ情報の収集 ログ登録時に「なぜそのメモリを参照したか」の理由や、「欲しいけど存在しない情報」をAIに自発的にメモしてもらう。これがメモリ追加の判断材料になって、徐々にAIにとって使いやすいメモリセットが育つのではないかと期待しています。
とりあえずミニマムな形は動くようになったので、実際に使いながら改善していこうと思います。