{"id":358168,"date":"2024-05-21T00:05:56","date_gmt":"2024-05-21T00:05:56","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=358168"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=358168","title":{"rendered":"<span>\u0420\u0443\u0441\u0441\u043a\u0438\u0439 LLM-\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a (saiga) \u0441 \u043a\u044d\u0448\u0435\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f RAG (Retrieval-Augmented Generation)<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0443 Retrieval-Augmented Generation (&#171;\u041f\u043e\u0438\u0441\u043a\u043e\u0432\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f&#187;), \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0433\u043e \u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430 \u0432 \u0433\u043e\u0440\u043e\u0434\u0435 \u0413\u0440\u0430\u0434\u0441\u043a.<\/p>\n<p>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RAG?<\/p>\n<p>RAG &#8212; \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0430, \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0443\u0442\u0451\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e RAG. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0432\u0435 LLM, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u043f\u043e\u0438\u0441\u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e \u0431\u0430\u0437\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0417\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0446\u0435\u043b\u0435\u0439.<\/p>\n<p>\u041c\u044b \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a65\/c81\/973\/a65c8197331c24fea7b7b4a5a0985795.png\" alt=\"\u0411\u0443\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u044d\u0442\u043e. \u0421 \u0442\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a LLM, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0451\u043c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432.\" title=\"\u0411\u0443\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u044d\u0442\u043e. \u0421 \u0442\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a LLM, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0451\u043c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432.\" width=\"928\" height=\"578\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a65\/c81\/973\/a65c8197331c24fea7b7b4a5a0985795.png\"\/><\/p>\n<div><figcaption>\u0411\u0443\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u044d\u0442\u043e. <br \/>\u0421 \u0442\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a LLM, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0451\u043c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432.<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435 \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u044e\u043d\u0438\u043d\u0433\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0430\u0437\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 (\u043a\u044d\u0448);<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u043c\u043e\u0434\u0435\u043b\u0438, \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043e\u0442\u0434\u0430\u0451\u043c \u0440\u0430\u043d\u0435\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b.<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0430\u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u044d\u0448?<\/p>\n<ol>\n<li>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u043d\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043d\u0438\u0437\u0438\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043b\u0430\u0442\u043d\u044b\u0445 API (GTP-3.5, GPT-4) \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0435 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0435 \u0432\u0435\u0441\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 &#171;<a href=\"https:\/\/huggingface.co\/IlyaGusev\/saiga_mistral_7b_lora\" rel=\"noopener noreferrer nofollow\">saiga_mistral_7b_lora<\/a>&#171;, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0418\u043b\u044c\u044f \u0413\u0443\u0441\u0435\u0432 <a class=\"mention\" href=\"\/users\/takagi\">@Takagi<\/a>\u0440\u044f\u0434\u043e\u043c \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e &#8212; &#171;<a href=\"https:\/\/huggingface.co\/Open-Orca\/Mistral-7B-OpenOrca\" rel=\"noopener noreferrer nofollow\">Mistral-7B-OpenOrca<\/a>&#171;. Saiga_mistral_7b_lora \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 <a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/\" rel=\"noopener noreferrer nofollow\">CC BY 4.0<\/a>.<\/p>\n<p>\u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u043e\u0439 GPU \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0435 \u0432\u0435\u0441\u0430, \u0438 \u0441\u0430\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443 \u0441\u0435\u0431\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f offline.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b2\/1fa\/907\/4b21fa90762e9bc0b4ac7efc6a92426a.png\" alt=\"\" title=\"\" width=\"413\" height=\"252\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4b2\/1fa\/907\/4b21fa90762e9bc0b4ac7efc6a92426a.png\"\/><\/figure>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0441 Hugging Face:<\/p>\n<pre><code class=\"python\">import torch from peft import AutoPeftModelForCausalLM from transformers import AutoTokenizer, AutoModel import torch.nn.functional as F from langchain.prompts import PromptTemplate  adapt_model_name = \"IlyaGusev\/saiga_mistral_7b_lora\" base_model_name = \"Open-Orca\/Mistral-7B-OpenOrca\"  tokenizer = AutoTokenizer.from_pretrained(               base_model_name,               trust_remote_code=True)  tokenizer.pad_token = tokenizer.eos_token device_map = {\"\": 0}  model = AutoPeftModelForCausalLM.from_pretrained(               adapt_model_name,               device_map=device_map,               torch_dtype=torch.bfloat16)<\/code><\/pre>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c &#171;sentence-transformers\/all-MiniLM-L6-v2&#187; \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432.<\/p>\n<pre><code class=\"python\"># Load model from HuggingFace Hub sent_tokenizer = AutoTokenizer.from_pretrained('sentence-transformers\/all-MiniLM-L6-v2') sent_model = AutoModel.from_pretrained('sentence-transformers\/all-MiniLM-L6-v2')<\/code><\/pre>\n<p>\u041d\u0438\u0436\u0435 &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432. \u041d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0451\u043c \u0441\u0442\u0440\u043e\u043a\u0443, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c torch.tensor \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u044e (1, 384):<\/p>\n<pre><code class=\"python\">def get_embedding(sentence):          #Mean Pooling - Take attention mask into account for correct averaging     def _mean_pooling(model_output, attention_mask):         token_embeddings = model_output[0] #First element of model_output contains all token embeddings         input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()         return torch.sum(token_embeddings * input_mask_expanded, 1) \/ torch.clamp(input_mask_expanded.sum(1), min=1e-9)      # Tokenize sentences     encoded_input = sent_tokenizer([sentence], padding=True, truncation=True, return_tensors='pt')      # Compute token embeddings     with torch.no_grad():         model_output = sent_model(**encoded_input)      # Perform pooling     sentence_embeddings = _mean_pooling(model_output, encoded_input['attention_mask'])      # Normalize embeddings     sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)      return sentence_embeddings<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0431\u0430\u0437\u0443 \u0434\u043b\u044f \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432. \u0412 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f vector database, \u043c\u044b \u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 torch.tensor.<\/p>\n<pre><code class=\"python\">answers = [] emb_database = torch.empty((0, 384), dtype=torch.float32)<\/code><\/pre>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u044b\u043b\u0430 \u0432 \u043a\u0443\u0440\u0441\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<pre><code>user: \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0432\u0435\u0447\u043d\u043e\u0439 \u0437\u0430\u0432\u043e\u0434, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0433\u043e\u0440\u043e\u0434\u0435 \u0413\u0440\u0430\u0434\u0441\u043a. \u0414\u043e\u0435\u0445\u0430\u0442\u044c \u0434\u043e \u0437\u0430\u0432\u043e\u0434\u0430 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0432\u043e\u043a\u0437\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0435 \u043d\u043e\u043c\u0435\u0440 666. \u0417\u0430\u0432\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0441\u0432\u0435\u0447\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c. \u041e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044f: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a - \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f: 6 \u0440\u0430\u0437\u0440\u044f\u0434 \u0441\u0432\u0435\u0447\u043d\u0438\u043a\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430. \u041f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u043d\u043a\u0435\u0442\u0443, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u0440\u043e\u0439\u0442\u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432 \u0437\u0430\u0432\u043e\u0434\u0430 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0431\u043e\u043d\u0443\u0441\u044b: \u041c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435, \u0410\u0431\u043e\u043d\u0435\u043c\u0435\u043d\u0442 \u0432 \u0431\u0430\u0441\u0441\u0435\u0439\u043d. \u0417\u0430\u0432\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0438 \u0438\u0433\u0440\u044b. {question}\\nbot: \u0412\u043e\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u0441\u043b\u043e\u0432:\")<\/code><\/pre>\n<p>\u041e\u0431\u0435\u0440\u043d\u0451\u043c \u043f\u0440\u043e\u043c\u0442 \u0432 PromptTemplate \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 langchain. \u042d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433 f-\u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u0430\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0435\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<pre><code class=\"python\">info_prompt_less10 = PromptTemplate.from_template(\"user: \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0432\u0435\u0447\u043d\u043e\u0439 \u0437\u0430\u0432\u043e\u0434, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0433\u043e\u0440\u043e\u0434\u0435 \u0413\u0440\u0430\u0434\u0441\u043a. \u0414\u043e\u0435\u0445\u0430\u0442\u044c \u0434\u043e \u0437\u0430\u0432\u043e\u0434\u0430 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0432\u043e\u043a\u0437\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0435 \u043d\u043e\u043c\u0435\u0440 666. \u0417\u0430\u0432\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0441\u0432\u0435\u0447\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c. \u041e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044f: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a - \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f: 6 \u0440\u0430\u0437\u0440\u044f\u0434 \u0441\u0432\u0435\u0447\u043d\u0438\u043a\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430. \u041f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u043d\u043a\u0435\u0442\u0443, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u0440\u043e\u0439\u0442\u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432 \u0437\u0430\u0432\u043e\u0434\u0430 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0431\u043e\u043d\u0443\u0441\u044b: \u041c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435, \u0410\u0431\u043e\u043d\u0435\u043c\u0435\u043d\u0442 \u0432 \u0431\u0430\u0441\u0441\u0435\u0439\u043d. \u0417\u0430\u0432\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0438 \u0438\u0433\u0440\u044b. {question}\\nbot: \u0412\u043e\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u0441\u043b\u043e\u0432:\")<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 langchain:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4e4\/22e\/3ce\/4e422e3ce4b3dc8d90cb2ada8cc0a536.png\" width=\"1004\" height=\"371\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e4\/22e\/3ce\/4e422e3ce4b3dc8d90cb2ada8cc0a536.png\"\/><\/figure>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u0432\u0435\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043e\u0442\u0432\u0435\u0442\u0430:<\/p>\n<pre><code class=\"python\">def get_answer(info_prompt, question):          prompt = info_prompt.format(question=question)        inputs = tokenizer(prompt, return_tensors=\"pt\").to(\"cuda\")     outputs = model.generate(input_ids=inputs[\"input_ids\"].to(\"cuda\"),                              top_p=0.5,                             temperature=0.3,                             attention_mask=inputs[\"attention_mask\"],                             max_new_tokens=50,                             pad_token_id=tokenizer.eos_token_id,                             do_sample=True)      output = tokenizer.decode(outputs[0], skip_special_tokens=True)      parsed_answer = output.split(\"\u0412\u043e\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u0441\u043b\u043e\u0432:\")[1].strip()      if \"bot:\" in parsed_answer:         parsed_answer = parsed_answer.split(\"bot:\")[0].strip()      return parsed_answer<\/code><\/pre>\n<p>\u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d:<\/p>\n<p>1. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433 \u0432\u043e\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"python\">question = \"\u041a\u0430\u043a\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432 \u0432\u044b \u0438\u0449\u0435\u0442\u0435?\"  emb = get_embedding(question) emb<\/code><\/pre>\n<pre><code>output: tensor([[ 2.5110e-02,  5.1584e-03, -6.1139e-02, -1.9740e-02, -4.8976e-02,           5.2549e-02,  1.1428e-01,  1.3328e-01, -2.0873e-02, -6.2296e-02,          -2.0364e-03,  3.7445e-02,  1.4026e-02,  8.9859e-02, -1.1850e-02,           ...          ...          ...          ...          ...           2.8177e-02,  5.4864e-02, -1.2764e-02,  3.7095e-02, -5.4692e-02,           6.5493e-02, -1.1707e-02, -3.8507e-02, -4.5836e-02, -3.2941e-02,          -1.8714e-02,  1.0664e-02,  4.8238e-02, -7.9246e-02]])<\/code><\/pre>\n<p>2. \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D0%9E%D1%82%D0%B8%D0%B0%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438<\/a>) \u043c\u0435\u0436\u0434\u0443 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0438 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432 \u0431\u0430\u0437\u0435:<\/p>\n<pre><code class=\"python\">def get_cos_sim(question):     cos_sim = F.cosine_similarity(emb_database, emb, dim=1, eps=1e-8)     return cos_sim    get_cos_sim(question)<\/code><\/pre>\n<p>\u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u0432 \u0431\u0430\u0437\u0435 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442\u0443 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u041e\u0442\u0438\u0430\u0438 \u043f\u0443\u0441\u0442:<\/p>\n<pre><code>output: tensor([])<\/code><\/pre>\n<p>3. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0432 \u0431\u0430\u0437\u0443 \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432, \u0430 \u043e\u0442\u0432\u0435\u0442 &#8212; \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 answers.<\/p>\n<pre><code class=\"python\">answer = get_answer(info_prompt_less10, question) emb_database = torch.cat((emb_database, emb), 0) answers.append(answer) print(f'Answer from model: {answer}')<\/code><\/pre>\n<pre><code>output: Answer from model: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a.<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443. \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0443\u0441\u043e\u043a \u0432 \u043f\u0440\u043e\u043c\u0442\u0435: &#171;\u041e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044f: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a &#8212; \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432<br \/> \u043c\u0435\u0441\u044f\u0446.&#187;<\/p>\n<p>\u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438:<\/p>\n<pre><code class=\"python\">question = \"\u0413\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434?\"  emb = get_embedding(question) cos_sim = get_cos_sim(question) cos_sim<\/code><\/pre>\n<pre><code>output: tensor([0.5328])<\/code><\/pre>\n<p>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u0441\u0445\u043e\u0436 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 (\u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438 \u0440\u0430\u0432\u0435\u043d 1).<\/p>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code class=\"python\">answer = get_answer(info_prompt_less10, question) emb_database = torch.cat((emb_database, emb), 0) answers.append(answer) print(f'Answer from model: {answer}')<\/code><\/pre>\n<pre><code>output: Answer from model: \u0417\u0430\u0432\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u0413\u0440\u0430\u0434\u0441\u043a.<\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0446\u0438\u043a\u043b. \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438:<\/p>\n<pre><code class=\"python\">question = \"\u0413\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434?\"  emb = get_embedding(question) cos_sim = get_cos_sim(question) cos_sim<\/code><\/pre>\n<pre><code>output tensor([0.5483, 0.8426])<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441.<\/p>\n<pre><code class=\"python\">print(f'{cos_sim} {answers=}')<\/code><\/pre>\n<pre><code>output: tensor([0.5483, 0.8426]) answers=['\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a.', '\u0417\u0430\u0432\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u0413\u0440\u0430\u0434\u0441\u043a.']<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u043e\u0440\u043e\u0433 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u041e\u0442\u0438\u0430\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0446\u0438\u043a\u043b, \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0431\u043e\u0442\u0443.<\/p>\n<pre><code class=\"python\">questions = [ \"\u041a\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u0413\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434?\", \"\u041a\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u0413\u0434\u0435 \u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434?\", \"\u041a\u0430\u043a \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u041a\u0430\u043a \u043c\u043d\u0435 \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u041d\u0430 \u043a\u0430\u043a\u043e\u043c \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0435 \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u041a\u0430\u043a\u0438\u0435 \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u044b \u0435\u0434\u0443\u0442 \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u0427\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a\u0438\u0435 \u0438\u0437\u0434\u0435\u043b\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u044e \u044f \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a\u0438\u043a \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b?\", \"\u041a\u0430\u043a\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u044b \u0438\u0449\u0435\u0442\u0435?\", \"\u041a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442?\", \"\u041a\u0430\u043a\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u0432\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f?\", \"\u041a\u0430\u043a\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b?\", \"\u041a\u0430\u043a\u0438\u043c\u0438 \u043d\u0430\u0432\u044b\u043a\u0430\u043c\u0438 \u0438 \u0443\u043c\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442?\", \"\u041a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u0438 \u0438 \u0437\u043d\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0443?\", \"\u041a\u0430\u043a\u0438\u043c\u0438 \u043d\u0430\u0432\u044b\u043a\u0430\u043c\u0438 \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043b\u0430\u0434\u0435\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b?\", \"\u041a\u0430\u043a\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u043c\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u044b\u0442 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430?\", \"\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u0430\u0442\u044f\u0442 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438?\", \"\u041a\u0430\u043a\u043e\u0432\u0430 \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438?\", \"\u041a\u0430\u043a\u0430\u044f \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438?\", \"\u041a\u0430\u043a\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0442\u0440\u0443\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b?\", \"\u041a\u0430\u043a\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438?\", \"\u041a\u0430\u043a\u0430\u044f \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438?\", \"\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f?\", \"\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f \u043a \u0432\u0430\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443?\", \"\u041a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438\u0435\u043c\u0430?\", \"\u041a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438\u0435\u043c\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a \u044f \u043c\u043e\u0433\u0443 \u043f\u043e\u0434\u0430\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a\u0438\u0435 \u0448\u0430\u0433\u0438 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f \u043a \u0432\u0430\u043c \u043d\u0430 \u0437\u0430\u0432\u043e\u0434?\", \"\u041a\u0430\u043a\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u043d\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u0442\u0440\u0443\u0434\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043b\u044c\u0433\u043e\u0442\u044b \u0438 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f?\", \"\u041a\u0430\u043a\u0438\u0435 \u0431\u043e\u043d\u0443\u0441\u044b \u0438 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432?\", \"\u041a\u0430\u043a\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0438 \u043f\u043e\u043e\u0449\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b?\", \"\u041a\u0430\u043a\u0438\u0435 \u0431\u043e\u043d\u0443\u0441\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0433\u043e\u0434 \u0438\u043c\u0435\u044e\u0442\u0441\u044f?\", \"\u041a\u0430\u043a\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043e\u043d\u0443\u0441\u044b \u0438 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0440\u0443\u0434\u043e\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439?\" ]<\/code><\/pre>\n<pre><code class=\"python\">for q in questions:     print(q)     emb = get_embedding(q)     cos_sim = get_cos_sim(q)     max_value, max_index = torch.max(get_cos_sim(q), dim=0)      if max_value > 0.83:         answer = answers[max_index]         print(f'DATABASE: {answer}')     else:         answer = get_answer(info_prompt_less10, q)         emb_database = torch.cat((emb_database, emb), 0)         answers.append(answer)         print(f'MODEL: {answer}')     print()<\/code><\/pre>\n<pre><code># MODEL \u0438 DATABASE \u0441\u0434\u0435\u043b\u0430\u043b \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 # \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u0432\u0435\u0442 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \u0431\u0430\u0437\u044b.  output: \u041a\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430? MODEL: \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u0413\u0440\u0430\u0434\u0441\u043a.  \u0413\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434? DATABASE: \u0417\u0430\u0432\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u0413\u0440\u0430\u0434\u0441\u043a.  \u041a\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430? MODEL: \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u0413\u0440\u0430\u0434\u0441\u043a.  \u0413\u0434\u0435 \u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434? DATABASE: \u0417\u0430\u0432\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u0413\u0440\u0430\u0434\u0441\u043a.  \u041a\u0430\u043a \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430? MODEL: \"\u0410\u0432\u0442\u043e\u0431\u0443\u0441 \u043d\u043e\u043c\u0435\u0440 666\".  \u041a\u0430\u043a \u043c\u043d\u0435 \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430? DATABASE: \"\u0410\u0432\u0442\u043e\u0431\u0443\u0441 \u043d\u043e\u043c\u0435\u0440 666\".  \u041d\u0430 \u043a\u0430\u043a\u043e\u043c \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0435 \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430? DATABASE: \"\u0410\u0432\u0442\u043e\u0431\u0443\u0441 \u043d\u043e\u043c\u0435\u0440 666\".  \u041a\u0430\u043a\u0438\u0435 \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u044b \u0435\u0434\u0443\u0442 \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430? DATABASE: \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u0413\u0440\u0430\u0434\u0441\u043a.  \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435? MODEL: \u0421\u0432\u0435\u0447\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c.  \u041a\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435? DATABASE: \u0421\u0432\u0435\u0447\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c.  \u041a\u0430\u043a\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435? DATABASE: \u0421\u0432\u0435\u0447\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c.  \u0427\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435? DATABASE: \u0421\u0432\u0435\u0447\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c.  \u041a\u0430\u043a\u0438\u0435 \u0438\u0437\u0434\u0435\u043b\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435? DATABASE: \u0421\u0432\u0435\u0447\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c.  \u041a\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u044e \u044f \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435? MODEL: \u0441\u0432\u0435\u0447\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c.  \u041a\u0430\u043a\u0438\u043a \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b? MODEL: \u0421\u0432\u0435\u0447\u043d\u0438\u043a\u0438 6 \u0440\u0430\u0437\u0440\u044f\u0434\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430.  \u041a\u0430\u043a\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u044b \u0438\u0449\u0435\u0442\u0435? DATABASE: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a.  \u041a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442? DATABASE: \u0421\u0432\u0435\u0447\u043d\u0438\u043a\u0438 6 \u0440\u0430\u0437\u0440\u044f\u0434\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430.  \u041a\u0430\u043a\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u0432\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f? MODEL: \u0421\u0432\u0435\u0447\u043d\u0438\u043a, \u043c\u0435\u0445\u0430\u043d\u0438\u043a, \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u043a, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440.  \u041a\u0430\u043a\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b? DATABASE: \u0421\u0432\u0435\u0447\u043d\u0438\u043a, \u043c\u0435\u0445\u0430\u043d\u0438\u043a, \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u043a, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440.  \u041a\u0430\u043a\u0438\u043c\u0438 \u043d\u0430\u0432\u044b\u043a\u0430\u043c\u0438 \u0438 \u0443\u043c\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442? MODEL: 6 \u0440\u0430\u0437\u0440\u044f\u0434 \u0441\u0432\u0435\u0447\u043d\u0438\u043a\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430.  \u041a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u0438 \u0438 \u0437\u043d\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0443? DATABASE: 6 \u0440\u0430\u0437\u0440\u044f\u0434 \u0441\u0432\u0435\u0447\u043d\u0438\u043a\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430.  \u041a\u0430\u043a\u0438\u043c\u0438 \u043d\u0430\u0432\u044b\u043a\u0430\u043c\u0438 \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043b\u0430\u0434\u0435\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442? DATABASE: 6 \u0440\u0430\u0437\u0440\u044f\u0434 \u0441\u0432\u0435\u0447\u043d\u0438\u043a\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430.  \u041a\u0430\u043a\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u043c\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u044b\u0442 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430? MODEL: 6 \u0440\u0430\u0437\u0440\u044f\u0434 \u0441\u0432\u0435\u0447\u043d\u0438\u043a\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430.  \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u0430\u0442\u044f\u0442 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438? MODEL: 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446.  \u041a\u0430\u043a\u043e\u0432\u0430 \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438? MODEL: 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446.  \u041a\u0430\u043a\u0430\u044f \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f? MODEL: 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446.  \u041a\u0430\u043a\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b? MODEL: 150 \u0442\u044b\u0441\u044f\u0447 \u0432 \u043c\u0435\u0441\u044f\u0446.  \u041a\u0430\u043a\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438? MODEL: \u0417\u0430\u0440\u0430\u0431\u043e\u0442\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446.  \u041a\u0430\u043a\u0430\u044f \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438? DATABASE: 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446.  \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f \u043a \u0432\u0430\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443? MODEL: \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0430\u043d\u043a\u0435\u0442\u0443 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0440\u0435\u0437\u044e\u043c\u0435.  \u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f \u043a \u0432\u0430\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443?\u041a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438\u0435\u043c\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443? DATABASE: \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0430\u043d\u043a\u0435\u0442\u0443 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0440\u0435\u0437\u044e\u043c\u0435.  \u041a\u0430\u043a \u044f \u043c\u043e\u0433\u0443 \u043f\u043e\u0434\u0430\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435? DATABASE: \u0441\u0432\u0435\u0447\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c.  \u041a\u0430\u043a\u0438\u0435 \u0448\u0430\u0433\u0438 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f \u043a \u0432\u0430\u043c \u043d\u0430 \u0437\u0430\u0432\u043e\u0434? MODEL: \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0430\u043d\u043a\u0435\u0442\u0443, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435.  \u0427\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f \u043a \u0432\u0430\u043c \u043d\u0430 \u0437\u0430\u0432\u043e\u0434? MODEL: \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0430\u043d\u043a\u0435\u0442\u0443 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0440\u0435\u0437\u044e\u043c\u0435.  \u041a\u0430\u043a\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043e\u043d\u0443\u0441\u044b \u0438 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f? MODEL: \u041c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435, \u0430\u0431\u043e\u043d\u0435\u043c\u0435\u043d\u0442 \u0432 \u0431\u0430\u0441\u0441\u0435\u0439\u043d.  \u041a\u0430\u043a\u0438\u0435 \u0431\u043e\u043d\u0443\u0441\u044b \u0438 \u0432\u043e\u0437\u043d\u0430\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432? MODEL: \u043c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435, \u0430\u0431\u043e\u043d\u0435\u043c\u0435\u043d\u0442 \u0432 \u0431\u0430\u0441\u0441\u0435\u0439\u043d.  \u041a\u0430\u043a\u0438\u0435 \u0431\u043e\u043d\u0443\u0441\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f? MODEL: \u043c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435, \u0430\u0431\u043e\u043d\u0435\u043c\u0435\u043d\u0442 \u0432 \u0431\u0430\u0441\u0441\u0435\u0439\u043d.  \u041a\u0430\u043a\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043e\u043d\u0443\u0441\u044b \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f? DATABASE: \u041c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435, \u0430\u0431\u043e\u043d\u0435\u043c\u0435\u043d\u0442 \u0432 \u0431\u0430\u0441\u0441\u0435\u0439\u043d.<\/code><\/pre>\n<p>\u0418\u0437 \u0432\u044b\u0432\u043e\u0434\u0430 \u0432\u044b\u0448\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u043e DATABASE \u043e\u0442\u0434\u0430\u0451\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u043c \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432 \u043f\u043e\u0440\u043e\u0433 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u041e\u0442\u0438\u0430\u0438 \u0438 \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u0432 \u043f\u0440\u043e\u043c\u0442-\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.<\/p>\n<p>\u0421 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0430\u0437\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0432\u0441\u0435 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0434\u0435\u043d\u044c\u0433\u0438 \u0438\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<p><a href=\"https:\/\/github.com\/akocherovskiy\/LLM_chat-bot_RAG_approach\" rel=\"noopener noreferrer nofollow\"><u>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043a\u043e\u0434\u043e\u043c \u043d\u0430 GitHub<\/u><\/a><\/p>\n<p>Google Colab, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u04224 &#8212;\u00a0<a href=\"https:\/\/colab.research.google.com\/drive\/11ujIEisZzQPldTREwIpCJgZ5y5UDSUlG#scrollTo=5HtvtHN-h71E\" rel=\"noopener noreferrer nofollow\"><u>RAG_LLM_with_cache<\/u><\/a><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/769124\/\"> https:\/\/habr.com\/ru\/articles\/769124\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0443 Retrieval-Augmented Generation (&#171;\u041f\u043e\u0438\u0441\u043a\u043e\u0432\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f&#187;), \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0433\u043e \u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430 \u0432 \u0433\u043e\u0440\u043e\u0434\u0435 \u0413\u0440\u0430\u0434\u0441\u043a.<\/p>\n<p>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RAG?<\/p>\n<p>RAG &#8212; \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0430, \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0443\u0442\u0451\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e RAG. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0432\u0435 LLM, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u043f\u043e\u0438\u0441\u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e \u0431\u0430\u0437\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0417\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0446\u0435\u043b\u0435\u0439.<\/p>\n<p>\u041c\u044b \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0411\u0443\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u044d\u0442\u043e. <br \/>\u0421 \u0442\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a LLM, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0451\u043c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432.<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435 \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u044e\u043d\u0438\u043d\u0433\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0430\u0437\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 (\u043a\u044d\u0448);<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u043c\u043e\u0434\u0435\u043b\u0438, \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043e\u0442\u0434\u0430\u0451\u043c \u0440\u0430\u043d\u0435\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b.<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0430\u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u044d\u0448?<\/p>\n<ol>\n<li>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u043d\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043d\u0438\u0437\u0438\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043b\u0430\u0442\u043d\u044b\u0445 API (GTP-3.5, GPT-4) \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0435 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0435 \u0432\u0435\u0441\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 &#171;<a href=\"https:\/\/huggingface.co\/IlyaGusev\/saiga_mistral_7b_lora\" rel=\"noopener noreferrer nofollow\">saiga_mistral_7b_lora<\/a>&#171;, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0418\u043b\u044c\u044f \u0413\u0443\u0441\u0435\u0432 <a class=\"mention\" href=\"\/users\/takagi\">@Takagi<\/a>\u0440\u044f\u0434\u043e\u043c \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e &#8212; &#171;<a href=\"https:\/\/huggingface.co\/Open-Orca\/Mistral-7B-OpenOrca\" rel=\"noopener noreferrer nofollow\">Mistral-7B-OpenOrca<\/a>&#171;. Saiga_mistral_7b_lora \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 <a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/\" rel=\"noopener noreferrer nofollow\">CC BY 4.0<\/a>.<\/p>\n<p>\u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u043e\u0439 GPU \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0435 \u0432\u0435\u0441\u0430, \u0438 \u0441\u0430\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443 \u0441\u0435\u0431\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f offline.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0441 Hugging Face:<\/p>\n<pre><code class=\"python\">import torch from peft import AutoPeftModelForCausalLM from transformers import AutoTokenizer, AutoModel import torch.nn.functional as F from langchain.prompts import PromptTemplate  adapt_model_name = \"IlyaGusev\/saiga_mistral_7b_lora\" base_model_name = \"Open-Orca\/Mistral-7B-OpenOrca\"  tokenizer = AutoTokenizer.from_pretrained(               base_model_name,               trust_remote_code=True)  tokenizer.pad_token = tokenizer.eos_token device_map = {\"\": 0}  model = AutoPeftModelForCausalLM.from_pretrained(               adapt_model_name,               device_map=device_map,               torch_dtype=torch.bfloat16)<\/code><\/pre>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c &#171;sentence-transformers\/all-MiniLM-L6-v2&#187; \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432.<\/p>\n<pre><code class=\"python\"># Load model from HuggingFace Hub sent_tokenizer = AutoTokenizer.from_pretrained('sentence-transformers\/all-MiniLM-L6-v2') sent_model = AutoModel.from_pretrained('sentence-transformers\/all-MiniLM-L6-v2')<\/code><\/pre>\n<p>\u041d\u0438\u0436\u0435 &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432. \u041d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0451\u043c \u0441\u0442\u0440\u043e\u043a\u0443, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c torch.tensor \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u044e (1, 384):<\/p>\n<pre><code class=\"python\">def get_embedding(sentence):          #Mean Pooling - Take attention mask into account for correct averaging     def _mean_pooling(model_output, attention_mask):         token_embeddings = model_output[0] #First element of model_output contains all token embeddings         input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()         return torch.sum(token_embeddings * input_mask_expanded, 1) \/ torch.clamp(input_mask_expanded.sum(1), min=1e-9)      # Tokenize sentences     encoded_input = sent_tokenizer([sentence], padding=True, truncation=True, return_tensors='pt')      # Compute token embeddings     with torch.no_grad():         model_output = sent_model(**encoded_input)      # Perform pooling     sentence_embeddings = _mean_pooling(model_output, encoded_input['attention_mask'])      # Normalize embeddings     sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)      return sentence_embeddings<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0431\u0430\u0437\u0443 \u0434\u043b\u044f \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432. \u0412 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f vector database, \u043c\u044b \u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 torch.tensor.<\/p>\n<pre><code class=\"python\">answers = [] emb_database = torch.empty((0, 384), dtype=torch.float32)<\/code><\/pre>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u044b\u043b\u0430 \u0432 \u043a\u0443\u0440\u0441\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<pre><code>user: \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0432\u0435\u0447\u043d\u043e\u0439 \u0437\u0430\u0432\u043e\u0434, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0433\u043e\u0440\u043e\u0434\u0435 \u0413\u0440\u0430\u0434\u0441\u043a. \u0414\u043e\u0435\u0445\u0430\u0442\u044c \u0434\u043e \u0437\u0430\u0432\u043e\u0434\u0430 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0432\u043e\u043a\u0437\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0435 \u043d\u043e\u043c\u0435\u0440 666. \u0417\u0430\u0432\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0441\u0432\u0435\u0447\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c. \u041e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044f: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a - \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f: 6 \u0440\u0430\u0437\u0440\u044f\u0434 \u0441\u0432\u0435\u0447\u043d\u0438\u043a\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430. \u041f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u043d\u043a\u0435\u0442\u0443, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u0440\u043e\u0439\u0442\u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432 \u0437\u0430\u0432\u043e\u0434\u0430 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0431\u043e\u043d\u0443\u0441\u044b: \u041c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435, \u0410\u0431\u043e\u043d\u0435\u043c\u0435\u043d\u0442 \u0432 \u0431\u0430\u0441\u0441\u0435\u0439\u043d. \u0417\u0430\u0432\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0438 \u0438\u0433\u0440\u044b. {question}\\nbot: \u0412\u043e\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u0441\u043b\u043e\u0432:\")<\/code><\/pre>\n<p>\u041e\u0431\u0435\u0440\u043d\u0451\u043c \u043f\u0440\u043e\u043c\u0442 \u0432 PromptTemplate \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 langchain. \u042d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433 f-\u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u0430\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0435\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<pre><code class=\"python\">info_prompt_less10 = PromptTemplate.from_template(\"user: \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0432\u0435\u0447\u043d\u043e\u0439 \u0437\u0430\u0432\u043e\u0434, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0433\u043e\u0440\u043e\u0434\u0435 \u0413\u0440\u0430\u0434\u0441\u043a. \u0414\u043e\u0435\u0445\u0430\u0442\u044c \u0434\u043e \u0437\u0430\u0432\u043e\u0434\u0430 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0432\u043e\u043a\u0437\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0435 \u043d\u043e\u043c\u0435\u0440 666. \u0417\u0430\u0432\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0441\u0432\u0435\u0447\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c. \u041e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044f: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a - \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f: 6 \u0440\u0430\u0437\u0440\u044f\u0434 \u0441\u0432\u0435\u0447\u043d\u0438\u043a\u0430, 25 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430. \u041f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u043d\u043a\u0435\u0442\u0443, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u0440\u043e\u0439\u0442\u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432 \u0437\u0430\u0432\u043e\u0434\u0430 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0431\u043e\u043d\u0443\u0441\u044b: \u041c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435, \u0410\u0431\u043e\u043d\u0435\u043c\u0435\u043d\u0442 \u0432 \u0431\u0430\u0441\u0441\u0435\u0439\u043d. \u0417\u0430\u0432\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0438 \u0438\u0433\u0440\u044b. {question}\\nbot: \u0412\u043e\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u0441\u043b\u043e\u0432:\")<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 langchain:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u0432\u0435\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043e\u0442\u0432\u0435\u0442\u0430:<\/p>\n<pre><code class=\"python\">def get_answer(info_prompt, question):          prompt = info_prompt.format(question=question)        inputs = tokenizer(prompt, return_tensors=\"pt\").to(\"cuda\")     outputs = model.generate(input_ids=inputs[\"input_ids\"].to(\"cuda\"),                              top_p=0.5,                             temperature=0.3,                             attention_mask=inputs[\"attention_mask\"],                             max_new_tokens=50,                             pad_token_id=tokenizer.eos_token_id,                             do_sample=True)      output = tokenizer.decode(outputs[0], skip_special_tokens=True)      parsed_answer = output.split(\"\u0412\u043e\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u0441\u043b\u043e\u0432:\")[1].strip()      if \"bot:\" in parsed_answer:         parsed_answer = parsed_answer.split(\"bot:\")[0].strip()      return parsed_answer<\/code><\/pre>\n<p>\u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d:<\/p>\n<p>1. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433 \u0432\u043e\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"python\">question = \"\u041a\u0430\u043a\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432 \u0432\u044b \u0438\u0449\u0435\u0442\u0435?\"  emb = get_embedding(question) emb<\/code><\/pre>\n<pre><code>output: tensor([[ 2.5110e-02,  5.1584e-03, -6.1139e-02, -1.9740e-02, -4.8976e-02,           5.2549e-02,  1.1428e-01,  1.3328e-01, -2.0873e-02, -6.2296e-02,          -2.0364e-03,  3.7445e-02,  1.4026e-02,  8.9859e-02, -1.1850e-02,           ...          ...          ...          ...          ...           2.8177e-02,  5.4864e-02, -1.2764e-02,  3.7095e-02, -5.4692e-02,           6.5493e-02, -1.1707e-02, -3.8507e-02, -4.5836e-02, -3.2941e-02,          -1.8714e-02,  1.0664e-02,  4.8238e-02, -7.9246e-02]])<\/code><\/pre>\n<p>2. \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D0%9E%D1%82%D0%B8%D0%B0%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438<\/a>) \u043c\u0435\u0436\u0434\u0443 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0438 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432 \u0431\u0430\u0437\u0435:<\/p>\n<pre><code class=\"python\">def get_cos_sim(question):     cos_sim = F.cosine_similarity(emb_database, emb, dim=1, eps=1e-8)     return cos_sim    get_cos_sim(question)<\/code><\/pre>\n<p>\u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u0432 \u0431\u0430\u0437\u0435 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442\u0443 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u041e\u0442\u0438\u0430\u0438 \u043f\u0443\u0441\u0442:<\/p>\n<pre><code>output: tensor([])<\/code><\/pre>\n<p>3. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0432 \u0431\u0430\u0437\u0443 \u0435\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u043e\u0432, \u0430 \u043e\u0442\u0432\u0435\u0442 &#8212; \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 answers.<\/p>\n<pre><code class=\"python\">answer = get_answer(info_prompt_less10, question) emb_database = torch.cat((emb_database, emb), 0) answers.append(answer) print(f'Answer from model: {answer}')<\/code><\/pre>\n<pre><code>output: Answer from model: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a.<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443. \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0443\u0441\u043e\u043a \u0432 \u043f\u0440\u043e\u043c\u0442\u0435: &#171;\u041e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044f: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a &#8212; \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 150 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432<br \/> \u043c\u0435\u0441\u044f\u0446.&#187;<\/p>\n<p>\u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438:<\/p>\n<pre><code class=\"python\">question = \"\u0413\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434?\"  emb = get_embedding(question) cos_sim = get_cos_sim(question) cos_sim<\/code><\/pre>\n<pre><code>output: tensor([0.5328])<\/code><\/pre>\n<p>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u0441\u0445\u043e\u0436 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 (\u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438 \u0440\u0430\u0432\u0435\u043d 1).<\/p>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code class=\"python\">answer = get_answer(info_prompt_less10, question) emb_database = torch.cat((emb_database, emb), 0) answers.append(answer) print(f'Answer from model: {answer}')<\/code><\/pre>\n<pre><code>output: Answer from model: \u0417\u0430\u0432\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u0413\u0440\u0430\u0434\u0441\u043a.<\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0446\u0438\u043a\u043b. \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u041e\u0442\u0438\u0430\u0438:<\/p>\n<pre><code class=\"python\">question = \"\u0413\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434?\"  emb = get_embedding(question) cos_sim = get_cos_sim(question) cos_sim<\/code><\/pre>\n<pre><code>output tensor([0.5483, 0.8426])<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441.<\/p>\n<pre><code class=\"python\">print(f'{cos_sim} {answers=}')<\/code><\/pre>\n<pre><code>output: tensor([0.5483, 0.8426]) answers=['\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a.', '\u0417\u0430\u0432\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u043b. \u041b\u0435\u043d\u0438\u043d\u0430 22, \u0413\u0440\u0430\u0434\u0441\u043a.']<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u043e\u0440\u043e\u0433 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u041e\u0442\u0438\u0430\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0446\u0438\u043a\u043b, \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0431\u043e\u0442\u0443.<\/p>\n<pre><code class=\"python\">questions = [ \"\u041a\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u0413\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434?\", \"\u041a\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u0413\u0434\u0435 \u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u0448 \u0437\u0430\u0432\u043e\u0434?\", \"\u041a\u0430\u043a \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u041a\u0430\u043a \u043c\u043d\u0435 \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u041d\u0430 \u043a\u0430\u043a\u043e\u043c \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0435 \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u041a\u0430\u043a\u0438\u0435 \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u044b \u0435\u0434\u0443\u0442 \u0434\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0432\u043e\u0434\u0430?\", \"\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0437\u0430\u0432\u043e\u0434\u0435?\", \"\u041a\u0430\u043a\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-358168","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/358168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=358168"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/358168\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=358168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=358168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=358168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}