OpenAI Audio API
OpenAI рдХреЗ рдЗрд╕ рдирдП рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рддреАрди рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
gpt-4o-mini-tts: рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдСрдбрд┐рдпреЛ рдореЙрдбрд▓ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдЯреЛрди рдФрд░ рдЖрд╡рд╛рдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдСрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЗрд╕ рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рд╕реНрдкреАрдЪ рдореЙрдбрд▓ рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╡рд┐рд╢реЗрд╖ рдЯреЗрдХреНрд╕реНрдЯ рдирд┐рд░реНрджреЗрд╢ рджреЗрдХрд░ рдЖрд╡рд╛рдЬрд╝ рдХреЗ рдЯреЛрди рдФрд░ рд╢реИрд▓реА рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХрд╛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрд╢рди рд▓рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдиреЛрдЦреЗ рдФрд░ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╡реЙрдпрд╕ рдЕрдиреБрднрд╡ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдЖрдк OpenAI.fm рдкрд░ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред- ┬а
gpt-4o-transcribeрдФрд░gpt-4o-mini-transcribe: рджреЛ рдСрдбрд┐рдпреЛ-рдЯреВ-рдЯреЗрдХреНрд╕реНрдЯ рдореЙрдбрд▓ рдЬреЛ рдмреЛрд▓реА рдЧрдИ рднрд╛рд╖рд╛ рдХреЛ рд▓рд┐рдЦрд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рдЗрдирдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдСрдбрд┐рдпреЛ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рдЯреАрдХ рдФрд░ рднрд░реЛрд╕реЗрдордВрдж рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдЗрди рдореЙрдбрд▓реЛрдВ рдореЗрдВ рд╡рд░реНрдб рдПрд░рд░ рд░реЗрдЯ (WER) рдХрдо рджрд┐рдЦрддреА рд╣реИ, рдпрд╛рдиреА рдпреЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЛрд▓реЗ рдЧрдП рд╢рдмреНрджреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рдХрдо рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рддреЗ рд╣реИрдВред

рдЗрди рдирдП рдореЙрдбрд▓реЛрдВ рдХреА рдХреАрдорддреЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:

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

