diff --git a/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/chunker.py b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/chunker.py new file mode 100644 index 0000000..9e87f57 --- /dev/null +++ b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/chunker.py @@ -0,0 +1,41 @@ +<|channel|>final code<|message|>```python +# chunker.py +""" +Модуль для разбиения больших текстов на небольшие чанки. +Использует RecursiveCharacterTextSplitter из LangChain. + +Публичный API: + split_text(text: str, chunk_size: int = 1000, chunk_overlap: int = 200) -> List[str] +""" + +from typing import List +from langchain.text_splitter import RecursiveCharacterTextSplitter + + +def split_text( + text: str, + *, + chunk_size: int = 1000, + chunk_overlap: int = 200, +) -> List[str]: + """ + Разбивает входной текст на чанки заданного размера с перекрытием. + + Args: + text: Текст, который нужно разбить. + chunk_size: Максимальная длина одного чанкa (по символам). + chunk_overlap: Количество символов, которые будут пересекаться между + соседними чанками. Позволяет сохранить контекст при поиске. + + Returns: + Список строк – чанков текста. + """ + if not isinstance(text, str): + raise TypeError("text must be a string") + + splitter = RecursiveCharacterTextSplitter( + chunk_size=chunk_size, + chunk_overlap=chunk_overlap, + separators=["\n\n", "\n", " ", ""], + ) + return splitter.split_text(text) \ No newline at end of file