ToCode: post #6037 โ€” TG.ME

๐Ÿ“Œ ื™ื•ื 10 - ื—ื™ืคื•ืฉ ื‘ืขื–ืจืช Vector DB

ืืชืžื•ืœ ืจืื™ื ื• ืื™ืš ืœื‘ืฆืข ื—ื™ืคื•ืฉ ื˜ืงืกื˜ ืžืœื ื•ืืช ื”ืืชื’ืจื™ื ืฉืœื•. ื”ื™ื•ื ื ืžืฉื™ืš ืขื RAG ื•ื”ืคืขื ื ื‘ื ื” ืžื ื•ืข ื—ื™ืคื•ืฉ ื•ืงื˜ื•ืจื™ ื•ื ืจืื” ื‘ืื™ื–ื” ืžืงืจื™ื ืžื ื•ืข ื›ื–ื” ื™ื›ื•ืœ ืœื—ื–ืง ืืช ื”ืชื•ืฆืื•ืช.

โœ ืžื—ื™ืคื•ืฉ ื˜ืงืกื˜ ืžืœื ืœื—ื™ืคื•ืฉ ื•ืงื˜ื•ืจื™

ื‘ื“ื•ื’ืžื” ืฉืจืื™ื ื• ืืชืžื•ืœ ื ื™ืกื™ื ื• ืœื—ืคืฉ ืคื•ืกื˜ื™ื ืฉืงืฉื•ืจื™ื ืœืฉืืœื” ืฉืžืฉืชืžืฉ ืฉื•ืืœ. ืจืื™ื ื• ืฉื–ื” ืžืžืฉ ืœื ืคืฉื•ื˜: ืžืฉืชืžืฉ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืžื™ืœื™ื ื ืจื“ืคื•ืช, ื™ื›ื•ืœ ืœื›ืœื•ืœ ืžื™ืœื™ื ื›ืœืœื™ื•ืช ืฉื ืžืฆืื•ืช ื‘ื”ืžื•ืŸ ืคื•ืกื˜ื™ื, ื™ื›ื•ืœ ืœื›ืชื•ื‘ ื‘ืขื‘ืจื™ืช ืฉื ืฉืœ ืžื•ื ื— ืžืงืฆื•ืขื™ ืื• ืœื ืœื›ืชื•ื‘ ืืช ืฉื ื”ืžื•ื ื— ื‘ื›ืœืœ. ื‘ื›ืœ ื”ืžืฆื‘ื™ื ื”ืืœื” ืื ื• ื ืžืฆื ืคื•ืกื˜ื™ื ืœื ืจืœื•ื•ื ื˜ื™ื ืื• ืฉืœื ื ืžืฆื ืคื•ืกื˜ื™ื ื›ืŸ ืจืœื•ื•ื ื˜ื™ื.

ืื—ื“ ื”ืจืขื™ื•ื ื•ืช ื”ืจืืฉื•ื ื™ื ืฉืื ืฉื™ื ื”ืขืœื• ื›ืฉื”ืชื—ื™ืœื• ืœืฉืœื‘ ื—ื™ืคื•ืฉื™ื ื•ืžื•ื“ืœื™ ืฉืคื” ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ืžื•ื“ืœ ื”ืฉืคื” ื›ื“ื™ ืœื—ืคืฉ ื‘ืขืจื™ืžื” ื’ื“ื•ืœื” ืฉืœ ื˜ืงืกื˜, ื”ืจืขื™ื•ืŸ ื”ื•ื ื›ื–ื”:

1. ื›ืžื• ืฉืžืืžื ื™ื ืžื•ื“ืœ ืฉืคื” ืœื’ืœื•ืช ื”ืžืฉืš ื˜ื‘ืขื™ ืœืฉื™ื—ื”, ื ื•ื›ืœ ืœืืžืŸ ืžื•ื“ืœ ืฉืคื” ืœื’ืœื•ืช ืงืฉืจ ืกืžื ื˜ื™ ื‘ื™ืŸ ืžื™ืœื™ื ื•ืžืฉืคื˜ื™ื.
2. ืžืฉืคื˜ื™ื ืฉื™ืฉ ื‘ื™ื ื™ื”ื ืงืฉืจ ืกืžื ื˜ื™, ื›ืœื•ืžืจ ื”ื ืžื•ืคื™ืขื™ื ื”ืจื‘ื” ืคืขืžื™ื ื™ื—ื“ ืงืจื•ื‘ ื‘ืื•ืชื ื˜ืงืกื˜ื™ื ื™ืงื•ื“ื“ื• ืœื•ืงื˜ื•ืจื™ื ืฉื”ืžืจื—ืง ื‘ื™ื ื™ื”ื ืงื˜ืŸ. ืžื™ืœื™ื ื•ืžืฉืคื˜ื™ื ืฉืื™ืŸ ื‘ื™ื ื™ื”ื ืงืฉืจ ืื• ืฉื™ืฉ ืงืฉืจ ื—ืœืฉ ื™ืงื•ื“ื“ื• ืœื•ืงื˜ื•ืจื™ื ืฉื”ืžืจื—ืง ื‘ื™ื ื™ื”ื ื’ื“ื•ืœ.
3. ื”ืžืขืจื›ืช ืฉืœื ื• ืชื™ืงื— ื˜ืงืกื˜ ื’ื“ื•ืœ ื‘ื• ืื ื—ื ื• ืจื•ืฆื™ื ืœื—ืคืฉ, ืชื—ืœืง ืื•ืชื• ืœืžืฉืคื˜ื™ื ืื• ืงื˜ืขื™ื ืงืฆืจื™ื ื•ืชืงื•ื“ื“ ื›ืœ ืงื˜ืข ืงืฆืจ ืœื•ืงื˜ื•ืจ. ื›ืฉืžืฉืชืžืฉ ื™ื’ื™ืข ืขื ืฉืืœื” ื ืงื•ื“ื“ ื’ื ืืช ื”ืฉืืœื” ืฉืœ ื”ืžืฉืชืžืฉ ืœื•ืงื˜ื•ืจ ื•ืื– ื ืžืฆื ื‘ืžืื’ืจ ื”ืžื™ื“ืข ืฉืœื ื• ืืช ื”ื•ืงื˜ื•ืจื™ื ืฉื”ื›ื™ ืงืจื•ื‘ื™ื ืœืฉืืœืช ื”ืžืฉืชืžืฉ. ืืœื” ื”ืžืฉืคื˜ื™ื ืฉื™ืฉ ืœื”ื ืืช ื”ืงืฉืจ ื”ืกืžื ื˜ื™ ื”ื›ื™ ื—ื–ืง ืœืฉืืœืช ื”ืžืฉืชืžืฉ.

ื”ืจืขื™ื•ืŸ ื”ื–ื” ืื•ืœื™ ื ืฉืžืข ื”ื’ื™ื•ื ื™ ืื‘ืœ ื™ืฉ ื‘ื• ื”ืžื•ืŸ ื‘ืขื™ื•ืช. ื‘ืชื•ืจ ื”ืชื—ืœื” ืœื ื‘ืจื•ืจ ืื™ืš ืœื—ืœืง ื˜ืงืกื˜ ืืจื•ืš ืœืžืฉืคื˜ื™ื ืงืฆืจื™ื ื›ื“ื™ ืœืงื•ื“ื“ ืื•ืชื ืœื•ืงื˜ื•ืจื™ื, ืœื ื‘ืจื•ืจ ืœืžื” ืฉื”ืฉืืœื” ืชื”ื™ื” ืงืฉื•ืจื” ืกืžื ื˜ื™ืช ื“ื•ื•ืงื ืœืžืฉืคื˜ ืžืกื•ื™ื ืื• ืœืงื‘ื•ืฆืช ืžืฉืคื˜ื™ื, ื•ืžื™ ื‘ื›ืœืœ ืžืืžืŸ ืืช ื”ืžื•ื“ืœ ื”ืกืžื ื˜ื™ ื•ืœืคื™ ืื™ื–ื” ืงื•ืจืคื•ืก ื˜ืงืกื˜ื•ืืœื™. ื™ืฉ ื”ืžื•ืŸ ืฉื™ื˜ื•ืช ืœื”ืชืžื•ื“ื“ ืขื ื”ืืชื’ืจื™ื ื”ืืœื” ืื‘ืœ ื›ืžื• ืขื ื—ื™ืคื•ืฉ ื˜ืงืกื˜ ืžืœื ืื ื—ื ื• ืœื ืžื“ื‘ืจื™ื ื›ืืŸ ืขืœ ื ื•ืกื—ืช ืงืกื ืœื—ื™ืคื•ืฉ ืžื“ื•ื™ืง ืืœื ืขืœ ืื•ืกืฃ ืฉืœ ื˜ื›ื ื™ืงื•ืช ืฉืื•ืœื™ ื™ืขื‘ื“ื• ื•ืื•ืœื™ ืœื ื™ืขื‘ื“ื• ื•ื‘ื“ืจืš ื›ืœืœ ืžืขืจื›ื•ืช ืืžื™ืชื™ื•ืช ื™ืฉืœื‘ื• ื‘ื™ืŸ ื—ื™ืคื•ืฉ ื•ืงื˜ื•ืจื™, ื—ื™ืคื•ืฉ ื˜ืงืกื˜ ืžืœื ื•ืื™ื ื“ืงืก ื—ื™ืคื•ืฉ ืขืœ ื”ืžื™ื“ืข ื›ื“ื™ ื‘ืืžืช ืœื”ืฆืœื™ื— ืœืขื ื•ืช ืœืฉืืœื•ืช ืฉืœ ืžืฉืชืžืฉื™ื.

