ローカルMarkdown文書を対象としてVector検索したい:続AIエージェントとMCPサーバを作る
(情報開示と免責)
- 私の所属はLINEヤフー社で、25年4月からLINEミニアプリの事業戦略に携わっています
- コーディング、投稿・記事の作成に社内のコードやドキュメントは人/AIともに参照・接続せず公開情報のみ利用しています
- ここでの投稿は私個人のものなので、特に明示しない限り所属する企業や団体には一切関係ありません
Claude Desktop (Model: Claude 3.7 Sonnet)でAIと一緒に仕様を検討する
仕様(要件)の作成とコーディング・実装は分担しようと思う。
- 仕様(要件)の作成:試行錯誤するためにサブスクの範囲でClaude Desktop(や適宜他のAI Chat)を利用
- コーディング・実装:まだここまで行ってないが、Claude CodeかCline (Roo Code)を使うつもり
Claude Desktop上で仕様・要件ドキュメント(英文のMarkdown)をArtifactとして作成する。
Claudeは仕様検討時にサンプルコードを作成したがるけど、実装時の柔軟性を残すために仕様・要件ドキュメントは抽象的な内容にしてもらうよう指示した。
そういえば既存の他のソリューション候補は無いのか調べてみる。
MCPサーバ一覧のmodelcontextprotocol/servers: Model Context Protocol Serversから、 vector
でページ内検索すると以下が候補としてあった。
Third-Party Servers
Official Integrations
- Chroma - Embeddings, vector search, document storage, and full-text search with the open-source AI application database
- Milvus - Search, Query and interact with data in your Milvus Vector Database.
- Qdrant - Implement semantic memory layer on top of the Qdrant vector search engine
- Vectorize - Vectorize MCP server for advanced retrieval, Private Deep Research, Anything-to-Markdown file extraction and text chunking.
Chromaを試してみる。
とりあえず動いた
メモリ不足のエラーに悩まされて、とりあえず動くところまで対応してもらった苦労が見える
ローカルのMarkdown文書をVector化して登録&検索できるようになった。
READMEがちょっと古いけどセットアップとアプリケーションの実行、検索あたりの手順で動く。
で、本命のMCPサーバ化はオフィシャルのMCPサーバ実装を試してみたけどダメだった
claude mcp add chroma -s project -- \
$(whence -p uvx) chroma-mcp \
--client-type http \
--host localhost \
--port 8080 \
--ssl false
ローカルのMarkdown文書をChromaDBへ登録するとき、お手製スクリプトでOpenAIの text-embedding-3-small
モデルを使ってEmbeddingしたけど、ChromaDBオフィシャルMCPサーバ実装だとドキュメント検索時のEmbeddingには独自モデルが使われてて、ベクトルの次元数が合わずエラーになった。
現時点では、オフィシャルMCPサーバ実装のドキュメント検索( chroma_query_documents
)ではユーザ側のEmbeddingを指定するパラメータが無さそう