From 6a72aa0361189108ab93e4266e6c426d67ec8ae9 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 27 Mar 2026 11:12:33 +0800 Subject: [PATCH] feat(ai): Adjust the IAIToolProvider to create tools as async --- .../LINGYUN/Abp/AI/Tools/AIToolFactory.cs | 8 ++++---- .../Abp/AI/Tools/FunctionAIToolDefinitionExtenssions.cs | 2 +- .../LINGYUN/Abp/AI/Tools/FunctionAIToolProvider.cs | 7 +++++-- ...vider.cs => GlobalFunctionAIToolDefinitionProvider.cs} | 2 +- .../LINGYUN/Abp/AI/Tools/IAIToolFactory.cs | 2 +- .../LINGYUN/Abp/AI/Tools/IAIToolProvider.cs | 3 ++- aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/README.md | 2 +- 7 files changed, 15 insertions(+), 11 deletions(-) rename aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/{GlobalAIToolDefinitionProvider.cs => GlobalFunctionAIToolDefinitionProvider.cs} (94%) diff --git a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/AIToolFactory.cs b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/AIToolFactory.cs index 5d9a34fc3..beb0b1199 100644 --- a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/AIToolFactory.cs +++ b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/AIToolFactory.cs @@ -6,7 +6,7 @@ using Volo.Abp.DependencyInjection; using Volo.Abp.SimpleStateChecking; namespace LINGYUN.Abp.AI.Tools; -public class AIToolFactory : IAIToolFactory, ITransientDependency +public class AIToolFactory : IAIToolFactory, IScopedDependency { protected ISimpleStateCheckerManager StateCheckerManager { get; } protected IAIToolDefinitionManager AIToolDefinitionManager { get; } @@ -22,7 +22,7 @@ public class AIToolFactory : IAIToolFactory, ITransientDependency AIToolProviderManager = aIToolProviderManager; } - public virtual AITool CreateTool(AIToolDefinition definition) + public virtual Task CreateTool(AIToolDefinition definition) { foreach (var provider in AIToolProviderManager.Providers) { @@ -31,7 +31,7 @@ public class AIToolFactory : IAIToolFactory, ITransientDependency continue; } - return provider.CreateTool(definition); + return provider.CreateToolsAsync(definition); } throw new AbpException($"The AITool provider implementation named {definition.Provider} was not found!"); @@ -46,7 +46,7 @@ public class AIToolFactory : IAIToolFactory, ITransientDependency { if (await StateCheckerManager.IsEnabledAsync(toolDefine)) { - aiTools.Add(CreateTool(toolDefine)); + aiTools.AddRange(await CreateTool(toolDefine)); } } diff --git a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolDefinitionExtenssions.cs b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolDefinitionExtenssions.cs index 56f9e9e98..9379d79b2 100644 --- a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolDefinitionExtenssions.cs +++ b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolDefinitionExtenssions.cs @@ -15,7 +15,7 @@ public static class FunctionAIToolDefinitionExtenssions { Check.NotNull(funcType, nameof(funcType)); - definition.WithProperty(FunctionType, funcType); + definition.WithProperty(FunctionType, funcType.AssemblyQualifiedName); return definition; } diff --git a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolProvider.cs b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolProvider.cs index fea88cecb..482228c22 100644 --- a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolProvider.cs +++ b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolProvider.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using System; +using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.DependencyInjection; @@ -17,7 +18,7 @@ public class FunctionAIToolProvider : IAIToolProvider, ITransientDependency ServiceProvider = serviceProvider; } - public virtual AITool CreateTool(AIToolDefinition definition) + public virtual Task CreateToolsAsync(AIToolDefinition definition) { var aiToolType = definition.GetFunction(); // 框架约定, 自定义Tool只需要定义同步方法(Invoke)或异步方法(InvokeAsync)即可 @@ -32,7 +33,7 @@ public class FunctionAIToolProvider : IAIToolProvider, ITransientDependency description = definition.Description.Localize(localizerFactory)?.Value; } - return AIFunctionFactory.Create( + var functionAITool = AIFunctionFactory.Create( method: aiToolMethodInfo, createInstanceFunc: (AIFunctionArguments args) => { @@ -44,5 +45,7 @@ public class FunctionAIToolProvider : IAIToolProvider, ITransientDependency Description = description, AdditionalProperties = definition.Properties, }); + + return Task.FromResult([functionAITool]); } } diff --git a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/GlobalAIToolDefinitionProvider.cs b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/GlobalFunctionAIToolDefinitionProvider.cs similarity index 94% rename from aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/GlobalAIToolDefinitionProvider.cs rename to aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/GlobalFunctionAIToolDefinitionProvider.cs index 03cfbc3ae..2a5a3ab99 100644 --- a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/GlobalAIToolDefinitionProvider.cs +++ b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/GlobalFunctionAIToolDefinitionProvider.cs @@ -5,7 +5,7 @@ using LINGYUN.Abp.AI.Tools.Users; using Volo.Abp.Localization; namespace LINGYUN.Abp.AI.Tools; -public class GlobalAIToolDefinitionProvider : AIToolDefinitionProvider +public class GlobalFunctionAIToolDefinitionProvider : AIToolDefinitionProvider { public override void Define(IAIToolDefinitionContext context) { diff --git a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolFactory.cs b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolFactory.cs index 929403ab3..4e5dbc646 100644 --- a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolFactory.cs +++ b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolFactory.cs @@ -4,7 +4,7 @@ using System.Threading.Tasks; namespace LINGYUN.Abp.AI.Tools; public interface IAIToolFactory { - AITool CreateTool(AIToolDefinition definition); + Task CreateTool(AIToolDefinition definition); Task CreateAllTools(); } diff --git a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolProvider.cs b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolProvider.cs index 2d65d95eb..b8027f85f 100644 --- a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolProvider.cs +++ b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolProvider.cs @@ -1,9 +1,10 @@ using Microsoft.Extensions.AI; +using System.Threading.Tasks; namespace LINGYUN.Abp.AI.Tools; public interface IAIToolProvider { string Name { get; } - AITool CreateTool(AIToolDefinition definition); + Task CreateToolsAsync(AIToolDefinition definition); } diff --git a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/README.md b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/README.md index 28f333b4d..323172535 100644 --- a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/README.md +++ b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/README.md @@ -59,7 +59,7 @@ public class NowTimeAIToolDefinitionProvider : AIToolDefinitionProvider ```csharp public class McpAIToolProvider : IAIToolProvider, ITransientDependency { - public virtual AITool CreateTool(AIToolDefinition definition) + public virtual Task CreateToolsAsync(AIToolDefinition definition) { // 你的具体实现 }