From 374fbf6ccf4ca2ed8b7680cee67173ad61cbfaa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=92=D0=B8=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BE=D0=B2?= Date: Thu, 2 Jul 2026 08:17:28 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20load=5Fdocs.py=20=E2=80=94=20=D0=90?= =?UTF-8?q?=D0=B3=D0=B5=D0=BD=D1=82=20=D1=81=20RAG-=D0=BF=D0=B0=D0=BC?= =?UTF-8?q?=D1=8F=D1=82=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- load_docs.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 load_docs.py diff --git a/load_docs.py b/load_docs.py new file mode 100644 index 0000000..9f98af6 --- /dev/null +++ b/load_docs.py @@ -0,0 +1,49 @@ +import os +import argparse +from dotenv import load_dotenv +from langchain_openai import OpenAIEmbeddings +from langchain_qdrant import QdrantVectorStore +from langchain_text_splitters import RecursiveCharacterTextSplitter +from langchain_core.documents import Document +from qdrant_client import QdrantClient + +# Загрузка переменных окружения +load_dotenv() + +# Инициализация эмбеддингов +embeddings = OpenAIEmbeddings( + model="text-embedding-3-small", + base_url="https://openrouter.ai/api/v1", + api_key=os.getenv("OPENAI_API_KEY"), +) + +# Инициализация Qdrant +client = QdrantClient(url="http://localhost:6333") +collection_name = "knowledge_base" +vector_store = QdrantVectorStore( + client=client, + collection_name=collection_name, + embeddings=embeddings, +) + +# Чанкинг +splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) + +def load_directory(dir_path: str): + """Загружает все .txt файлы из директории в векторную базу.""" + for root, dirs, files in os.walk(dir_path): + for file in files: + if file.lower().endswith(".txt"): + path = os.path.join(root, file) + with open(path, "r", encoding="utf-8") as f: + text = f.read() + chunks = splitter.split_text(text) + docs = [Document(page_content=chunk, metadata={"title": file}) for chunk in chunks] + vector_store.add_documents(docs) + print(f"Added {len(docs)} chunks from {file}") + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Load documents into Qdrant.") + parser.add_argument("directory", help="Path to directory with .txt files") + args = parser.parse_args() + load_directory(args.directory) \ No newline at end of file