โœ ืžื” ืื ื—ื ื• ื‘ื•ื ื™ื

ื‘ื“ื•ื’ืžื” ื”ื™ื•ื ืื ื—ื ื• ืจื•ืฆื™ื ืœืจืื•ืช ืื™ืš ืขื•ื‘ื“ ื—ื™ืคื•ืฉ ื•ืงื˜ื•ืจื™ ื‘ืœื™ ื™ื•ืชืจ ืžื“ื™ ืœื™ืคื•ืœ ื‘ื‘ื•ืจื•ืช ืฉืœ ืžืขืจื›ืช ื›ื–ื• ื•ืœื›ืŸ ืœืงื—ืชื™ ืืช ื”ื—ื™ืคื•ืฉ ื”ืกืžื ื˜ื™ ื”ื›ื™ ืงืœ ืฉืžืฆืืชื™ - ื—ื™ืคื•ืฉ ื‘ื˜ืงืกื˜ ืืจื•ืš ืฉืœืขื•ืœื ืœื ืžืฉืชื ื” ื•ื™ืฉ ืœื• ื—ืœื•ืงื” ื˜ื‘ืขื™ืช ืœืคืกื•ืงื™ื, ื–ื”ื• ื”ืชื "ืš. ื‘ื“ื•ื’ืžื” ื”ื™ื•ื ื ื›ืชื•ื‘ ืžืขืจื›ืช ืฉืœื•ืงื—ืช ืฉืืœื” ืฉืœ ืžืฉืชืžืฉ ื•ืžื—ืคืฉืช ื‘ืชื "ืš ืงื˜ืขื™ื ื‘ืขืœื™ ื“ืžื™ื•ืŸ ืกืžื ื˜ื™ ืœืฉืืœื” ื•ืื– ืžืขื‘ื™ืจื” ืืช ื”ืฉืืœื” ื™ื—ื“ ืขื ื”ืงื˜ืขื™ื ืฉื›ื ืจืื” ืจืœื•ื•ื ื˜ื™ื ืœืžื•ื“ืœ ืฉืคื” ื›ื“ื™ ืœืงื‘ืœ ืชืฉื•ื‘ื” ืœืฉืืœื”.

ื”ืžืขืจื›ืช ืขื•ื‘ื“ืช ื‘ืื•ืคืŸ ื”ื‘ื:

