ChromaDB як вектарны ўраджэнне для чатботаў, якія розумеюць дакументы
Чаму чатботы на адаптаваных граматыках патрабуець базу дадзейнаў вектараў, як працуюць калекцыі ChromaDB і фільтры метададзейнаў, і калі трэба стварыць пратэтып на Chroma перш чым пераходзіць да чагось большага.
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)
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ нават у серэдзіне туторыяла.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэля ў кожным прыкладзе, каб абнаўленні не таямніча не зменялі прыменэ ў месцы вучэння.
Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.
Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.
Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.
Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.
Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.
Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.
Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.
Лепшае выкарыстоўванне ясных тагоў модэляў у кожным прыкладзе, ўбліж чым абнаўленні не будуць таямніча зменяць прыемнасць выканання заведамаў.