SuperAPI AI 工具集

maui-ai-tool-bindings

编程与开发

查看项目

更新于 10-15 21:12

技能介绍

用途:当 MAUI 应用需要由 AI 调用的工具,且这些工具由应用服务、视图模型或静态工具方法提供时,可用 Microsoft.Maui.AI.Attributes 在编译期生成 Microsoft.Extensions.AI 工具,避免反射密集的调用路径。

主要能力:用 [ExportAIFunction("名称")] 标注方法或属性访问器,配合 [Description] 描述工具与参数;用 [AIToolSource(typeof(服务))] 声明 partial 的 AIToolContext 来组织精选工具集,也可用程序集级 <AssemblyName>ToolContext.Default.Tools 暴露全部导出工具。敏感变更可设 ApprovalRequired = true。生成器在编译期对参数分类:普通 string、int、record、enum 作为 JSON 参数;CancellationToken 为调用取消令牌;IServiceProvider 对应 AIFunctionArguments.Services;[FromServices] 与 [FromKeyedServices("key")] 从 DI 解析且不进入 schema。实例方法由提供程序解析宿主服务,缺少提供程序时抛出 InvalidOperationException。

使用方式:安装 dotnet add package Microsoft.Maui.AI.Attributes --prerelease;在 MauiProgram.cs 正常注册服务,如 builder.Services.AddSingleton<PlantCatalogService>();;把生成工具传入 IChatClient,例如 innerClient.AsBuilder().UseFunctionInvocation().ConfigureOptions(...).Build(serviceProvider),或在 UseFunctionInvocation 的 configure 中设置 invocation.AdditionalTools。

适用场景:需要稳定工具名与作用域的正式功能建议使用显式 AIToolContext;原型可用程序集级上下文。工具持有会话状态时使用按聊天会话的 DI 作用域,并在会话结束时释放客户端与作用域。

限制:库本身不创建 DI 作用域;工具须为已声明类型上的已声明方法,lambda、局部函数、动态方法不会被生成;避免泛型方法、ref/out/in 参数、委托、指针及无法 JSON 往返的形状;IAsyncEnumerable<T> 结果需物化为数组或列表;注意 MAUIAI002、MAUIAI003、MAUIAI004 等诊断。