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

LangChain рдФрд░ ChatOpenAI рдХреЗ рд╕рд╛рде GPT-4o Audio Preview рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ

рдЬрд╛рдиреЗрдВ рдХрд┐ OpenAI рдХреЗ gpt-4o-audio-preview рдореЙрдбрд▓ рдХреЛ LangChain рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ, рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди, рдФрд░ рдЬреЗрдирд░реЗрд╢рди рд╕рд╣рд┐рдд рд╡реЙрдпрд╕-рдЗрдиреЗрдмрд▓реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдП рдЬрд╛ рд╕рдХреЗрдВред
┬╖ 12 рдорд┐ре░ рдкрдврд╝реЗрдВ

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

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ рд╡реЙрдпрд╕-рдЗрдиреЗрдмрд▓реНрдб рдРрдк рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд╕реНрдЯрдорд░ рд╕рд░реНрд╡рд┐рд╕ рдмреЙрдЯ рдпрд╛ рдкреЙрдбрдХрд╛рд╕реНрдЯ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдмрд░ред рдЖрдо рддреМрд░ рдкрд░, рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдСрдбрд┐рдпреЛ рдЬреЗрдирд░реЗрд╢рди рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдЯреВрд▓реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред OpenAI рдХрд╛ gpt-4o-audio-preview рдореЙрдбрд▓ рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдСрдбрд┐рдпреЛтАФрджреЛрдиреЛрдВ рдХреЛ рд╕рдордЭрддрд╛ рдФрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдЗрд╕ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдореЙрдбрд▓ рдФрд░ LangChain рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рд╣рдЬ рдСрдбрд┐рдпреЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рджреЗрдЦреЗрдВрдЧреЗред рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рдХреИрд╕реЗ рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛ рд╣реИ, рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдСрдбрд┐рдпреЛтАФрджреЛрдиреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреИрд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреА рд╣реИрдВ, рдФрд░ рдЗрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдХрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред

рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдФрд░ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝

OpenAI рдХреЗ gpt-4o-audio-preview рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рдЪреАрдЬрд╝реЗрдВ рд╕рдВрдЧрдард┐рдд рд░рд╣рддреА рд╣реИрдВ рдФрд░ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЙрдиреНрдлреНрд▓рд┐рдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддреЗтАФрдЦрд╛рд╕рдХрд░ рддрдм рдЙрдкрдпреЛрдЧреА рдЬрдм рдЖрдк рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВред

gpt-4o-audio-preview рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реЗрдЯ рдХрд░реЗрдВ

рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХреНрдпрд╛ рд╣реИ?

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИрдВред рдПрдХ рдХреЛ рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдХреЗ рд╡рд░реНрдЬрд╝рди 1.0 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░реЗ рдХреЛ 2.0 рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдЖрдк рд╕рдм рдХреБрдЫ рдЧреНрд▓реЛрдмрд▓реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдХреЙрдиреНрдлреНрд▓рд┐рдХреНрдЯреНрд╕ рд╣реЛрдВрдЧреЗред

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

рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдирд╛ рдФрд░ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛

рдЖрдЗрдП рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдХрд░ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВред рд╣рдо Python рдХреЗ рдЗрдирдмрд┐рд▓реНрдЯ venv рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  1. рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдБтАФрдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЕрдкрдирд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдмрдирд╛ рд▓реЗрдВред
  2. рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдм рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдирд╛ рд╣реИред macOS рдпрд╛ Linux рдкрд░ python3 -m venv env рдЪрд▓рд╛рдПрдБред Windows рдкрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ python -m venv envред
    1. рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ venv Python рдХрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдЯреВрд▓ рд╣реИ, рдФрд░ env рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдирд╛рдо рд╣реИред рдЖрдк рдЗрд╕реЗ рдХреБрдЫ рднреА рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ: env, venv, my_project_env, рдЖрджрд┐ред рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдФрд░ рд╕рд░рд▓ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред
  3. рдЕрдм рдЬрдм рдЖрдкрдиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣ рдЪрд░рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рднреА рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рд╡реЗ рдХреЗрд╡рд▓ рдЗрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗред
    1. macOS рдпрд╛ Linux рдкрд░ рдЗрд╕реЗ рдЗрд╕ рдХрдорд╛рдВрдб рд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ: source env/bin/activateред Windows рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: .\env\Scripts\activate

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

langchain-openai рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛

рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕рдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдЯреВрд▓реНрд╕ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЪреВрдБрдХрд┐ рд╣рдо OpenAI рдФрд░ LangChain рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ langchain-openai рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреИрдХреЗрдЬ рд╣рдореЗрдВ OpenAI рдХреЗ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рджреЗрдЧрд╛ред

рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдпрд╣ рдЪрд▓рд╛рдПрдБ: pip install langchain-openaiред

рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рдирд╛

рдЕрдЧрд▓рд╛ рдЪрд░рдг рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА, рдЬреИрд╕реЗ рдХрд┐ API keys, рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣рд╛рд░реНрдб-рдХреЛрдб рди рд╣реЛ рдЬрд╛рдПред рд╣рдо рдпрд╣ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рдХреЗ рдХрд░реЗрдВрдЧреЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ OpenAI рдХреЗ рдореЙрдбрд▓реЛрдВ рддрдХ рдПрдХреНрд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ OpenAI рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдПрдХ рдЕрдХрд╛рдЙрдВрдЯ рдмрдирд╛рдПрдБред рд╕рд╛рдЗрди рдЕрдк рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ API рдХреА рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреА рд╣реЛрдЧреАред рдпрд╣ API рдХреА OpenAI рдХреЗ рдореЙрдбрд▓реЛрдВ, рдЬрд┐рдирдореЗрдВ gpt-4o-audio-preview рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рддрдХ рдкрд╣реБрдБрдЪ рдХрд╛ рдЖрдкрдХрд╛ рдкрд╛рд╕ рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ OPENAI_API_KEY рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореИрдиреНрдпреБрдЕрд▓реА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрд╕рд╛рди рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП .env рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рддрд░реАрдХрд╛ 1: рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдореИрдиреНрдпреБрдЕрд▓реА рд╕реЗрдЯ рдХрд░рдирд╛

рдпрджрд┐ рдЖрдк рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рд╕реЗрдЯрдЕрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рд╕реАрдзреЗ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • macOS/Linux рдкрд░ рдЪрд▓рд╛рдПрдБ: export OPENAI_API_KEY='your-api-key-here'
  • Windows рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: set OPENAI_API_KEY='your-api-key-here'

рдЕрдм рдЖрдкрдХреА API рдХреА рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ Python рдореЗрдВ os рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддрд░реАрдХрд╛ 2: .env рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк .env рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рд╣реЗрдЧреА рдФрд░ рдЖрдкрдХреА keys рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦреЗрдЧреАред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдПрдХ .env рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рдФрд░ рдЕрдВрджрд░ рдЕрдкрдиреА API рдХреА рдЗрд╕ рддрд░рд╣ рдЬреЛрдбрд╝реЗрдВ:

OPENAI_API_KEY=your-api-key-here

рдЕрдм python-dotenv рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:

pip install python-dotenv

рдЕрдм рдЕрдкрдиреА Python рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, .env рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЗрд╕ рддрд░рд╣ рд▓реЛрдб рдХрд░реЗрдВ:

from dotenv import load_dotenv
import os
load_dotenv()  # Load variables from .env file
api_key = os.getenv('OPENAI_API_KEY')

рдпрд╣ рддрд░реАрдХрд╛ рдЦрд╛рд╕ рддреМрд░ рдкрд░ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХрдИ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рд╣реЛрдВтАФрдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рд╕рд╛рдлрд╝ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ: рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП LangSmith

рдпрджрд┐ рдЖрдк рдбрд┐рдмрдЧрд┐рдВрдЧ рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдЕрдкрдиреА API рдХреЙрд▓реНрд╕ рдХреЛ рдЯреНрд░реИрдХ рдФрд░ рдореЙрдирд┐рдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ OpenAI рдХреЗ рдкрд╛рд╕ LangSmith рдирд╛рдо рдХреА рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рд╣рд░ API рдХреЙрд▓ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдпрд╛ рдЯреНрд░рдмрд▓рд╢реВрдЯ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк LangSmith рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"

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

OpenAI рдХреЗ gpt-4o-audio-preview рдореЙрдбрд▓ рдХреЛ рдЗрдВрд╕реНрдЯреИрдВрд╕рд┐рдПрдЯ рдХрд░рдирд╛

рдЕрдм рдЬрдм рд╣рдорд╛рд░рд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕реЗрдЯ рдЕрдк рдФрд░ рддреИрдпрд╛рд░ рд╣реИ, рддреЛ рдордЬрд╝реЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдЖрддреЗ рд╣реИрдВтАФOpenAI рдХреЗ gpt-4o-audio-preview рдореЙрдбрд▓ рдХреЛ рдЗрдВрд╕реНрдЯреИрдВрд╕рд┐рдПрдЯ рдХрд░рдирд╛ред рдпрд╣реАрдВ рд╕реЗ рд╣рдо рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рднреЗрдЬреЗрдВрдЧреЗ, рдФрд░ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдо LangChain рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЛ рдХреИрд╕реЗ рдЗрдВрд╕реНрдЯреИрдВрд╕рд┐рдПрдЯ рдХрд░рдирд╛ рд╣реИ, рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЛ рдХреИрд╕реЗ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд░реВрд░реА рд╕реЗрдЯрдЕрдк рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИтАФрдпрд╣ рд╕рдм рджреЗрдЦреЗрдВрдЧреЗред