рднрд▓реЗ рд╣реА OpenAI рдПрдХ рд╕рдорд░реНрдкрд┐рдд Realtime API рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдБрдЧреЗред Realtime API рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ рдФрд░ рддреЗрдЬрд╝ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдХреНрд╕рд░ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрдо рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдЪреБрдирд╛рд╡ рдХрд░рдХреЗ, рд╣рдореЗрдВ рдЕрдкрдиреЗ AI рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рддрд░реАрдХрд╛ рд╣рдореЗрдВ рддрдп рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдореЙрдбрд▓ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╣реИрдВтАФрдЪрд╛рд╣реЗ рд▓рдХреНрд╖реНрдп рд╕рдЯреАрдХрддрд╛ рд╣реЛ, рдЧрддрд┐ рд╣реЛ, рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЯреЛрди рдХреА рдкрд╕рдВрджред рдЗрд╕ рддрд░рд╣ рд╣рдорд╛рд░рд╛ рд╡реЙрдпрд╕ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдХреЗрд╡рд▓ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рднреА рдмрдирддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рдлрд┐рдЯ рд╣реЛ рд╕рдХреЗред
рдпрд╣рд╛рдБ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рд╛рд░рд╛ рдХреЛрдб рдЗрд╕ GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред┬а
Python рд╕реЗрдЯрдЕрдк
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ audio-demo рдирд╛рдордХ рдПрдХ рдирдпрд╛ Anaconda рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗред Anaconda рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдкреЗрд╕ рдмрдирд╛рдиреЗ рджреЗрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╣рдо рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрд╢рди рдмрд┐рдирд╛ рдЯрдХрд░рд╛рд╡ рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
conda create -n audio-demo -y python=3.9
conda activate audio-demo
pip install openai
pip install numpy
pip install dotenv
pip install sounddevice
pip install scipy
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдФрд░ рдкреИрдХреЗрдЬ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:
- рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдирд╛:
conda create -n audio-demo -y python=3.9: рдпрд╣ рдХрдорд╛рдВрдбaudio-demoрдирд╛рдо рдХрд╛ рдирдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдг Python 3.9 рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реИред-yрдлрд╝реНрд▓реИрдЧ рдмрд┐рдирд╛ рдкреВрдЫреЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рдордВрдЬрд╝реВрд░реА рджреЗрддрд╛ рд╣реИред
- рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛:
conda activate audio-demo: рдирдП рдмрдирд╛рдП рдЧрдПaudio-demoрд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реА рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВред
- рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛:
pip install openai: OpenAI рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ OpenAI рдХреЗ рдореЙрдбрд▓реНрд╕ рдФрд░ APIs рддрдХ рдЖрд╕рд╛рди рдкрд╣реБрдБрдЪ рджреЗрддреА рд╣реИредpip install numpy: NumPy рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИредpip install dotenv: Dotenv.envрдлрд╝рд╛рдЗрд▓ рд╕реЗ environment variables рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрди рдЖрд╕рд╛рди рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИредpip install sounddevice: Sounddevice рд╕рд░рд▓ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдзреНрд╡рдирд┐ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рдкреНрд▓реЗ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ, рдЬреЛ Python рдореЗрдВ рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИредpip install scipy: SciPy, NumPy рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд╡ рддрдХрдиреАрдХреА рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
рд╣рдорд╛рд░рд╛ audio-demo рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдРрд╕реЗ AI рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯреНрд╕ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХреЗред рдпрд╣ рд╕рдВрд░рдЪрд┐рдд рд╕реЗрдЯрдЕрдк рд╕реНрд╡рдЪреНрдЫ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕реНрдкреЗрд╕ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВред
OpenAI API рдХреА рдХреБрдВрдЬреА рд╕реЗрдЯрдЕрдк
OpenAI API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ API рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЙрдирдХреЗ API рдХреА-рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдБ рдФрд░ "Generate new secret key" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдПрдХ API рдХреБрдВрдЬреА рдмрдирд╛рдПрдВред рдХреБрдВрдЬреА рдХреЙрдкреА рдХрд░реЗрдВ, .env рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рдФрд░ рдиреАрдЪреЗ рджрд┐рдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ:
OPENAI_API_KEY=<paste_your_api_key_here>
рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдСрдбрд┐рдпреЛ рдЙрджрд╛рд╣рд░рдг
рдЖрдЗрдП рдПрдХ Python рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд╝рд░рддреЗ рд╣реИрдВ рдЬреЛ OpenAI рдХреА рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдСрдбрд┐рдпреЛ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдирд┐рдЬреА рд╕реНрдкрд░реНрд╢ рдХреЗ рд╕рд╛рде рд╕реНрдкреАрдЪ рдореЗрдВ рдмрджрд▓рддреА рд╣реИред рд╣рдо рдЕрдкрдирд╛ рдХреЛрдб text_to_audio.py рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬреЛ .env рдлрд╝рд╛рдЗрд▓ рд╡рд╛рд▓реЗ рдЙрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реЛрдЧреАред
рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдиреА рд╣реЛрдВрдЧреА:
import asyncio
from openai import AsyncOpenAI
from openai.helpers import LocalAudioPlayer
from dotenv import load_dotenv
рдЖрдЗрдП рдЬрд▓реНрджреА рд╕реЗ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдореНрдкреЛрд░реНрдЯ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:
asyncio: Python рдореЗрдВ asynchronous рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ APIs рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЬрд╝рд░реВрд░реА рд╣реИредAsyncOpenAI: OpenAI рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛, рдЬреЛ OpenAI рдХреЗ APIs рдХреЗ рд╕рд╛рде asynchronous рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдЯреВрд▓ рджреЗрддрд╛ рд╣реИредLocalAudioPlayer: OpenAI рдХрд╛ рдпрд╣ рд╣реЗрд▓реНрдкрд░ рд╣рдореЗрдВ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рд▓реЛрдХрд▓реА рдСрдбрд┐рдпреЛ рдкреНрд▓реЗ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИредload_dotenv:.envрдлрд╝рд╛рдЗрд▓ рд╕реЗ environment variables рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╣рдо рдЕрдкрдиреЗ API рдХреА рдЬреИрд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╡рд┐рд╡рд░рдг рд░рдЦрддреЗ рд╣реИрдВред
рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рд▓реЛрдб рдХрд░реЗрдВ
рдЕрдЧрд▓рд╛ рдХрджрдо рд╣реИ load_dotenv рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде .env рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣рдорд╛рд░реА API рдХреБрдВрдЬреА рд▓реЛрдб рдХрд░рдирд╛:
load_dotenv()
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ API рдХреБрдВрдЬреА рддрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд╣реБрдБрдЪ рдорд┐рд▓реЗред
OpenAI рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ
OpenAI API рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо AsyncOpenAI рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдБрдЧреЗ:
openai = AsyncOpenAI()
рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ
рдЕрдм рд╣рдо рдЕрдкрдирд╛ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди text_to_audio() рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ OpenAI рдХреА рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдСрдбрд┐рдпреЛ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирдкреБрдЯ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдСрдбрд┐рдпреЛ рдкреНрд▓реЗ рдХрд░реЗрдЧрд╛:
async def text_to_audio(text, tone_and_style_instructions):
async with openai.audio.speech.with_streaming_response.create(
model="gpt-4o-mini-tts",
voice="coral",
input=text,
instructions=tone_and_style_instructions,
response_format="pcm",
) as response:
await LocalAudioPlayer().play(response)
рдЖрдЗрдП рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭ рд▓реЗрдВ рдХрд┐ рдКрдкрд░ рд╣рдордиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛:
- рд╣рдо рд╕реНрдкреАрдЪ рд╕рд┐рдВрдереЗрд╕рд┐рд╕ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
modelрдФрд░voiceрдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛modelgpt-4o-mini-ttsрд╣реИ рдФрд░ рдЪреБрдиреА рдЧрдИ рдЖрд╡рд╛рдЬрд╝ "coral" рд╣реИред response_formatрдХреЛ"pcm"рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдСрдбрд┐рдпреЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИредLocalAudioPlayerрддрдм API рджреНрд╡рд╛рд░рд╛ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдСрдбрд┐рдпреЛ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЛ рдкреНрд▓реЗ рдХрд░рддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ text_to_audio() рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ:
if __name__ == "__main__":
asyncio.run(text_to_audio("Hello world!", "Enthusiastic voice."))
рдпрд╣ рдХреЛрдб рдмреНрд▓реЙрдХ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓ рд░рд╣реА рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ asynchronous рд▓реЙрдЬрд┐рдХ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП asyncio.run() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП text_to_audio() рдЪрд▓рд╛рддрд╛ рд╣реИред
рдЗрди рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ OpenAI рдХреА рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдСрдбрд┐рдпреЛ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХреЛ рд╕реНрдкреАрдЪ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рд╕реЗрдЯрдЕрдк рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдирдкреБрдЯреНрд╕ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ рдзреНрд╡рдирд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреАрд╡рдВрдд рд╣реЛ рдЙрдарддрд╛ рд╣реИред
рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рдореНрди рдХрдорд╛рдВрдб рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
python text_to_audio.py
рдкреВрд░рд╛ рдХреЛрдб рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди
рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рдЖрдЗрдП OpenAI рдХреЗ рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдирд╛ рд╕реАрдЦреЗрдВред рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЗрдЬрд╝ рдФрд░ рдХреБрд╢рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ asynchronous рдврдВрдЧ рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИред рд╣рдо рдЗрд╕реЗ audio_to_text.py рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред
рдЗрдореНрдкреЛрд░реНрдЯреНрд╕ рдФрд░ рд╢реБрд░реБрдЖрддреА рд╕реЗрдЯрдЕрдк рдкрд╣рд▓реЗ рдЬреИрд╕реЗ рд╣реА рд╣реИрдВ, рдмрд╕ рдпрд╣рд╛рдБ рд╣рдореЗрдВ LocalAudioPlayer рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
async def transcribe_audio(audio_filename = "audio.wav"):
audio_file = await asyncio.to_thread(open, audio_filename, "rb")
stream = await openai.audio.transcriptions.create(
model="gpt-4o-mini-transcribe",
file=audio_file,
response_format="text",
stream=True,
)
transcript = ""
async for event in stream:
if event.type == "transcript.text.delta":
print(event.delta, end="", flush=True)
transcript += event.delta
print()
audio_file.close()
return transcript
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЖрдЗрдП рд╕рдордЭрддреЗ рд╣реИрдВ:
- рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдирд╛:
audio_file = await asyncio.to_thread(open, audio_filename, "rb"): рдпрд╣ рдкрдВрдХреНрддрд┐ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд╛рдЗрдирд░реА рд░реАрдб рдореЛрдб ("rb") рдореЗрдВ рдЦреЛрд▓рддреА рд╣реИредasyncio.to_thread()рдореЗрдердб рдЗрд╕ рдлрд╝рд╛рдЗрд▓-рдЦреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓рдиреЗ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЕрдиреНрдп рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рди рдХрд░реЗред
- рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдирд╛:
stream = await openai.audio.transcriptions. create(...): рдпрд╣ рдкрдВрдХреНрддрд┐ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди API рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИред┬а- рд╣рдо
modelрдкреИрд░рд╛рдореАрдЯрд░ рдХреЛgpt-4o-mini-transcribeрд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЦрд╛рд╕ рддреМрд░ рдкрд░ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред fileрдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╣рдорд╛рд░реА рдУрдкрди рдХреА рдЧрдИ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдЬрд╛рддреА рд╣реИредresponse_format="text"API рдХреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИредstream=TrueрдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛рдиреА рдЬреИрд╕реЗ рд╣реА рдСрдбрд┐рдпреЛ рдХрд╛ рдХреЛрдИ рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░реЛрд╕реЗрд╕ рд╣реЛрддрд╛ рд╣реИ, рд╡рд╣ рддреБрд░рдВрдд рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддреЗрдЬрд╝ рд╣реЛ рдЬрд╛рддреА рд╣реИред
- рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рд╕реНрдЯреНрд░реАрдо рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛:
async for event in stream: рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЖрддреЗ рд╣реБрдП рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИредif event.type == "transcript.text.delta":: рд╣рд░ рдЗрд╡реЗрдВрдЯ рдЯрд╛рдЗрдк рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддрдм рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЯрд╛рдЗрдкtranscript.text.deltaрд╣реЛ, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рддреИрдпрд╛рд░ рд╣реИредprint(event.delta, end="", flush=True): рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реА рдХреНрд░рдорд┐рдХ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдореЗрдВ рдорд┐рд▓реЗред
- рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдмрдВрдж рдХрд░рдирд╛:
audio_file.close(): рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред
main() рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рдХрд░, рд╣рдо рдХрд┐рд╕реА рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░реАрдореНрдб рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рддреБрд░рдВрдд рдлреАрдбрдмреИрдХ рдорд┐рд▓ рд╕рдХреЗред рдпрд╣ рд╕реЗрдЯрдЕрдк рддреЗрдЬрд╝ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╛ рд▓рдВрдмреА рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИред
рдЖрдк рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рд░рдЦрдХрд░, audio.wav рдХреЛ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рд╕реЗ рдмрджрд▓рдХрд░ рдФрд░ рдпрд╣ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:
python audio_to_text.py
рдкреВрд░рд╛ рдХреЛрдб рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред
рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рд╕реЗ рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди
рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рд╡реЙрдпрд╕ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдСрдбрд┐рдпреЛ рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЛ рдПрдХ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо record.py рдирд╛рдо рдХреА рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБрдЧреЗ рдЬрд┐рд╕рдореЗрдВ record_audio рдирд╛рдо рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдЧрд╛ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рд╕реЗ рдзреНрд╡рдирд┐ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИред рд╣рдо рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдЬрд╛рдПрдБрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдореБрдЦреНрдп рдлреЛрдХрд╕ рдирд╣реАрдВ рд╣реИ:
import sounddevice as sd
import numpy as np
import scipy.io.wavfile as wavfile
SAMPLE_RATE = 44100 # Sample rate in Hz
def record_audio():
print("[INFO: Recording... Press <Enter> to stop]")
audio_data = [] # Initialize a list to store audio frames
def callback(indata, frames, time, status):
audio_data.append(indata.copy())
with sd.InputStream(samplerate=SAMPLE_RATE, channels=1, callback=callback, dtype='int16'):
input() # Wait for the user to press Enter to stop recording
print("[INFO: Recording complete]")
print()
audio_data = np.concatenate(audio_data) # Concatenate the list into a single array
filename = "output.wav"
wavfile.write(filename, SAMPLE_RATE, audio_data)
return audio_data
рдЬрдм рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рд╕реЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рдпрд╣ рддрдм рддрдХ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "Enter" рдирд╣реАрдВ рджрдмрд╛рддрд╛, рдФрд░ рдлрд┐рд░ рджрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдХреЗ рд╕рд╛рде рдСрдбрд┐рдпреЛ рд╕рд╣реЗрдЬ рджреЗрдЧрд╛ред
рдЗрд╕реЗ рдкрд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмреЛрд▓рд╛ рдЧрдпрд╛ рд╕рдВрджреЗрд╢ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо record_and_transcribe.py рдирд╛рдо рдХреА рдирдИ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдБрдЧреЗ:
import asyncio
from audio_to_text import transcribe_audio
from audio_recorder import record_audio
async def main():
record_audio("prompt.wav")
await transcribe_audio("prompt.wav")
if __name__ == "__main__":
asyncio.run(main())
рдЖрдк рдЗрд╕реЗ python record_and_transcribe.py рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЪрд▓рд╛ рдХрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдм рддрдХ рдЖрдкрдХреА рдмрд╛рдд рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдЧреА рдЬрдм рддрдХ рдЖрдк "Enter" рдирд╣реАрдВ рджрдмрд╛рддреЗ рдФрд░ рдлрд┐рд░ рдЖрдкрдиреЗ рдЬреЛ рдХрд╣рд╛ рдЙрд╕рдХрд╛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХрд░ рджреЗрдЧреАред
рдСрдбрд┐рдпреЛ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛
рдЗрд╕ рдЦрдВрдб рдореЗрдВ рд╣рдо рд╕рдм рдХреБрдЫ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдСрдбрд┐рдпреЛ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдПрдБрдЧреЗред рд╣рдо рдЗрд╕реЗ audio_assistant.py рдирд╛рдо рдХреА рдирдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдСрдбрд┐рдпреЛ рдкреНрд░реЙрдореНрдкреНрдЯ
record_audio()рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВред transcribe_audio()рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдСрдбрд┐рдпреЛ рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдмрджрд▓реЗрдВредgpt-4oрдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЯреЗрдХреНрд╕реНрдЯ рдореЙрдбрд▓ рд╕реЗ рдЙрддреНрддрд░ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред- рдЕрдВрдд рдореЗрдВ,
text_to_audio()рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдХреНрд╕реНрдЯреБрдЕрд▓ рдЙрддреНрддрд░ рдХреЛ рдСрдбрд┐рдпреЛ рдореЗрдВ рдмрджрд▓реЗрдВред - рдЗрд╕реЗ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдПрдБ рдЬрдм рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╛рд╣рд░ рди рдирд┐рдХрд▓ рдЬрд╛рдПред
рдирд┐рдореНрди рдЖрд░реЗрдЦ рдЗрд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:

рдЖрдЧреЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдБред
рдкрд╣рд▓реЗ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ OpenAI рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред
# Import the functions we created
from text_to_audio import text_to_audio
from audio_to_text import transcribe_audio
from audio_recorder import record_audio
# Import other dependencies and initialize OpenAI
import asyncio
from openai import AsyncOpenAI
from dotenv import load_dotenv
load_dotenv()
openai = AsyncOpenAI()
рдлрд┐рд░, рд╣рдореЗрдВ рдЙрддреНрддрд░ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп OpenAI GPT API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ gpt-4o рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЯреЗрдХреНрд╕реНрдЯ рдореЙрдбрд▓ред рдпрджрд┐ рдЖрдк рдЗрд╕рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ GPT-4o API рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ asynchronous рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдпрд╣рд╛рдБ рд╣реИ:
async def get_answer(prompt):
stream = await openai.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": prompt}
],
stream=True,
)
answer = ""
async for chunk in stream:
content = chunk.choices[0].delta.content
if content is not None:
answer += content
print(content, end="", flush=True)
print("\n\n")
return answer
рдореБрдЦреНрдп рд▓реВрдк рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ:
async def main(tone_and_style_instructions):
await text_to_audio("Hello, how can I help you today?", tone_and_style_instructions)
while True:
record_audio("prompt.wav")
prompt = await transcribe_audio("prompt.wav")
print()
answer = await get_answer(prompt)
await text_to_audio(answer, tone_and_style_instructions)
рдЕрдВрдд рдореЗрдВ, рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рддреА рд╣реИ рддреЛ рд╣рдо рдореБрдЦреНрдп рд▓реВрдк рдХреЛ рд░рди рдХрд░рддреЗ рд╣реИрдВ:
if __name__ == "__main__":
tone_and_style_instructions = "Enthusiastic voice."
asyncio.run(main(tone_and_style_instructions))
рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдбреЗрдореЛ рд╣реИ:
рдкреВрд░рд╛ рдХреЛрдб рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред
рдЖрдЧреЗ рдХреЗ рд╕реБрдзрд╛рд░
рдпрджрд┐ рд╣рдо рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓ рдЯреЛрди рдФрд░ рд╢реИрд▓реА рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВ, рддреЛ рд╣рдореЗрдВ рд╢рдмреНрджреЛрдВ рдФрд░ рдЯреЛрди рдХреЗ рдмреАрдЪ рдЕрд╕рдВрдЧрддрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, OpenAI рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ "Emo Teenager" рд╡реЙрдпрд╕ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦреЗрдВ:
tone_and_style_instructions = """
Tone: Sarcastic, disinterested, and melancholic, with a hint of passive-aggressiveness.
Emotion: Apathy mixed with reluctant engagement.
Delivery: Monotone with occasional sighs, drawn-out words, and subtle disdain, evoking a classic emo teenager attitude.
"""
рдСрдбрд┐рдпреЛ рдХрд╛ рд╡реЙрдпрд╕ рдЯреЛрди рдЗрд╕ рд╢реИрд▓реА рд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди get_answer() рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдЙрддреНрддрд░ рдХреА рдЯреЗрдХреНрд╕реНрдЯ рд╕рд╛рдордЧреНрд░реА рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦреЗрдЧреА, рдЬрд┐рд╕рд╕реЗ рдереЛрдбрд╝реА рдЕрд╕рдВрдЧрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо get_answer() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдЯреЛрди рдФрд░ рд╢реИрд▓реА рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗред
рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо tone_and_style_instructions рдХреЛ get_answer() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЪреИрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдореЗрдВ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдореИрд╕реЗрдЬ рдЬреЛрдбрд╝рдХрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
async def get_answer(prompt, tone_and_style_instructions):
stream = await openai.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "system",
"content":
f"""
The text you generate is being used in a text-to-voice model.
Make sure your answer matches the guidelines {tone_and_style_instructions}
"""
},
{"role": "user", "content": prompt}
],
stream=True,
)
answer = ""
async for chunk in stream:
content = chunk.choices[0].delta.content
if content is not None:
answer += content
print(content, end="", flush=True)
print("\n\n")
return answer
рдЕрдм рдореЙрдбрд▓ рдЗрд╕ рддрд░рд╣ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рдпрд╣ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЯреЛрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдкреВрд░рд╛ рдХреЛрдб рдЖрдкрдХреЛ рдпрд╣рд╛рдБ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред
Agents API рдХреЗ рд╕рд╛рде рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╡реЙрдЗрд╕ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЙрдпрд╕-рдЯреВ-рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рд╡реЙрдпрд╕ рдореЙрдбрд▓реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓реА рдХреЙрд▓ рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ OpenAI рдХреА рд╡реЙрдпрд╕ API рд╕реЗ рдирдП рдореЙрдбрд▓реЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реАрдЦрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рд▓рдХреНрд╖реНрдп рд╡реЙрдЗрд╕ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛ рд╣реИ, рддреЛ рдПрдЬреЗрдВрдЯ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕ API рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЕрдкрдиреЗ-рдЖрдк рдЙрд╕ рд╡реЙрдпрд╕-рдЯреВ-рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рд╡реЙрдпрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХреЗ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдпрд╣рд╛рдБ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдПрдЬреЗрдВрдЯ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: OpenAI Agents SDKред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рдФрд░ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреА рд╣реЛрдЧреА:
pip install 'openai-agents[voice]'
рдпрд╣ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╡реЙрдпрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдПрдХ рдПрдЬреЗрдВрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
from dotenv import load_dotenv
load_dotenv()
import asyncio
from agents import Agent
from agents.voice import (
AudioInput,
SingleAgentVoiceWorkflow,
VoicePipeline,
VoicePipelineConfig,
TTSModelSettings,
)
from audio_recorder import record_audio
from audio_player import AudioPlayer
AudioPlayer рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдПрдХ рд▓реЛрдХрд▓ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд░рд┐рдпрд▓ рдЯрд╛рдЗрдо рдореЗрдВ рдСрдбрд┐рдпреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред рдпрд╣ рдЗрд╕рд▓рд┐рдП рдЬрд╝рд░реВрд░реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ VoicePipeline рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдСрдбрд┐рдпреЛ рдЯреБрдХрдбрд╝рд╛-рджрд░-рдЯреБрдХрдбрд╝рд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рд╣рд░ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реА рдЪрд▓рд╛ рджреЗрдВрдЧреЗред рдпрд╣рд╛рдБ audio_player.py рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ:
import numpy as np
import sounddevice as sd
class AudioPlayer:
def __enter__(self):
self.stream = sd.OutputStream(samplerate=24000, channels=1, dtype=np.int16)
self.stream.start()
return self
def __exit__(self, tp, val, tb):
self.stream.close()
def add_audio(self, audio_data):
self.stream.write(audio_data)
рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ рдПрдЬреЗрдВрдЯ рдмрдирд╛рдирд╛ рд╣реИ:
agent = Agent(
name="Voice Assistant",
instructions="YouтАЩre a helpful assistant speaking to a human.",
model="gpt-4o-mini",
)
рдпрд╣рд╛рдБ рд╣рдордиреЗ рдЬрд┐рди рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЙрдирдХрд╛ рд╡рд┐рд╡рд░рдг:
name: рдпрд╣ рд╣рдо рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛ рд╕реЗ рдХреБрдЫ рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВредinstructions: рдпреЗ рдирд┐рд░реНрджреЗрд╢ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдПрдЬреЗрдВрдЯ рдХреНрдпрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИредmodel: рдЙрддреНрддрд░ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореЙрдбрд▓ред
рдПрдЬреЗрдВрдЯ, рдкрд╣рд▓реЗ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯ рдХрд┐рдП рдЧрдП get_answer() рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдЙрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреА рддрд░рд╣ рд╕рдордЭреЗрдВ, рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЙрдореНрдкреНрдЯ рдХрд╛ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реАрдВ рд╣рдо рд╡реЙрдЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддрдп рдХрд░рддреЗ рд╣реИрдВ:
pipeline = VoicePipeline(
workflow=SingleAgentVoiceWorkflow(agent),
stt_model="gpt-4o-mini-transcribe",
tts_model="gpt-4o-mini-tts",
config=VoicePipelineConfig(
tts_settings=TTSModelSettings(
voice="coral",
instructions="""
Speak in an enthusiastic voice.
"""
)
)
)
рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг:
stt_model: рд╕реНрдкреАрдЪ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореЙрдбрд▓редtts_model: рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕реНрдкреАрдЪ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореЙрдбрд▓редconfig: рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреЗрдВред рдпрд╣рд╛рдБ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧtts_modelрдХреЗ рд▓рд┐рдП рдЪреБрдиреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЖрд╡рд╛рдЬрд╝ рдФрд░ рд╕реНрдкреАрдЪ рдирд┐рд░реНрджреЗрд╢ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдореБрдЦреНрдп рд▓реВрдк рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЬреИрд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдерд╛:
async def main():
while True:
audio_input = AudioInput(buffer=record_audio())
result = await pipeline.run(audio_input)
with AudioPlayer() as player:
async for event in result.stream():
if event.type == "voice_stream_event_audio":
player.add_audio(event.data)
if __name__ == "__main__":
asyncio.run(main())
рдПрдХ рд╕рдВрдкреВрд░реНрдг рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдЖрдкрдХреЛ рдпрд╣рд╛рдБ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред
рдЯреВрд▓реНрд╕ рдЬреЛрдбрд╝рдирд╛
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд▓реВрдк рд╣рдореЗрд╢рд╛ рдЪрд▓рддрд╛ рд░рд╣реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдХреЛрдИ рд╕реНрдЯреЙрдк рдХрдВрдбреАрд╢рди рддрдп рдирд╣реАрдВ рдХреА рд╣реИред рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓реА рдХрд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдПрдЬреЗрдВрдЯ рдХреЛ рдПрдХ рдЯреВрд▓ рджреЗрдирд╛ред┬а
рдЯреВрд▓реНрд╕ рд╡реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдПрдЬреЗрдВрдЯ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡рд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛ рд╕рдХреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░реЛрдХ рджреЗред рдПрдЬреЗрдВрдЯ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдФрд░ рдХрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред
from agents import function_tool
@function_tool
def stop_conversation():
"""Stop the conversation."""
exit()
рдлрд┐рд░, рд╣рдо рдпрд╣ рдЯреВрд▓ рдПрдЬреЗрдВрдЯ рдХреЛ рджреЗрддреЗ рд╣реИрдВ:
agent = Agent(
тАж
tools=[stop_conversation], # Add this line when creating the agent
)
рдЗрд╕ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде, рдЕрдЧрд░ рд╣рдо рдХрд╣реЗрдВ, тАЬрдореИрдВ рдмрд╛рддрдЪреАрдд рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛/рдЪрд╛рд╣рддреА рд╣реВрдБ,тАЭ рддреЛ рдПрдЬреЗрдВрдЯ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЙрд╕реЗ stop_conversation() рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди, stop_conversation() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдХрд╛рд░рдг, рдЧреНрд░реЗрд╕рдлреБрд▓реА рдПрдЧреНрдЬрд╝рд┐рдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдПрдХ рдкреВрд░рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВред
рдПрдХрд╛рдзрд┐рдХ рдПрдЬреЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдПрдЬреЗрдВрдЯреНрд╕ API рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдПрдЬреЗрдВрдЯреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ OpenAI рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
from agents.extensions.handoff_prompt import prompt_with_handoff_instructions
spanish_agent = Agent(
name="Spanish voice assistant",
handoff_description="A spanish speaking agent.",
instructions=prompt_with_handoff_instructions(
"You're speaking to a human, so be polite and concise. Speak in Spanish.",
),
model="gpt-4o-mini",
)
agent = Agent(
name="Voice Assistant",
instructions=prompt_with_handoff_instructions("""
You're speaking to a human, so be polite and concise.
If the user speaks in Spanish, handoff to the spanish agent.
"""),
model="gpt-4o-mini",
)
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рджреВрд╕рд░рд╛ рдПрдЬреЗрдВрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╕реНрдкреИрдирд┐рд╢ рдореЗрдВ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рдПрдЬреЗрдВрдЯ рдХреЛ рд╣реИрдВрдбрдСрдлрд╝ рд╕рд╣рд┐рдд рдПрдХ рдкреНрд░реЙрдореНрдкреНрдЯ рджреЗрдХрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд╣реИрдВрдбрдСрдлрд╝ рдирд┐рд░реНрджреЗрд╢ рдкреВрд░реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рджреВрд╕рд░рд╛ рдПрдЬреЗрдВрдЯ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдмрд╛рддрдЪреАрдд рдЖрдЧреЗ рдмрдврд╝рд╛рдПрдЧрд╛ред
рдкреВрд░рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
OpenAI рдХреЗ рдирд╡реАрдирддрдо рдСрдбрд┐рдпреЛ рдореЙрдбрд▓реЛрдВ рдХреА рдЙрдиреНрдирдд рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдордиреЗ рдРрд╕рд╛ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдмреЛрд▓реА рдЧрдИ рднрд╛рд╖рд╛ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯреБрдЕрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдорд╛рдирд╡реАрдп рдЬреИрд╕реА рдЖрд╡рд╛рдЬрд╝ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рди рд╕рд┐рд░реНрдл рдореМрдЬреВрджрд╛ рддрдХрдиреАрдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдБ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдХрд┐ рдХрд╕реНрдЯрдо AI рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпреЗ рдЯреВрд▓реНрд╕ рдЕрдм рдХрд┐рддрдиреЗ рд╕реБрд▓рдн рд╣реЛ рдЧрдП рд╣реИрдВред

