Галоўная / Артыкулы

ChromaDB як вектарны ўраджэнне для чатботаў, якія розумеюць дакументы

Чаму чатботы на адаптаваных граматыках патрабуець базу дадзейнаў вектараў, як працуюць калекцыі ChromaDB і фільтры метададзейнаў, і калі трэба стварыць пратэтып на Chroma перш чым пераходзіць да чагось большага.

Выдавец: REACTAPP.TOP6 хв чытання1352 слоў

Крыніцы: ChromaDB: The Secret Brain Behind Your AI Chatbot

ChromaDB: база вектараў, якая стоіць за функцыяй “чатаванне з маімі дакументамі”

Дзеякі чат-боты як бы ведаюць пра ваашы файлы — PDF-файлы з аддзелу кадраў, каталогі продуктав, п’ятдэсятасяжны аналіз з мінулага тыдня. За такім паведаннем стоіць база вектараў. Для багатох разрабоў ChromaDB ёсць стандартным выборам, калі трэба быстра стварыць такой шар.

Проблема, якую рашае Chroma

Мадэлі LLM ўжо сільныя у загальных задачах, але слабыя як спеціялісты вашай кампаніі: яны не ведаюць пра звястку па рэзультатах мінулага квартала чы пра правіла вакацый. Тонкая наладка на прыватных дакументах ўскорыстае і ёсць ненадзейна. Retrieval-augmented generation замест таго інкорпоруе дакументы, храніць вектары, знаходзіць суседніе элементы да паведамлення і падае гэтыя фрагменты мадэлі як кантэкст.

Вам патрэбна адная месца для хранення вектарных прэдставленняў, фільтрацыі метаданых і запітаў да найбліжэйшых элементаў. Chroma ствараны як такая месца з простым API.

Што такое Chroma

База дадзеных з адгрупаваннем на ачытым кодам, дзе працяванне практычна выключваецца ў Python: ствараецца калекцыя, дадаюцца дакументы з адгрупаваннямі і метаданнымі, выконваюцься запыткі па вектарах або тэксце (з выкарыстоўваннем функцыі адгрупавання). Яна можа працаваць унутры працэсу для пратэнаў або як служба для маленькіх каманд.

Основны практычны прыем

Інсталюецца і ствараецца кліент/калекцыя:

"The quarterly revenue exceeded projections."
→ [0.021, -0.143, 0.887, 0.002, ... ] (1536 numbers)

Дадаюцца тэксты (Chroma можа выкліканыць функцыю адгрупавання за вас):

import chromadb

Выконваюцься запыткі да найбліжэйшых частак:

client = chromadb.Client()
collection = client.create_collection("company-docs")collection.add(
    documents=["Q3 revenue exceeded projections by 12%"],
    metadatas=[{"department": "finance", "quarter": "Q3"}],
    ids=["doc-001"]
)

Фільтры метаданных сузаюць рэзультаты да певнай лінейкі продуктав, аб’екта або даты:

results = collection.query(
    query_texts=["What was our budget performance last quarter?"],
    n_results=3,
    where={"department": "finance"}  # Optional metadata filter
)

Стойкасць дадзеных і кліенты

Тымчасовыя кліенты знікаюць разам з працэсам — годнае для тэстаў. Стойкія шляхы зберагаюць дадзеныя между запускамі:

System: You are a helpful assistant. Use the following context to answer.

Klientы HTTP выступаюць у зв’язку з серверам Chroma, калі модуль адгрупавання стае недастатковым:

Context:
- "Q3 revenue exceeded projections by 12%"
- "Engineering headcount grew to support product roadmap"
- "Marketing spend increased customer acquisition"User: How did we perform in Q3?

Месца ў параване з альтэрнатывамі

Chroma падходзіць для местных даплікаў, ноутбуков і ранніх службаў RAG. Калі вам патрэбна праца ў калькольных рэгіонах, складныя гібрыдныя операцыі пошуку або экстрэмальная масштабаванасць, рассмотрыце кластэры, створаныя спецыяльна для гэтых цоў (Qdrant, Weaviate, pgvector у вялікіх масштабах і т. д.). Багато команд усё ўсё працуюць з Chroma у фармаце протатыпаў і пераводзяцься на іншыя рашэння пазней.

Мінімальны цыкл RAG

Уключыце запіт, запытайце колекцыю, сховаць дакументы ў прампт, створыце:

User Query
    ↓
Embedding Model
    ↓
Query Vector
    ↓
ChromaDB (HNSW Index)
    ↓
Top-K Similar Documents
    ↓
LLM Prompt (Context + Query)
    ↓
Accurate, Grounded Answer
pip install chromadb

Зберагаюце розумныя размеры частак, храніце шляхі да вучорашніх дадзеных у мета-даных і апісваеце іх у інтэрфейсе адпаведзення.

Калі не варта яго выкарыстоўваць

from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import PyPDFLoader

Адмовіцеся ад Chroma, калі вы ужо стандартызаваліся на іншы векторны шар, патрэбны вам экзотычныя распадзеленыя топалогіі з самага пачатку або у вас ёсць толькі рэляцыйныя запыты без уключэння дадзеных. У іншым случае ён застаецца прагматычным „таяным мозгам“ для чат-ботаў, якія розумеюць дакументы.

# Step 1: Load your documents
loader = PyPDFLoader("company-policy.pdf")
documents = loader.load()# Step 2: Split into chunks
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(documents)# Step 3: Embed and store in ChromaDB
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=OpenAIEmbeddings(),
    persist_directory="./chroma_store"
)# Step 4: Query it
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
results = retriever.invoke("What is the remote work policy?")for r in results:
    print(r.page_content)

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.

Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.

Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.

Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.

Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.

Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.

Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.

Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.

Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.