рдореЙрдбрд▓ рдХреЛ рдЗрдВрд╕реНрдЯреИрдВрд╕рд┐рдПрдЯ рдХрд░рдирд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

рдХреЛрдб рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ "рдЗрдВрд╕реНрдЯреИрдВрд╕рд┐рдПрдЯ" рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдХреНрдпрд╛ рд╣реИред рдЬрдм рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдореЙрдбрд▓ рдХреЛ рдЗрдВрд╕реНрдЯреИрдВрд╕рд┐рдПрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ Python рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ gpt-4o-audio-preview рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рджреЗрдЧрд╛ред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдХреА рддрд░рд╣ рд╣реИтАФрдЗрд╕рдореЗрдВ рд╡реЗ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдореЗрдердбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдорджрдж рд╕реЗ рд╣рдо рдореЙрдбрд▓ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

LangChain рдХреЗ рд╕рд╛рде рдмреЗрд╕рд┐рдХ рдореЙрдбрд▓ рд╕реЗрдЯрдЕрдк

рдЖрдЗрдП рдЗрд╕ рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдХрд░ рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╣рдо LangChain рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо langchain_openai рдкреИрдХреЗрдЬ рдХреА ChatOpenAI рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдХреНрд▓рд╛рд╕ OpenAI рдореЙрдбрд▓реЛрдВ рдФрд░ рдЙрдирдХреА рдХреНрд╖рдорддрд╛рдУрдВ рддрдХ рдЖрд╕рд╛рди рдкрд╣реБрдБрдЪ рджреЗрддреА рд╣реИред

from langchain_openai import ChatOpenAI

# Create the model object
llm = ChatOpenAI(
    model="gpt-4o-audio-preview",  # Specifying the model
    temperature=0,  # Controls randomness in the output
    max_tokens=None,  # Unlimited tokens in output (or specify a max if needed)
    timeout=None,  # Optional: Set a timeout for requests
    max_retries=2  # Number of retries for failed requests
)

рдЗрд╕ рдореЙрдбрд▓ рдХреА рдПрдХ рдмреЗрд╣рддрд░реАрди рдмрд╛рдд рдЗрд╕рдХреА рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрдмрд┐рд▓рд┐рдЯреА рд╣реИред рдЖрдк рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдк рдмрдбрд╝реЗ рдЗрдирдкреБрдЯ рд╕рдВрднрд╛рд▓рдиреЗ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреА рд▓рдВрдмрд╛рдИ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдЯреНрдпреВрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк рд╕рдордп-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдбрд▓ рдЕрдзрд┐рдХ рд╕рдордп рди рд▓реЗ, рддреЛ рдЖрдк рдЯрд╛рдЗрдордЖрдЙрдЯ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

llm = ChatOpenAI(
    model="gpt-4o-audio-preview",
    timeout=30  # Set timeout to 30 seconds
)

рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯреНрд╕ рдФрд░ рдЖрдЙрдЯрдкреБрдЯреНрд╕ рдХреЗ рд╕рд╛рде gpt-4o-audio-preview

рдЕрдм рдЬрдм gpt-4o-audio-preview рдореЙрдбрд▓ рдЪрд╛рд▓реВ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдЗрд╕рдХреА рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдЖрддреЗ рд╣реИрдВред

рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдФрд░ рдПрдиреНрдХреЛрдб рдХрд░рдирд╛

рдСрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд╣рд▓рд╛ рдХрджрдо рд╣реИ рдЕрдкрдиреА рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдРрд╕реЗ рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ рд▓реЛрдб рдФрд░ рдПрдиреНрдХреЛрдб рдХрд░рдирд╛ рдЬрд┐рд╕реЗ рдореЙрдбрд▓ рд╕рдордЭ рд╕рдХреЗред OpenAI рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ base64-рдПрдиреНрдХреЛрдбреЗрдб рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рд╣рдо рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░ рдЙрд╕реЗ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ .wav рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдореЙрдбрд▓ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВтАФрдореИрдВрдиреЗ рдЗрд╕реЗ gpt.wav рдирд╛рдо рджрд┐рдпрд╛ рд╣реИред рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдФрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

import base64

# Open the audio file and convert to base64
with open("gpt.wav", "rb") as f:
   audio_data = f.read()

# Convert binary audio data to base64
audio_b64 = base64.b64encode(audio_data).decode()

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рд╣рдо рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ ("rb" рдореЛрдб) рдореЗрдВ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рдлрд┐рд░ base64 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЗрд╕реЗ base64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВред OpenAI рдХреЛ рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣реА рдлрд╝реЙрд░реНрдореИрдЯ рдЪрд╛рд╣рд┐рдПред

рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдХреЛ рдСрдбрд┐рдпреЛ рднреЗрдЬрдирд╛

рдПрдХ рдмрд╛рд░ рдСрдбрд┐рдпреЛ рдПрдиреНрдХреЛрдб рд╣реЛ рдЬрд╛рдП, рддреЛ рдЗрд╕реЗ рдореЙрдбрд▓ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред gpt-4o-audio-preview рдореЙрдбрд▓ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕реНрдкреАрдЪ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░ рд╕рдХрддрд╛ рд╣реИтАФрддреЛ рдпрджрд┐ рдЖрдкрдХреЛ рдХрднреА рдкреЙрдбрдХрд╛рд╕реНрдЯ, рд╡реЙрдЗрд╕ рдореЗрдореЛ рдпрд╛ рдореАрдЯрд┐рдВрдЧ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝реА рд╣реИ, рддреЛ рдпрд╣реА рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИ! рджреЗрдЦрддреЗ рд╣реИрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

# Define the input message with audio
messages = [
    (
        "human",
        [
            {"type": "text", "text": "Transcribe the following:"},
            {"type": "input_audio", "input_audio": {"data": audio_b64, "format": "wav"}},
        ],
    )
]

# Send the request to the model and get the transcription
output_message = llm.invoke(messages)
print(output_message.content)

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдореЙрдбрд▓ рдХреЛ рджреЛ рдЪреАрдЬрд╝реЗрдВ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ:

  • рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдореИрд╕реЗрдЬ рдЬреЛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИ: "Transcribe the following."
  • base64-рдПрдиреНрдХреЛрдбреЗрдб рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛, рдЬрд┐рд╕рдХрд╛ рдлрд╝реЙрд░реНрдореИрдЯ .wav рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореЙрдбрд▓ рдЗрд╕ рдЗрдирдкреБрдЯ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдСрдбрд┐рдпреЛ рдХрд╛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рддреЛ рдпрджрд┐ рдЖрдкрдХреА рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рд╡рд╛рдХреНрдп рдмреЛрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕реЗ "IтАЩm learning how to use AI," рддреЛ рдореЙрдбрд▓ рдЗрд╕рдХрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рджреЗрдЧрд╛: "I'm learning how to use AI."

gpt-4o-audio-preview рдХреЗ рд╕рд╛рде рдСрдбрд┐рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛

рд▓реЗрдХрд┐рди gpt-4o-audio-preview рдореЙрдбрд▓ рдХреЗрд╡рд▓ рдСрдбрд┐рдпреЛ рд╕рдордЭрдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИтАФрдпрд╣ рдСрдбрд┐рдпреЛ рдЬреЗрдирд░реЗрдЯ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЙрдбрд▓ рдХреЛ рдСрдбрд┐рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

llm = ChatOpenAI(
    model="gpt-4o-audio-preview",
    temperature=0,
    model_kwargs={
        "modalities": ["text", "audio"],  # WeтАЩre telling the model to handle both text and audio
        "audio": {"voice": "alloy", "format": "wav"},  # Configure voice and output format
    }
)

# Send a request and ask the model to respond with audio
messages = [("human", "Are you human? Reply either yes or no.")]
output_message = llm.invoke(messages)

# Access the generated audio data
audio_response = output_message.additional_kwargs['audio']['data']

рдЖрдЗрдП рдЗрд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВ:

  • modalities=["text", "audio"]: рд╣рдо рдореЙрдбрд▓ рдХреЛ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рд╡рд╣ рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдСрдбрд┐рдпреЛтАФрджреЛрдиреЛрдВ рд╕рдВрднрд╛рд▓реЗред рдЗрд╕рд╕реЗ рдпрд╣ рдмреЛрд▓реЗ рдЧрдП рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • audio={"voice": "alloy", "format": "wav"}: рдпрд╣рд╛рдБ рд╣рдо рд╡реЙрдпрд╕ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ "alloy") рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝реЙрд░реНрдореИрдЯ (.wav) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред OpenAI рдХрдИ рд╡реЙрдпрд╕реЗрдЬрд╝ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрдкрдиреЗ рдРрдк рдХреА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрднрд╡ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

base64-рдПрдиреНрдХреЛрдбреЗрдб рдСрдбрд┐рдпреЛ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ output_message.additional_kwargs['audio']['data'] рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдбрд┐рдХреЛрдб рдХрд░рдХреЗ рдкреНрд▓реЗрдмреИрдХ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реЗрд╡ рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛

рдЕрдм рдЬрдм рдЖрдк рдСрдбрд┐рдпреЛ рдЬреЗрдирд░реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реЗрд╡ рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рд╣реИ рдирд╛? рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк base64-рдПрдиреНрдХреЛрдбреЗрдб рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░ .wav рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рд╕реЗрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

