用Microsoft Agent Framework,30 行代码打造会 “干活” 的 AI 代理

B站影视 韩国电影 2025-10-31 14:38 1

摘要:最近被各种 AI 代理(AI Agent)的消息刷屏了?从自动写报告到批量处理邮件,这些能 “主动干活” 的智能体,正在悄悄改变我们的工作方式。但搭建一个能对话、会调用工具的 AI 代理,真的需要复杂的技术吗?

最近被各种 AI 代理(AI Agent)的消息刷屏了?从自动写报告到批量处理邮件,这些能 “主动干活” 的智能体,正在悄悄改变我们的工作方式。但搭建一个能对话、会调用工具的 AI 代理,真的需要复杂的技术吗?

微软给出的答案是:不需要

今天就用一段实战代码,带你上手 Microsoft Agent Framework—— 这个框架能让你用 30 行核心代码,快速实现从 “基础聊天” 到 “工具调用” 的 AI 代理,甚至连多轮对话的上下文都能自动维护。其中,AIFunctionFactory类堪称 “工具集成神器”,正是它让普通函数秒变 AI 可调用的工具,我们重点拆解这个核心组件。

简单说,这是微软推出的一套 “AI 代理开发脚手架”,专门解决两个核心问题:

让开发者不用重复造轮子 —— 对话管理、工具调用、上下文维护这些基础功能,框架已经封装好;

统一各种 LLM 的调用方式 —— 不管你用 OpenAI、Azure OpenAI 还是其他大模型,接口都一样,换模型不用改代码。

对于想快速落地 AI 代理的开发者来说,这意味着:以前需要几天搭的框架,现在几行代码就能搞定

直接看代码 —— 下面这段 Demo 包含两个核心场景,我们逐行拆解,尤其重点解析让工具调用成为可能的。

首先在项目里引入必要的 NuGet 包:

dotnet add package Microsoft.Agents.AI.OpenAI --version 1.0.0-preview.251028.1 场景 1:基础聊天 ——3 步对接 LLM第一个方法BaseDemoRun,演示如何用框架快速对接 OpenAI 模型,实现 “问一句答一句” 的基础聊天,还支持实时流式输出(像 ChatGPT 那样逐字显示回复)。

核心代码(关键步骤标了注释)

// 基于OpenAI的基础聊天Demopublic static async Task BaseDemoRun(string apiKey, string endpoint, string modelName){ // Step 1:配置客户端(填你的API地址) var options = new OpenAIClientOptions { Endpoint = new Uri(endpoint) }; // Step 2:创建客户端,转成标准化接口IChatClient var openAIClient = new OpenAIClient(new ApiKeyCredential(apiKey), options); IChatClient chatClient = openAIClient.GetChatClient(modelName).AsIChatClient; // Step 3:发消息,等回复 var response = await chatClient.GetResponseAsync("你好,请介绍一下自己"); Console.WriteLine(response.Messages[0].Text); // Step 3.1:流式输出(实时看到回复过程) await foreach (var item in chatClient.GetStreamingResponseAsync("你好,请介绍一下自己")) { Console.WriteLine(item); }}

为什么这几步厉害?

用IChatClient接口 “套娃” 后,不管你后面换成 GPT-4、Claude 还是国内大模型,调用代码都不用改 —— 框架帮你做了适配;

流式输出GetStreamingResponseAsync只需一行代码,不用自己处理 WebSocket 或长连接,前端实时显示回复的需求轻松满足。

场景 2:会调用工具的 AI 代理 —— 让 AI 主动 “干活”第二个方法AgentBaseDemoRun是重头戏:让 AI 不仅能聊天,还能主动调用工具(比如查天气、看时间),甚至记住上下文(多轮对话不 “失忆”)。其中,是让工具 “被 AI 认出来” 的核心。

代码不长,但信息量很大:

