ЁЯОи Azure OpenAI (Responses API) рд╕рд╣ рдПрдЬрдВрдЯрд┐рдХ рдбрд┐рдЭрд╛рдИрди рдкреЕрдЯрд░реНрдиреНрд╕ (.NET)
ЁЯУЛ рд╢рд┐рдХрдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджрд┐рд╖реНрдЯреЗ
рд╣рд╛ рдЙрджрд╛рд╣рд░рдг Microsoft Agent Framework рд╡рд╛рдкрд░реВрди .NET рдордзреНрдпреЗ Azure OpenAI (Responses API) рдЗрдВрдЯрд┐рдЧреНрд░реЗрд╢рдирд╕рд╣ рдмреБрджреНрдзрд┐рдорд╛рди рдПрдЬрдВрдЯ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ-рдЧреНрд░реЗрдб рдбрд┐рдЭрд╛рдИрди рдкреЕрдЯрд░реНрдиреНрд╕рдЪреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЛ. рддреБрдореНрд╣реА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреЕрдЯрд░реНрдиреНрд╕ рдЖрдгрд┐ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рджреГрд╖реНрдЯреАрдХреЛрди рд╢рд┐рдХрд╛рд▓ рдЬреЗ рдПрдЬрдВрдЯреНрд╕рдирд╛ рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рддрдпрд╛рд░, рджреЗрдЦрднрд╛рд▓ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЖрдгрд┐ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдмрдирд╡рддрд╛рдд.
рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рдбрд┐рдЭрд╛рдИрди рдкреЕрдЯрд░реНрдиреНрд╕
- ЁЯПн рдлреЕрдХреНрдЯрд░реА рдкреЕрдЯрд░реНрди: рдбрд┐рдкреЗрдВрдбрдиреНрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рдирд╕рд╣ рд╕реНрдЯрдБрдбрд░реНрдбрд╛рдЗрдЬреНрдб рдПрдЬрдВрдЯ рдирд┐рд░реНрдорд┐рддреА
- ЁЯФз рдмрд┐рд▓реНрдбрд░ рдкреЕрдЯрд░реНрди: рдлреНрд▓реБрдПрдВрдЯ рдПрдЬрдВрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЖрдгрд┐ рд╕реЗрдЯрдЕрдк
- ЁЯз╡ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдкреЕрдЯрд░реНрдиреНрд╕: рд╕рдорд╡рд░реНрддреА рд╕рдВрднрд╛рд╖рдг рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
- ЁЯУЛ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реА рдкреЕрдЯрд░реНрди: рд╕рд╛рдВрдЧрдард┐рдд рд╕рд╛рдзрди рдЖрдгрд┐ рдХреНрд╖рдорддрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
ЁЯОп .NET-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рд▓рд╛рдн
рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ
- рдордЬрдмреВрдд рдЯрд╛рдпрдкрд┐рдВрдЧ: рдХрдВрдкрд╛рдИрд▓-рдЯрд╛рдЗрдо рд╡реНрд╣реЕрд▓рд┐рдбреЗрд╢рди рдЖрдгрд┐ IntelliSense рд╕рдорд░реНрдерди
- рдбрд┐рдкреЗрдВрдбрдиреНрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди: рдЗрди-рдмрд┐рд▓реНрдЯ DI рдХрдВрдЯреЗрдирд░ рдЗрдВрдЯрд┐рдЧреНрд░реЗрд╢рди
- рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди: IConfiguration рдЖрдгрд┐ Options рдкреЕрдЯрд░реНрдиреНрд╕
- Async/Await: рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдорд░реНрдерди
рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдкреЕрдЯрд░реНрдиреНрд╕
- рд▓реЙрдЧрд┐рдВрдЧ рдЗрдВрдЯрд┐рдЧреНрд░реЗрд╢рди: ILogger рдЖрдгрд┐ рд░рдЪрдирд╛рддреНрдордХ рд▓реЙрдЧрд┐рдВрдЧ рд╕рдорд░реНрдерди
- рд╣реЗрд▓реНрде рдЪреЗрдХреНрд╕: рдЗрди-рдмрд┐рд▓реНрдЯ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдЖрдгрд┐ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕
- рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡реНрд╣реЕрд▓рд┐рдбреЗрд╢рди: рдбреЗрдЯрд╛ рдЕтАНреЕрдиреЛрдЯреЗрд╢рдиреНрд╕рд╕рд╣ рдордЬрдмреВрдд рдЯрд╛рдпрдкрд┐рдВрдЧ
- рдПрд░рд░ рд╣рдБрдбрд▓рд┐рдВрдЧ: рд░рдЪрдирд╛рддреНрдордХ рдЕрдкрд╡рд╛рдж рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
ЁЯФз рддрд╛рдВрддреНрд░рд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдореБрдЦреНрдп .NET рдШрдЯрдХ
- Microsoft.Extensions.AI: рдПрдХрддреНрд░рд┐рдХреГрдд AI рд╕реЗрд╡рд╛ рдЕрдореВрд░реНрддрддрд╛
- Microsoft.Agents.AI: рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рдПрдЬрдВрдЯ рдЖрдпреЛрдЬрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ
- Azure OpenAI (Responses API): рдЙрдЪреНрдЪ-рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ API рдХреНрд▓рд╛рдпрдВрдЯ рдкреЕрдЯрд░реНрдиреНрд╕
- рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо: appsettings.json рдЖрдгрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдПрдХрддреНрд░реАрдХрд░рдг
рдбрд┐рдЭрд╛рдИрди рдкреЕрдЯрд░реНрди рдЕрдорд▓рд╛рдд рдЖрдгрдгреЗ
graph LR
A[IServiceCollection] --> B[рдПрдЬрдВрдЯ рдмрд┐рд▓реНрдбрд░]
B --> C[рд╡рд┐рдиреНрдпрд╛рд╕]
C --> D[рд╕рд╛рдзрди рд░реЗрдЬрд┐рд╕реНрдЯреНрд░рд┐]
D --> E[AI рдПрдЬрдВрдЯ]
ЁЯПЧя╕П рдкреНрд░рджрд░реНрд╢рд┐рдд рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рдкреЕрдЯрд░реНрдиреНрд╕
1. рдирд┐рд░реНрдорд╛рдгрд╛рддреНрдордХ рдкреЕрдЯрд░реНрдиреНрд╕
- рдПрдЬрдВрдЯ рдлреЕрдХреНрдЯрд░реА: рд╕реБрд╕рдВрдЧрдд рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╣ рдХреЗрдВрджреНрд░реАрдХреГрдд рдПрдЬрдВрдЯ рдирд┐рд░реНрдорд┐рддреА
- рдмрд┐рд▓реНрдбрд░ рдкреЕрдЯрд░реНрди: рдЬрдЯрд┐рд▓ рдПрдЬрдВрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА рдлреНрд▓реБрдПрдВрдЯ API
- рд╕рд┐рдВрдЧрд▓рдЯрди рдкреЕрдЯрд░реНрди: рд╕рд╛рдорд╛рдпрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЗ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
- рдбрд┐рдкреЗрдВрдбрдиреНрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди: рд╕реИрд▓ рдЬреЛрдбрдгреА рдЖрдгрд┐ рдЪрд╛рдЪрдгреАрдпреЛрдЧреНрдпрддрд╛
2. рд╡реНрдпрд╡рд╣рд╛рд░рд╛рддреНрдордХ рдкреЕрдЯрд░реНрдиреНрд╕
- рд╕реНрдЯреНрд░реЕрдЯреЗрдЬреА рдкреЕрдЯрд░реНрди: рдмрджрд▓рддрд╛ рдпреЗрдгрд╛рд░реЗ рд╕рд╛рдзрди рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рдзреЛрд░рдгреЗ
- рдХрдорд╛рдВрдб рдкреЕрдЯрд░реНрди: рдЕрдгреБрдХреВрд▓рд┐рдд рдПрдЬрдВрдЯ рдСрдкрд░реЗрд╢рдиреНрд╕рд╕рд╣ undo/redo
- рдСрдмреНрдЭрд░реНрд╡реНрд╣рд░ рдкреЕрдЯрд░реНрди: рдЗрд╡реНрд╣реЗрдВрдЯ-рдЪрд╛рд▓рд┐рдд рдПрдЬрдВрдЯ рдЬреАрд╡рдирдЪрдХреНрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдердб: рд╕реНрдЯрдБрдбрд░реНрдб рдПрдЬрдВрдЯ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╡рд░реНрдХрдлреНрд▓реЛрдЬ
3. рд░рдЪрдирд╛рддреНрдордХ рдкреЕрдЯрд░реНрдиреНрд╕
- рдЕтАНреЕрдбреЙрдкреНрдЯрд░ рдкреЕрдЯрд░реНрди: Azure OpenAI (Responses API) рдЗрдВрдЯрд┐рдЧреНрд░реЗрд╢рди рд▓реЗрдпрд░
- рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреЕрдЯрд░реНрди: рдПрдЬрдВрдЯ рдХреНрд╖рдорддрд╛ рд╡рд╛рдврд╡рд┐рдгреЗ
- рдлрд╕рд╛рдб рдкреЕрдЯрд░реНрди: рд╕реЛрдкреНрдпрд╛ рдПрдЬрдВрдЯ рд╕рдВрд╡рд╛рдж рдЗрдВрдЯрд░рдлреЗрд╕
- рдкреНрд░реЙрдХреНрд╕реА рдкреЕрдЯрд░реНрди: рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╛рдареА рд▓реЗрдЭреА рд▓реЛрдбрд┐рдВрдЧ рдЖрдгрд┐ рдХреЕрд╢рд┐рдВрдЧ
ЁЯУЪ .NET рдбрд┐рдЭрд╛рдИрди рддрддреНрддреНрд╡реЗ
SOLID рддрддреНрддреНрд╡реЗ
- рд╕рд┐рдВрдЧрд▓ рд░рд┐рд╕реНрдкреЙрдиреНрд╕рд┐рдмрд┐рд▓рд┐рдЯреА: рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХрд╛рдЪреА рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЙрджреНрджрд┐рд╖реНрдЯ
- рдУрдкрди/рдХреНрд▓реЛрдЬреНрдб: рдмрджрд▓рд╛рдВрд╢рд┐рд╡рд╛рдп рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддрд╛ рдпреЗрдгреЗ
- рд▓рд┐рд╕реНрдХреЙрд╡реНрд╣ рд╕рдмрд╕реНрдЯрд┐рдЯреНрдпреБрд╢рди: рдЗрдВрдЯрд░рдлреЗрд╕-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдзрди рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреНрдпрд╛
- рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗрдЧреНрд░реАрдЧреЗрд╢рди: рдХреЗрдВрджреНрд░реАрдд, рд╕реБрд╕рдВрдЧрдд рдЗрдВрдЯрд░рдлреЗрд╕
- рдбрд┐рдкреЗрдВрдбрдиреНрд╕реА рдЗрдирд╡реНрд╣рд░реНрд╢рди: рдЕрдореВрд░реНрддрддрд╛ рдЕрд╡рд▓рдВрдмреВрди рд░рд╛рд╣рдгреЗ, рдкреНрд░рддреНрдпрдХреНрд╖рд╛рд╡рд░ рдирд╛рд╣реА
рдХреНрд▓реАрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
- рдбреЛрдореЗрди рд▓реЗрдпрд░: рдореБрдЦреНрдп рдПрдЬрдВрдЯ рдЖрдгрд┐ рд╕рд╛рдзрди рдЕрдореВрд░реНрддрддрд╛
- рдЕтАНреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЗрдпрд░: рдПрдЬрдВрдЯ рд╕рдЮреНрдЪрд▓рди рдЖрдгрд┐ рд╡рд░реНрдХрдлреНрд▓реЛрдЬ
- рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд▓реЗрдпрд░: Azure OpenAI (Responses API) рдЗрдВрдЯрд┐рдЧреНрд░реЗрд╢рди рдЖрдгрд┐ рдмрд╛рд╣реНрдп рд╕реЗрд╡рд╛
- рдкреНрд░реЗрдЭреЗрдВрдЯреЗрд╢рди рд▓реЗрдпрд░: рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕рдВрд╡рд╛рдж рдЖрдгрд┐ рдкреНрд░рддрд┐рд╕рд╛рдж рдлреЙрд░рдореЕрдЯрд┐рдВрдЧ
ЁЯФТ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рд╡рд┐рдЪрд╛рд░
рд╕реБрд░рдХреНрд╖рд╛
- рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди: IConfiguration рд╕рд╣ рд╕реБрд░рдХреНрд╖рд┐рдд API рдХреА рд╣рд╛рддрд╛рд│рдгреА
- рдЗрдирдкреБрдЯ рд╡реНрд╣реЕрд▓рд┐рдбреЗрд╢рди: рдордЬрдмреВрдд рдЯрд╛рдпрдкрд┐рдВрдЧ рдЖрдгрд┐ рдбреЗрдЯрд╛ рдЕтАНреЕрдиреЛрдЯреЗрд╢рди рд╡реНрд╣реЕрд▓рд┐рдбреЗрд╢рди
- рдЖрдЙрдЯрдкреБрдЯ рд╕реЕрдирд┐рдЯрд╛рдпрдЭреЗрд╢рди: рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рддрд┐рд╕рд╛рдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдгрд┐ рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧ
- рдСрдбрд┐рдЯ рд▓реЙрдЧрд┐рдВрдЧ: рд╡реНрдпрд╛рдкрдХ рдСрдкрд░реЗрд╢рди рдЯреНрд░реЕрдХрд┐рдВрдЧ
рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛
- рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреЕрдЯрд░реНрдиреНрд╕: рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ I/O рдСрдкрд░реЗрд╢рдиреНрд╕
- рдХрдиреЗрдХреНрд╢рди рдкреВрд▓рд┐рдВрдЧ: рдХрд╛рд░реНрдпрдХреНрд╖рдо HTTP рдХреНрд▓рд╛рдпрдВрдЯ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
- рдХреЕрд╢рд┐рдВрдЧ: рд╕реБрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╛рдареА рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЕрд╢рд┐рдВрдЧ
- рд╕рдВрд╕рд╛рдзрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди: рдпреЛрдЧреНрдп рдирд┐рдкрдЯрд╛рд░рд╛ рдЖрдгрд┐ рд╕реНрд╡рдЪреНрдЫрддрд╛ рдкреЕрдЯрд░реНрдиреНрд╕
рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА
- рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛: рд╕рдорд╡рд░реНрддреА рдПрдЬрдВрдЯ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рдорд░реНрдерди
- рд╕рдВрд╕рд╛рдзрди рдкреВрд▓рд┐рдВрдЧ: рдХрд╛рд░реНрдпрдХреНрд╖рдо рд╕рдВрд╕рд╛рдзрди рд╡рд╛рдкрд░
- рд▓реЛрдб рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди: рджрд░ рдорд░реНрдпрд╛рджрд╛ рдЖрдгрд┐ рдмреЕрдХрдкреНрд░реЗрд╢рд░ рд╣рд╛рддрд╛рд│рдгреА
- рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ: рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЖрдгрд┐ рд╣реЗрд▓реНрде рдЪреЗрдХреНрд╕
ЁЯЪА рдЙрддреНрдкрд╛рджрди рддреИрдирд╛рддреА
- рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди: рдкрд░реНрдпрд╛рд╡рд░рдг-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ
- рд▓реЙрдЧрд┐рдВрдЧ рдзреЛрд░рдг: рд╕реБрд╕рдВрдЧрдд рд▓реЙрдЧрд┐рдВрдЧ рд╕рд╣ рд╕рдВрдмрдВрдзреА IDs
- рдПрд░рд░ рд╣рдБрдбрд▓рд┐рдВрдЧ: рдпреЛрдЧреНрдп рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреАрд╕рд╣ рдЬрд╛рдЧрддрд┐рдХ рдЕрдкрд╡рд╛рдж рд╣рд╛рддрд╛рд│рдгреА
- рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ: рдЕтАНреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдЖрдгрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛рдЙрдВрдЯрд░
- рдЪрд╛рдЪрдгреА: рдпреБрдирд┐рдЯ рдЪрд╛рдЪрдгреНрдпрд╛, рдПрдХрддреНрд░реАрдХрд░рдг рдЪрд╛рдЪрдгреНрдпрд╛, рдЖрдгрд┐ рд▓реЛрдб рдЪрд╛рдЪрдгреА рдкреЕрдЯрд░реНрдиреНрд╕
.NET рд╕рд╣ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ-рдЧреНрд░реЗрдб рдмреБрджреНрдзрд┐рдорд╛рди рдПрдЬрдВрдЯ рддрдпрд╛рд░ рдХрд░рд╛рдпрд▓рд╛ рддрдпрд╛рд░ рдЖрд╣рд╛рдд? рдЪрд▓рд╛ рдХрд╛рд╣реА рдордЬрдмреВрдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдмрдирд╡реВ рдпрд╛! ЁЯПвтЬи
ЁЯЪА рд╕реБрд░реБрд╡рд╛рдд рдХрд╢реА рдХрд░рд╛рд╡реА
рдЖрд╡рд╢реНрдпрдХ рдЕрдЯреА
- .NET 10 SDK рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рд╣реВрди рдЕрдзрд┐рдХ
- Azure OpenAI рд╕рдВрд╕рд╛рдзрди рдЖрдгрд┐ рдореЙрдбреЗрд▓ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯрд╕рд╣ рдПрдХ Azure рд╕рджрд╕реНрдпрддрд╛
- Azure CLI тАФ
az login рд╡рд╛рдкрд░реВрди рд╕рд╛рдЗрди рдЗрди рдХрд░рд╛
рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд▓
# zsh/bash
export AZURE_OPENAI_ENDPOINT=https://<your-resource>.openai.azure.com
export AZURE_OPENAI_DEPLOYMENT=gpt-4.1-mini
# рдирдВрддрд░ рд╕рд╛рдЗрди рдЗрди рдХрд░рд╛ рдЬреЗрдгреЗрдХрд░реВрди AzureCliCredential рдЯреЛрдХрди рдорд┐рд│рд╡реВ рд╢рдХреЗрд▓
az login
# рдкреЙрд╡рд░рд╢реЗрд▓
$env:AZURE_OPENAI_ENDPOINT = "https://<your-resource>.openai.azure.com"
$env:AZURE_OPENAI_DEPLOYMENT = "gpt-4.1-mini"
# рдордЧ рд╕рд╛рдЗрди рдЗрди рдХрд░рд╛ рдЬреЗрдгреЗрдХрд░реВрди AzureCliCredential рдЯреЛрдХрди рдорд┐рд│рд╡реВ рд╢рдХреЗрд▓
az login
рдирдореБрдирд╛ рдХреЛрдб
рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА,
# zsh/bash
chmod +x ./03-dotnet-agent-framework.cs
./03-dotnet-agent-framework.cs
рдХрд┐рдВрд╡рд╛ dotnet CLI рд╡рд╛рдкрд░реВрди:
dotnet run ./03-dotnet-agent-framework.cs
рд╕рдВрдкреВрд░реНрдг рдХреЛрдбрд╕рд╛рдареА 03-dotnet-agent-framework.cs рдкрд╣рд╛.
#!/usr/bin/dotnet run
#:package Microsoft.Extensions.AI@10.*
#:package Microsoft.Agents.AI.OpenAI@1.*-*
#:package Azure.AI.OpenAI@2.1.0
#:package Azure.Identity@1.13.1
using System.ComponentModel;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using Azure.AI.OpenAI;
using Azure.Identity;
// Tool Function: Random Destination Generator
// This static method will be available to the agent as a callable tool
// The [Description] attribute helps the AI understand when to use this function
// This demonstrates how to create custom tools for AI agents
[Description("Provides a random vacation destination.")]
static string GetRandomDestination()
{
// List of popular vacation destinations around the world
// The agent will randomly select from these options
var destinations = new List<string>
{
"Paris, France",
"Tokyo, Japan",
"New York City, USA",
"Sydney, Australia",
"Rome, Italy",
"Barcelona, Spain",
"Cape Town, South Africa",
"Rio de Janeiro, Brazil",
"Bangkok, Thailand",
"Vancouver, Canada"
};
// Generate random index and return selected destination
// Uses System.Random for simple random selection
var random = new Random();
int index = random.Next(destinations.Count);
return destinations[index];
}
// Azure OpenAI with the Responses API (stable v1 endpoint). Sign in with `az login`.
var azureEndpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deployment = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT") ?? "gpt-4.1-mini";
var azureClient = new AzureOpenAIClient(new Uri(azureEndpoint), new AzureCliCredential());
// Define Agent Identity and Comprehensive Instructions
// Agent name for identification and logging purposes
var AGENT_NAME = "TravelAgent";
// Detailed instructions that define the agent's personality, capabilities, and behavior
// This system prompt shapes how the agent responds and interacts with users
var AGENT_INSTRUCTIONS = """
You are a helpful AI Agent that can help plan vacations for customers.
Important: When users specify a destination, always plan for that location. Only suggest random destinations when the user hasn't specified a preference.
When the conversation begins, introduce yourself with this message:
"Hello! I'm your TravelAgent assistant. I can help plan vacations and suggest interesting destinations for you. Here are some things you can ask me:
1. Plan a day trip to a specific location
2. Suggest a random vacation destination
3. Find destinations with specific features (beaches, mountains, historical sites, etc.)
4. Plan an alternative trip if you don't like my first suggestion
What kind of trip would you like me to help you plan today?"
Always prioritize user preferences. If they mention a specific destination like "Bali" or "Paris," focus your planning on that location rather than suggesting alternatives.
""";
// Create AI Agent with Advanced Travel Planning Capabilities
// Get the Responses client for the deployment and create the AI agent
// Configure agent with name, detailed instructions, and available tools
// This demonstrates the .NET agent creation pattern with full configuration
AIAgent agent = azureClient
.GetChatClient(deployment)
.AsAIAgent(
name: AGENT_NAME,
instructions: AGENT_INSTRUCTIONS,
tools: [AIFunctionFactory.Create(GetRandomDestination)]
);
// Create New Conversation Session for Context Management
// Initialize a new conversation session to maintain context across multiple interactions
// Sessions enable the agent to remember previous exchanges and maintain conversational state
// This is essential for multi-turn conversations and contextual understanding
var session = await agent.CreateSessionAsync();
// Execute Agent: First Travel Planning Request
// Run the agent with an initial request that will likely trigger the random destination tool
// The agent will analyze the request, use the GetRandomDestination tool, and create an itinerary
// Using the session parameter maintains conversation context for subsequent interactions
await foreach (var update in agent.RunStreamingAsync("Plan me a day trip", session))
{
await Task.Delay(10);
Console.Write(update);
}
Console.WriteLine();
// Execute Agent: Follow-up Request with Context Awareness
// Demonstrate contextual conversation by referencing the previous response
// The agent remembers the previous destination suggestion and will provide an alternative
// This showcases the power of conversation sessions and contextual understanding in .NET agents
await foreach (var update in agent.RunStreamingAsync("I don't like that destination. Plan me another vacation.", session))
{
await Task.Delay(10);
Console.Write(update);
}
рдЕрд╕реНрд╡реАрдХрд░рдг:
рд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ Co-op Translator рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдЬрд░реА рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрди рдХрд░рддреЛ, рддрд░реА рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪреА рдХрдорддрд░рддрд╛ рдЕрд╕реВ рд╢рдХрддреЗ. рдореВрд│ рджрд╕реНрддрдРрд╡рдЬ рддреНрдпрд╛рдЪреНрдпрд╛ рдореВрд│ рднрд╛рд╖реЗрдд рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ. рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдорд╛рд╣рд┐рддреА рдЕрд╕рд▓реНрдпрд╛рд╕, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд▓рд╛рд╡рдгреАрд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рдирд╛рд╣реА.