1. ืชื—ื™ืœื” ืขื•ื‘ืจื™ื ืขืœ ื›ืœ ื”ืชื "ืš ื•ืžืงื•ื“ื“ื™ื ื›ืœ ืงื‘ื•ืฆื” ืฉืœ 6 ืคืกื•ืงื™ื ืœื•ืงื˜ื•ืจ. ื‘ื™ืŸ ื”ืงื‘ื•ืฆื•ืช ืื ื™ ืฉื•ืžืจ ื—ืคื™ืคื” ืฉืœ ืฉื ื™ ืคืกื•ืงื™ื ื›ื“ื™ ืฉืžื™ื“ืข ืกืžื ื˜ื™ ืœื ื™ืœืš ืœืื™ื‘ื•ื“ ื‘ืžืขื‘ืจ ื‘ื™ืŸ ืงื‘ื•ืฆื•ืช. ืืช ื”ื•ืงื˜ื•ืจื™ื ืฉื•ืžืจื™ื ื‘ื‘ืกื™ืก ื ืชื•ื ื™ื Postgres ืขื ื”ืจื—ื‘ื” ื‘ืฉื pgvector ืฉืžืืคืฉืจืช ืฉืžื™ืจืช ื•ืงื˜ื•ืจื™ื ื•ื”ืฉื•ื•ืื” ื‘ื™ื ื™ื”ื. ื–ื” ืชื”ืœื™ืš ื—ื“ ืคืขืžื™ ืฉืงื•ืจื” ื‘ื™ืฆื™ืจืช ื”ืžืขืจื›ืช.
2. ื›ืฉื”ืžืขืจื›ืช ื‘ืื•ื•ื™ืจ ืœื•ืงื—ื™ื ืฉืืœื” ืžื”ืžืฉืชืžืฉื™ื, ืžืงื•ื“ื“ื™ื ื’ื ืื•ืชื” ืœื•ืงื˜ื•ืจ ื•ืžื—ืคืฉื™ื 5 ื•ืงื˜ื•ืจื™ื ืงืจื•ื‘ื™ื ืœื”. ืžื•ืฉื›ื™ื ืžื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืืช ื”ื˜ืงืกื˜ื™ื ืฉืžืชืื™ืžื™ื ืœื•ืงื˜ื•ืจื™ื ืืœื” ื•ืฉื•ืœื—ื™ื ื”ื›ืœ ืœื’'ืžื™ื ื™.

ืงื•ื“ ื”ื“ื•ื’ืžื” ื”ืžืœื ื–ืžื™ืŸ ื‘ืชื™ืงื™ื™ืช ื”ื“ื•ื’ืžืื•ืช ื‘ืงื™ืฉื•ืจ:

https://github.com/ynonp/pydanticai-demos/tree/main/10-bible-vectordb

ื”ืžื•ื“ืœ ืขืฆืžื• ื ืงืจื BAAI/bge-m3 ื•ืืคืฉืจ ืœื”ืชืงื™ืŸ ืื•ืชื• ื›ืกืคืจื™ื™ืช ืคื™ื™ืชื•ืŸ ืžืชื•ืš Hugging Face. ื–ื” ืžื•ื“ืœ ืกืžื ื˜ื™ ื‘ืขื‘ืจื™ืช ื•ืœื›ืŸ ื™ืชืื™ื ืœื˜ืงืกื˜ ืฉืœื ื•. ืื—ืจื™ ืฉื™ืฉ ืœื™ ืืช ื”ืžื•ื“ืœ ืžื•ืชืงืŸ ืงื™ื“ื•ื“ ืฉืœ ื˜ืงืกื˜ ืœื•ืงื˜ื•ืจ ื”ื•ื ื‘ืกืš ื”ื›ืœ ืงืจื™ืืช ืคื•ื ืงืฆื™ื” ื‘ืคื™ื™ืชื•ืŸ:

def embed_texts(texts: list[str]) -> list[list[float]]:
"""Embed a batch of texts, returning one 768-dim vector per text."""
embeddings = get_model().encode(texts, show_progress_bar=True)
return [vec.tolist() for vec in embeddings]


โœ ืงื™ื“ื•ื“ ื”ืชื ืš ืœื•ืงื˜ื•ืจื™ื

ื”ืงื™ื“ื•ื“ ืœื•ืงื˜ื•ืจื™ื ืžืžื•ืžืฉ ื‘ืงื•ื‘ืฅ index.py.

ื”ืคื•ื ืงืฆื™ื” ื”ืžืขื ื™ื™ื ืช ื‘ืงื•ื‘ืฅ ื ืงืจืืช build_chunks ื•ื–ื” ื”ืงื•ื“ ืฉืœื”:

def build_chunks(
verses: list[tuple[str, int, int, str]],
chunk_size: int,
overlap: int,
) -> list[dict]:
"""Group verses per (book, chapter) and split into overlapping windows."""
if chunk_size <= overlap:
raise ValueError(f"CHUNK_SIZE ({chunk_size}) must be greater than OVERLAP ({overlap})")
step = chunk_size - overlap

# Preserve file order while grouping by (book, chapter).
chapters: dict[tuple[str, int], list[tuple[int, str]]] = {}
order: list[tuple[str, int]] = []
for book, chapter, verse, text in verses:
key = (book, chapter)
GitHub
pydanticai-demos/10-bible-vectordb at main ยท ynonp/pydanticai-demos
Contribute to ynonp/pydanticai-demos development by creating an account on GitHub.
August 22, 2026 73