本期内容我们将介绍如何在MAF中使用tools(工具)以调用我们代码中的函数让Agent以指定的格式输出补丁时间探索 Microsoft Agent Framework构建你的第一个 AI Agent入门篇https://blog.csdn.net/scixing/article/details/159174859?spm1001.2014.3001.5501在上期我们与AI使用图片交流时需要用将URL发送给AI这对在线的图片自然方便但对本地图片就不太友好了。所以我们其实还有更直接的办法直接把图片文件的内容读进去就行然后其以DataContent形式上传即可var image File.ReadAllBytes(\xx\demo.png); var messages new Microsoft.Extensions.AI .ChatMessage(ChatRole.User, [ new TextContent(这张图片是什么), new DataContent(image, image/png) ]);比如我拿了张开发者大会上stephen和scott聊天的照片Agent便能认出这是一个怎么样的场景图片如下补丁结束我们进正题Tools在MAF中当然也支持Tools这个特性利用这个特性我们可以让agent有能力去调用我们代码中的函数。借用此特性我们可以让Agent不再从其虚幻不可控的”知识库“中凭空生成答案或是让AI可以调用我们想要在程序里执行的功能比如问杭州天气怎么样有了Tools我们就可以让agent直接去api中调用获取天气信息再整合告诉用户或是在其他地方继续使用写法也非常简单// 先写个普通函数 string GetWeather(string city) { return $杭州今天晴天最高25度最低15度; } // 然后包成Tool传给AI AIAgent ai new AzureOpenAIClient(...) .GetChatClient(gpt-4o) .AsAIAgent(你是个有诗意的AI, Cosmos AI, tools: [AIFunctionFactory.Create(GetWeather)] ); Console.WriteLine( await ai.RunAsync(杭州的天气如何));这时候询问agent杭州天气AI就会去调这个函数拿到结果再输出。为了让agent更清楚这函数是做什么用的可以对齐添加描述[Description(获取指定城市的天气)] string GetWeather( [Description(城市名比如杭州、上海)] string city) { return $The weather in {city} is sunny...; }这样agent可以更准确的使用Tools执行我们希望的操作 。按指定格式输出在非常多的场景下大语言模型的职责是将语法混沌的自然语言转换为计算机可以轻松读懂的格式例如json最早的做法我们会在系统提示词中给写上例子例如请按以下格式输出 { xxx: xxxx, yyy: yyyy }但这样会经常出现不按要求的输出一些多余的内容或是不符合字段的做法。最后还需要我们手动序列化。如今在MAF中我们完全不需要这么麻烦随着模型的发展许多模型都已经直接支持定义输出的格式MAF理所应当的也支持这个参数的设置。比如我想要一个人的信息希望Agent能直接返回给我一个对象public record Person(string Name, string Age); var person await ai.RunAsyncPerson(随便给我个人的信息);如果不指定泛型Agent大概会回你一大段话我想到了一个人他叫小明今年25...但现在指定了Person函数就可以直接返回的就是一个实实在在的Person对象.Name、.Age直接就能用这本质上来说帮你实现了response_format的指定与最后的反序列化操作当然如果你希望的话也可以指定序列化的设置Console.WriteLine( await ai.RunAsyncPerson(随便给我个人的信息, serializerOptions: new(System.Text.Json.JsonSerializerDefaults.General)));Tool 结构化输出接下来我们就可以轻松的将两者结合[Description(获取随机人物信息)] Person GetPerson() new Person(Veyle, 1000); // 建Agent时俩Tool一起传进去 AIAgent ai new AzureOpenAIClient( new Uri(Environment.GetEnvironmentVariable(AZURE_AI_ENDPOINT)), new Azure.Identity.AzureCliCredential()) .GetChatClient(o3) .AsAIAgent(你是一个充满宇宙诗意的AI助手会很有想象力/诗意的回答用户的问题, Cosmos AI, tools: [AIFunctionFactory.Create(GetPerson)] ); // 然后 var person await ai.RunAsyncPerson(获取一个人物信息);这时候Agent会首先意识到要调用GetPerson这个Tool拿到返回的Person对象然后便可以给你返回Person对象非常简单就可以完成这两者的组合学会了吗学会了Bilibili: 无聊的年微信公众号scixing的炼丹房【Microsoft Agent Framework】2. Tool与结构化输出_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1cnw3zxEhR?spm_id_from333.788.videopod.sectionsvd_source1d76161a221ae4f697e4d44ab784eb80
探索 Microsoft Agent Framework:(二)Tools与格式化输出
本期内容我们将介绍如何在MAF中使用tools(工具)以调用我们代码中的函数让Agent以指定的格式输出补丁时间探索 Microsoft Agent Framework构建你的第一个 AI Agent入门篇https://blog.csdn.net/scixing/article/details/159174859?spm1001.2014.3001.5501在上期我们与AI使用图片交流时需要用将URL发送给AI这对在线的图片自然方便但对本地图片就不太友好了。所以我们其实还有更直接的办法直接把图片文件的内容读进去就行然后其以DataContent形式上传即可var image File.ReadAllBytes(\xx\demo.png); var messages new Microsoft.Extensions.AI .ChatMessage(ChatRole.User, [ new TextContent(这张图片是什么), new DataContent(image, image/png) ]);比如我拿了张开发者大会上stephen和scott聊天的照片Agent便能认出这是一个怎么样的场景图片如下补丁结束我们进正题Tools在MAF中当然也支持Tools这个特性利用这个特性我们可以让agent有能力去调用我们代码中的函数。借用此特性我们可以让Agent不再从其虚幻不可控的”知识库“中凭空生成答案或是让AI可以调用我们想要在程序里执行的功能比如问杭州天气怎么样有了Tools我们就可以让agent直接去api中调用获取天气信息再整合告诉用户或是在其他地方继续使用写法也非常简单// 先写个普通函数 string GetWeather(string city) { return $杭州今天晴天最高25度最低15度; } // 然后包成Tool传给AI AIAgent ai new AzureOpenAIClient(...) .GetChatClient(gpt-4o) .AsAIAgent(你是个有诗意的AI, Cosmos AI, tools: [AIFunctionFactory.Create(GetWeather)] ); Console.WriteLine( await ai.RunAsync(杭州的天气如何));这时候询问agent杭州天气AI就会去调这个函数拿到结果再输出。为了让agent更清楚这函数是做什么用的可以对齐添加描述[Description(获取指定城市的天气)] string GetWeather( [Description(城市名比如杭州、上海)] string city) { return $The weather in {city} is sunny...; }这样agent可以更准确的使用Tools执行我们希望的操作 。按指定格式输出在非常多的场景下大语言模型的职责是将语法混沌的自然语言转换为计算机可以轻松读懂的格式例如json最早的做法我们会在系统提示词中给写上例子例如请按以下格式输出 { xxx: xxxx, yyy: yyyy }但这样会经常出现不按要求的输出一些多余的内容或是不符合字段的做法。最后还需要我们手动序列化。如今在MAF中我们完全不需要这么麻烦随着模型的发展许多模型都已经直接支持定义输出的格式MAF理所应当的也支持这个参数的设置。比如我想要一个人的信息希望Agent能直接返回给我一个对象public record Person(string Name, string Age); var person await ai.RunAsyncPerson(随便给我个人的信息);如果不指定泛型Agent大概会回你一大段话我想到了一个人他叫小明今年25...但现在指定了Person函数就可以直接返回的就是一个实实在在的Person对象.Name、.Age直接就能用这本质上来说帮你实现了response_format的指定与最后的反序列化操作当然如果你希望的话也可以指定序列化的设置Console.WriteLine( await ai.RunAsyncPerson(随便给我个人的信息, serializerOptions: new(System.Text.Json.JsonSerializerDefaults.General)));Tool 结构化输出接下来我们就可以轻松的将两者结合[Description(获取随机人物信息)] Person GetPerson() new Person(Veyle, 1000); // 建Agent时俩Tool一起传进去 AIAgent ai new AzureOpenAIClient( new Uri(Environment.GetEnvironmentVariable(AZURE_AI_ENDPOINT)), new Azure.Identity.AzureCliCredential()) .GetChatClient(o3) .AsAIAgent(你是一个充满宇宙诗意的AI助手会很有想象力/诗意的回答用户的问题, Cosmos AI, tools: [AIFunctionFactory.Create(GetPerson)] ); // 然后 var person await ai.RunAsyncPerson(获取一个人物信息);这时候Agent会首先意识到要调用GetPerson这个Tool拿到返回的Person对象然后便可以给你返回Person对象非常简单就可以完成这两者的组合学会了吗学会了Bilibili: 无聊的年微信公众号scixing的炼丹房【Microsoft Agent Framework】2. Tool与结构化输出_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1cnw3zxEhR?spm_id_from333.788.videopod.sectionsvd_source1d76161a221ae4f697e4d44ab784eb80