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