# Decode the base64 audio data
audio_bytes = base64.b64decode(output_message.additional_kwargs['audio']['data'])

# Save the audio file
with open("output.wav", "wb") as f:
    f.write(audio_bytes)
print("Audio saved as output.wav")

рдЕрдм рдЖрдк рдЗрд╕ .wav рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреА рд▓реЛрдХрд▓ рдорд╢реАрди рдкрд░ рдХрд┐рд╕реА рднреА рдореАрдбрд┐рдпрд╛ рдкреНрд▓реЗрдпрд░ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЕрдм, рдЬрдм рдЖрдк рдореЙрдбрд▓ рдХреЛ рдЗрдирд╡реЛрдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдЯреЗрдХреНрд╕реНрдЯ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рд╣реА рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЙрд╕реА рдЙрддреНрддрд░ рдХреЛ рдмреЛрд▓рдХрд░ рдмрддрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рднреА рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред

gpt-4o-audio-preview рдХреЗ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧ

рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рдореИрдВ рдмрддрд╛рдКрдБрдЧрд╛ рдХрд┐ gpt-4o-audio-preview рдореЙрдбрд▓ рд╕реЗ рдЯреВрд▓реНрд╕ рдХреИрд╕реЗ рдмрд╛рдБрдзреЗрдВ, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░реЗрдВ, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЪрд░рдгреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдЪреЗрди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдХрднреА рдРрд╕рд╛ рд╡реЙрдпрд╕ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдЬреЛ рдХреЗрд╡рд▓ рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рд╣реА рдирд╣реАрдВ рдХрд░рддрд╛ рдмрд▓реНрдХрд┐ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рднреА рд▓рд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЦрдВрдб рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдЯреВрд▓ рдХреЙрд▓рд┐рдВрдЧ

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

OpenAI рдХрд╛ gpt-4o-audio-preview рдореЙрдбрд▓ LangChain рдХреЗ bind_tools рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЕрдиреНрдп рдЯреВрд▓реНрд╕ рдФрд░ рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдореЗрдердб рд╕реЗ рдЖрдк рдПрдХ рд╕реНрдореВрде рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдореЙрдбрд▓ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рджрд┐рдП рдЧрдП рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдФрд░ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред

рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреВрд▓ рдХреЛ рдореЙрдбрд▓ рд╕реЗ рдмрд╛рдБрдзрдирд╛ рджрд┐рдЦрд╛рдКрдБрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдРрд╕рд╛ рдЯреВрд▓ рдмрд╛рдБрдзрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рд▓рд╛рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрд╕ рдЯреВрд▓ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ Pydantic рдореЙрдбрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░, рд╣рдо рдЙрд╕ рдЯреВрд▓ рдХреЛ gpt-4o-audio-preview рдореЙрдбрд▓ рд╕реЗ рдмрд╛рдБрдзрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЙрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ OpenWeatherMap рд╕реЗ рдПрдХ API рдХреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

import requests
from pydantic import BaseModel, Field

# Define a tool schema using Pydantic
class GetWeather(BaseModel):
   """Get the current weather in a given location."""
   location: str = Field(..., description="The city and state, e.g. Edinburgh, UK")
   def fetch_weather(self):
       # Using OpenWeatherMap API to fetch real-time weather
       API_KEY = "YOUR_API_KEY_HERE"  # Replace with your actual API key
       base_url = f"http://api.openweathermap.org/data/2.5/weather?q={self.location}&APPID={API_KEY}&units=metric"      
       response = requests.get(base_url)      
       if response.status_code == 200:
           data = response.json()
           weather_description = data['weather'][0]['description']
           temperature = data['main']['temp']
           return f"The weather in {self.location} is {weather_description} with a temperature of {temperature}┬░C."
       else:
           # Print the status code and response for debugging
           print(f"Error: {response.status_code}, {response.text}")
           return f"Could not fetch the weather for {self.location}."

# Example usage
weather_tool = GetWeather(location="Edinburgh, GB")  # Using city name and country code
ai_msg = weather_tool.fetch_weather()
print(ai_msg)

рджреЗрдЦрддреЗ рд╣реИрдВ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ:

  • рдЯреВрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛: рд╣рдо GetWeather рдирд╛рдо рдХрд╛ рдЯреВрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдХреЗрд╢рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ OpenWeatherMap API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЙрд╕ рд╕реНрдерд╛рди рдХрд╛ рдореМрдЬреВрджрд╛ рдореМрд╕рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  • рдПрдбрд┐рдирдмрд░реНрдЧ рдореЗрдВ рдореМрд╕рдо рд▓рд╛рдирд╛: рдЗрд╕ рдмрд╛рд░, рд╣рдо рдПрдбрд┐рдирдмрд░реНрдЧ, UK рдХреЗ рд▓рд┐рдП рдореМрд╕рдо рд▓рд╛ рд░рд╣реЗ рд╣реИрдВред
  • рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рд╡реЗрджрд░ рдбреЗрдЯрд╛: рдЯреВрд▓ рдмрд╛рд╣рд░реА API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХрд╛ рдореМрд╕рдо рдбреЗрдЯрд╛ рд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдПрдбрд┐рдирдмрд░реНрдЧ рдХрд╛ рдореМрд╕рдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рдЪрд▓рд╛рдпрд╛, рддреЛ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рд╛: The weather in Edinburgh, GB is broken clouds with a temperature of 13.48┬░C.

