chroma-local について
chroma-local は、ローカル開発、テスト、セルフホスト環境で Chroma を利用する開発者向けのスキルです。用途に応じたクライアント、永続化方式、埋め込み関数、インデックス設計を案内します。
主な機能
- 01ローカル実行方式とクライアントの選択
- 02永続データと一時データの案内
- 03埋め込み関数の選択
- 04コレクションの索引と更新パターン
- 05ローカルサーバーの検証
活用シーン
- 01ローカル Chroma サーバーのセットアップ
- 02一時的な Python テストへの Chroma 組み込み
- 03アプリへの永続検索の追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ chroma-core/ agent-skills --skill chroma-localインストール後、Claude Code で/chroma-localを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
cli.mddata-model.mdunderstanding-a-codebase.mderror-handling/python.mdtypescript.mdlocal-chroma/python.mdtypescript.mdmetadata/python.mdtypescript.mdquerying/python.mdtypescript.mdregex/python.mdtypescript.mdupdating-deleting/python.mdtypescript.md詳細
手順
コードを書く前に、以下を確認してください。リポジトリとユーザーの依頼から判断できる場合は、そこから情報を得ることを優先してください。選択によって実装が大きく変わる場合に限り、質問してください。
-
ランタイムの形態
- 起動中のローカルサーバーに接続するのか、テストに Chroma を組み込むのか、それともローカル開発環境を一から構築するのかを確認します。
chroma run、Docker またはサービスのコマンド、HttpClientまたはChromaClient、Python のEphemeralClientのどれを使う必要があるか判断します。
-
永続化
- ローカルデータを永続化する場合:意図したデータパスを選びます。
- 破棄可能なテストデータの場合:デフォルトまたは一時ディレクトリを使用します。
-
埋め込みモデル
- 可能であれば、アプリですでに使用している埋め込みプロバイダーを再利用します。
- それ以外の場合は、TypeScript では
@chroma-core/default-embed、Python では標準のローカルデフォルトを使用します。 - TypeScript で OpenAI の埋め込みを明示的に希望している場合は、
@chroma-core/openaiをインストールして使用します。
-
インデックス対象データの形状
- 何をインデックス化するのか、どのようにチャンク化するのか、フィルタリングや更新にどのメタデータが必要かを判断します。
振り分け
-
既存のローカルサーバー
- クライアントコードを変更する前に、ホストとポートを確認します。
- コレクションが存在しないと決めつける前に、サーバーに接続できることを検証します。
-
新規のローカル開発
chroma run、またはリポジトリに既存の Docker やサービスのコマンドなど、ローカルでの起動方法を追加します。- リポジトリで別のアドレスを使用していない限り、デフォルトは
localhost:8000とします。
-
Python のテストまたは破棄可能なローカルワークフロー
- 永続化が不要な場合は、
EphemeralClientを優先します。 - プロセスの終了時にデータが失われることを明記します。
- 永続化が不要な場合は、
-
永続化するローカル開発
- 安定したデータパスを使用し、コードまたは設定で永続化を明示します。
- 一時モードと永続モードを暗黙に切り替えないでください。
-
検索統合作業
- TypeScript では
getOrCreateCollection()、Python ではget_or_create_collection()を使用します。 - アップサートや削除を簡単にできるよう、ドキュメント ID とメタデータを設計します。
- 大規模なデータセットを同期する場合は、一括書き込みを行います。
- TypeScript では
質問する場合とそのまま進める場合
最初に質問する項目:
- 埋め込みモデルの選択(コストと品質への影響があります)
- ローカルデータの永続化が必要かどうか
- ローカルサーバーの起動方法
- マルチテナントのデータ分離戦略
妥当なデフォルトを使って進める項目:
getOrCreateCollection()(TypeScript)/get_or_create_collection()(Python)を使用します- コサイン類似度を使用します(最も一般的です)
- チャンクサイズは 8 KB 未満にします
- 更新や削除に備えて、ソース ID をメタデータに保存します
- リポジトリで別のアドレスが設定されている場合、または Python の
EphemeralClientを使用している場合を除き、localhost:8000のローカルサーバーを使用します
検証項目
- クライアントのインポートが正しいこと(
ChromaClient、HttpClient、またはClient) - 埋め込み関数のパッケージがインストールされていること(TypeScript)
- コレクションが存在しないと決めつける前に、ローカルサーバーに接続できること
- ローカルパスと永続化モードが意図したとおりであること
実装メモ
- ローカル Chroma は、開発、テスト、セルフホスト型デプロイの適切なデフォルトです。
- OSS 版 Chroma には、
Schema()やSearch()など、Chroma Cloud 専用の機能は含まれません。 - ユーザーがハイブリッドな密・疎検索を求めている場合、リポジトリに OSS の回避策がすでに実装されていない限り、Chroma Cloud が必要な可能性が高いものとして扱います。
- オープンソース版 Chroma では、単一の埋め込み関数を使った密検索が一般的な基本構成です。
最小限のパターン
リポジトリでローカル Chroma サーバーが必要な場合は、起動します。
chroma run
デフォルトアドレス:localhost:8000。
TypeScript のローカルクライアント:
import { ChromaClient } from 'chromadb';
import { DefaultEmbeddingFunction } from '@chroma-core/default-embed';
const client = new ChromaClient();
const embeddingFunction = new DefaultEmbeddingFunction();
const collection = await client.getOrCreateCollection({
name: 'my_collection',
embeddingFunction,
});
// Add documents
await collection.add({
ids: ['doc1', 'doc2'],
documents: ['First document text', 'Second document text'],
});
// Query
const results = await collection.query({
queryTexts: ['search query'],
nResults: 5,
});
Python のローカルクライアント:
import chromadb
client = chromadb.HttpClient(host="localhost", port=8000)
collection = client.get_or_create_collection(name="my_collection")
# Add documents
collection.add(
ids=["doc1", "doc2"] ,
documents=["First document text", "Second document text"],
)
# Query
results = collection.query(
query_texts=["search query"],
n_results=5,
)
詳細情報
リポジトリやこのスキルに記載されていない API または製品の詳細が必要な場合に限り、Chroma の llms.txt を取得します:https://docs.trychroma.com/llms.txt
利用可能なトピック
Typescript
- Chroma の正規表現フィルタリング - Chroma のクエリで正規表現フィルターを使用する方法を学びます
- クエリと取得 - Chroma コレクションのデータをクエリして取得します
- メタデータ - フィルターや配列値を含むメタデータを保存し、クエリします
- 更新と削除 - 既存のドキュメントを更新し、コレクションからデータを削除します
- エラー処理 - Chroma の使用時に発生するエラーや失敗への対処方法です
- ローカル Chroma - ローカルの Chroma を実行して使用する方法です
Python
- Chroma の正規表現フィルタリング - Chroma のクエリで正規表現フィルターを使用する方法を学びます
- クエリと取得 - Chroma コレクションのデータをクエリして取得します
- メタデータ - フィルターや配列値を含むメタデータを保存し、クエリします
- 更新と削除 - 既存のドキュメントを更新し、コレクションからデータを削除します
- エラー処理 - Chroma の使用時に発生するエラーや失敗への対処方法です
- ローカル Chroma - ローカルの Chroma を実行して使用する方法です
一般
- データモデル - Chroma がデータを保存する方法の概要です
- 既存システムへの Chroma の統合 - 既存のアプリケーションに Chroma 検索を追加するためのガイダンスです
- Chroma CLI - CLI からローカルのオープンソース Chroma サーバーを起動して管理します
コメント
Markdown 対応