Browse Source

feat(ai): Adjust the IAIToolProvider to create tools as async

pull/1456/head
colin 6 months ago
parent
commit
6a72aa0361
  1. 8
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/AIToolFactory.cs
  2. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolDefinitionExtenssions.cs
  3. 7
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/FunctionAIToolProvider.cs
  4. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/GlobalFunctionAIToolDefinitionProvider.cs
  5. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolFactory.cs
  6. 3
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolProvider.cs
  7. 2
      aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/README.md

8
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; using Volo.Abp.SimpleStateChecking;
namespace LINGYUN.Abp.AI.Tools; namespace LINGYUN.Abp.AI.Tools;
public class AIToolFactory : IAIToolFactory, ITransientDependency public class AIToolFactory : IAIToolFactory, IScopedDependency
{ {
protected ISimpleStateCheckerManager<AIToolDefinition> StateCheckerManager { get; } protected ISimpleStateCheckerManager<AIToolDefinition> StateCheckerManager { get; }
protected IAIToolDefinitionManager AIToolDefinitionManager { get; } protected IAIToolDefinitionManager AIToolDefinitionManager { get; }
@ -22,7 +22,7 @@ public class AIToolFactory : IAIToolFactory, ITransientDependency
AIToolProviderManager = aIToolProviderManager; AIToolProviderManager = aIToolProviderManager;
} }
public virtual AITool CreateTool(AIToolDefinition definition) public virtual Task<AITool[]> CreateTool(AIToolDefinition definition)
{ {
foreach (var provider in AIToolProviderManager.Providers) foreach (var provider in AIToolProviderManager.Providers)
{ {
@ -31,7 +31,7 @@ public class AIToolFactory : IAIToolFactory, ITransientDependency
continue; continue;
} }
return provider.CreateTool(definition); return provider.CreateToolsAsync(definition);
} }
throw new AbpException($"The AITool provider implementation named {definition.Provider} was not found!"); 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)) if (await StateCheckerManager.IsEnabledAsync(toolDefine))
{ {
aiTools.Add(CreateTool(toolDefine)); aiTools.AddRange(await CreateTool(toolDefine));
} }
} }

2
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)); Check.NotNull(funcType, nameof(funcType));
definition.WithProperty(FunctionType, funcType); definition.WithProperty(FunctionType, funcType.AssemblyQualifiedName);
return definition; return definition;
} }

7
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.DependencyInjection;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using System; using System;
using System.Threading.Tasks;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -17,7 +18,7 @@ public class FunctionAIToolProvider : IAIToolProvider, ITransientDependency
ServiceProvider = serviceProvider; ServiceProvider = serviceProvider;
} }
public virtual AITool CreateTool(AIToolDefinition definition) public virtual Task<AITool[]> CreateToolsAsync(AIToolDefinition definition)
{ {
var aiToolType = definition.GetFunction(); var aiToolType = definition.GetFunction();
// 框架约定, 自定义Tool只需要定义同步方法(Invoke)或异步方法(InvokeAsync)即可 // 框架约定, 自定义Tool只需要定义同步方法(Invoke)或异步方法(InvokeAsync)即可
@ -32,7 +33,7 @@ public class FunctionAIToolProvider : IAIToolProvider, ITransientDependency
description = definition.Description.Localize(localizerFactory)?.Value; description = definition.Description.Localize(localizerFactory)?.Value;
} }
return AIFunctionFactory.Create( var functionAITool = AIFunctionFactory.Create(
method: aiToolMethodInfo, method: aiToolMethodInfo,
createInstanceFunc: (AIFunctionArguments args) => createInstanceFunc: (AIFunctionArguments args) =>
{ {
@ -44,5 +45,7 @@ public class FunctionAIToolProvider : IAIToolProvider, ITransientDependency
Description = description, Description = description,
AdditionalProperties = definition.Properties, AdditionalProperties = definition.Properties,
}); });
return Task.FromResult<AITool[]>([functionAITool]);
} }
} }

2
aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/GlobalAIToolDefinitionProvider.cs → 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; using Volo.Abp.Localization;
namespace LINGYUN.Abp.AI.Tools; namespace LINGYUN.Abp.AI.Tools;
public class GlobalAIToolDefinitionProvider : AIToolDefinitionProvider public class GlobalFunctionAIToolDefinitionProvider : AIToolDefinitionProvider
{ {
public override void Define(IAIToolDefinitionContext context) public override void Define(IAIToolDefinitionContext context)
{ {

2
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; namespace LINGYUN.Abp.AI.Tools;
public interface IAIToolFactory public interface IAIToolFactory
{ {
AITool CreateTool(AIToolDefinition definition); Task<AITool[]> CreateTool(AIToolDefinition definition);
Task<AITool[]> CreateAllTools(); Task<AITool[]> CreateAllTools();
} }

3
aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/LINGYUN/Abp/AI/Tools/IAIToolProvider.cs

@ -1,9 +1,10 @@
using Microsoft.Extensions.AI; using Microsoft.Extensions.AI;
using System.Threading.Tasks;
namespace LINGYUN.Abp.AI.Tools; namespace LINGYUN.Abp.AI.Tools;
public interface IAIToolProvider public interface IAIToolProvider
{ {
string Name { get; } string Name { get; }
AITool CreateTool(AIToolDefinition definition); Task<AITool[]> CreateToolsAsync(AIToolDefinition definition);
} }

2
aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools/README.md

@ -59,7 +59,7 @@ public class NowTimeAIToolDefinitionProvider : AIToolDefinitionProvider
```csharp ```csharp
public class McpAIToolProvider : IAIToolProvider, ITransientDependency public class McpAIToolProvider : IAIToolProvider, ITransientDependency
{ {
public virtual AITool CreateTool(AIToolDefinition definition) public virtual Task<AITool[]> CreateToolsAsync(AIToolDefinition definition)
{ {
// 你的具体实现 // 你的具体实现
} }

Loading…
Cancel
Save