ベクトルデータベースとは何か【ChromaDB・Pineconeで意味検索を実装する】

ベクトルデータベースとは何か【ChromaDB・Pineconeで意味検索を実装する】 AIツール・レビュー

はじめに

RAGを実装するときに必要になるのが「ベクトルデータベース」です。通常のDBがキーワード一致検索なのに対し、ベクトルDBは「意味が近いもの」を検索できます。ChromaDB・Pinecone・Weaviateなどが代表的なツールです。

ベクトル検索とは

文章や単語をベクトル(数値の配列)に変換して、ベクトルの距離(コサイン類似度・ユークリッド距離)で「意味の近さ」を測る検索方法です。「機械学習 始め方」で検索すると「AI学習の入門方法」という文書もヒットします(キーワードは違うが意味が近い)。

ChromaDBをローカルで試す

pip install chromadb sentence-transformers
import chromadb
from chromadb.utils import embedding_functions

# ChromaDBクライアントの作成(ローカル保存)
client = chromadb.PersistentClient(path='./chroma_db')

# 日本語埋め込みモデルを使う
embed_fn = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name='paraphrase-multilingual-MiniLM-L12-v2'
)

# コレクション(テーブルに相当)の作成
collection = client.get_or_create_collection(
    name='company_knowledge',
    embedding_function=embed_fn
)

# ドキュメントを追加
documents = [
    '有給休暇は年20日付与されます。申請はシステムから行います。',
    '残業代は実績に基づいて翌月支払われます。',
    '在宅勤務は週3日まで申請できます。',
    '健康診断は毎年10月に実施されます。',
     'Python研修は年2回開催されます。費用は会社負担です。',
]
ids = [f'doc_{i}' for i in range(len(documents))]

collection.add(documents=documents, ids=ids)
print(f'{len(documents)}件追加完了')

# 意味検索
results = collection.query(
    query_texts=['休日の申請方法を教えて'],
    n_results=2
)

print('\n検索結果:')
for doc, distance in zip(results['documents'][0], results['distances'][0]):
    print(f'  類似度: {1 - distance:.3f} | {doc}')

LangChainとChromaDBを組み合わせたRAG

from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_anthropic import ChatAnthropic
from langchain.chains import RetrievalQA

# 埋め込みモデル
embeddings = HuggingFaceEmbeddings(
    model_name='paraphrase-multilingual-MiniLM-L12-v2'
)

# ChromaDBからベクトルストアを読み込む
vectorstore = Chroma(
    persist_directory='./chroma_db',
    embedding_function=embeddings
)

# RAGチェーンの作成
llm = ChatAnthropic(model='claude-sonnet-4-20250514', temperature=0)
qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={'k': 3}),
    return_source_documents=True
)

# 質問
answer = qa.invoke({'query': '在宅勤務は何日まで申請できますか?'})
print('回答:', answer['result'])

まとめ

ベクトルデータベースはRAGの核心コンポーネントです。ChromaDBはローカルで無料で試せる入門に最適なツールで、本番環境ではPinecone・Weaviate・Qdrantなどのマネージドサービスが使われます。LangChainと組み合わせることで社内文書検索・FAQ自動化・ナレッジベース検索を実装できます。

💼 ITエンジニア転職特化

自分らしく働けるエンジニア転職を目指すなら【strategy career】

年収1000万・残業月30時間以下・リモート可の求人多数

💼 無料で転職相談する →

※アフィリエイト広告を含みます

※本記事にはアフィリエイトリンクが含まれます。

コメント

タイトルとURLをコピーしました