рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

Haystack AI рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓: рдПрдЬреЗрдВрдЯрд┐рдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рдирд╛

рдЬрд╛рдиреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд╡реЗрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рдЯреВрд▓реНрд╕ рдХреЛ рдЗрдирд╡реЛрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдЬреЗрдВрдЯрд┐рдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП Haystack рдХреЗ рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕реЗрд╕, рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕, рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░, рдЬрдирд░реЗрдЯрд░, рд░рд┐рдЯреНрд░реАрд╡рд░, рдкрд╛рдЗрдкрд▓рд╛рдЗрди, рдЯреВрд▓реНрд╕ рдФрд░ рдПрдЬреЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
┬╖ 8 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

Retrieval-Augmented Generation (RAG) рдХреЗ рджреМрд░ рдореЗрдВ, LangChain рдЬреИрд╕реЗ рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ AI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реБрдПред рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рджреБрдирд┐рдпрд╛ Agentic AI рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реА рд╣реИ, Haystack AI рдЬреИрд╕реЗ рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдЕрдкрдиреА рд▓рдЪреАрд▓реЗрдкрди, рдореЙрдбреНрдпреБрд▓реИрд░рд┐рдЯреА, рдФрд░ рд╡рд┐рд╡рд┐рдз рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рдореБрдЦрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо Haystack AI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рдкреНрд░рдореБрдЦ рдШрдЯрдХреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреА рдкрдбрд╝рддрд╛рд▓ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдХрдИ рдЯреВрд▓реНрд╕ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ AI рдПрдЬреЗрдВрдЯрд┐рдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рдирд╛ рд╕реАрдЦреЗрдВрдЧреЗред рдПрдЬреЗрдВрдЯрд┐рдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдРрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рднрд╛рд╖рд╛ рдореЙрдбрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд╡реЗрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рддрдГ рдЯреВрд▓реНрд╕ рдФрд░ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рдЗрдирд╡реЛрдХ рдХрд░ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ Agentic AI рдФрд░ Agentic RAG рдкрд░ рд╣рдорд╛рд░реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЕрд╡рд╢реНрдп рджреЗрдЦреЗрдВред┬а

рд╣рдо рдЕрдкрдиреЗ рдкрд╛рдардХреЛрдВ рдХреЛ AI рдХреА рддрд╛рдЬрд╝рд╛ рдЦрдмрд░реЛрдВ рд╕реЗ рдЕрдкрдбреЗрдЯ рд░рдЦрддреЗ рд╣реИрдВ The Median рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗтАФрдпрд╣ рд╣рдорд╛рд░рд╛ рдирд┐рдГрд╢реБрд▓реНрдХ рд╢реБрдХреНрд░рд╡рд╛рд░ рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░ рд╣реИ рдЬреЛ рд╣рдлреНрддреЗ рдХреА рдкреНрд░рдореБрдЦ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЛ рд╕рд░рд▓рддрд╛ рд╕реЗ рд╕рдордЭрд╛рддрд╛ рд╣реИред рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░реЗрдВ рдФрд░ рд╣рд░ рд╕рдкреНрддрд╛рд╣ рдХреБрдЫ рд╣реА рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рд░рд╣реЗрдВ:

Haystack AI рдХреНрдпрд╛ рд╣реИ?

Haystack рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬрд┐рд╕реЗ Large Language Models (LLMs) рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп, рдкреНрд░реЛрдбрдХреНрд╢рди-рд░реЗрдбреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ RAG рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕, рдПрдЬреЗрдВрдЯ-рдЖрдзрд╛рд░рд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ, рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рд╕рд░реНрдЪ рд╕рд┐рд╕реНрдЯрдо, рдФрд░ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реНрд╡рд╛рдпрддреНрдд AI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреИрд╕реА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред

Haystack рдХреА рдореЙрдбреНрдпреБрд▓рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ OpenAI, Hugging Face Transformers, Chroma, MCP рдЯреВрд▓реНрд╕, Elasticsearch, рдФрд░ рдЕрдиреНрдп рдЕрдЧреНрд░рдгреА AI рддрдХрдиреАрдХреЛрдВ рдФрд░ рдЯреВрд▓реНрд╕ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рджреЗрддреА рд╣реИред┬а