ask AgentBaseDemoRun(string apiKey, string endpoint, string modelName){ // 1. 初始化OpenAI客户端 var clientOptions = new OpenAIClientOptions { Endpoint = new Uri(endpoint) }; var openAIClient = new OpenAIClient(new ApiKeyCredential(apiKey), clientOptions); // 2. 创建AI代理:定义角色+注册工具 var agent = openAIClient .GetChatClient(modelName) .CreateAIAgent( instructions: "你是一个由ZerekZhang开发的Demo Agent", // 告诉AI它是谁 name: "DemoAgent", tools: [AIFunctionFactory.Create(GetWeather), AIFunctionFactory.Create(GetDate)] // 注册两个工具 ); // 3. 创建对话线程(自动记上下文) AgentThread thread = agent.GetNewThread; // 4. 多轮对话循环 while (true) { var userInput = Console.ReadLine; // 读用户输入 if (userInput == "Exit") break; // 输入Exit退出 Console.WriteLine(await agent.RunAsync(userInput, thread)); // 让代理处理并输出结果 } // 工具1:查天气(带描述,告诉AI怎么用) [Description("Get the weather for a given location.")] static string GetWeather([Description("The location to get the weather for.")] string location) => $"The weather in {location} is cloudy with a high of 15°C."; // 工具2:查当前时间(24小时制,更符合日常使用) [Description("获取时间")] static string GetDate => DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");}

重点解析:AIFunctionFactory—— 让普通函数变 AI 工具的 “翻译官”

是连接 “人类写的函数” 和 “AI 能理解的工具” 的桥梁。它的核心作用是:自动分析普通 C# 方法的结构、描述和参数,生成 AI 能看懂的 “工具说明书”,让 AI 知道什么时候该调用这个工具,以及该传什么参数。我们结合代码中的AIFunctionFactory.Create(GetWeather)来具体看它做了什么:当你调用时,它会自动扫描方法的:

方法描述:通过[Description]标签获取(比如GetWeather的描述是 “Get the weather for a given location.”),告诉 AI “这个工具是干什么的”;

参数信息:扫描方法的参数(比如GetWeather的location参数),并通过参数上的[Description]标签(“The location to get the weather for.”)说明 “需要什么输入”;

返回值类型:确定工具调用后会返回什么格式的结果(比如GetWeather返回字符串)。

这些信息会被整理成 AI 能理解的结构化数据(类似函数调用的 JSON schema),当 AI 处理用户问题时,就能对照这份 “说明书” 判断是否需要调用该工具。

2. 自动处理参数映射,让 AI “传参不迷路”假设用户问 “北京的天气怎么样”,AI 通过整个过程中,你不需要写任何 “参数解析” 代码 ——已经帮你定义好了参数的含义,AI 会自动完成 “问题→参数→工具调用” 的映射。3. 无缝集成到 Agent,简化工具注册流程在代码中,我们只需用tools列表,Agent 就会自动识别并管理这些工具。对比传统的 AI 工具调用开发(需要手动定义函数 schema、处理调用格式),这种方式至少节省 80% 的代码量。

比如你想给 Agent 新增一个 “查股票” 的工具,只需:

写一个带[Description]的GetStockPrice方法;

用AIFunctionFactory.Create(GetStockPrice)注册;

无需其他配置,AI 就能自动调用这个新工具。

其他核心亮点:

AgentThread:AI 的 “对话小本本”AgentThread是框架自带的 “上下文管理器”。你不用手动拼接历史消息(比如把 “上一句问了时间,这一句问明天天气” 的逻辑自己写),线程会自动记录所有对话内容,AI 能基于完整历史做回答。

智能决策:AI 自己判断 “要不要调用工具”最神奇的是agent.RunAsync这行代码:用户输入问题后,AI 会自己判断 ——

如果是 “你是谁” 这种不需要工具的问题,直接回答;

如果是 “北京天气”,自动调用GetWeather("北京");

如果是 “现在时间”,自动调用GetDate;

当你启动,输入不同问题会看到:

就像和一个 “懂思考、能动手” 的助手聊天,体验非常丝滑。

低代码门槛:尤其是AIFunctionFactory的存在,让工具集成从 “写大量配置” 变成 “加几个标签”,新手也能快速上手;

跨模型兼容:今天用 OpenAI,明天想换成 Azure OpenAI 或其他模型,改个modelName就行,代码不用大改;

扩展性超强:除了查天气、时间,你可以注册任何工具 —— 查数据库、调 API、发邮件、甚至控制硬件,理论上 AI 能做的事无限多。

如果你想快速开发一个 “能干活” 的 AI 代理(比如企业内部的自动化助手、客服机器人),微软 Agent Framework 绝对值得一试。

最后放个小提醒:实际运行时,记得把apiKey、endpoint、modelName换成你的真实配置哦,代码可以直接复制到项目里跑~

来源:opendotnet

相关推荐