news 2026/4/16 15:47:40

使用依赖注入构建 AI Agent

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用依赖注入构建 AI Agent

在构建现代 .NET 应用程序时,依赖注入(Dependency Injection, DI)是一种核心设计模式,有助于实现解耦、可测试性和模块化。Microsoft Agent Framework 原生支持这一模式,使得将 AI Agent 集成到现有 .NET 生态变得简单。

在这个例子中,深度解析如何通过 .NET 通用主机 (Generic Host) 将 AI Agent 注册为服务,并在后台服务中优雅地使用它。

示例概览

该示例展示了一个名为 “Joker” 的 AI Agent,用来讲发生在茶馆里的 笑话。核心演示:

  • 如何配置 HostApplicationBuilder

  • 如何将 AIAgent 及其依赖项注册到 DI 容器中

  • 如何在 IHostedService 中通过构造函数注入使用 Agent

代码深度解析

环境准备与主机构建

首先从环境变量中获取 Azure OpenAI 配置,并创建 Host 构建器。

var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set."); var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini"; // 创建 Host 构建器,这是 .NET 应用依赖注入的基础 HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

核心:依赖注入注册

拆分并注册 Agent 的各个组件。

注册 Agent 选项

将 Agent 配置(如名称、角色指令)注册为单例,做到配置与逻辑分离。

builder.Services.AddSingleton(new ChatClientAgentOptions { Name = "Joker", ChatOptions = new() { Instructions = "你是一位江湖说书人,擅长用幽默、接地气的方式讲笑话和故事。" } });
注册 ChatClient(使用 Keyed Service)
  • 使用 .NET 的 Keyed Services(AddKeyedChatClient)

  • 便于区分多个模型或后端(通过不同的 Key)

  • 使用 AzureCliCredential 无密钥认证

builder.Services.AddKeyedChatClient("AzureOpenAI", sp => new AzureOpenAIClient( new Uri(endpoint), new AzureCliCredential()) .GetChatClient(deploymentName) .AsIChatClient());
注册 AI Agent
  • 从容器获取 Keyed Service(IChatClient)

  • 获取配置选项(ChatClientAgentOptions)

  • 组装并返回 ChatClientAgent

builder.Services.AddSingleton<AIAgent>(sp => new ChatClientAgent( chatClient: sp.GetRequiredKeyedService<IChatClient>("AzureOpenAI"), options: sp.GetRequiredService<ChatClientAgentOptions>()));

消费服务:构建 Hosted Service

注册后台服务并运行主机。

builder.Services.AddHostedService<SampleService>(); using IHost host = builder.Build(); await host.RunAsync().ConfigureAwait(false);

服务实现细节(SampleService)

构造函数注入

利用主构造函数语法声明对 AIAgent 的依赖,启动时由 DI 自动注入 “Joker”。

internal sealed class SampleService(AIAgent agent, IHostApplicationLifetime appLifetime) : IHostedService { private AgentThread? _thread; // ... }
生命周期管理与线程

在 StartAsync 中创建 AgentThread,用于保存会话上下文。

public async Task StartAsync(CancellationToken cancellationToken) { this._thread = agent.GetNewThread(); _ = this.RunAsync(appLifetime.ApplicationStopping); }
  • AgentThread 表示对话上下文(历史)

  • 服务存活期间对话记忆保持

交互循环与流式输出

进入循环读取输入,并以流式方式输出模型回复。

// 核心交互逻辑 await foreach (var update in agent.RunStreamingAsync(input, this._thread, cancellationToken: cancellationToken)) { Console.Write(update); }
  • RunStreamingAsync 接收用户输入和上下文,逐字流式返回结果

关键知识点总结

  • 配置与逻辑分离:使用 ChatClientAgentOptions 解耦提示词与代码

  • 模块化设计:KeyedChatClient 管理多个 AI 后端(如 Azure OpenAI、Ollama)

  • 可测试性:依赖抽象 AIAgent,单测可替换为 Mock

  • 标准范式:基于 Microsoft.Extensions.Hosting,适用于控制台、ASP.NET Core、Worker 等

源代码地址

https://github.com/bingbing-gui/aspnetcore-developer/tree/master/src/09-AI-Agent/Agent-Framework/09-DI

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 22:32:58

英雄联盟智能助手League Akari:颠覆传统游戏体验的5大创新功能

英雄联盟智能助手League Akari&#xff1a;颠覆传统游戏体验的5大创新功能 【免费下载链接】LeagueAkari ✨兴趣使然的&#xff0c;功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari …

作者头像 李华
网站建设 2026/4/10 8:06:29

想挑音乐喷泉公司?这3点对比让你轻松选出行业TOP!

《音乐喷泉厂家哪家好&#xff1a;专业深度测评排名前五》开篇&#xff1a;定下基调在如今追求高品质城市景观和娱乐体验的时代&#xff0c;音乐喷泉以其独特的视听魅力备受关注。选择一家优秀的音乐喷泉厂家至关重要&#xff0c;它能为我们打造出令人惊叹的喷泉作品。本次测评…

作者头像 李华
网站建设 2026/4/10 20:33:48

3大终极技巧:深度解锁NVIDIA显卡隐藏性能实现游戏帧率飙升

3大终极技巧&#xff1a;深度解锁NVIDIA显卡隐藏性能实现游戏帧率飙升 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要彻底释放NVIDIA显卡的隐藏性能潜力吗&#xff1f;通过专业的显卡性能优化工具…

作者头像 李华
网站建设 2026/4/16 17:20:30

高性价比 替代TPS5430 220V转5V WD5208

一、WD5208核心特性&#xff1a;精准匹配220V降压场景需求工程师对220V转5V芯片的核心诉求集中在“高压适配、高集成、高可靠、低成本”四大维度&#xff0c;WD5208的特性设计恰好直击这些痛点&#xff0c;其核心优势可概括为六大亮点&#xff1a; 1. 宽幅高压适配&#xff0c;…

作者头像 李华
网站建设 2026/4/15 16:56:30

如何快速使用纪念币预约神器:新手指南

如何快速使用纪念币预约神器&#xff1a;新手指南 【免费下载链接】auto_commemorative_coin_booking 项目地址: https://gitcode.com/gh_mirrors/au/auto_commemorative_coin_booking 纪念币预约自动化工具是一款基于Python开发的智能脚本&#xff0c;专门帮助用户自动…

作者头像 李华
网站建设 2026/4/13 12:27:31

2025 MBA必备!9款AI论文工具测评:开题报告与文献综述全攻略

2025 MBA必备&#xff01;9款AI论文工具测评&#xff1a;开题报告与文献综述全攻略 2025年MBA论文写作工具测评&#xff1a;精准选择助力高效研究 随着人工智能技术的不断进步&#xff0c;AI论文工具已经成为MBA学生撰写开题报告与文献综述的重要助手。然而&#xff0c;面对市场…

作者头像 李华