рдпрд╣ Langchain рд╕реЗ рд╕рд░рд▓ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдФрд░ рдПрдЬреЗрдВрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреВрд▓реНрд╕ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдореВрд▓ рд░реВрдк рд╕реЗ, Haystack рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рд╕рдВрд░рдЪрд┐рдд рд╣реИ, рдЬреЛ LLM рдкреНрд░рджрд╛рддрд╛рдУрдВ, рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░реНрд╕, рдЯреВрд▓реНрд╕, рдПрдЬреЗрдВрдЯреНрд╕, рдФрд░ рд╕рдореГрджреНрдз рдЗрдВрдЯреЗрдЧреНрд░реЗрд╢рдВрд╕ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдВрдб-рдЯреВ-рдПрдВрдб AI рд╕рд┐рд╕реНрдЯрдо рдбрд┐рдЬрд╝рд╛рдЗрди, рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддреЗ рд╣реИрдВред

Haystack concepts overview diagram

рд╕реНрд░реЛрдд: Haystack Concepts Overview

Haystack рдХреЗ рдкреНрд░рдореБрдЦ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Haystack рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдордЬрд╝рдмреВрдд RAG рд╡рд░реНрдХрдлрд╝реНрд▓реЛ, рдПрдЬреЗрдВрдЯрд┐рдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕, рдпрд╛ рджреЛрдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдЙрдиреНрдирдд AI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

1. рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕

Haystack рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВтАФрдЬреИрд╕реЗ рд░рд┐рдЯреНрд░реАрд╡рд▓, рдЬрдирд░реЗрд╢рди, рдпрд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░реЗрдЬтАФрдХреЗ рд▓рд┐рдП рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпреЗ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ Python рдХреНрд▓рд╛рд╕реЗрд╕ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореЗрдердбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ run() рдореЗрдердб рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред┬а

рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ API рдХрд╕реНрдЯрдо рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА APIs рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред┬а

2. рдЬрдирд░реЗрдЯрд░реНрд╕

рдЬрдирд░реЗрдЯрд░реНрд╕ рдкреНрд░рд╛рдкреНрдд рдкреНрд░реЙрдореНрдкреНрдЯреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рдмреИрдХрдПрдВрдб рдореЗрдВ, рдпреЗ рдЬрдирд░реЗрдЯрд░реНрд╕ LLM рдкреНрд░рджрд╛рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП APIs рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдврд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдЬрдирд░реЗрдЯрд░реНрд╕ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ:

1. рдЪреИрдЯ рдЬрдирд░реЗрдЯрд░реНрд╕: рдпреЗ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдиреЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╢реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдХреЗ рдЪреИрдЯ рдХрдореНрдкреНрд▓реАрд╢рди рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред

2. рдиреЙрди-рдЪреИрдЯ рдЬрдирд░реЗрдЯрд░реНрд╕: рдпреЗ рд╕рд░рд▓ рдЯреЗрдХреНрд╕реНрдЯ рдЬрдирд░реЗрд╢рди рдХрд╛рд░реНрдпреЛрдВ, рдЬреИрд╕реЗ рдЕрдиреБрд╡рд╛рдж рдпрд╛ рд╕рд╛рд░-рд╕рдВрдХреНрд╖реЗрдкрдг, рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

3. рд░рд┐рдЯреНрд░реАрд╡рд░реНрд╕

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд╡реЗрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдХрд╕реНрдЯрдо рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЕрджреНрд╡рд┐рддреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Elasticsearch рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП рд░рд┐рдЯреНрд░реАрд╡рд░ рдФрд░ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░тАФрджреЛрдиреЛрдВ рдкреИрдХреЗрдЬ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

4. рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░реНрд╕

Haystack рдореЗрдВ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП write_documents () рдФрд░ delete_documents () рдЬреИрд╕реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдЖрд╕рд╛рдиреА рд╕реЗ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝ рдпрд╛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП DocumentWriter рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░реНрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

5. рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕реЗрд╕

рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЛ рд╕рд░рд▓ рдФрд░ рдореЙрдбреНрдпреБрд▓рд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рд░рд▓ рдмрдирд╛рддреА рд╣реИрдВред рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдореЗрдВ рдЗрдирдкреБрдЯреНрд╕ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рднреАрддрд░ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рд╣реЛрддреА рд╣реИред

рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕реЗрд╕ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрддреА рд╣реИрдВ:

  • Document рдХреНрд▓рд╛рд╕: рдЗрд╕рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ, рдореЗрдЯрд╛рдбреЗрдЯрд╛, рдЯреЗрдмрд▓реНрд╕ рдпрд╛ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░реНрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • Answer рдХреНрд▓рд╛рд╕: рдЗрд╕рдореЗрдВ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрддреНрддрд░, рдореВрд▓ рдХреНрд╡реЗрд░реА, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред

6. рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕

рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕, рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░реНрд╕ рдФрд░ рдЗрдВрдЯреЗрдЧреНрд░реЗрд╢рдВрд╕ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрдмрд▓ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдмрдирд╛рддреА рд╣реИрдВред рдпреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдлрд╝реНрд▓реЛ, рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕, рд▓реВрдкреНрд╕, рд╕рд╛рде рд╣реА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ, рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдФрд░ рдХреНрд╡реЗрд░реАрдВрдЧ рд╕реНрдЯреЗрдкреНрд╕ рдЬреИрд╕реА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВред рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдХреЛ YAML рдпрд╛ TOML рдЬреИрд╕реЗ рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ рд╕реЗрд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдпрд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

7. рдПрдЬреЗрдВрдЯреНрд╕

AI рдПрдЬреЗрдВрдЯреНрд╕ рд╕реНрд╡рд╛рдпрддреНрдд рд╕рд┐рд╕реНрдЯрдо рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдмрдбрд╝реЗ рднрд╛рд╖рд╛ рдореЙрдбрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрддреЗ рд╣реИрдВред рдЖрдк рдХрд┐рд╕реА API рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЯреВрд▓реНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдЬреЗрдВрдЯ рдХреЛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рд╢реНрди рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВред рдПрдЬреЗрдВрдЯ рдХреНрд╡реЗрд░реА рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреБрдХреНрдд рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

Haystack AI рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ

рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдо Haystack рдХреЗ рдкреНрд░рдореБрдЦ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдПрдХ AI рдПрдЬреЗрдВрдЯрд┐рдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ RAG рдФрд░ рд╡реЗрдм рдПрдХреНрд╕реЗрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред┬а

1. рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕реЗрдЯрдЕрдк

рдЗрд╕ рдЧрд╛рдЗрдб рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдХреЛрдбрд┐рдВрдЧ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ DataLab рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрди Python рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВрдЧреЗ: Haystack, OpenAI, Tavil, рдФрд░ itertoolsред рдкреНрд░рддреНрдпреЗрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  1. Haystack: LLM-рдЖрдзрд╛рд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдФрд░ рдПрдЬреЗрдВрдЯреНрд╕ рдмрдирд╛рдирд╛ред
  2. Tavil: APIs рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдм рд╕рд░реНрдЪ рдлрд╝рдВрдХреНрд╢рдиреИрд▓рд┐рдЯреА рддрдХ рдкрд╣реБрдБрдЪред
  3. OpenAI: LLMs рдФрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдореЙрдбрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  4. itertools: Python рдореЗрдВ рдПрдбрд╡рд╛рдВрд╕реНрдб рдЗрдЯрд░реЗрд╢рди рдЯреВрд▓реНрд╕ рдФрд░ рдХреБрд╢рд▓ рд▓реВрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдПред
!pip install -qU \
    "haystack-ai[agentst]" \
    tavily-python \
    openai \
    more_itertools

OpenAI рдФрд░ Tavily рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреА API keys рдХреЛ environment variables рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк DataLab рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ Environment рдЯреИрдм рдореЗрдВ рдЬрд╛рдПрдБ рдФрд░ Environment Variables рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВред┬а

Setting up environment variable in the Datalab.

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдЙрдиреНрд╣реЗрдВ Python рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

import os

os.environ["OPENAI_API_KEY"]  = "sk-..."   # тЖР paste your OpenAI key
os.environ["TAVILY_API_KEY"]  = "tvly-..." # тЖР paste your Tavily key

