Artificial Intelligence
рдкрд╛рдпрдерди рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрд▓рдПрд▓рдПрдо рдПрдкреАрдЖрдИ рдХреЙрд▓: рдПрдХ рд╡реНрдпрд╛рдкрдХ рдЧрд╛рдЗрдб

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ dta рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЕрдХреНрд╕рд░ рдЦреБрдж рдХреЛ API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрди рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд╣рдорд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдкреИрдорд╛рдиреЗ рдореЗрдВ рдмрдврд╝рддреЗ рд╣реИрдВ, рдХреБрд╢рд▓ рдФрд░ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА API рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЪрдордХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ LLM API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдереНрд░реВрдкреБрдЯ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдФрд░ рд╡рд┐рд▓рдВрдмрддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
рдЗрд╕ рд╡рд┐рд╕реНрддреГрдд рдЧрд╛рдЗрдб рдореЗрдВ, рд╣рдо рдкрд╛рдпрдерди рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ LLM API рдХреЙрд▓реНрд╕ рдХреА рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рд╣рдо рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рд╕реЗ рд▓реЗрдХрд░ рдЬрдЯрд┐рд▓ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЙрдиреНрдирдд рддрдХрдиреАрдХреЛрдВ рддрдХ, рд╕рдм рдХреБрдЫ рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рддрдХ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ LLM-рд╕рдВрдЪрд╛рд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕реБрдкрд░рдЪрд╛рд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреА рдареЛрд╕ рд╕рдордЭ рд╣реЛ рдЬрд╛рдПрдЧреАред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрд▓рдПрд▓рдПрдо рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рдЙрддрд░реЗрдВ, рдЖрдЗрдП рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рдПрдХ рдареЛрд╕ рдЖрдзрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдореБрдЦреНрдп рдереНрд░реЗрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдХрдИ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкрд╛рдпрдерди рдореЗрдВ, рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ asyncio рдореЙрдбреНрдпреВрд▓, рдЬреЛ рдХреЛрд░реЛрдЙрдЯрд┐рди, рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдФрд░ рдлреНрдпреВрдЪрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╡рд░реНрддреА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ:
- Coroutines: рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдбреЗрдлрд╝ рдЬрд┐рд╕реЗ рд░реЛрдХрд╛ рдФрд░ рдкреБрдирдГ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдЗрд╡реЗрдВрдЯ рд▓реВрдк: рдХреЗрдВрджреНрд░реАрдп рдирд┐рд╖реНрдкрд╛рджрди рддрдВрддреНрд░ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред
- рдкреНрд░рддреАрдХреНрд╖рд╛ рдпреЛрдЧреНрдп: рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ await рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреЛрд░реЛрдЙрдЯреАрди, рдЯрд╛рд╕реНрдХ, рдлреНрдпреВрдЪрд░реНрд╕)ред
рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
import asyncio async def greet(name): await asyncio.sleep(1) # Simulate an I/O operation print(f"Hello, {name}!") async def main(): await asyncio.gather( greet("Alice"), greet("Bob"), greet("Charlie") ) asyncio.run(main())
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ greet
рдЬреЛ I/O рдСрдкрд░реЗрд╢рди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ asyncio.sleep()
ред main
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ asyncio.gather()
рдПрдХ рд╕рд╛рде рдХрдИ рдЧреНрд░реАрдЯрд┐рдВрдЧреНрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕реНрд▓реАрдк рдбрд┐рд▓реЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕рднреА рддреАрди рдЧреНрд░реАрдЯрд┐рдВрдЧреНрд╕ рд▓рдЧрднрдЧ 1 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдкреНрд░рд┐рдВрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдЬреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╢рдХреНрддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
LLM API рдХреЙрд▓ рдореЗрдВ Async рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
LLM API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЕрдХреНрд╕рд░ рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╣рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдпрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рдХрдИ API рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм LLM рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдЬреИрд╕реЗ рдЙрдЪреНрдЪ-рд╡рд┐рд▓рдВрдмрддрд╛ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛред
рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ LLM API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 100 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░рд╛рдВрд╢ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╕рдордХрд╛рд▓рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ API рдХреЙрд▓ рддрдм рддрдХ рдЕрд╡рд░реБрджреНрдз рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕реЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдП, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рдорд┐рдирдЯ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрдИ API рдХреЙрд▓ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдордЧреНрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдореЗрдВ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдХрдореА рдЖрддреА рд╣реИред
рдЕрдкрдирд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ LLM API рдХреЙрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкрд╛рдпрдерди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рдЗрди рдЪреАрдЬрд╝реЛрдВ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреА:
- рдЕрдЬрдЧрд░ 3.7 рдпрд╛ рдЙрдЪреНрдЪрддрд░ (рджреЗрд╢реА asyncio рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП)
- aiohttp: рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
- openai: рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдУрдкрдирдПрдЖрдИ рдкрд╛рдпрдерди рдХреНрд▓рд╛рдЗрдВрдЯ (рдпрджрд┐ рдЖрдк OpenAI рдХреЗ GPT рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)
- рд▓реИрдВрдЧрдЪреИрди: рдПрд▓рдПрд▓рдПрдо рдХреЗ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдврд╛рдВрдЪрд╛ (рд╡реИрдХрд▓реНрдкрд┐рдХ, рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд)
рдЖрдк pip рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
pip install aiohttp openai langchain <div class="relative flex flex-col rounded-lg">
asyncio рдФрд░ aiohttp рдХреЗ рд╕рд╛рде рдмреЗрд╕рд┐рдХ Async LLM API рдХреЙрд▓
рдЖрдЗрдП aiohttp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ LLM API рдкрд░ рдПрдХ рд╕рд░рд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХрд░рдХреЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВред рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ OpenAI рдХреЗ GPT-3.5 API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпреЗ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рдЕрдиреНрдп LLM API рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВред
import asyncio import aiohttp from openai import AsyncOpenAI async def generate_text(prompt, client): response = await client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) return response.choices[0].message.content async def main(): prompts = [ "Explain quantum computing in simple terms.", "Write a haiku about artificial intelligence.", "Describe the process of photosynthesis." ] async with AsyncOpenAI() as client: tasks = [generate_text(prompt, client) for prompt in prompts] results = await asyncio.gather(*tasks) for prompt, result in zip(prompts, results): print(f"Prompt: {prompt}\nResponse: {result}\n") asyncio.run(main())
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ generate_text
рдЬреЛ AsyncOpenAI рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ OpenAI API рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред main
рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЙрдореНрдкреНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░реНрдп рдмрдирд╛рддрд╛ рд╣реИ asyncio.gather()
рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ LLM API рдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреБрд▓ рд╕рдордп рдореЗрдВ рдХрд╛рдлреА рдХрдореА рдЖрддреА рд╣реИред
рдЙрдиреНрдирдд рддрдХрдиреАрдХреЗрдВ: рдмреИрдЪрд┐рдВрдЧ рдФрд░ рд╕рдорд╡рд░реНрддреА рдирд┐рдпрдВрддреНрд░рдг
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдкрд┐рдЫрд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ LLM API рдХреЙрд▓ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдЗрдП рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрдХрдиреАрдХреЛрдВ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВ: рдмреИрдЪрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдФрд░ рд╕рдорд╡рд░реНрддреАрддрд╛ рдирд┐рдпрдВрддреНрд░рдгред
рдмреИрдЪрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз: рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдмреИрдЪ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХрдИ API рдХреЙрд▓ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
import asyncio from openai import AsyncOpenAI async def process_batch(batch, client): responses = await asyncio.gather(*[ client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) for prompt in batch ]) return [response.choices[0].message.content for response in responses] async def main(): prompts = [f"Tell me a fact about number {i}" for i in range(100)] batch_size = 10 async with AsyncOpenAI() as client: results = [] for i in range(0, len(prompts), batch_size): batch = prompts[i:i+batch_size] batch_results = await process_batch(batch, client) results.extend(batch_results) for prompt, result in zip(prompts, results): print(f"Prompt: {prompt}\nResponse: {result}\n") asyncio.run(main())
рд╕рдорд╡рд░реНрддреА рдирд┐рдпрдВрддреНрд░рдг: рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдорд╡рд░реНрддреА рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди API рд╕рд░реНрд╡рд░ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рднрд╛рд░ рдпрд╛ рдЧрддрд┐ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╡рд░реНрддреАрддрд╛ рдХреЗ рд╕реНрддрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рдо рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП asyncio.Semaphore рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
import asyncio from openai import AsyncOpenAI async def generate_text(prompt, client, semaphore): async with semaphore: response = await client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) return response.choices[0].message.content async def main(): prompts = [f"Tell me a fact about number {i}" for i in range(100)] max_concurrent_requests = 5 semaphore = asyncio.Semaphore(max_concurrent_requests) async with AsyncOpenAI() as client: tasks = [generate_text(prompt, client, semaphore) for prompt in prompts] results = await asyncio.gather(*tasks) for prompt, result in zip(prompts, results): print(f"Prompt: {prompt}\nResponse: {result}\n") asyncio.run(main())
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ 5 рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдорд╛рдлреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо API рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдзрд┐рдХ рднрд╛рд░ рди рдбрд╛рд▓реЗрдВред
рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ LLM рдХреЙрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдФрд░ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕
рдмрд╛рд╣рд░реА API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдордЬрд╝рдмреВрдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдФрд░ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рддрдВрддреНрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЬрд╝рд░реВрд░реА рд╣реИред рдЖрдЗрдП, рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдФрд░ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдШрд╛рддреАрдп рдмреИрдХрдСрдлрд╝ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдПрдБред
import asyncio import random from openai import AsyncOpenAI from tenacity import retry, stop_after_attempt, wait_exponential class APIError(Exception): pass @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10)) async def generate_text_with_retry(prompt, client): try: response = await client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) return response.choices[0].message.content except Exception as e: print(f"Error occurred: {e}") raise APIError("Failed to generate text") async def process_prompt(prompt, client, semaphore): async with semaphore: try: result = await generate_text_with_retry(prompt, client) return prompt, result except APIError: return prompt, "Failed to generate response after multiple attempts." async def main(): prompts = [f"Tell me a fact about number {i}" for i in range(20)] max_concurrent_requests = 5 semaphore = asyncio.Semaphore(max_concurrent_requests) async with AsyncOpenAI() as client: tasks = [process_prompt(prompt, client, semaphore) for prompt in prompts] results = await asyncio.gather(*tasks) for prompt, result in results: print(f"Prompt: {prompt}\nResponse: {result}\n") asyncio.run(main())
рдЗрд╕ рдЙрдиреНрдирдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдПрдХ рдкреНрд░рдерд╛
APIError
рдПрдкреАрдЖрдИ-рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж. - A
generate_text_with_retry
рд╕рдорд╛рд░реЛрд╣ рдХреА рд╕рдЬрд╛рд╡рдЯ@retry
рдЯреЗрдиреЗрд╕рд┐рдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ, рдПрдХреНрд╕рдкреЛрдиреЗрдВрд╢рд┐рдпрд▓ рдмреИрдХрдСрдлрд╝ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ред - рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди
process_prompt
рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред
рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛: рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ
рд▓рдВрдмреЗ-рдлрд╝реЙрд░реНрдо рдХрдВрдЯреЗрдВрдЯ рдЬрдирд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрдерд┐рдд рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрд╛рдлрд╝реА рд╣рдж рддрдХ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдкреВрд░реНрдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
import asyncio from openai import AsyncOpenAI async def stream_text(prompt, client): stream = await client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], stream=True ) full_response = "" async for chunk in stream: if chunk.choices[0].delta.content is not None: content = chunk.choices[0].delta.content full_response += content print(content, end='', flush=True) print("\n") return full_response async def main(): prompt = "Write a short story about a time-traveling scientist." async with AsyncOpenAI() as client: result = await stream_text(prompt, client) print(f"Full response:\n{result}") asyncio.run(main())
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ API рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╕рдордпред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЪреИрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдпрд╛ рдХрд┐рд╕реА рднреА рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
LangChain рдХреЗ рд╕рд╛рде Async рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрд▓рдПрд▓рдПрдо-рд╕рдВрдЪрд╛рд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд▓реИрдВрдЧрдЪреЗрди рдврд╛рдВрдЪрд╛ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрдИ LLM рдХреЙрд▓реНрд╕ рдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрджреНрдз рдХрд░рдиреЗ рдФрд░ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЖрдЗрдП, async рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде LangChain рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реИрдВрдЧрдЪреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред AsyncCallbackManager
рдФрд░ StreamingStdOutCallbackHandler
рдЙрддреНрдкрдиреНрди рд╕рд╛рдордЧреНрд░реА рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред
import asyncio from langchain.llms import OpenAI from langchain.prompts import PromptTemplate from langchain.chains import LLMChain from langchain.callbacks.manager import AsyncCallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler async def generate_story(topic): llm = OpenAI(temperature=0.7, streaming=True, callback_manager=AsyncCallbackManager([StreamingStdOutCallbackHandler()])) prompt = PromptTemplate( input_variables=["topic"], template="Write a short story about {topic}." ) chain = LLMChain(llm=llm, prompt=prompt) return await chain.arun(topic=topic) async def main(): topics = ["a magical forest", "a futuristic city", "an underwater civilization"] tasks = [generate_story(topic) for topic in topics] stories = await asyncio.gather(*tasks) for topic, story in zip(topics, stories): print(f"\nTopic: {topic}\nStory: {story}\n{'='*50}\n") asyncio.run(main())
FastAPI рдХреЗ рд╕рд╛рде Async LLM рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛
рдЕрдкрдиреЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ LLM рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, FastAPI рдПрдХ рдмреЗрд╣рддрд░реАрди рд╡рд┐рдХрд▓реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЯреЗрдХреНрд╕реНрдЯ рдЬрдирд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ API рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
from fastapi import FastAPI, BackgroundTasks from pydantic import BaseModel from openai import AsyncOpenAI app = FastAPI() client = AsyncOpenAI() class GenerationRequest(BaseModel): prompt: str class GenerationResponse(BaseModel): generated_text: str @app.post("/generate", response_model=GenerationResponse) async def generate_text(request: GenerationRequest, background_tasks: BackgroundTasks): response = await client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": request.prompt}] ) generated_text = response.choices[0].message.content # Simulate some post-processing in the background background_tasks.add_task(log_generation, request.prompt, generated_text) return GenerationResponse(generated_text=generated_text) async def log_generation(prompt: str, generated_text: str): # Simulate logging or additional processing await asyncio.sleep(2) print(f"Logged: Prompt '{prompt}' generated text of length {len(generated_text)}") if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
рдпрд╣ FastAPI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рддрд╛ рд╣реИ /generate
рдЬреЛ рдПрдХ рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреЗрдирд░реЗрдЯреЗрдб рдЯреЗрдХреНрд╕реНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рдпрд╣ рднреА рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдП рдмрд┐рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЦрд╝рддрд░реЗ
рдЬрдм рдЖрдк рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ LLM API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрди рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ:
- рдХрдиреЗрдХреНрд╢рди рдкреВрд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдПрдХрд╛рдзрд┐рдХ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп, рдУрд╡рд░рд╣реЗрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд▓рд╛рдЧреВ рдХрд░реЗрдВ: рдиреЗрдЯрд╡рд░реНрдХ рд╕рдорд╕реНрдпрд╛рдУрдВ, API рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╣рдореЗрд╢рд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВред
- рджрд░ рд╕реАрдорд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░реЗрдВ: API рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рджрдмрд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдорд╛рдлреЛрд░ рдпрд╛ рдЕрдиреНрдп рд╕рдорд╡рд░реНрддреА рдирд┐рдпрдВрддреНрд░рдг рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдВ рдФрд░ рд▓реЙрдЧ рдХрд░реЗрдВ: рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рд▓реЙрдЧрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
- рд▓рдВрдмреЗ рдкреНрд░рд╛рд░реВрдк рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдВрд╢рд┐рдХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╢реАрдШреНрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред