0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Chromaを学びたい

Posted at

はじめに

VectorDBのChromaを学んでいきます!!VectorDBはPineconeしか知らなかったのですが、LangChainではChromaが推奨されているみたいですね!では早速学んでいきましょう!!

Chromaとは??

ローカルで動く、軽量で高速な “ベクトル検索データベース”。
テキストや文章を Embedding して保存し、「意味の近さ」で検索できる。

image.png

コード

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で終了)> 

最後に

結構簡単に実装できていいですね!!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?