рдЯрд╛рд╕реНрдХреНрд╕ рдЪреЗрди рдХрд░рдирд╛: рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдк рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рдирд╛

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

import base64
import requests
from pydantic import BaseModel, Field
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# Define the tool schema for fetching weather
class GetWeather(BaseModel):
   """Get the current weather in a given location."""
   location: str = Field(..., description="The city and state, e.g. Edinburgh, UK")
   def fetch_weather(self):
       # Using OpenWeatherMap API to fetch real-time weather
       API_KEY = "YOUR_API_KEY_HERE"  # Replace with your actual API key
       base_url = f"http://api.openweathermap.org/data/2.5/weather?q={self.location}&appid={API_KEY}&units=metric"       
       response = requests.get(base_url)
       if response.status_code == 200:
           data = response.json()
           weather_description = data['weather'][0]['description']
           temperature = data['main']['temp']
           return f"The weather in {self.location} is {weather_description} with a temperature of {temperature}┬░C."
       else:
           return f"Could not fetch the weather for {self.location}."

# Instantiate the LLM model
llm = ChatOpenAI(
   model="gpt-4o-audio-preview"
)
# Function to handle audio transcription using the LLM
def audio_to_text(audio_b64: str) -> str:
   # Define the message to send for transcription
   messages = [
       (
           "human",
           [
               {"type": "text", "text": "Transcribe the following:"},
               {"type": "input_audio", "input_audio": {"data": audio_b64, "format": "wav"}},
           ],
       )
   ]
   # Invoke the model and get the transcription
   output_message = llm.invoke(messages)
   # Return the transcription from the model's output
   return output_message.content

# Create a prompt template for transcription and weather lookup
prompt = ChatPromptTemplate.from_messages(
   [
       ("system", "You are an assistant that transcribes audio and fetches weather information."),
       ("human", "Transcribe the following and tell me the weather in the location mentioned in the audio."),
   ]
)

# Bind the tool to the model
llm_with_tools = llm.bind_tools([GetWeather])

# Chain the transcription and weather tool
chain = prompt | llm_with_tools

# Read and encode the audio file in base64
audio_file = "weather_input.wav" #Replace with your audio file
with open(audio_file, "rb") as audio_file:
   audio_b64 = base64.b64encode(audio_file.read()).decode('utf-8')

# Transcribe the audio to get the location
transcribed_location = audio_to_text(audio_b64)

# Print the transcription result for debugging
print(f"Transcribed location: {transcribed_location}")

# Check if transcription returned a valid result
if transcribed_location:
   # Fetch weather for the transcribed location
   weather_tool = GetWeather(location=transcribed_location)
   weather_result = weather_tool.fetch_weather()
   print(f"Weather result: {weather_result}")
else:
   print("No valid location was transcribed from the audio.")

рдЖрдЗрдП рдХреЛрдб рдХреЛ рд╕рдордЭреЗрдВ:

  • рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ base64 рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдСрдбрд┐рдпреЛ рдореЙрдбрд▓ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди "Edinburgh" рдХрд╣ рд╕рдХрддрд╛ рд╣реИред
  • рд╡реЗрджрд░ рд▓реБрдХрдЕрдк: рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдиреЗ рдФрд░ рд▓реЛрдХреЗрд╢рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореЙрдбрд▓ GetWeather рдЯреВрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрд╕ рд▓реЛрдХреЗрд╢рди рдХрд╛ рдореМрд╕рдо рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
  • рдкреВрд░реА рддрд░рд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ: рдпрд╣ рд╕реЗрдЯрдЕрдк рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдк рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдореЙрдбрд▓ рдкрд╣рд▓реЗ рдСрдбрд┐рдпреЛ рдореЗрдВ рдХрд╣реА рдмрд╛рдд (рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдирд╛) рд╕рдордЭрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдореМрд╕рдо рдбреЗрдЯрд╛ рд▓рд╛рдХрд░ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдореЙрдбрд▓ рдХреЛ рдПрдХ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рджреА рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдХрд╣рд╛: тАЬEdinburghтАЭ. рдореБрдЭреЗ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рд╛:Transcribed location: Edinburgh