2. рдиреЙрд▓реЗрдЬ рдмреЗрд╕ рддреИрдпрд╛рд░ рдХрд░рдирд╛

рд╣рдо Haystack рдХреЗ Document рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдиреЙрд▓реЗрдЬ рдмреЗрд╕ рдмрдирд╛рдПрдБрдЧреЗред рдЗрд╕ рдиреЙрд▓реЗрдЬ рдмреЗрд╕ рдореЗрдВ рдЗрд╕реНрд▓рд╛рдорд╛рдмрд╛рдж рд╢рд╣рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреАред

from haystack.dataclasses import Document
from typing import List, Any, Dict


docs: List[Document] = [
    Document(content="Islamabad experiences a humid subtropical climate with hot summers and mild winters."),
    Document(content="Peak tourist season in Islamabad is during spring (March to May) and autumn (September to November) due to pleasant weather."),
    Document(content="Faisal Mosque, one of the largest mosques in the world, is an iconic landmark in Islamabad designed by Turkish architect Vedat Dalokay."),
    Document(content="Islamabad was purpose-built as the capital of Pakistan in the 1960s, designed by Greek architect Constantinos Apostolos Doxiadis."),
    Document(content="The city is known for its well-planned infrastructure, wide roads, and green spaces, making it one of the most organized cities in Pakistan."),
]

3. рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛рдирд╛

рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╕реНрдЯреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд╡реЗрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрд╢рд▓ рд░рд┐рдЯреНрд░реАрд╡рд▓ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред┬а

рдпрд╣рд╛рдБ рд╣рдо рдпрд╣ рдХрд░реЗрдВрдЧреЗ:

  1. рдЗрди-рдореЗрдореЛрд░реА рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ рдмрдирд╛рдПрдБрдЧреЗред
  2. OpenAI рдПрдореНрдмреЗрдбрд░ рдФрд░ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд░рд╛рдЗрдЯрд░ рдЬреИрд╕реЗ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде Haystack рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛рдПрдБрдЧреЗред
  3. рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрджрд▓рдХрд░ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.embedders import OpenAIDocumentEmbedder
from haystack.components.writers import DocumentWriter
from haystack import Pipeline, component

document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")

indexing_pipeline = Pipeline()
indexing_pipeline.add_component("embedder", OpenAIDocumentEmbedder(model="text-embedding-3-small"))
indexing_pipeline.add_component("writer", DocumentWriter(document_store=document_store))
indexing_pipeline.connect("embedder", "writer")

indexing_pipeline.run({"embedder": {"documents": docs}})

рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ:

Calculating embeddings: 1it [00:00,  1.34it/s]


{'embedder': {'meta': {'model': 'text-embedding-3-small',
   'usage': {'prompt_tokens': 128, 'total_tokens': 128}}},
 'writer': {'documents_written': 5}}

4. RAG рдЯреВрд▓ рдмрдирд╛рдирд╛

рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ рднрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдХрд╕реНрдЯрдо RAG рд╕рд░реНрдЪ рдЯреВрд▓ рдмрдирд╛рдПрдБрдЧреЗред┬а

рдпрд╣ рдЯреВрд▓ рдпрд╣ рдХрд░реЗрдЧрд╛:

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрджрд▓реЗрдЧрд╛ред
  2. рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕рдорд╛рдирддрд╛-рдЖрдзрд╛рд░рд┐рдд рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ред
  3. рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
from haystack.tools import ComponentTool
from haystack.components.embedders import OpenAIDocumentEmbedder, OpenAITextEmbedder
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever

@component()
class RagSearcher:
    """Query тАС> topтАСk docs from the private store"""
    def __init__(self, document_store, top_k: int = 3):
        self.text_embedder = OpenAITextEmbedder(model="text-embedding-3-small")
        self.retriever = InMemoryEmbeddingRetriever(document_store=document_store, top_k=top_k)

    @component.output_types(documents=List[Document])
    def run(self, text: str) -> Dict[str, Any]:
        emb_out = self.text_embedder.run(text=text)
        docs_out = self.retriever.run(query_embedding=emb_out["embedding"])
        return {"documents": docs_out["documents"]}

rag_tool = ComponentTool(
    component=RagSearcher(document_store),
    name="rag_search",
    description="Semantic search over the Islamabad knowledge base."
)

