はじめに
VectorDBのChromaを学んでいきます!!VectorDBはPineconeしか知らなかったのですが、LangChainではChromaが推奨されているみたいですね!では早速学んでいきましょう!!
Chromaとは??
ローカルで動く、軽量で高速な “ベクトル検索データベース”。
テキストや文章を Embedding して保存し、「意味の近さ」で検索できる。
コード
chroma_store.py
# chroma_store.py
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv("OPENROUTER_API_KEY")
if not api_key:
raise RuntimeError("OPENROUTER_API_KEY が設定されていません")
# 保存用のディレクトリ
PERSIST_DIR = "chroma_db_example"
# 登録したい知識(今回はサンプル)
texts = [
"りんごは甘い果物です。",
"バナナは黄色い果物です。",
"犬は人懐っこい動物です。",
"トラは野生の動物です。",
"車は一般的な乗り物です。",
"バスは公共の乗り物です。",
]
# Embedding モデル:OpenRouter 経由の OpenAI Embedding
emb = OpenAIEmbeddings(
model="text-embedding-3-small",
openai_api_key=api_key,
base_url="https://openrouter.ai/api/v1",
)
# Chroma に保存(初回のみ)
db = Chroma.from_texts(
texts=texts,
embedding=emb,
collection_name="demo_collection",
persist_directory=PERSIST_DIR,
)
print("Chroma DB に保存完了!")
chroma_query.py
# chroma_query.py
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv("OPENROUTER_API_KEY")
if not api_key:
raise RuntimeError("OPENROUTER_API_KEY が設定されていません")
PERSIST_DIR = "chroma_db_example"
# Embedding モデル(検索時も同じモデルを使う必要あり)
emb = OpenAIEmbeddings(
model="text-embedding-3-small",
openai_api_key=api_key,
base_url="https://openrouter.ai/api/v1",
)
# 既に保存済みの Chroma DB を開く
db = Chroma(
persist_directory=PERSIST_DIR,
collection_name="demo_collection",
embedding_function=emb,
)
print("Chroma DB をロードしました。")
while True:
query = input("\n質問を入力してください(空Enterで終了)> ").strip()
if not query:
print("終了します。")
break
docs = db.similarity_search(query, k=3)
print("\n🔎 類似文書 Top3:")
for i, doc in enumerate(docs, 1):
print(f"{i}. {doc.page_content}")
実行結果
(venv) ~/develop/langchain_study (main)$ python3 chroma_store.py
Chroma DB に保存完了!
(venv) ~/develop/langchain_study (main)$ python3 chroma_query.py
/Users/kouji/develop/langchain_study/chroma_query.py:23: LangChainDeprecationWarning: The class `Chroma` was deprecated in LangChain 0.2.9 and will be removed in 1.0. An updated version of the class exists in the `langchain-chroma package and should be used instead. To use it run `pip install -U `langchain-chroma` and import as `from `langchain_chroma import Chroma``.
db = Chroma(
Chroma DB をロードしました。
質問を入力してください(空Enterで終了)> 果物について教えて
🔎 類似文書 Top3:
1. りんごは甘い果物です。
2. バナナは黄色い果物です。
3. 車は一般的な乗り物です。
質問を入力してください(空Enterで終了)> トラはどんな動物??
🔎 類似文書 Top3:
1. トラは野生の動物です。
2. 犬は人懐っこい動物です。
3. バナナは黄色い果物です。
質問を入力してください(空Enterで終了)>
最後に
結構簡単に実装できていいですね!!!