Weather result: The weather in Edinburgh is broken clouds with a temperature of 13.47┬░C.

рдореМрд╕рдо API рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрдХрдлрд╝реНрд▓реЛ

gpt-4o-audio-preview рдХрд╛ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ

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

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:

import base64
from langchain_openai import ChatOpenAI

# Step 1: Instantiate the fine-tuned audio-capable model
fine_tuned_model = ChatOpenAI(
    temperature=0,
    model="ft:gpt-4o-audio-preview:your-organization::model-id"
)

# Step 2: Capture and encode the input audio file (medical report)
audio_file = "medical_report.wav"
with open(audio_file, "rb") as audio_file:
    audio_b64 = base64.b64encode(audio_file.read()).decode('utf-8')

# Step 3: Create the message structure for transcription request
messages = [
    (
        "human",
        [
            {"type": "text", "text": "Please transcribe this medical report audio."},
            {"type": "input_audio", "input_audio": {"data": audio_b64, "format": "wav"}},
        ],
    )
]

# Step 4: Invoke the fine-tuned model to transcribe the audio
result = fine_tuned_model.invoke(messages)

# Step 5: Extract and print the transcribed text from the response
transcription = result.content  # This contains the transcription
print(f"Transcription: {transcription}")

# Debugging: Print the full structure of the additional_kwargs for inspection
print(result.additional_kwargs)

рдпрд╣ рдПрдХ рдРрд╕реЗ рдлрд╛рдЗрди-рдЯреНрдпреВрди рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЦрд╛рд╕ рддреМрд░ рдкрд░ рдореЗрдбрд┐рдХрд▓ рдСрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд▓реАрдЧрд▓ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди, рдХрд╕реНрдЯрдорд░ рд╕рд░реНрд╡рд┐рд╕ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧреНрд╕, рдпрд╛ рдкреЙрдбрдХрд╛рд╕реНрдЯ рдПрдбрд┐рдЯрд┐рдВрдЧ рдЬреИрд╕реЗ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдореЙрдбрд▓реНрд╕ рдХреЛ рдлрд╛рдЗрди-рдЯреНрдпреВрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред┬а

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг: рд╡реЙрдпрд╕-рдЗрдиреЗрдмрд▓реНрдб рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛

рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдБ рд╣рдо рдПрдХ рд╡реЙрдпрд╕-рдЗрдиреЗрдмрд▓реНрдб рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдСрдбрд┐рдпреЛ рдХреЗ рдЬрд░рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рд╢реНрди рд╕реБрдирддрд╛ рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдСрдбрд┐рдпреЛ рдореЗрдВ рд╣реА рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред┬а

рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмреНрд░реЗрдХрдбрд╛рдЙрди

рд╣рдо рдпрд╣ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЕрдкрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рдореЗрдВ рдмреЛрд▓рддрд╛ рд╣реИ, рдФрд░ рдСрдбрд┐рдпреЛ рдХреИрдкреНрдЪрд░ рд╣реЛрддрд╛ рд╣реИред
  2. рдореЙрдбрд▓ рдСрдбрд┐рдпреЛ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИред
  3. рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рдЙрддреНрддрд░ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  4. рдлрд┐рд░ рдореЙрдбрд▓ рдРрд╕рд╛ рдСрдбрд┐рдпреЛ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЪрд▓рд╛рдХрд░ рд╕реБрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рдХрд░реЗрдВ:

import base64
from langchain_openai import ChatOpenAI

# Step 1: Instantiate the audio-capable model with configuration for generating audio
llm = ChatOpenAI(
   model="gpt-4o-audio-preview",
   temperature=0,
   model_kwargs={
       "modalities": ["text", "audio"],  # Enable both text and audio modalities
       "audio": {"voice": "alloy", "format": "wav"},  # Set the desired voice and output format
   }
)

# Step 2: Capture and encode the audio 
audio_file = "math_joke_audio.wav" #You can replace your audio file here
with open(audio_file, "rb") as audio_file:
   audio_b64 = base64.b64encode(audio_file.read()).decode('utf-8')

# Step 3: Create the message structure for transcription and audio response
messages = [
   (
       "human",
       [
           {"type": "text", "text": "Answer the question."},
           {"type": "input_audio", "input_audio": {"data": audio_b64, "format": "wav"}},
       ],
   )
]

# Step 4: Invoke the model to transcribe the audio and generate a response
result = llm.invoke(messages)

# Step 5: Extract the audio response
audio_response = result.additional_kwargs.get('audio', {}).get('data')  # Safely check if audio exists

# Step 6: Save the audio response to a file if it exists
if audio_response:
   # Decode the base64 audio data and save it as a .wav file
   audio_bytes = base64.b64decode(audio_response)
   with open("response.wav", "wb") as f:
       f.write(audio_bytes)
   print("Audio response saved as 'response.wav'")