5. рд╡реЗрдм рд╕рд░реНрдЪ рдЯреВрд▓ рдмрдирд╛рдирд╛

рдХреНрдпреЛрдВрдХрд┐ Tavily рдХреЗ рдиреИрдЯрд┐рд╡ Haystack рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо Tavily API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╕реНрдЯрдо рд╡реЗрдм рд╕рд░реНрдЪ рдЯреВрд▓ рдмрдирд╛рдПрдБрдЧреЗред рдпрд╣ рдЯреВрд▓ рд▓рд╛рдЗрд╡ рд╡реЗрдм рд╕рд░реНрдЪ рдкрд░рд┐рдгрд╛рдо рд▓рд╛рдПрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ Document рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ред

import os
import requests
from haystack import component
from haystack.dataclasses import Document
from typing import List

@component
class TavilyWebSearch:
    def __init__(self, api_key: str, top_k: int = 3):
        self.api_key = api_key
        self.top_k   = top_k

    def run(self, query: str):
        resp = requests.post(
            "https://api.tavily.com/search",
            json={
                "api_key": self.api_key,
                "query": query,
                "max_results": self.top_k,
                "include_answer": True,
            },
            timeout=15,
        )
        resp.raise_for_status()
        data = resp.json()

        docs: List[Document] = []
        if answer := data.get("answer"):
            docs.append(Document(content=answer, meta={"source": "tavily:direct_answer"}))

        for hit in data.get("results", []):
            docs.append(
                Document(
                    content=hit["content"],
                    meta={
                        "title": hit["title"],
                        "url": hit["url"],
                    },
                )
            )
        return {"documents": docs}


web_tool = ComponentTool(
    component=TavilyWebSearch(api_key=os.environ["TAVILY_API_KEY"], top_k=3),
    name="web_search",
    description="Live web search via Tavily ."
)

6. рдПрдХ рдПрдЬреЗрдВрдЯ рдмрдирд╛рдирд╛

рд╣рдо OpenAI рдлрдВрдХреНрд╢рдВрд╕ рдФрд░ рдирд╡реАрдирддрдо gpt-4.1-mini рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдПрдБрдЧреЗред рдкрд╣рд▓реЗ, рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдПрдЬреЗрдВрдЯ рдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рди рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЬрдирд░реЗрдЯрд░, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рдФрд░ рдЯреВрд▓реНрд╕ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдЬреЗрдВрдЯ рдмрдирд╛рдПрдБрдЧреЗред

рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдЬреЗрдВрдЯ рдкрд╣рд▓реЗ RAG рд╕рд░реНрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдирдХрд╛рд░реА рдЬрд╛рдБрдЪреЗрдЧрд╛ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкреНрд░рд╢реНрди рдирд╡реАрдирддрдо рд╕рдорд╛рдЪрд╛рд░, рдореМрд╕рдо рдпрд╛ рдмреНрд░реЗрдХрд┐рдВрдЧ рдиреНрдпреВрдЬрд╝ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рддреЛ рдПрдЬреЗрдВрдЯ рд╕реАрдзреЗ рд╡реЗрдм рд╕рд░реНрдЪ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.agents import Agent

generator = OpenAIChatGenerator(model="gpt-4.1-mini")

system_prompt = """
You are a helpful assistant.
- Use rag_search first to retrieve information from the knowledge base.
- Use web_search only when the query requires fresh, real-time, or external information (e.g., weather, breaking news).
"""

agent = Agent(
    chat_generator=generator,
    system_prompt=system_prompt,
    tools=[rag_tool, web_tool],
)

7. RAG рдЯреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рд╣рдо рдЗрд╕реНрд▓рд╛рдорд╛рдмрд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВрдЧреЗ рддрд╛рдХрд┐ RAG рдЯреВрд▓ рдХреЛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд╡реЛрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

from haystack.dataclasses import ChatMessage

msg = ChatMessage.from_user("What is the peak tourist season in Islamabad?")
resp = agent.run(messages=[msg])
print(resp["messages"][-1].text)

рд╣рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрджрд░реНрднрд┐рдд рдЙрддреНрддрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП RAG рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реБрдЖ рд╣реИ?

The peak tourist season in Islamabad is during spring (March to May) and autumn (September to November).

8. рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЯреВрд▓реНрд╕ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди-рд╕реЗ рдЯреВрд▓реНрд╕ рдЗрдирд╡реЛрдХ рд╣реБрдП, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдБрдЧреЗ рдЬреЛ рдЯреВрд▓реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓реЗрдЧрд╛ред

def tools_used(run_output: dict) -> list[str]:
    seen, ordered = set(), []

    for msg in run_output["messages"]:
        for call in msg.tool_calls:
            if call.tool_name not in seen:
                ordered.append(call.tool_name)
                seen.add(call.tool_name)
    return ordered
print("Tools invoked тЖТ", tools_used(resp))

рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдПрдЬреЗрдВрдЯ рдиреЗ рдХреЗрд╡рд▓ rag_search рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ред

Tools invoked тЖТ ['rag_search']

9. рд╡реЗрдм рдЯреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рдЕрдм рд╣рдо рдЗрд╕реНрд▓рд╛рдорд╛рдмрд╛рдж рдХреЗ рдореМрд╕рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫреЗрдВрдЧреЗред RAG рдЯреВрд▓ рдХреЛ рдЗрдирд╡реЛрдХ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рд╕рд░реНрдЪ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

msg = ChatMessage.from_user("What is the temperature in Islamabad now?")
resp = agent.run(messages=[msg])
print(resp["messages"][-1].text)
print("Tools invoked тЖТ", tools_used(resp))

рдЙрддреНрддрд░ рдХрд╛рдлреА рд╕рдЯреАрдХ рд╣реИ, рдФрд░ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рд╕рд░реНрдЪ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

The current temperature in Islamabad is 31┬░C with a real-feel temperature of 32┬░C.
Tools invoked тЖТ ['web_search']

рдпрджрд┐ рдЖрдкрдХреЛ рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ Datalab Notebook рджреЗрдЦреЗрдВ: Haystack AI Tutorial тАФ DataLab.

Haystack рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ

рд╣рдордиреЗ Haystack AI рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЗрдВ рдХрд╡рд░ рдХрд░ рд▓реА рд╣реИрдВред рдЖрдкрдХреА рд╕реАрдЦрдиреЗ рдХреА рдЕрдЧрд▓реА рдХрдбрд╝реА рдПрдХ рдкреВрд░реНрдгрддрдГ рдХрд╛рд░реНрдпрд╢реАрд▓ AI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрдбрд╝рддрд╛рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

  1. рдорд▓реНрдЯреАрдореЙрдбрд▓ AI: рдРрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдЗрдореЗрдЬ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдФрд░ рдПрдХреАрдХреГрдд рдХрд░реЗрдВтАФрдЬреИрд╕реЗ рдЗрдореЗрдЬ рдХреИрдкреНрд╢рдирд┐рдВрдЧ, рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдЗрдореЗрдЬ рдЬрдирд░реЗрд╢рдиред
  2. рдХрдиреНрд╡рд░реНрд╕реЗрд╢рдирд▓ AI: рдорд▓реНрдЯреА-рдЯрд░реНрди, рдбрд╛рдпрдиреЗрдорд┐рдХ рдЪреИрдЯрдмреЙрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЪреИрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рд╕рд╛рд░реНрдердХ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХреЗрдВред
  3. рдПрдЬреЗрдВрдЯрд┐рдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕: рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рднрд╛рд╖рд╛ рдореЙрдбрд▓реЛрдВ рдХреЛ рдЯреВрд▓реНрд╕ рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдмрд╛рд╣рд░реА рдХреНрд╖рдорддрд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рдПрдБред
  4. рдПрдбрд╡рд╛рдВрд╕реНрдб RAG: рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд░рд┐рдЯреНрд░реАрд╡рд▓ рдХреЛ LLM-рдЖрдзрд╛рд░рд┐рдд рдЬрдирд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдХрд░ рд╡рд┐рд╡рд┐рдз рд░рд┐рдЯреНрд░реАрд╡рд▓ рдФрд░ рдЬрдирд░реЗрд╢рди рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
  5. MCP рдЯреВрд▓реНрд╕ рдЗрдВрдЯреЗрдЧреНрд░реЗрд╢рди: Model Context Protocol рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ LLMs рдХреЛ рдмрд╛рд╣рд░реА рдЯреВрд▓реНрд╕, APIs рдФрд░ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рд╣рдЬрддрд╛ рд╕реЗ рдЬреЛрдбрд╝реЗрдВред
  6. рдореЙрдбрд▓ рдЗрд╡реИрд▓реНрдпреВрдПрд╢рди: рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдХрд╛ рд╕рдЯреАрдХрддрд╛, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред
  7. рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди: рдРрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдПрдБ рдЬрд╣рд╛рдБ рдХрдИ рдПрдЬреЗрдВрдЯреНрд╕ рдорд┐рд▓рдХрд░ рдЬрдЯрд┐рд▓, рдмрд╣реБ-рдЪрд░рдгреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд░реЗрдВред

рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░

рдХрдИ LLM рдлрд╝реНрд░реЗрдорд╡рд░реНрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ Haystack рд╕рдмрд╕реЗ рд╕рд╣рдЬ рдФрд░ рд▓рдЪреАрд▓реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИ, рдХрдо рдЬрдЯрд┐рд▓ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИред┬а

рдЗрд╕рдХреЗ рдкреНрд░рдореБрдЦ рдЖрдХрд░реНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИтАФрдЕрдкрдиреА рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдмреЗрд╣рдж рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдирд╛, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЕрдиреБрдХреВрд▓ рдмрди рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдЬреЗрдВрдЯреНрд╕ рдФрд░ рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рд╕рдордЭрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдЗрдирд╡реЛрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдЯреВрд▓реНрд╕ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдФрд░ рдХреНрд░рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдордЭ рдорд┐рд▓реАред┬а

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрд░реЛрддреЛрдВ рдФрд░ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ IDs рдЬреИрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рджрд┐рдЦрд╛рдП рдЬрд╛ рд╕рдХреЗрдВ, рдЬреЛ рдЖрдкрдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк AI рдПрдЬреЗрдВрдЯреНрд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди рджреЗрдЦреЗрдВ:┬а

Abid Ali Awan

рд▓реЗрдЦрдХ

Abid Ali Awan

рдПрдХ рдкреНрд░рдорд╛рдгрд┐рдд рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрдЯрд┐рд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╡рд╛рдЪрд╛рд░реА рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣рд┐рдд рд░рд╣рддрд╛/рд░рд╣рддреА рд╣реВрдБред рд╕реНрдкреАрдЪ рд░рд┐рдХреЙрдЧреНрдирд┐рд╢рди, рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ, MLOps, рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ AI рдФрд░ NLP рдореЗрдВ рдордЬрдмреВрдд рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рдРрд╕реЗ рдмреБрджреНрдзрд┐рдорд╛рди рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдирд┐рдЦрд╛рд░реА рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓ рд╕рдХреЗрдВред рддрдХрдиреАрдХреА рджрдХреНрд╖рддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЬрдЯрд┐рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдирд┐рдкреБрдг рд╣реВрдБред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВ рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕ рдкрд░ рдПрдХ рдорд╛рдВрдЧ рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓рд╛/рд╡рд╛рд▓реА рдмреНрд▓реЙрдЧрд░ рдмрди рдЧрдпрд╛/рдЧрдИ рд╣реВрдБ, рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░реЛрдлреЗрд╢рдирд▓реЛрдВ рдХреЗ рдмрдврд╝рддреЗ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдФрд░ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛/рдХрд░рддреА рд╣реВрдБред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореИрдВ рдХрдВрдЯреЗрдВрдЯ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рдВрдкрд╛рджрди рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реВрдБ, рдмрдбрд╝реЗ рднрд╛рд╖рд╛ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдРрд╕рд╛ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдФрд░ рдЖрдХрд░реНрд╖рдХ рдХрдВрдЯреЗрдВрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛/рд░рд╣реА рд╣реВрдБ рдЬреЛ рд╡реНрдпрд╡рд╕рд╛рдпреЛрдВ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рджреЛрдиреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдзрд┐рдХрддрдо рд▓рд╛рдн рдЙрдард╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХреЗред

рд╡рд┐рд╖рдп