đ¨ GitHub āĻŽāĻĄā§āϞ (.NET) āϏāĻš Agentic āĻĄāĻŋāĻāĻžāĻāύ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
đ āĻļā§āĻāĻžāϰ āϞāĻā§āώā§āϝ
āĻāĻ āĻāĻĻāĻžāĻšāϰāĻŖāĻāĻŋ Microsoft Agent Framework āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠.NET-āĻ GitHub āĻŽāĻĄā§āϞ āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻŦā§āĻĻā§āϧāĻŋāĻŽāĻžāύ āĻāĻā§āύā§āĻ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāύā§āĻāĻžāϰāĻĒā§āϰāĻžāĻāĻ-āĻā§āϰā§āĻĄ āĻĄāĻŋāĻāĻžāĻāύ āĻĒā§āϝāĻžāĻāĻžāϰā§āύāĻā§āϞāĻŋ āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰā§āĨ¤ āĻāĻĒāύāĻŋ āĻāĻŽāύ āĻĒā§āĻļāĻžāĻĻāĻžāϰ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻāĻŦāĻ āϏā§āĻĨāĻžāĻĒāϤā§āϝāĻāϤ āĻĒāĻĻā§āϧāϤāĻŋ āĻļāĻŋāĻāĻŦā§āύ āϝāĻž āĻāĻā§āύā§āĻāĻā§ āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ-āϰā§āĻĄāĻŋ, āϰāĻā§āώāĻŖāĻžāĻŦā§āĻā§āώāĻŖāϝā§āĻā§āϝ āĻāĻŦāĻ āϏā§āĻā§āϞāϝā§āĻā§āϝ āĻāϰ⧠āϤā§āϞā§āĨ¤
āĻāύā§āĻāĻžāϰāĻĒā§āϰāĻžāĻāĻ āĻĄāĻŋāĻāĻžāĻāύ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
- đ āĻĢā§āϝāĻžāĻā§āĻāϰāĻŋ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻĄāĻŋāĻĒā§āύāĻĄā§āύā§āϏāĻŋ āĻāύāĻā§āĻāĻļāύ āϏāĻš āĻāĻā§āύā§āĻ āϤā§āϰāĻŋāϰ āĻŽāĻžāύāĻāϰāĻŖ
- đ§ āĻŦāĻŋāϞā§āĻĄāĻžāϰ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻĢā§āϞā§ā§ā§āύā§āĻ āĻāĻā§āύā§āĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻāĻŦāĻ āϏā§āĻāĻāĻĒ
- đ§ĩ āĻĨā§āϰā§āĻĄ-āϏā§āĻĢ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ āĻāĻĨā§āĻĒāĻāĻĨāύ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž
- đ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻā§āϞ āĻāĻŦāĻ āϏāĻā§āώāĻŽāϤāĻž āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻžāϰ āϏāĻāĻāĻ āĻŋāϤ āĻĒāĻĻā§āϧāϤāĻŋ
đ¯ .NET-āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏā§āĻĨāĻžāĻĒāϤā§āϝāĻāϤ āϏā§āĻŦāĻŋāϧāĻž
āĻāύā§āĻāĻžāϰāĻĒā§āϰāĻžāĻāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ
- āϏā§āĻā§āϰāĻ āĻāĻžāĻāĻĒāĻŋāĻ: āĻāĻŽā§āĻĒāĻžāĻāϞ-āĻāĻžāĻāĻŽ āϝāĻžāĻāĻžāĻāĻāϰāĻŖ āĻāĻŦāĻ IntelliSense āϏāĻžāĻĒā§āϰā§āĻ
- āĻĄāĻŋāĻĒā§āύāĻĄā§āύā§āϏāĻŋ āĻāύāĻā§āĻāĻļāύ: āĻŦāĻŋāϞā§āĻ-āĻāύ DI āĻāύā§āĻā§āĻāύāĻžāϰ āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ
- āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž: IConfiguration āĻāĻŦāĻ Options āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
- Async/Await: āĻĒā§āϰāĻĨāĻŽ-āĻļā§āϰā§āĻŖā§āϰ āĻ
ā§āϝāĻžāϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ āϏāĻžāĻĒā§āϰā§āĻ
āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ-āϰā§āĻĄāĻŋ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
- āϞāĻāĻŋāĻ āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ: ILogger āĻāĻŦāĻ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰā§āĻĄ āϞāĻāĻŋāĻ āϏāĻžāĻĒā§āϰā§āĻ
- āĻšā§āϞāĻĨ āĻā§āĻ: āĻŦāĻŋāϞā§āĻ-āĻāύ āĻŽāύāĻŋāĻāϰāĻŋāĻ āĻāĻŦāĻ āĻĄāĻžā§āĻžāĻāύāϏā§āĻāĻŋāĻāϏ
- āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āϝāĻžāĻāĻžāĻāĻāϰāĻŖ: āĻĄā§āĻāĻž āĻ
ā§āϝāĻžāύā§āĻā§āĻļāύ āϏāĻš āϏā§āĻā§āϰāĻ āĻāĻžāĻāĻĒāĻŋāĻ
- āĻāϰāϰ āĻšā§āϝāĻžāύā§āĻĄāϞāĻŋāĻ: āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰā§āĻĄ āĻāĻā§āϏāϏā§āĻĒāĻļāύ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž
đ§ āĻā§āĻāύāĻŋāĻā§āϝāĻžāϞ āϏā§āĻĨāĻžāĻĒāϤā§āϝ
āĻŽā§āϞ .NET āĻāĻĒāĻžāĻĻāĻžāύ
- Microsoft.Extensions.AI: āĻāĻā§āĻā§āϤ AI āϏāĻžāϰā§āĻāĻŋāϏ āĻ
ā§āϝāĻžāĻŦāϏā§āĻā§āϰāĻžāĻāĻļāύ
- Microsoft.Agents.AI: āĻāύā§āĻāĻžāϰāĻĒā§āϰāĻžāĻāĻ āĻāĻā§āύā§āĻ āĻ
āϰā§āĻā§āϏā§āĻā§āϰā§āĻļāύ āĻĢā§āϰā§āĻŽāĻā§āĻžāϰā§āĻ
- GitHub āĻŽāĻĄā§āϞ āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ: āĻāĻā§āĻ-āĻĒā§āϰāĻĻāϰā§āĻļāύ API āĻā§āϞāĻžā§ā§āύā§āĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
- āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āϏāĻŋāϏā§āĻā§āĻŽ: appsettings.json āĻāĻŦāĻ āĻĒāϰāĻŋāĻŦā§āĻļ āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ
āĻĄāĻŋāĻāĻžāĻāύ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻŦāĻžāϏā§āϤāĻŦāĻžā§āύ
graph LR
A[IServiceCollection] --> B[Agent Builder]
B --> C[Configuration]
C --> D[Tool Registry]
D --> E[AI Agent]
đī¸ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻāύā§āĻāĻžāϰāĻĒā§āϰāĻžāĻāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
1. āĻā§āϰāĻŋā§ā§āĻļāύāĻžāϞ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
- āĻāĻā§āύā§āĻ āĻĢā§āϝāĻžāĻā§āĻāϰāĻŋ: āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āϏāĻš āĻā§āύā§āĻĻā§āϰā§āĻā§āϤ āĻāĻā§āύā§āĻ āϤā§āϰāĻŋ
- āĻŦāĻŋāϞā§āĻĄāĻžāϰ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻāĻāĻŋāϞ āĻāĻā§āύā§āĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύā§āϰ āĻāύā§āϝ āĻĢā§āϞā§ā§ā§āύā§āĻ API
- āϏāĻŋāĻā§āĻā§āϞāĻāύ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻļā§ā§āĻžāϰ āĻāϰāĻž āϰāĻŋāϏā§āϰā§āϏ āĻāĻŦāĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž
- āĻĄāĻŋāĻĒā§āύāĻĄā§āύā§āϏāĻŋ āĻāύāĻā§āĻāĻļāύ: āϞā§āĻ āĻāĻžāĻĒāϞāĻŋāĻ āĻāĻŦāĻ āĻā§āϏā§āĻā§āĻŦāĻŋāϞāĻŋāĻāĻŋ
2. āĻŦāĻŋāĻšā§āĻāĻŋāϰāĻžāϞ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
- āϏā§āĻā§āϰā§āϝāĻžāĻā§āĻāĻŋ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻĒāϰāĻŋāĻŦāϰā§āϤāύāϝā§āĻā§āϝ āĻā§āϞ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύ āϏā§āĻā§āϰā§āϝāĻžāĻā§āĻāĻŋ
- āĻāĻŽāĻžāύā§āĻĄ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻāĻā§āύā§āĻ āĻ
āĻĒāĻžāϰā§āĻļāύ āĻāύāĻā§āϝāĻžāĻĒāϏā§āϞā§āĻļāύ āϏāĻš undo/redo
- āĻ
āĻŦāĻāĻžāϰāĻāĻžāϰ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻāĻā§āύā§āĻ-āĻāĻžāϞāĻŋāϤ āĻāĻā§āύā§āĻ āϞāĻžāĻāĻĢāϏāĻžāĻāĻā§āϞ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž
- āĻā§āĻŽāĻĒā§āϞā§āĻ āĻŽā§āĻĨāĻĄ: āĻāĻā§āύā§āĻ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύ āĻā§āĻžāϰā§āĻāĻĢā§āϞ⧠āĻŽāĻžāύāĻāϰāĻŖ
3. āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰāĻžāϞ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
- āĻ
ā§āϝāĻžāĻĄāĻžāĻĒā§āĻāĻžāϰ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: GitHub āĻŽāĻĄā§āϞ API āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ āϞā§ā§āĻžāϰ
- āĻĄā§āĻā§āϰā§āĻāϰ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻāĻā§āύā§āĻ āϏāĻā§āώāĻŽāϤāĻž āĻŦā§āĻĻā§āϧāĻŋ
- āĻĢā§āϝāĻžāϏāĻžāĻĄ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āϏāϰāϞā§āĻā§āϤ āĻāĻā§āύā§āĻ āĻāύā§āĻāĻžāϰāĻ
ā§āϝāĻžāĻāĻļāύ āĻāύā§āĻāĻžāϰāĻĢā§āϏ
- āĻĒā§āϰāĻā§āϏāĻŋ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏā§āϰ āĻāύā§āϝ āϞā§āĻāĻŋ āϞā§āĻĄāĻŋāĻ āĻāĻŦāĻ āĻā§āϝāĻžāĻļāĻŋāĻ
đ .NET āĻĄāĻŋāĻāĻžāĻāύ āύā§āϤāĻŋāĻŽāĻžāϞāĻž
SOLID āύā§āϤāĻŋāĻŽāĻžāϞāĻž
- āϏāĻŋāĻā§āĻā§āϞ āϰā§āϏāĻĒāύā§āϏāĻŋāĻŦāĻŋāϞāĻŋāĻāĻŋ: āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻāĻāĻāĻŋ āϏā§āĻĒāώā§āĻ āĻāĻĻā§āĻĻā§āĻļā§āϝ
- āĻāĻĒā§āύ/āĻā§āϞā§āĻāĻĄ: āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāĻžā§āĻžāĻ āϏāĻŽā§āĻĒā§āϰāϏāĻžāϰāĻŖāϝā§āĻā§āϝ
- āϞāĻŋāϏāĻāĻ āϏāĻžāĻŦāϏā§āĻāĻŋāĻāĻŋāĻāĻļāύ: āĻāύā§āĻāĻžāϰāĻĢā§āϏ-āĻāĻŋāϤā§āϤāĻŋāĻ āĻā§āϞ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻā§āĻļāύ
- āĻāύā§āĻāĻžāϰāĻĢā§āϏ āϏā§āĻā§āϰāĻŋāĻā§āĻļāύ: āĻĢā§āĻāĻžāϏāĻĄ, āϏāĻāĻšāϤ āĻāύā§āĻāĻžāϰāĻĢā§āϏ
- āĻĄāĻŋāĻĒā§āύāĻĄā§āύā§āϏāĻŋ āĻāύāĻāĻžāϰā§āϏāύ: āĻ
ā§āϝāĻžāĻŦāϏā§āĻā§āϰāĻžāĻāĻļāύ āύāĻŋāϰā§āĻāϰ, āĻāύāĻā§āϰāĻŋāĻļāύ āύā§
āĻā§āϞāĻŋāύ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ
- āĻĄā§āĻŽā§āĻāύ āϞā§ā§āĻžāϰ: āĻŽā§āϞ āĻāĻā§āύā§āĻ āĻāĻŦāĻ āĻā§āϞ āĻ
ā§āϝāĻžāĻŦāϏā§āĻā§āϰāĻžāĻāĻļāύ
- āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϞā§ā§āĻžāϰ: āĻāĻā§āύā§āĻ āĻ
āϰā§āĻā§āϏā§āĻā§āϰā§āĻļāύ āĻāĻŦāĻ āĻā§āĻžāϰā§āĻāĻĢā§āϞā§
- āĻāύāĻĢā§āϰāĻžāϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āϞā§ā§āĻžāϰ: GitHub āĻŽāĻĄā§āϞ āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ āĻāĻŦāĻ āĻŦāĻžāĻšā§āϝāĻŋāĻ āϏāĻžāϰā§āĻāĻŋāϏ
- āĻĒā§āϰā§āĻā§āύā§āĻā§āĻļāύ āϞā§ā§āĻžāϰ: āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāύā§āĻāĻžāϰāĻ
ā§āϝāĻžāĻāĻļāύ āĻāĻŦāĻ āϰā§āϏāĻĒāύā§āϏ āĻĢāϰāĻŽā§āϝāĻžāĻāĻŋāĻ
đ āĻāύā§āĻāĻžāϰāĻĒā§āϰāĻžāĻāĻ āĻŦāĻŋāĻŦā§āĻāύāĻž
āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž
- āĻā§āϰā§āĻĄā§āύāĻļāĻŋā§āĻžāϞ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž: IConfiguration āϏāĻš āύāĻŋāϰāĻžāĻĒāĻĻ API āĻā§ āĻšā§āϝāĻžāύā§āĻĄāϞāĻŋāĻ
- āĻāύāĻĒā§āĻ āϝāĻžāĻāĻžāĻāĻāϰāĻŖ: āϏā§āĻā§āϰāĻ āĻāĻžāĻāĻĒāĻŋāĻ āĻāĻŦāĻ āĻĄā§āĻāĻž āĻ
ā§āϝāĻžāύā§āĻā§āĻļāύ āϝāĻžāĻāĻžāĻāĻāϰāĻŖ
- āĻāĻāĻāĻĒā§āĻ āϏā§āϝāĻžāύāĻŋāĻāĻžāĻāĻā§āĻļāύ: āύāĻŋāϰāĻžāĻĒāĻĻ āϰā§āϏāĻĒāύā§āϏ āĻĒā§āϰāϏā§āϏāĻŋāĻ āĻāĻŦāĻ āĻĢāĻŋāϞā§āĻāĻžāϰāĻŋāĻ
- āĻ
āĻĄāĻŋāĻ āϞāĻāĻŋāĻ: āĻŦā§āϝāĻžāĻĒāĻ āĻ
āĻĒāĻžāϰā§āĻļāύ āĻā§āϰā§āϝāĻžāĻāĻŋāĻ
āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ
- āĻ
ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ: āύāύ-āĻŦā§āϞāĻāĻŋāĻ I/O āĻ
āĻĒāĻžāϰā§āĻļāύ
- āĻāĻžāύā§āĻāĻļāύ āĻĒā§āϞāĻŋāĻ: āĻĻāĻā§āώ HTTP āĻā§āϞāĻžā§ā§āύā§āĻ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž
- āĻā§āϝāĻžāĻļāĻŋāĻ: āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻāύā§āύāϤāĻŋāϰ āĻāύā§āϝ āϰā§āϏāĻĒāύā§āϏ āĻā§āϝāĻžāĻļāĻŋāĻ
- āϰāĻŋāϏā§āϰā§āϏ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž: āϏāĻ āĻŋāĻ āĻĄāĻŋāϏāĻĒā§āĻāĻžāϞ āĻāĻŦāĻ āĻā§āϞāĻŋāύāĻāĻĒ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
āϏā§āĻā§āϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ
- āĻĨā§āϰā§āĻĄ āϏā§āĻĢāĻāĻŋ: āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ āĻāĻā§āύā§āĻ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύ āϏāĻžāĻĒā§āϰā§āĻ
- āϰāĻŋāϏā§āϰā§āϏ āĻĒā§āϞāĻŋāĻ: āĻĻāĻā§āώ āϰāĻŋāϏā§āϰā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ
- āϞā§āĻĄ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž: āϰā§āĻ āϞāĻŋāĻŽāĻŋāĻāĻŋāĻ āĻāĻŦāĻ āĻŦā§āϝāĻžāĻāĻĒā§āϰā§āĻļāĻžāϰ āĻšā§āϝāĻžāύā§āĻĄāϞāĻŋāĻ
- āĻŽāύāĻŋāĻāϰāĻŋāĻ: āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻŽā§āĻā§āϰāĻŋāĻ āĻāĻŦāĻ āĻšā§āϞāĻĨ āĻā§āĻ
đ āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻĄāĻŋāĻĒā§āϞā§āĻŽā§āύā§āĻ
- āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž: āĻĒāϰāĻŋāĻŦā§āĻļ-āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏā§āĻāĻŋāĻāϏ
- āϞāĻāĻŋāĻ āϏā§āĻā§āϰā§āϝāĻžāĻā§āĻāĻŋ: āĻāϰā§āϞā§āĻļāύ ID āϏāĻš āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰā§āĻĄ āϞāĻāĻŋāĻ
- āĻāϰāϰ āĻšā§āϝāĻžāύā§āĻĄāϞāĻŋāĻ: āĻā§āϞā§āĻŦāĻžāϞ āĻāĻā§āϏāϏā§āĻĒāĻļāύ āĻšā§āϝāĻžāύā§āĻĄāϞāĻŋāĻ āϏāĻš āϏāĻ āĻŋāĻ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ
- āĻŽāύāĻŋāĻāϰāĻŋāĻ: āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāύāϏāĻžāĻāĻ āĻāĻŦāĻ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻāĻžāĻāύā§āĻāĻžāϰ
- āĻā§āϏā§āĻāĻŋāĻ: āĻāĻāύāĻŋāĻ āĻā§āϏā§āĻ, āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ āĻā§āϏā§āĻ āĻāĻŦāĻ āϞā§āĻĄ āĻā§āϏā§āĻāĻŋāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
āĻāύā§āĻāĻžāϰāĻĒā§āϰāĻžāĻāĻ-āĻā§āϰā§āĻĄ āĻŦā§āĻĻā§āϧāĻŋāĻŽāĻžāύ āĻāĻā§āύā§āĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒā§āϰāϏā§āϤā§āϤ .NET āĻĻāĻŋā§ā§? āĻāϞā§āύ āĻāĻŋāĻā§ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āϏā§āĻĨāĻžāĻĒāϤā§āϝ āϤā§āϰāĻŋ āĻāϰāĻŋ! đĸâ¨
đ āĻļā§āϰ⧠āĻāϰāĻž
āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāϤāĻž
āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻĒāϰāĻŋāĻŦā§āĻļ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ
# zsh/bash
export GH_TOKEN=<your_github_token>
export GH_ENDPOINT=https://models.github.ai/inference
export GH_MODEL_ID=openai/gpt-5-mini
# PowerShell
$env:GH_TOKEN = "<your_github_token>"
$env:GH_ENDPOINT = "https://models.github.ai/inference"
$env:GH_MODEL_ID = "openai/gpt-5-mini"
āύāĻŽā§āύāĻž āĻā§āĻĄ
āĻā§āĻĄ āĻāĻĻāĻžāĻšāϰāĻŖ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ,
# 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.*-*
using System.ClientModel;
using System.ComponentModel;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using OpenAI;
// 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];
}
// Extract configuration from environment variables
// Retrieve the GitHub Models API endpoint, defaults to https://models.github.ai/inference if not specified
// Retrieve the model ID, defaults to openai/gpt-5-mini if not specified
// Retrieve the GitHub token for authentication, throws exception if not specified
var github_endpoint = Environment.GetEnvironmentVariable("GH_ENDPOINT") ?? "https://models.github.ai/inference";
var github_model_id = Environment.GetEnvironmentVariable("GH_MODEL_ID") ?? "openai/gpt-5-mini";
var github_token = Environment.GetEnvironmentVariable("GH_TOKEN") ?? throw new InvalidOperationException("GH_TOKEN is not set.");
// Configure OpenAI Client Options
// Create configuration options to point to GitHub Models endpoint
// This redirects OpenAI client calls to GitHub's model inference service
var openAIOptions = new OpenAIClientOptions()
{
Endpoint = new Uri(github_endpoint)
};
// Initialize OpenAI Client with GitHub Models Configuration
// Create OpenAI client using GitHub token for authentication
// Configure it to use GitHub Models endpoint instead of OpenAI directly
var openAIClient = new OpenAIClient(new ApiKeyCredential(github_token), openAIOptions);
// 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
// Initialize complete agent pipeline: OpenAI client â Chat client â AI agent
// Configure agent with name, detailed instructions, and available tools
// This demonstrates the .NET agent creation pattern with full configuration
AIAgent agent = openAIClient
.GetChatClient(github_model_id)
.CreateAIAgent(
name: AGENT_NAME,
instructions: AGENT_INSTRUCTIONS,
tools: [AIFunctionFactory.Create(GetRandomDestination)]
);
// Create New Conversation Thread for Context Management
// Initialize a new conversation thread to maintain context across multiple interactions
// Threads enable the agent to remember previous exchanges and maintain conversational state
// This is essential for multi-turn conversations and contextual understanding
AgentThread thread = agent.GetNewThread();
// 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 thread parameter maintains conversation context for subsequent interactions
await foreach (var update in agent.RunStreamingAsync("Plan me a day trip", thread))
{
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 threads and contextual understanding in .NET agents
await foreach (var update in agent.RunStreamingAsync("I don't like that destination. Plan me another vacation.", thread))
{
await Task.Delay(10);
Console.Write(update);
}
āĻ
āϏā§āĻŦā§āĻā§āϤāĻŋ:
āĻāĻ āύāĻĨāĻŋāĻāĻŋ AI āĻ
āύā§āĻŦāĻžāĻĻ āĻĒāϰāĻŋāώā§āĻŦāĻž Co-op Translator āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻ
āύā§āĻŦāĻžāĻĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤ āĻāĻŽāϰāĻž āϝāĻĨāĻžāϏāĻžāϧā§āϝ āϏāĻ āĻŋāĻ āĻ
āύā§āĻŦāĻžāĻĻā§āϰ āĻā§āώā§āĻāĻž āĻāϰāĻŋ, āϤāĻŦā§ āĻĻāϝāĻŧāĻž āĻāϰ⧠āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ āϝ⧠āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻ
āύā§āĻŦāĻžāĻĻā§ āϤā§āϰā§āĻāĻŋ āĻŦāĻž āĻ
āϏāĻā§āĻāϤāĻŋ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ āύāĻĨāĻŋāĻāĻŋāϰ āĻŽā§āϞ āĻāĻžāώāĻžāϝāĻŧ āĻĨāĻžāĻāĻž āϏāĻāϏā§āĻāϰāĻŖāĻāĻŋāĻā§ āĻĒā§āϰāĻžāĻŽāĻžāĻŖāĻŋāĻ āĻā§āϏ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āϤāĻĨā§āϝā§āϰ āĻāύā§āϝ, āĻĒā§āĻļāĻžāĻĻāĻžāϰ āĻŽāĻžāύāĻŦ āĻ
āύā§āĻŦāĻžāĻĻ āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻ āĻ
āύā§āĻŦāĻžāĻĻ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻĢāϞ⧠āϏā§āώā§āĻ āĻā§āύ⧠āĻā§āϞ āĻŦā§āĻāĻžāĻŦā§āĻāĻŋ āĻŦāĻž āĻā§āϞ āĻŦā§āϝāĻžāĻā§āϝāĻžāϰ āĻāύā§āϝ āĻāĻŽāϰāĻž āĻĻāĻžāϝāĻŧā§ āύāĻāĨ¤