else:
   print("No audio response available")

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЖрдЗрдП рд╕рдордЭрддреЗ рд╣реИрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  • рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ (рдЙрджрд╛., "рдореБрдЭреЗ рдХреЛрдИ рдЧрдгрд┐рдд рд╕реЗ рдЬреБрдбрд╝рд╛ рдЪреБрдЯрдХреБрд▓рд╛ рд╕реБрдирд╛рдЗрдП")ред рдСрдбрд┐рдпреЛ рдХреЛ base64 рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди: рдореЙрдбрд▓ рдСрдбрд┐рдпреЛ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЗрд╕ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рд▓реЙрдЧ рдпрд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдЬреЗрдирд░реЗрд╢рди: рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореЙрдбрд▓ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрддрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛., "рдлреНрд░рд╛рдВрд╕ рдХреА рд░рд╛рдЬрдзрд╛рдиреА рдкреЗрд░рд┐рд╕ рд╣реИ")
  • рдСрдбрд┐рдпреЛ рдЖрдЙрдЯрдкреБрдЯ: рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЛ рдСрдбрд┐рдпреЛ рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдбрд┐рдпреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ (рдЙрджрд╛., "response.wav") рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реБрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдСрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╛рдЬрд╝ рд╕реБрдирддрд╛ рд╣реИ, рдкреНрд░рд╢реНрди рд╕рдордЭрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдкрдиреА рд╣реА рдЖрд╡рд╛рдЬрд╝ рдореЗрдВ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реЗрдЯрдЕрдк рд╕рд░рд▓ рд╡реЙрдпрд╕ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ рд╣реИ, рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрдк рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдФрд░ рдЙрдиреНрдирдд рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ!

рд╡реЙрдпрд╕-рдЗрдиреЗрдмрд▓реНрдб рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдЪрд░рдг-рджрд░-рдЪрд░рдг

рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдордиреЗ OpenAI рдХреЗ gpt-4o-audio-preview рдореЙрдбрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛тАФрд╕реЗрдЯрдЕрдк, рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ, рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧ, рдФрд░ рдПрдХ рдмреЗрд╕рд┐рдХ рд╡реЙрдпрд╕ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдореЙрдбрд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдСрдбрд┐рдпреЛ-рдЗрдиреЗрдмрд▓реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрд╝рдмреВрдд рдЖрдзрд╛рд░ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЕрдкрдиреА LangChain рдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдордЭ рдмреЗрд╣рддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдпреЗ рдмреНрд▓реЙрдЧреНрд╕ рд╕реБрдЭрд╛рддрд╛/рд╕реБрдЭрд╛рддреА рд╣реВрдБ:

Dr Ana Rojo-Echebur├║a

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

Dr Ana Rojo-Echebur├║a

рдПрдирд╛ рд░реЛрдЬреЛ рдПрдЪреЗрдмреБрд░├║a рдПрдкреНрд▓рд╛рдЗрдб рдореИрдердореЗрдЯрд┐рдХреНрд╕ рдореЗрдВ рдкреАрдПрдЪрдбреА рдХреЗ рд╕рд╛рде рдПрдЖрдИ рдФрд░ рдбреЗрдЯрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИрдВред рд╡рд╣ рдбреЗрдЯрд╛ рдХреЛ рдЙрдкрдпреЛрдЧреА рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдореЗрдВ рдмрджрд▓рдирд╛ рдкрд╕рдВрдж рдХрд░рддреА рд╣реИрдВ рдФрд░ рддрдХрдиреАрдХреА рдЯреАрдореЛрдВ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рдиреЗ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЕрдиреБрднрд╡ рд░рдЦрддреА рд╣реИрдВред рдПрдирд╛ рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рдХреЗ рдЙрдирдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рдирд╡реАрди рдПрдЖрдИ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдЖрдирдВрдж рд▓реЗрддреА рд╣реИрдВред рд╕рдорд╕реНрдпрд╛-рд╕рдорд╛рдзрд╛рди рдХреМрд╢рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА, рд╡рд╣ рдПрдЖрдИтАФрд╡рд┐рд╢реЗрд╖рдХрд░ рдЬреЗрдирд░реЗрдЯрд┐рд╡ рдПрдЖрдИтАФрдХреЗ рдкреНрд░рддрд┐ рдЙрддреНрд╕рд╛рд╣реА рд╣реИрдВред рдПрдирд╛ рдирд┐рд░рдВрддрд░ рд╕реАрдЦрдиреЗ рдФрд░ рдиреИрддрд┐рдХ рдПрдЖрдИ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдФрд░ рддрдХрдиреАрдХ рдХреЛ рд╕рд╣рдЬ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрддреА рд╣реИрдВред

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