OpenAI рдиреЗ рдЕрдкрдиреА рдЕрдЧрд▓реА рдкреАрдврд╝реА рдХреЗ рдСрдбрд┐рдпреЛ рдореЙрдбрд▓ рдкреЗрд╢ рдХрд┐рдП рд╣реИрдВ рдЬреЛ рд╕реНрдкреАрдЪ-рдЯреВ-рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рд╕реНрдкреАрдЪ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИрдВред рдпреЗ рдирд╡реАрдирддрдо рдореЙрдбрд▓ рдЬрдЯрд┐рд▓ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВтАФрдЬреИрд╕реЗ рдЙрдЪреНрдЪрд╛рд░рдг рдпрд╛ рд╢реЛрд░ рд╡рд╛рд▓реЗ рдорд╛рд╣реМрд▓тАФрдореЗрдВ рднреА рдмреЗрд╣рддрд░ рд╕рдЯреАрдХрддрд╛ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рдирдпреЛрдЧреНрдп рд╡реЙрдпрд╕ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдореИрдВ рдЪрд░рдг-рджрд░-рдЪрд░рдг рд╕рдордЭрд╛рдКрдБрдЧрд╛ рдХрд┐ рдЗрди рдирдП OpenAI рдСрдбрд┐рдпреЛ рдореЙрдбрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЙрдпрд╕-рдЯреВ-рд╡реЙрдпрд╕ AI рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рдРрд╕рд╛ AI рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдмреЛрд▓реЗ рдЧрдП рдЗрдирдкреБрдЯ рдХреЛ рд╕рдордЭреЗ рдФрд░ рдЖрдкрдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдЖрд╡рд╛рдЬрд╝ рдореЗрдВ рдЬрд╡рд╛рдм рджреЗред