Суммаризация больших текстов с помощью GigaChain
Обновлено 14 ноября 2024
Раздел содержит пример суммаризации первых двух глав «Мастера и Маргариты» с помощью GigaChain и нескольких шаблонов промптов, доступных в репозитории.
Используйте для суммаризации модель с большим размером контектса.
Пример:
from langchain_gigachat.tools.load_prompt import load_from_giga_hub
from langchain.chains.summarize import load_summarize_chain
from langchain.chat_models import GigaChat
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
giga = GigaChat(credentials="ключ авторизации", model="GigaChat-Pro")
loader = TextLoader("../../../../docs/docs/use_cases/мастер_и_маргарита.txt")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(
chunk_size = 7000,
chunk_overlap = 0,
length_function = len,
is_separator_regex = False,
)
documents = text_splitter.split_documents(documents)
print(f"Количество частей книги: {len(documents)}")
book_map_prompt = load_from_giga_hub("lc://prompts/summarize/map_reduce/summarize_book_map.yaml")
book_combine_prompt = load_from_giga_hub("lc://prompts/summarize/map_reduce/summarize_book_combine.yaml")
chain = load_summarize_chain(giga, chain_type="map_reduce",
map_prompt=book_map_prompt,
combine_prompt=book_combine_prompt,
verbose=False)
res = chain.invoke({"input_documents": documents})
print(res["output_text"].replace(". ", ".\n"))
Используйте дополнительные параметры функции chain.invoke()
, для управления объемом текста и изменения количества предложений:
res = chain.invoke({
"input_documents": documents,
"map_size": "одно предложение",
"combine_size": "три предложения"
})
print(res["output_text"].replace(". ", ".\n"))