[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DF1A1G3VJ82BBCMN6920J9":3,"skill-same:01M6DF1A1G3VJ82BBCMN6920J9":160},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":68,"commitSha":69,"skillDirectory":70,"forksCount":71,"repositoryHtmlUrl":72,"repositoryHomepageUrl":6,"ownerHtmlUrl":73,"ownerBlogUrl":6,"ownerDescription":74,"updatedAt":75,"install":76,"resources":89},"01M6DF1A1G3VJ82BBCMN6920J9","chroma",null,"Open-source embedding database for AI applications. Store embeddings and metadata, perform vector and full-text search, filter by metadata. Simple 4-function API. Scales from notebooks to production clusters. Use for semantic search, RAG applications, or document retrieval. Best for local development and open-source projects.","zapabob\u002FSkills","zapabob","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130830376?v=4","01M6DBMYZAGRTFQDSQYW3W764P","峯岸 亮","01M6DBMZ3GKDSJ01NZ9XTZD7JD",2,"MIT","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F45\u002F455c0032daea1ed50981c4251556cfba40a2c31c3db4b2a604300c955f50dba2\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",[5,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"api","full","local","self","self-hosted","vector database","text","projects","open","rag","applications","Transformers","open source","embeddings","vector","search","database","development","semantic search","2026-11-10 10:12:30",false,"---\r\nname: chroma\r\ndescription: Open-source embedding database for AI applications. Store embeddings and metadata, perform vector and full-text search, filter by metadata. Simple 4-function API. Scales from notebooks to production clusters. Use for semantic search, RAG applications, or document retrieval. Best for local development and open-source projects.\r\nversion: 1.0.0\r\nauthor: Orchestra Research\r\nlicense: MIT\r\ndependencies: [chromadb, sentence-transformers]\r\nmetadata:\r\n  hermes:\r\n    tags: [RAG, Chroma, Vector Database, Embeddings, Semantic Search, Open Source, Self-Hosted, Document Retrieval, Metadata Filtering]\r\n\r\n---\r\n\r\n# Chroma - Open-Source Embedding Database\r\n\r\nThe AI-native database for building LLM applications with memory.\r\n\r\n## When to use Chroma\r\n\r\n**Use Chroma when:**\r\n- Building RAG (retrieval-augmented generation) applications\r\n- Need local\u002Fself-hosted vector database\r\n- Want open-source solution (Apache 2.0)\r\n- Prototyping in notebooks\r\n- Semantic search over documents\r\n- Storing embeddings with metadata\r\n\r\n**Metrics**:\r\n- **24,300+ GitHub stars**\r\n- **1,900+ forks**\r\n- **v1.3.3** (stable, weekly releases)\r\n- **Apache 2.0 license**\r\n\r\n**Use alternatives instead**:\r\n- **Pinecone**: Managed cloud, auto-scaling\r\n- **FAISS**: Pure similarity search, no metadata\r\n- **Weaviate**: Production ML-native database\r\n- **Qdrant**: High performance, Rust-based\r\n\r\n## Quick start\r\n\r\n### Installation\r\n\r\n```bash\r\n# Python\r\npip install chromadb\r\n\r\n# JavaScript\u002FTypeScript\r\nnpm install chromadb @chroma-core\u002Fdefault-embed\r\n```\r\n\r\n### Basic usage (Python)\r\n\r\n```python\r\nimport chromadb\r\n\r\n# Create client\r\nclient = chromadb.Client()\r\n\r\n# Create collection\r\ncollection = client.create_collection(name=\"my_collection\")\r\n\r\n# Add documents\r\ncollection.add(\r\n    documents=[\"This is document 1\", \"This is document 2\"],\r\n    metadatas=[{\"source\": \"doc1\"}, {\"source\": \"doc2\"}],\r\n    ids=[\"id1\", \"id2\"]\r\n)\r\n\r\n# Query\r\nresults = collection.query(\r\n    query_texts=[\"document about topic\"],\r\n    n_results=2\r\n)\r\n\r\nprint(results)\r\n```\r\n\r\n## Core operations\r\n\r\n### 1. Create collection\r\n\r\n```python\r\n# Simple collection\r\ncollection = client.create_collection(\"my_docs\")\r\n\r\n# With custom embedding function\r\nfrom chromadb.utils import embedding_functions\r\n\r\nopenai_ef = embedding_functions.OpenAIEmbeddingFunction(\r\n    api_key=\"your-key\",\r\n    model_name=\"text-embedding-3-small\"\r\n)\r\n\r\ncollection = client.create_collection(\r\n    name=\"my_docs\",\r\n    embedding_function=openai_ef\r\n)\r\n\r\n# Get existing collection\r\ncollection = client.get_collection(\"my_docs\")\r\n\r\n# Delete collection\r\nclient.delete_collection(\"my_docs\")\r\n```\r\n\r\n### 2. Add documents\r\n\r\n```python\r\n# Add with auto-generated IDs\r\ncollection.add(\r\n    documents=[\"Doc 1\", \"Doc 2\", \"Doc 3\"],\r\n    metadatas=[\r\n        {\"source\": \"web\", \"category\": \"tutorial\"},\r\n        {\"source\": \"pdf\", \"page\": 5},\r\n        {\"source\": \"api\", \"timestamp\": \"2025-01-01\"}\r\n    ],\r\n    ids=[\"id1\", \"id2\", \"id3\"]\r\n)\r\n\r\n# Add with custom embeddings\r\ncollection.add(\r\n    embeddings=[[0.1, 0.2, ...], [0.3, 0.4, ...]],\r\n    documents=[\"Doc 1\", \"Doc 2\"],\r\n    ids=[\"id1\", \"id2\"]\r\n)\r\n```\r\n\r\n### 3. Query (similarity search)\r\n\r\n```python\r\n# Basic query\r\nresults = collection.query(\r\n    query_texts=[\"machine learning tutorial\"],\r\n    n_results=5\r\n)\r\n\r\n# Query with filters\r\nresults = collection.query(\r\n    query_texts=[\"Python programming\"],\r\n    n_results=3,\r\n    where={\"source\": \"web\"}\r\n)\r\n\r\n# Query with metadata filters\r\nresults = collection.query(\r\n    query_texts=[\"advanced topics\"],\r\n    where={\r\n        \"$and\": [\r\n            {\"category\": \"tutorial\"},\r\n            {\"difficulty\": {\"$gte\": 3}}\r\n        ]\r\n    }\r\n)\r\n\r\n# Access results\r\nprint(results[\"documents\"])      # List of matching documents\r\nprint(results[\"metadatas\"])      # Metadata for each doc\r\nprint(results[\"distances\"])      # Similarity scores\r\nprint(results[\"ids\"])            # Document IDs\r\n```\r\n\r\n### 4. Get documents\r\n\r\n```python\r\n# Get by IDs\r\ndocs = collection.get(\r\n    ids=[\"id1\", \"id2\"]\r\n)\r\n\r\n# Get with filters\r\ndocs = collection.get(\r\n    where={\"category\": \"tutorial\"},\r\n    limit=10\r\n)\r\n\r\n# Get all documents\r\ndocs = collection.get()\r\n```\r\n\r\n### 5. Update documents\r\n\r\n```python\r\n# Update document content\r\ncollection.update(\r\n    ids=[\"id1\"],\r\n    documents=[\"Updated content\"],\r\n    metadatas=[{\"source\": \"updated\"}]\r\n)\r\n```\r\n\r\n### 6. Delete documents\r\n\r\n```python\r\n# Delete by IDs\r\ncollection.delete(ids=[\"id1\", \"id2\"])\r\n\r\n# Delete with filter\r\ncollection.delete(\r\n    where={\"source\": \"outdated\"}\r\n)\r\n```\r\n\r\n## Persistent storage\r\n\r\n```python\r\n# Persist to disk\r\nclient = chromadb.PersistentClient(path=\".\u002Fchroma_db\")\r\n\r\ncollection = client.create_collection(\"my_docs\")\r\ncollection.add(documents=[\"Doc 1\"], ids=[\"id1\"])\r\n\r\n# Data persisted automatically\r\n# Reload later with same path\r\nclient = chromadb.PersistentClient(path=\".\u002Fchroma_db\")\r\ncollection = client.get_collection(\"my_docs\")\r\n```\r\n\r\n## Embedding functions\r\n\r\n### Default (Sentence Transformers)\r\n\r\n```python\r\n# Uses sentence-transformers by default\r\ncollection = client.create_collection(\"my_docs\")\r\n# Default model: all-MiniLM-L6-v2\r\n```\r\n\r\n### OpenAI\r\n\r\n```python\r\nfrom chromadb.utils import embedding_functions\r\n\r\nopenai_ef = embedding_functions.OpenAIEmbeddingFunction(\r\n    api_key=\"your-key\",\r\n    model_name=\"text-embedding-3-small\"\r\n)\r\n\r\ncollection = client.create_collection(\r\n    name=\"openai_docs\",\r\n    embedding_function=openai_ef\r\n)\r\n```\r\n\r\n### HuggingFace\r\n\r\n```python\r\nhuggingface_ef = embedding_functions.HuggingFaceEmbeddingFunction(\r\n    api_key=\"your-key\",\r\n    model_name=\"sentence-transformers\u002Fall-mpnet-base-v2\"\r\n)\r\n\r\ncollection = client.create_collection(\r\n    name=\"hf_docs\",\r\n    embedding_function=huggingface_ef\r\n)\r\n```\r\n\r\n### Custom embedding function\r\n\r\n```python\r\nfrom chromadb import Documents, EmbeddingFunction, Embeddings\r\n\r\nclass MyEmbeddingFunction(EmbeddingFunction):\r\n    def __call__(self, input: Documents) -> Embeddings:\r\n        # Your embedding logic\r\n        return embeddings\r\n\r\nmy_ef = MyEmbeddingFunction()\r\ncollection = client.create_collection(\r\n    name=\"custom_docs\",\r\n    embedding_function=my_ef\r\n)\r\n```\r\n\r\n## Metadata filtering\r\n\r\n```python\r\n# Exact match\r\nresults = collection.query(\r\n    query_texts=[\"query\"],\r\n    where={\"category\": \"tutorial\"}\r\n)\r\n\r\n# Comparison operators\r\nresults = collection.query(\r\n    query_texts=[\"query\"],\r\n    where={\"page\": {\"$gt\": 10}}  # $gt, $gte, $lt, $lte, $ne\r\n)\r\n\r\n# Logical operators\r\nresults = collection.query(\r\n    query_texts=[\"query\"],\r\n    where={\r\n        \"$and\": [\r\n            {\"category\": \"tutorial\"},\r\n            {\"difficulty\": {\"$lte\": 3}}\r\n        ]\r\n    }  # Also: $or\r\n)\r\n\r\n# Contains\r\nresults = collection.query(\r\n    query_texts=[\"query\"],\r\n    where={\"tags\": {\"$in\": [\"python\", \"ml\"]}}\r\n)\r\n```\r\n\r\n## LangChain integration\r\n\r\n```python\r\nfrom langchain_chroma import Chroma\r\nfrom langchain_openai import OpenAIEmbeddings\r\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\r\n\r\n# Split documents\r\ntext_splitter = RecursiveCharacterTextSplitter(chunk_size=1000)\r\ndocs = text_splitter.split_documents(documents)\r\n\r\n# Create Chroma vector store\r\nvectorstore = Chroma.from_documents(\r\n    documents=docs,\r\n    embedding=OpenAIEmbeddings(),\r\n    persist_directory=\".\u002Fchroma_db\"\r\n)\r\n\r\n# Query\r\nresults = vectorstore.similarity_search(\"machine learning\", k=3)\r\n\r\n# As retriever\r\nretriever = vectorstore.as_retriever(search_kwargs={\"k\": 5})\r\n```\r\n\r\n## LlamaIndex integration\r\n\r\n```python\r\nfrom llama_index.vector_stores.chroma import ChromaVectorStore\r\nfrom llama_index.core import VectorStoreIndex, StorageContext\r\nimport chromadb\r\n\r\n# Initialize Chroma\r\ndb = chromadb.PersistentClient(path=\".\u002Fchroma_db\")\r\ncollection = db.get_or_create_collection(\"my_collection\")\r\n\r\n# Create vector store\r\nvector_store = ChromaVectorStore(chroma_collection=collection)\r\nstorage_context = StorageContext.from_defaults(vector_store=vector_store)\r\n\r\n# Create index\r\nindex = VectorStoreIndex.from_documents(\r\n    documents,\r\n    storage_context=storage_context\r\n)\r\n\r\n# Query\r\nquery_engine = index.as_query_engine()\r\nresponse = query_engine.query(\"What is machine learning?\")\r\n```\r\n\r\n## Server mode\r\n\r\n```python\r\n# Run Chroma server\r\n# Terminal: chroma run --path .\u002Fchroma_db --port 8000\r\n\r\n# Connect to server\r\nimport chromadb\r\nfrom chromadb.config import Settings\r\n\r\nclient = chromadb.HttpClient(\r\n    host=\"localhost\",\r\n    port=8000,\r\n    settings=Settings(anonymized_telemetry=False)\r\n)\r\n\r\n# Use as normal\r\ncollection = client.get_or_create_collection(\"my_docs\")\r\n```\r\n\r\n## Best practices\r\n\r\n1. **Use persistent client** - Don't lose data on restart\r\n2. **Add metadata** - Enables filtering and tracking\r\n3. **Batch operations** - Add multiple docs at once\r\n4. **Choose right embedding model** - Balance speed\u002Fquality\r\n5. **Use filters** - Narrow search space\r\n6. **Unique IDs** - Avoid collisions\r\n7. **Regular backups** - Copy chroma_db directory\r\n8. **Monitor collection size** - Scale up if needed\r\n9. **Test embedding functions** - Ensure quality\r\n10. **Use server mode for production** - Better for multi-user\r\n\r\n## Performance\r\n\r\n| Operation | Latency | Notes |\r\n|-----------|---------|-------|\r\n| Add 100 docs | ~1-3s | With embedding |\r\n| Query (top 10) | ~50-200ms | Depends on collection size |\r\n| Metadata filter | ~10-50ms | Fast with proper indexing |\r\n\r\n## Resources\r\n\r\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Fchroma-core\u002Fchroma ⭐ 24,300+\r\n- **Docs**: https:\u002F\u002Fdocs.trychroma.com\r\n- **Discord**: https:\u002F\u002Fdiscord.gg\u002FMMeYNTmh3x\r\n- **Version**: 1.3.3+\r\n- **License**: Apache 2.0\r\n","# Chroma - Open-Source Embedding Database\r\n\r\nThe AI-native database for building LLM applications with memory.\r\n\r\n## When to use Chroma\r\n\r\n**Use Chroma when:**\r\n- Building RAG (retrieval-augmented generation) applications\r\n- Need local\u002Fself-hosted vector database\r\n- Want open-source solution (Apache 2.0)\r\n- Prototyping in notebooks\r\n- Semantic search over documents\r\n- Storing embeddings with metadata\r\n\r\n**Metrics**:\r\n- **24,300+ GitHub stars**\r\n- **1,900+ forks**\r\n- **v1.3.3** (stable, weekly releases)\r\n- **Apache 2.0 license**\r\n\r\n**Use alternatives instead**:\r\n- **Pinecone**: Managed cloud, auto-scaling\r\n- **FAISS**: Pure similarity search, no metadata\r\n- **Weaviate**: Production ML-native database\r\n- **Qdrant**: High performance, Rust-based\r\n\r\n## Quick start\r\n\r\n### Installation\r\n\r\n```bash\r\n# Python\r\npip install chromadb\r\n\r\n# JavaScript\u002FTypeScript\r\nnpm install chromadb @chroma-core\u002Fdefault-embed\r\n```\r\n\r\n### Basic usage (Python)\r\n\r\n```python\r\nimport chromadb\r\n\r\n# Create client\r\nclient = chromadb.Client()\r\n\r\n# Create collection\r\ncollection = client.create_collection(name=\"my_collection\")\r\n\r\n# Add documents\r\ncollection.add(\r\n    documents=[\"This is document 1\", \"This is document 2\"],\r\n    metadatas=[{\"source\": \"doc1\"}, {\"source\": \"doc2\"}],\r\n    ids=[\"id1\", \"id2\"]\r\n)\r\n\r\n# Query\r\nresults = collection.query(\r\n    query_texts=[\"document about topic\"],\r\n    n_results=2\r\n)\r\n\r\nprint(results)\r\n```\r\n\r\n## Core operations\r\n\r\n### 1. Create collection\r\n\r\n```python\r\n# Simple collection\r\ncollection = client.create_collection(\"my_docs\")\r\n\r\n# With custom embedding function\r\nfrom chromadb.utils import embedding_functions\r\n\r\nopenai_ef = embedding_functions.OpenAIEmbeddingFunction(\r\n    api_key=\"your-key\",\r\n    model_name=\"text-embedding-3-small\"\r\n)\r\n\r\ncollection = client.create_collection(\r\n    name=\"my_docs\",\r\n    embedding_function=openai_ef\r\n)\r\n\r\n# Get existing collection\r\ncollection = client.get_collection(\"my_docs\")\r\n\r\n# Delete collection\r\nclient.delete_collection(\"my_docs\")\r\n```\r\n\r\n### 2. Add documents\r\n\r\n```python\r\n# Add with auto-generated IDs\r\ncollection.add(\r\n    documents=[\"Doc 1\", \"Doc 2\", \"Doc 3\"],\r\n    metadatas=[\r\n        {\"source\": \"web\", \"category\": \"tutorial\"},\r\n        {\"source\": \"pdf\", \"page\": 5},\r\n        {\"source\": \"api\", \"timestamp\": \"2025-01-01\"}\r\n    ],\r\n    ids=[\"id1\", \"id2\", \"id3\"]\r\n)\r\n\r\n# Add with custom embeddings\r\ncollection.add(\r\n    embeddings=[[0.1, 0.2, ...], [0.3, 0.4, ...]],\r\n    documents=[\"Doc 1\", \"Doc 2\"],\r\n    ids=[\"id1\", \"id2\"]\r\n)\r\n```\r\n\r\n### 3. Query (similarity search)\r\n\r\n```python\r\n# Basic query\r\nresults = collection.query(\r\n    query_texts=[\"machine learning tutorial\"],\r\n    n_results=5\r\n)\r\n\r\n# Query with filters\r\nresults = collection.query(\r\n    query_texts=[\"Python programming\"],\r\n    n_results=3,\r\n    where={\"source\": \"web\"}\r\n)\r\n\r\n# Query with metadata filters\r\nresults = collection.query(\r\n    query_texts=[\"advanced topics\"],\r\n    where={\r\n        \"$and\": [\r\n            {\"category\": \"tutorial\"},\r\n            {\"difficulty\": {\"$gte\": 3}}\r\n        ]\r\n    }\r\n)\r\n\r\n# Access results\r\nprint(results[\"documents\"])      # List of matching documents\r\nprint(results[\"metadatas\"])      # Metadata for each doc\r\nprint(results[\"distances\"])      # Similarity scores\r\nprint(results[\"ids\"])            # Document IDs\r\n```\r\n\r\n### 4. Get documents\r\n\r\n```python\r\n# Get by IDs\r\ndocs = collection.get(\r\n    ids=[\"id1\", \"id2\"]\r\n)\r\n\r\n# Get with filters\r\ndocs = collection.get(\r\n    where={\"category\": \"tutorial\"},\r\n    limit=10\r\n)\r\n\r\n# Get all documents\r\ndocs = collection.get()\r\n```\r\n\r\n### 5. Update documents\r\n\r\n```python\r\n# Update document content\r\ncollection.update(\r\n    ids=[\"id1\"],\r\n    documents=[\"Updated content\"],\r\n    metadatas=[{\"source\": \"updated\"}]\r\n)\r\n```\r\n\r\n### 6. Delete documents\r\n\r\n```python\r\n# Delete by IDs\r\ncollection.delete(ids=[\"id1\", \"id2\"])\r\n\r\n# Delete with filter\r\ncollection.delete(\r\n    where={\"source\": \"outdated\"}\r\n)\r\n```\r\n\r\n## Persistent storage\r\n\r\n```python\r\n# Persist to disk\r\nclient = chromadb.PersistentClient(path=\".\u002Fchroma_db\")\r\n\r\ncollection = client.create_collection(\"my_docs\")\r\ncollection.add(documents=[\"Doc 1\"], ids=[\"id1\"])\r\n\r\n# Data persisted automatically\r\n# Reload later with same path\r\nclient = chromadb.PersistentClient(path=\".\u002Fchroma_db\")\r\ncollection = client.get_collection(\"my_docs\")\r\n```\r\n\r\n## Embedding functions\r\n\r\n### Default (Sentence Transformers)\r\n\r\n```python\r\n# Uses sentence-transformers by default\r\ncollection = client.create_collection(\"my_docs\")\r\n# Default model: all-MiniLM-L6-v2\r\n```\r\n\r\n### OpenAI\r\n\r\n```python\r\nfrom chromadb.utils import embedding_functions\r\n\r\nopenai_ef = embedding_functions.OpenAIEmbeddingFunction(\r\n    api_key=\"your-key\",\r\n    model_name=\"text-embedding-3-small\"\r\n)\r\n\r\ncollection = client.create_collection(\r\n    name=\"openai_docs\",\r\n    embedding_function=openai_ef\r\n)\r\n```\r\n\r\n### HuggingFace\r\n\r\n```python\r\nhuggingface_ef = embedding_functions.HuggingFaceEmbeddingFunction(\r\n    api_key=\"your-key\",\r\n    model_name=\"sentence-transformers\u002Fall-mpnet-base-v2\"\r\n)\r\n\r\ncollection = client.create_collection(\r\n    name=\"hf_docs\",\r\n    embedding_function=huggingface_ef\r\n)\r\n```\r\n\r\n### Custom embedding function\r\n\r\n```python\r\nfrom chromadb import Documents, EmbeddingFunction, Embeddings\r\n\r\nclass MyEmbeddingFunction(EmbeddingFunction):\r\n    def __call__(self, input: Documents) -> Embeddings:\r\n        # Your embedding logic\r\n        return embeddings\r\n\r\nmy_ef = MyEmbeddingFunction()\r\ncollection = client.create_collection(\r\n    name=\"custom_docs\",\r\n    embedding_function=my_ef\r\n)\r\n```\r\n\r\n## Metadata filtering\r\n\r\n```python\r\n# Exact match\r\nresults = collection.query(\r\n    query_texts=[\"query\"],\r\n    where={\"category\": \"tutorial\"}\r\n)\r\n\r\n# Comparison operators\r\nresults = collection.query(\r\n    query_texts=[\"query\"],\r\n    where={\"page\": {\"$gt\": 10}}  # $gt, $gte, $lt, $lte, $ne\r\n)\r\n\r\n# Logical operators\r\nresults = collection.query(\r\n    query_texts=[\"query\"],\r\n    where={\r\n        \"$and\": [\r\n            {\"category\": \"tutorial\"},\r\n            {\"difficulty\": {\"$lte\": 3}}\r\n        ]\r\n    }  # Also: $or\r\n)\r\n\r\n# Contains\r\nresults = collection.query(\r\n    query_texts=[\"query\"],\r\n    where={\"tags\": {\"$in\": [\"python\", \"ml\"]}}\r\n)\r\n```\r\n\r\n## LangChain integration\r\n\r\n```python\r\nfrom langchain_chroma import Chroma\r\nfrom langchain_openai import OpenAIEmbeddings\r\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\r\n\r\n# Split documents\r\ntext_splitter = RecursiveCharacterTextSplitter(chunk_size=1000)\r\ndocs = text_splitter.split_documents(documents)\r\n\r\n# Create Chroma vector store\r\nvectorstore = Chroma.from_documents(\r\n    documents=docs,\r\n    embedding=OpenAIEmbeddings(),\r\n    persist_directory=\".\u002Fchroma_db\"\r\n)\r\n\r\n# Query\r\nresults = vectorstore.similarity_search(\"machine learning\", k=3)\r\n\r\n# As retriever\r\nretriever = vectorstore.as_retriever(search_kwargs={\"k\": 5})\r\n```\r\n\r\n## LlamaIndex integration\r\n\r\n```python\r\nfrom llama_index.vector_stores.chroma import ChromaVectorStore\r\nfrom llama_index.core import VectorStoreIndex, StorageContext\r\nimport chromadb\r\n\r\n# Initialize Chroma\r\ndb = chromadb.PersistentClient(path=\".\u002Fchroma_db\")\r\ncollection = db.get_or_create_collection(\"my_collection\")\r\n\r\n# Create vector store\r\nvector_store = ChromaVectorStore(chroma_collection=collection)\r\nstorage_context = StorageContext.from_defaults(vector_store=vector_store)\r\n\r\n# Create index\r\nindex = VectorStoreIndex.from_documents(\r\n    documents,\r\n    storage_context=storage_context\r\n)\r\n\r\n# Query\r\nquery_engine = index.as_query_engine()\r\nresponse = query_engine.query(\"What is machine learning?\")\r\n```\r\n\r\n## Server mode\r\n\r\n```python\r\n# Run Chroma server\r\n# Terminal: chroma run --path .\u002Fchroma_db --port 8000\r\n\r\n# Connect to server\r\nimport chromadb\r\nfrom chromadb.config import Settings\r\n\r\nclient = chromadb.HttpClient(\r\n    host=\"localhost\",\r\n    port=8000,\r\n    settings=Settings(anonymized_telemetry=False)\r\n)\r\n\r\n# Use as normal\r\ncollection = client.get_or_create_collection(\"my_docs\")\r\n```\r\n\r\n## Best practices\r\n\r\n1. **Use persistent client** - Don't lose data on restart\r\n2. **Add metadata** - Enables filtering and tracking\r\n3. **Batch operations** - Add multiple docs at once\r\n4. **Choose right embedding model** - Balance speed\u002Fquality\r\n5. **Use filters** - Narrow search space\r\n6. **Unique IDs** - Avoid collisions\r\n7. **Regular backups** - Copy chroma_db directory\r\n8. **Monitor collection size** - Scale up if needed\r\n9. **Test embedding functions** - Ensure quality\r\n10. **Use server mode for production** - Better for multi-user\r\n\r\n## Performance\r\n\r\n| Operation | Latency | Notes |\r\n|-----------|---------|-------|\r\n| Add 100 docs | ~1-3s | With embedding |\r\n| Query (top 10) | ~50-200ms | Depends on collection size |\r\n| Metadata filter | ~10-50ms | Fast with proper indexing |\r\n\r\n## Resources\r\n\r\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Fchroma-core\u002Fchroma ⭐ 24,300+\r\n- **Docs**: https:\u002F\u002Fdocs.trychroma.com\r\n- **Discord**: https:\u002F\u002Fdiscord.gg\u002FMMeYNTmh3x\r\n- **Version**: 1.3.3+\r\n- **License**: Apache 2.0\r\n",{"name":5,"author":51,"license":15,"version":52,"metadata":53,"description":7,"dependencies":65},"Orchestra Research","1.0.0",{"hermes":54},{"tags":55},[56,57,58,59,60,61,62,63,64],"RAG","Chroma","Vector Database","Embeddings","Semantic Search","Open Source","Self-Hosted","Document Retrieval","Metadata Filtering",[66,67],"chromadb","sentence-transformers","main","0d1434f89f4bc6b07e9d272accd8c1013768820f","archive\u002Fskill-md-reviewed\u002Fsha256\u002F45\u002F455c0032daea1ed50981c4251556cfba40a2c31c3db4b2a604300c955f50dba2",0,"https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills","https:\u002F\u002Fgithub.com\u002Fzapabob","The Open University of JAPAN　2019-now\r\n\r\nTokyo University of Science　2007-2010","2026-10-26 16:29:01",{"source":8,"skillName":5,"commands":77,"prompt":87,"zipAvailable":88},[78,81,84],{"tool":79,"command":80},"npx","npx skills add zapabob\u002FSkills --skill chroma",{"tool":82,"command":83},"bunx","bunx skills add zapabob\u002FSkills --skill chroma",{"tool":85,"command":86},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill chroma","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F45\u002F455c0032daea1ed50981c4251556cfba40a2c31c3db4b2a604300c955f50dba2\u002FSKILL.md",true,[90,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156],{"path":91,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":94,"sourceHtmlUrl":95},"steps\u002Fstep-01-init.md","REFERENCE","参考文档",5784,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-01-init.md",{"path":97,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":98,"sourceHtmlUrl":99},"steps\u002Fstep-01b-continue.md",4867,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-01b-continue.md",{"path":101,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":102,"sourceHtmlUrl":103},"steps\u002Fstep-02-discovery.md",6671,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-02-discovery.md",{"path":105,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":106,"sourceHtmlUrl":107},"steps\u002Fstep-03-core-experience.md",8205,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-03-core-experience.md",{"path":109,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":110,"sourceHtmlUrl":111},"steps\u002Fstep-04-emotional-response.md",8265,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-04-emotional-response.md",{"path":113,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":114,"sourceHtmlUrl":115},"steps\u002Fstep-05-inspiration.md",8612,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-05-inspiration.md",{"path":117,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":118,"sourceHtmlUrl":119},"steps\u002Fstep-06-design-system.md",8801,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-06-design-system.md",{"path":121,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":122,"sourceHtmlUrl":123},"steps\u002Fstep-07-defining-experience.md",8750,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-07-defining-experience.md",{"path":125,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":126,"sourceHtmlUrl":127},"steps\u002Fstep-08-visual-foundation.md",8404,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-08-visual-foundation.md",{"path":129,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":130,"sourceHtmlUrl":131},"steps\u002Fstep-09-design-directions.md",8582,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-09-design-directions.md",{"path":133,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":134,"sourceHtmlUrl":135},"steps\u002Fstep-10-user-journeys.md",8349,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-10-user-journeys.md",{"path":137,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":138,"sourceHtmlUrl":139},"steps\u002Fstep-11-component-strategy.md",8694,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-11-component-strategy.md",{"path":141,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":142,"sourceHtmlUrl":143},"steps\u002Fstep-12-ux-patterns.md",7963,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-12-ux-patterns.md",{"path":145,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":146,"sourceHtmlUrl":147},"steps\u002Fstep-13-responsive-accessibility.md",9060,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-13-responsive-accessibility.md",{"path":149,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":150,"sourceHtmlUrl":151},"steps\u002Fstep-14-complete.md",6845,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fsteps\u002Fstep-14-complete.md",{"path":153,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":154,"sourceHtmlUrl":155},"ux-design-template.md",236,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fux-design-template.md",{"path":157,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":158,"sourceHtmlUrl":159},"workflow.md",1307,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Fbmad-create-ux-design\u002Fworkflow.md",[161,193,227,252,279,296],{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":176,"publishedAt":46},"01M6GJTE1GESGGF9K028Y7753E","xurl","X\u002FTwitter via xurl CLI: post, search, DM, media, v2 API.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fxurl\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[167,168,171],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":169,"categoryName":170,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":172,"categoryName":173,"taxonomyType":174,"taxonomyTypeDesc":175},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[163,177,178,179,180,181,182,183,42,184,185,27,186,187,188,189,68,190,191,192],"openclaw","macos","cli","github","linux","windows","official","https","social-media","Media","hermes","hermes agent","twitter","social","via","post",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":210,"publishedAt":46},"01M6GJT8S1PXQ8WPXT1HSNBWH2","writing-plans","Write implementation plans: bite-sized tasks, paths, code.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwriting-plans\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[199,202,205,206,207],{"categoryNo":200,"categoryName":201,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":203,"categoryName":204,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":169,"categoryName":170,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":172,"categoryName":173,"taxonomyType":174,"taxonomyTypeDesc":175},{"categoryNo":208,"categoryName":209,"taxonomyType":174,"taxonomyTypeDesc":175},"01JBSEEDCAT000000000000036","内容创作者",[211,212,213,214,178,215,181,216,182,217,218,44,219,220,221,222,223,224,225,226],"writing","writing plans","plans","design","review","workflow","documentation","tasks","code","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":228,"name":229,"nameZh":6,"description":230,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":231,"categories":232,"keywords":236,"publishedAt":46},"01M6GJST0H5X7WHBJ3BZK0DVKH","whisper","OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwhisper\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[233],{"categoryNo":234,"categoryName":235,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[229,178,181,237,238,239,38,240,241,33,242,243,244,245,246,247,248,249,250,251],"openai","speech","multimodal","ASR","Audio","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":253,"name":254,"nameZh":6,"description":255,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":256,"categories":257,"keywords":261,"publishedAt":46},"01M6GJSMRQ8EETZTYMG72P70EA","weights-and-biases","W&B: log ML experiments, sweeps, model registry, dashboards.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fweights-and-biases\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[258],{"categoryNo":259,"categoryName":260,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",[262,178,263,264,182,265,266,267,268,269,270,242,271,272,273,274,275,276,277,278],"weights and biases","tensorflow","experiments","pytorch","visualization","registry","real-time","tuning","dashboards","experiment","log","time","Experiment Tracking","Model Registry","Hyperparameter Tuning","WandB","Real-Time Visualization",{"skillNo":280,"name":281,"nameZh":6,"description":282,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":283,"categories":284,"keywords":286,"publishedAt":46},"01M6GJS19KDPRY112JTR326S06","watchers","Poll RSS, JSON APIs, and GitHub with watermark dedup.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwatchers\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[285],{"categoryNo":169,"categoryName":170,"taxonomyType":21,"taxonomyTypeDesc":22},[281,178,287,180,181,288,289,290,291,292,293,187,188,294,295],"terminal","automation","http","monitoring","cron","json","rss","devops","with",{"skillNo":297,"name":298,"nameZh":6,"description":299,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":300,"categories":301,"keywords":304,"publishedAt":46},"01M6GJRHJD2A6Q830SWF9W48BC","serving-llms-vllm","vLLM: high-throughput LLM serving, OpenAI API, quantization.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fvllm\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[302,303],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":172,"categoryName":173,"taxonomyType":174,"taxonomyTypeDesc":175},[305,306,307,181,308,237,309,310,311,38,312,27,313,314,315,316,317,318,319,320],"llms","vLLM","serving llms vllm","research","openai api","tensor","Inference Serving","Production","llm serving","High Throughput","PagedAttention","Continuous Batching","Quantization","Tensor Parallelism","high-throughput","throughput"]