๐จ Azure OpenAI (Responses API) เดเดชเดฏเตเดเดฟเดเตเดเตเดณเตเดณ เดเดเดจเตเดฑเดฟเดเต เดกเดฟเดธเตเตป เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ (.NET)
๐ เดชเด เดจ เดฒเดเตเดทเตเดฏเดเตเดเตพ
เด เดเดฆเดพเดนเดฐเดฃเด Azure OpenAI (Responses API) เดเตปเดฑเดเตเดฐเตเดทเดจเตเดเตเดณเตเดณ .NET-เตฝ Microsoft Agent Framework เดเดชเดฏเตเดเดฟเดเตเดเต เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเตเดณเตเดณ เดเดเดจเตเดฑเตเดเตพ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดจเตเดฑเตผเดชเตเดฐเตเดธเต-เดเตเดฐเตเดกเต เดกเดฟเดธเตเตป เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต. เดเดเดจเตเดฑเตเดเตเดเตพ เดชเตเดฐเตเดกเดเตเดทเตป-เดฐเดกเดฟ, เดชเดฐเดฟเดชเดพเดฒเดจเดเตเดทเดฎเดตเตเด เดธเตเดเตเดฌเดฟเดณเตเดฎเดพเดฏเดฟ เดเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดชเตเดฐเตเดซเดทเดฃเตฝ เดชเดพเดฑเตเดฑเตเดฃเตเดเดณเตเด เดเตผเดเตเดเดฟเดเตเดเตเดเดฑเตฝ เดธเดฎเตเดชเดจเดเตเดเดณเตเด เดจเดฟเดเตเดเตพเดเตเดเต เดชเด เดฟเดเตเดเดพเด.
เดเดจเตเดฑเตผเดชเตเดฐเตเดธเต เดกเดฟเดธเตเตป เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
- ๐ญ Factory Pattern: เดกเดฟเดชเตเดชเตปเดกเตปเดธเดฟ เดเดเตเดเดเตเดทเดจเตเดเต เดเตเดเดฟเดฏ เดธเตเดฑเตเดฑเดพเตปเดกเตผเดกเตเดธเตเดกเต เดเดเดจเตเดฑเต เดธเตเดทเตเดเดฟ
- ๐ง Builder Pattern: เดธเดเตเดเตเดเดฐเดฃเดคเตเดคเดฟเดจเตเด เดเตเดฐเดฎเตเดเดฐเดฃเดคเตเดคเดฟเดจเตเด เดซเตโเดณเตเดตเดจเตเดฑเต เดเดเดจเตเดฑเต
- ๐งต Thread-Safe Patterns: เดธเดนเดเดฐเดฟเดเตเดเตเดจเตเดจ เดธเดเดญเดพเดทเดฃ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด
- ๐ Repository Pattern: เดตเตเดฏเดเตเดคเดฎเดพเดฏเดฟ เดเตเตพ-เดเดชเดฏเตเด เดถเตเดทเดฟ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด
๐ฏ .NET-เดธเตเดชเตเดธเดฟเดซเดฟเดเต เดเตผเดเตเดเดฟเดเตเดเตเดเดฑเตฝ เดชเตเดฐเดฏเตเดเดจเดเตเดเตพ
เดเดจเตเดฑเตผเดชเตเดฐเตเดธเต เดซเตเดเตเดเดฑเตเดเตพ
- Strong Typing: เดเดฎเตเดชเตเตฝ-เดเตเด เดธเดคเตเดฏเดคเดฏเตเด IntelliSense เดชเดฟเดจเตเดคเตเดฃเดฏเตเด
- Dependency Injection: เดฌเดฟเตฝเดฑเตเดฑเต-เดเตป DI เดเดฃเตเดเตเดฏเตโเดจเตผ เดเดจเตเดฑเดเตเดฐเตเดทเตป
- Configuration Management: IConfiguration เดเดชเตเดชเด Options เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
- Async/Await: เดซเดธเตเดฑเตเดฑเต-เดเตเดฒเดพเดธเต เด
เดธเดฟเดเตเดเตเดฐเตเดฃเดธเต เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดเดเต เดชเดฟเดจเตเดคเตเดฃ
เดชเตเดฐเตเดกเดเตเดทเตป-เดฐเดกเดฟ เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
- Logging Integration: ILogger เดเดชเตเดชเด เดธเตเดเตเดฐเดเตเดเตผเดกเต เดฒเตเดเดฟเดเดเต เดชเดฟเดจเตเดคเตเดฃ
- Health Checks: เดฌเดฟเตฝเดฑเตเดฑเต-เดเตป เดจเดฟเดฐเตเดเตเดทเดฃเด เดเดชเตเดชเด เดกเดฏเดเตเดจเตเดธเตเดฑเตเดฑเดฟเดเตเดธเต
- Configuration Validation: เดกเตเดฑเตเดฑเดพ เด
เดจเตเดเตเดเตเดทเตปเดธเตเดเต เดเตเดเดฟเดฏ เดถเดเตเดคเดฎเดพเดฏ เดเตเดชเตเดชเดฟเดเดเต
- Error Handling: เดธเตเดเตเดฐเดเตเดเตผเดกเต เดเดเตเดธเตเดชเตเดทเตป เดฎเดพเดจเตเดเตเดฎเตเดจเตเดฑเต
๐ง เดธเดพเดเตเดเตเดคเดฟเด เดเตผเดเตเดเดฟเดเตเดเตเดเตผ
เดเตเตผ .NET เดเดเดเดเตเดเตพ
- Microsoft.Extensions.AI: เดเดเตเดเตเดค AI เดธเตผเดตเตเดธเต เด
เดฌเตเดธเตเดเตเดฐเดพเดเตเดทเตปเดเตพ
- Microsoft.Agents.AI: เดเดจเตเดฑเตผเดชเตเดฐเตเดธเต เดเดเดจเตเดฑเต เดเตผเดเตเดเดธเตเดเตเดฐเตเดทเตป เดซเตเดฐเตเดฏเดฟเดเดตเตผเดเตเดเต
- Azure OpenAI (Responses API): เดนเต-เดชเตผเดซเตเตผเดฎเตปเดธเต API เดเตเดฒเดฏเดจเตเดฑเต เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
- Configuration System: appsettings.json เดเดชเตเดชเด เดเตปเดตเดฏเตเตบเดฎเตเดจเตเดฑเต เดเดจเตเดฑเดเตเดฐเตเดทเตป
เดกเดฟเดธเตเตป เดชเดพเดฑเตเดฑเตเตบ เดจเดเดชเตเดชเดพเดเตเดเตฝ
graph LR
A[IServiceCollection] --> B[เดเดเดจเตเดฑเต เดฌเดฟเตฝเดกเตผ]
B --> C[เดเตเตบเดซเดฟเดเดฑเตเดทเตป]
C --> D[เดเตเตพ เดฐเดเดฟเดธเตเดเตเดฐเดฟ]
D --> E[AI เดเดเดจเตเดฑเต]
๐๏ธ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเด เดเดจเตเดฑเตผเดชเตเดฐเตเดธเต เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
1. เดธเตเดทเตเดเดฟเดฎเตเดฒเด เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
- Agent Factory: เดธเตเดฅเดฟเดฐเดคเดฏเตเดณเตเดณ เดเตเดฐเดฎเตเดเดฐเดฃเดคเตเดคเตเดเต เดฎเดฆเตเดงเตเดฏเดธเตเดฅ เดเดเดจเตเดฑเต เดธเตเดทเตเดเดฟ
- Builder Pattern: เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเดเดจเตเดฑเต เดเตเดฐเดฎเตเดเดฐเดฃเดคเตเดคเดฟเดจเตเดณเตเดณ เดซเตโเดณเตเดตเดจเตเดฑเต API
- Singleton Pattern: เดชเดเตเดเดฟเดเตเดจเตเดจ เดตเดฟเดญเดตเดเตเดเตพ เด
เดคเดฟเดจเตเดฑเต เดเตเดฐเดฎเตเดเดฐเดฃ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด
- Dependency Injection: เดฒเตเดธเต เดเดชเตเดชเดฟเดฒเดฟเดเดเต เดเตปเดกเต เดเตเดธเตเดฑเตเดฑเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟ
2. เดชเตเดฐเดตเตเดคเตเดคเดฟเดชเดฐเดฎเดพเดฏ เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
- Strategy Pattern: เดฎเดพเดฑเดพเดตเตเดจเตเดจ เดเตเตพ เดจเดฟเตผเดตเดนเดฃ เดฐเดฃเดคเตเดฐเดเตเดเตพ
- Command Pattern: เดจเดฟเดเดฟเดคเดฎเดพเดฏเดฟ เดเดเดจเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเตพ เดเตพเดฎเตเดเตเดเดฟ undo/redo
- Observer Pattern: เดเดตเดจเตเดฑเต-เดเดพเดฒเดฟเดค เดเดเดจเตเดฑเต เดฒเตเดซเตโเดธเตเดเตเดเดฟเตพ เดฎเดพเดจเตเดเตเดฎเตเดจเตเดฑเต
- Template Method: เดธเตเดฑเตเดฑเดพเตปเดกเตผเดกเตเดธเตเดกเต เดเดเดจเตเดฑเต เดจเดฟเตผเดตเดนเดฃ เดชเตเดฐเดตเตเดคเตเดคเดฟ เดชเตเดฐเดตเดพเดนเดเตเดเตพ
3. เดเดเดจเดพเดชเดฐเดฎเดพเดฏ เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
- Adapter Pattern: Azure OpenAI (Responses API) เดเดจเตเดฑเดเตเดฐเตเดทเตป เดฒเตเดฏเตผ
- Decorator Pattern: เดเดเดจเตเดฑเต เดถเตเดทเดฟ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเดเตเดเตฝ
- Facade Pattern: เดฒเดณเดฟเดคเดฎเดพเดเตเดเดฟเดฏ เดเดเดจเตเดฑเต เดเดเดชเตเดเตฝ เดเดจเตเดฑเตผเดซเตเดธเตเดเตพ
- Proxy Pattern: เดชเตเตผเดซเตเตผเดฎเตปเดธเดฟเดจเดพเดฏเดฟ เดฒเดพเดธเดฟ เดฒเตเดกเดฟเดเดเต เดเดชเตเดชเด เดเดพเดเตเดเดฟเดเดเต
๐ .NET เดกเดฟเดธเตเตป เดคเดคเตเดตเดเตเดเตพ
SOLID เดธเดฟเดฆเตเดงเดพเดจเตเดคเดเตเดเตพ
- Single Responsibility: เดเดฐเต เดเดเดเดคเตเดคเดฟเดจเตเด เดเดฐเต เดตเตเดฏเดเตเดคเดฎเดพเดฏ เดเดฆเตเดฆเตเดถเตเดฏเด
- Open/Closed: เดฎเดพเดฑเตเดฑเดเตเดเดณเดฟเดฒเตเดฒเดพเดคเต เดตเตเดฏเดพเดชเดเดฎเดพเดเตเดเดพเดตเตเดจเตเดจเดคเต
- Liskov Substitution: เดเดจเตเดฑเตผเดซเตเดธเต เด
เดเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเดฒเตเดณเตเดณ เดเตเตพ เดจเดเดชเตเดชเดพเดเตเดเดฒเตเดเตพ
- Interface Segregation: เดเตเดจเตเดฆเตเดฐเตเดเตเดค, เดเดคเตเดคเตเดเตเดฐเตเดจเตเดจ เดเดจเตเดฑเตผเดซเตเดธเตเดเตพ
- Dependency Inversion: เดเดฌเตเดธเตเดเตเดฐเดพเดเตเดทเดจเตเดเดณเดฟเตฝ เดเดถเตเดฐเดฏเดฟเดเตเดเตเด, เดเตเตบเดเตเดฐเตเดทเดจเตเดเดณเดฟเตฝ เด
เดฒเตเดฒ
เดเตเดฒเตเตป เดเตผเดเตเดเดฟเดเตเดเตเดเตผ
- Domain Layer: เดเตเตผ เดเดเดจเตเดฑเต เดเดชเตเดชเด เดเตเตพ เด
เดฌเตเดธเตเดเตเดฐเดพเดเตเดทเดจเตเดเตพ
- Application Layer: เดเดเดจเตเดฑเต เดเตผเดเตเดเดธเตเดเตเดฐเตเดทเตป เดเดชเตเดชเด เดชเตเดฐเดตเตเดคเตเดคเดฟเดชเดฐเดฎเดพเดฏ เดชเตเดฐเดตเดพเดนเดเตเดเตพ
- Infrastructure Layer: Azure OpenAI (Responses API) เดเดจเตเดฑเดเตเดฐเตเดทเตป เดเดชเตเดชเด เดฌเดพเดนเตเดฏ เดธเตเดตเดจเดเตเดเตพ
- Presentation Layer: เดเดชเดฏเตเดเตเดคเต เดเดเดชเตเดเตฝ เดเดชเตเดชเด เดชเตเดฐเดคเดฟเดเดฐเดฃ เดซเตเตผเดฎเดพเดฑเตเดฑเดฟเดเต
๐ เดเดจเตเดฑเตผเดชเตเดฐเตเดธเต เดชเดฐเดฟเดเดฃเดจเดเตพ
เดธเตเดฐเดเตเดท
- Credential Management: IConfiguration เดเดชเดฏเตเดเดฟเดเตเดเต เดธเตเดฐเดเตเดทเดฟเดค API เดเต เดเตเดเดพเดฐเตเดฏเด
- Input Validation: เดถเดเตเดคเดฎเดพเดฏ เดเตเดชเตเดชเดฟเดเตเด เดกเตเดฑเตเดฑเดพ เด
เดจเตเดเตเดเตเดทเตป เดชเดฐเดฟเดถเตเดงเดจเดฏเตเด
- Output Sanitization: เดธเตเดฐเดเตเดทเดฟเดคเดฎเดพเดฏ เดชเตเดฐเดคเดฟเดเดฐเดฃ เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเตเด เดซเดฟเตฝเดฑเตเดฑเดฑเดฟเดเดเตเด
- Audit Logging: เดธเดเตเดเตเดฐเดนเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดเตเดฐเดพเดเตเดเดฟเดเดเต
เดชเตเดฐเดเดเดจเด
- Async Patterns: เดคเดเดธเตเดธเดฎเดฟเดฒเตเดฒเดพเดคเตเดค I/O เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเตพ
- Connection Pooling: เดฆเดเตเดทเดฟเดฃเดฎเดพเดฏ HTTP เดเตเดฒเดฏเดจเตเดฑเต เดฎเดพเดจเตเดเตเดฎเตเดจเตเดฑเต
- Caching: เดฎเตเดเตเดเดชเตเดชเตเดเตเด เดชเตเดฐเดเดเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เดชเตเดฐเดคเดฟเดเดฐเดฃเดฎเตเตฝเดเตเดเดพเดณเตเดเตพ
- Resource Management: เดถเดฐเดฟเดฏเดพเดฏ เดจเดถเตเดเดฐเดฃเดตเตเด เดเตเดฒเตเดจเดชเตเดชเตเด เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
เดธเตเดเตเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟ
- Thread Safety: เดธเดนเดเดฐเดฟเดเตเดเตเดณเตเดณ เดเดเดจเตเดฑเต เดจเดฟเตผเดตเดนเดฃ เดชเดฟเดจเตเดคเตเดฃ
- Resource Pooling: เดฆเดเตเดทเดฟเดฃเดฎเดพเดฏ เดตเดฟเดญเดต เดเดชเดฏเตเดเด
- Load Management: เดจเดฟเดฐเดเตเดเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดตเตเด เดฌเดพเดเตเดเตโเดชเตเดฐเดทเตผ เดเตเดเดพเดฐเตเดฏเด
- Monitoring: เดชเตเดฐเดเดเดจ เดฎเตเดเตเดฐเดฟเดเตโเดธเต เดเดชเตเดชเด เดเดฐเตเดเตเดฏ เดชเดฐเดฟเดถเตเดงเดจเดเตพ
๐ เดชเตเดฐเตเดกเดเตเดทเตป เดกเดฟเดชเตเดฒเตเดฏเตเดฎเตเดจเตเดฑเต
- Configuration Management: เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟ-เดตเดฟเดถเดฟเดทเตเด เดเตเดฐเดฎเตเดเดฐเดฃเดเตเดเตพ
- Logging Strategy: เดเตเดฑเดฟเดฒเตเดทเตป ID-เดเดณเตเดเตเดณเตเดณ เดธเตเดเตเดฐเดเตเดเตผเดกเต เดฒเตเดเดฟเดเดเต
- Error Handling: เดเดเตเดณ เดเดเตเดธเตเดชเตเดทเตป เดนเดพเตปเดกเตเดฒเดฟเดเดเต เดถเดฐเดฟเดฏเดพเดฏ เดชเตเดจเดฐเตเดฆเตเดงเดพเดฐเดฃเดคเตเดคเตเดเต
- Monitoring: เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดเตปเดธเตเดฑเตเดฑเตเดธเตเด เดชเตเดฐเดเดเดจ เดเตเดฃเตเดเตผเดธเตเด
- Testing: เดฏเตเดฃเดฟเดฑเตเดฑเต เดเตเดธเตเดฑเตเดฑเตเดเตพ, เดเดจเตเดฑเดเตเดฐเตเดทเตป เดเตเดธเตเดฑเตเดฑเตเดเดณเตเด เดฒเตเดกเต เดเตเดธเตเดฑเตเดฑเดฟเดเตเดเตเด เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ
.NET เดเดชเดฏเตเดเดฟเดเตเดเต เดเดจเตเดฑเตผเดชเตเดฐเตเดธเต เดเตเดฐเตเดกเต เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเตเดณเตเดณ เดเดเดจเตเดฑเตเดเตพ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดพเตป เดธเดเตเดเดฎเดพเดฃเต? เดถเดเตเดคเดฎเดพเดฏ เดเดฐเต เดเตผเดเตเดเดฟเดเตเดเตเดเตผ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดพเด! ๐ขโจ
๐ เดคเตเดเดเตเดเดฟเดฏเตเดเตเดเตเดเดพเด
เดฎเตเตปเดเตเดเตเดเดฟ เดเดตเดถเตเดฏเดฎเตเดณเตเดณเดคเต
- .NET 10 SDK เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เด
เดคเดฟเดจเต เดฎเตเดเดณเดฟเดฒเดพเดฏเดฟ
- Azure OpenAI เดธเตเดฐเตเดคเดธเตเดธเต เดเดชเตเดชเด เดฎเตเดกเตฝ เดกเดฟเดชเตเดฒเตเดฏเตเดฎเตเดจเตเดฑเต เดเตพเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏ Azure subscription
- Azure CLI โ
az login เดเดชเดฏเตเดเดฟเดเตเดเต เดธเตเตป เดเตป
เดเดตเดถเตเดฏเดฎเดพเดฏ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟ เดตเตเดฐเดฟเดฏเดฌเดฟเตพเดธเต
# zsh/bash
export AZURE_OPENAI_ENDPOINT=https://<your-resource>.openai.azure.com
export AZURE_OPENAI_DEPLOYMENT=gpt-5-mini
# เดคเตเดเตผเดจเตเดจเต เดธเตเตป เดเตป เดเตเดฏเตเดคเต AzureCliCredential เดเดฐเต เดเตเดเตเดเตบ เดฒเดญเดฟเดเตเดเดพเตป เด
เดจเตเดตเดฆเดฟเดเตเดเตเด
az login
# เดชเดตเตผเดทเตเตฝ
$env:AZURE_OPENAI_ENDPOINT = "https://<your-resource>.openai.azure.com"
$env:AZURE_OPENAI_DEPLOYMENT = "gpt-5-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-5-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 เดเดชเดฏเตเดเดฟเดเตเดเต เดชเดฐเดฟเดญเดพเดทเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดคเดพเดฃเต. เดเดเตเดเตพ เดเตเดคเตเดฏเดคเดฏเตเดเตเดเดพเดฏเดฟ เดถเตเดฐเดฎเดฟเดเตเดเตเดจเตเดจเตเดตเตเดเตเดเดฟเดฒเตเด, เดเดเตเดเตเดฎเตเดฑเตเดฑเดกเต เดชเดฐเดฟเดญเดพเดทเดเดณเดฟเตฝ เดชเดฟเดดเดตเตเดเตพ เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เดคเตเดฑเตเดฑเดพเดฏ เดตเดฟเดตเดฐเดเตเดเตพ เดเดฃเตเดเดพเดเดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดเต. เด
เดคเดฟเดจเตเดฑเต เดธเตเดตเดพเดญเดพเดตเดฟเด เดญเดพเดทเดฏเดฟเดฒเตเดณเตเดณ เด
เดธเตฝ เดฐเตเดเดฏเดพเดฃเต เดชเตเดฐเดพเดฎเดพเดฃเดฟเดเดฎเดพเดฏ เดเดฑเดตเดฟเดเดฎเดพเดฏเดฟ เดชเดฐเดฟเดเดฃเดฟเดเตเดเตเดฃเตเดเดคเต. เดจเดฟเตผเดฃเดพเดฏเดเดฎเดพเดฏ เดตเดฟเดตเดฐเดเตเดเตพเดเตเดเต, เดชเตเดฐเตเดซเดทเดฃเตฝ เดฎเดจเตเดทเตเดฏ เดชเดฐเดฟเดญเดพเดท เดถเตเดชเดพเตผเดถ เดเตเดฏเตเดฏเตเดจเตเดจเต. เด เดชเดฐเดฟเดญเดพเดท เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฃเตเดเดพเดเตเดจเตเดจ เดคเตเดฑเตเดฑเดฟเดฆเตเดงเดพเดฐเดฃเดเตพ เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เดคเตเดฑเตเดฑเดพเดฏ เดตเตเดฏเดพเดเตเดฏเดพเดจเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดเตเดเตพ เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดเดณเดฒเตเดฒ.