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

рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХреНрдпрд╛ рд╣реИ?
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИрдВред рдПрдХ рдХреЛ рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдХреЗ рд╡рд░реНрдЬрд╝рди 1.0 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░реЗ рдХреЛ 2.0 рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдЖрдк рд╕рдм рдХреБрдЫ рдЧреНрд▓реЛрдмрд▓реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдХреЙрдиреНрдлреНрд▓рд┐рдХреНрдЯреНрд╕ рд╣реЛрдВрдЧреЗред
рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдПрдХ рдЖрдЗрд╕реЛрд▓реЗрдЯреЗрдб рд╡рд░реНрдХрд╕реНрдкреЗрд╕ рдмрдирд╛рддрд╛ рд╣реИтАФрдЬреИрд╕реЗ рдПрдХ рдмреБрд▓рдмреБрд▓рд╛тАФрдЬрд╣рд╛рдБ рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЬреЛ рднреА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ, рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдм рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ Python рд╕реЗрдЯрдЕрдк рдпрд╛ рдХреЙрдиреНрдлреНрд▓рд┐рдХреНрдЯрд┐рдВрдЧ рдкреИрдХреЗрдЬреЗрдЬрд╝ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд░рд╣рддреАред
рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдирд╛ рдФрд░ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛
рдЖрдЗрдП рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдХрд░ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВред рд╣рдо Python рдХреЗ рдЗрдирдмрд┐рд▓реНрдЯ venv рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдБтАФрдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЕрдкрдирд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдмрдирд╛ рд▓реЗрдВред
- рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдм рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдирд╛ рд╣реИред macOS рдпрд╛ Linux рдкрд░
python3 -m venv envрдЪрд▓рд╛рдПрдБред Windows рдкрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИpython -m venv envред - рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
venvPython рдХрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдЯреВрд▓ рд╣реИ, рдФрд░envрдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдирд╛рдо рд╣реИред рдЖрдк рдЗрд╕реЗ рдХреБрдЫ рднреА рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ: env, venv, my_project_env, рдЖрджрд┐ред рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдФрд░ рд╕рд░рд▓ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред - рдЕрдм рдЬрдм рдЖрдкрдиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣ рдЪрд░рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рднреА рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рд╡реЗ рдХреЗрд╡рд▓ рдЗрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗред
- 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.

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)
рдпрд╣ рдПрдХ рдРрд╕реЗ рдлрд╛рдЗрди-рдЯреНрдпреВрди рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЦрд╛рд╕ рддреМрд░ рдкрд░ рдореЗрдбрд┐рдХрд▓ рдСрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд▓реАрдЧрд▓ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди, рдХрд╕реНрдЯрдорд░ рд╕рд░реНрд╡рд┐рд╕ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧреНрд╕, рдпрд╛ рдкреЙрдбрдХрд╛рд╕реНрдЯ рдПрдбрд┐рдЯрд┐рдВрдЧ рдЬреИрд╕реЗ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдореЙрдбрд▓реНрд╕ рдХреЛ рдлрд╛рдЗрди-рдЯреНрдпреВрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред┬а
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг: рд╡реЙрдпрд╕-рдЗрдиреЗрдмрд▓реНрдб рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛
рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдБ рд╣рдо рдПрдХ рд╡реЙрдпрд╕-рдЗрдиреЗрдмрд▓реНрдб рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдСрдбрд┐рдпреЛ рдХреЗ рдЬрд░рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рд╢реНрди рд╕реБрдирддрд╛ рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдСрдбрд┐рдпреЛ рдореЗрдВ рд╣реА рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред┬а
рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмреНрд░реЗрдХрдбрд╛рдЙрди
рд╣рдо рдпрд╣ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЕрдкрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рдореЗрдВ рдмреЛрд▓рддрд╛ рд╣реИ, рдФрд░ рдСрдбрд┐рдпреЛ рдХреИрдкреНрдЪрд░ рд╣реЛрддрд╛ рд╣реИред
- рдореЙрдбрд▓ рдСрдбрд┐рдпреЛ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИред
- рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рдЙрддреНрддрд░ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдлрд┐рд░ рдореЙрдбрд▓ рдРрд╕рд╛ рдСрдбрд┐рдпреЛ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЪрд▓рд╛рдХрд░ рд╕реБрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рдХрд░реЗрдВ:
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 рдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдордЭ рдмреЗрд╣рддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдпреЗ рдмреНрд▓реЙрдЧреНрд╕ рд╕реБрдЭрд╛рддрд╛/рд╕реБрдЭрд╛рддреА рд╣реВрдБ:
- Streamlit рдФрд░ LangChain рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ AI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ
- Llama 3.1 8B, Ollama, рдФрд░ Langchain рдХреЗ рд╕рд╛рде RAG: рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓
- Python рдореЗрдВ рдЯрд╛рд╕реНрдХреНрд╕ рдСрдЯреЛрдореЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LangChain рдПрдЬреЗрдВрдЯ рдмрдирд╛рдирд╛
рдПрдирд╛ рд░реЛрдЬреЛ рдПрдЪреЗрдмреБрд░├║a рдПрдкреНрд▓рд╛рдЗрдб рдореИрдердореЗрдЯрд┐рдХреНрд╕ рдореЗрдВ рдкреАрдПрдЪрдбреА рдХреЗ рд╕рд╛рде рдПрдЖрдИ рдФрд░ рдбреЗрдЯрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИрдВред рд╡рд╣ рдбреЗрдЯрд╛ рдХреЛ рдЙрдкрдпреЛрдЧреА рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдореЗрдВ рдмрджрд▓рдирд╛ рдкрд╕рдВрдж рдХрд░рддреА рд╣реИрдВ рдФрд░ рддрдХрдиреАрдХреА рдЯреАрдореЛрдВ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рдиреЗ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЕрдиреБрднрд╡ рд░рдЦрддреА рд╣реИрдВред рдПрдирд╛ рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рдХреЗ рдЙрдирдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рдирд╡реАрди рдПрдЖрдИ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдЖрдирдВрдж рд▓реЗрддреА рд╣реИрдВред рд╕рдорд╕реНрдпрд╛-рд╕рдорд╛рдзрд╛рди рдХреМрд╢рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА, рд╡рд╣ рдПрдЖрдИтАФрд╡рд┐рд╢реЗрд╖рдХрд░ рдЬреЗрдирд░реЗрдЯрд┐рд╡ рдПрдЖрдИтАФрдХреЗ рдкреНрд░рддрд┐ рдЙрддреНрд╕рд╛рд╣реА рд╣реИрдВред рдПрдирд╛ рдирд┐рд░рдВрддрд░ рд╕реАрдЦрдиреЗ рдФрд░ рдиреИрддрд┐рдХ рдПрдЖрдИ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдФрд░ рддрдХрдиреАрдХ рдХреЛ рд╕рд╣рдЬ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрддреА рд╣реИрдВред

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