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;
namespace LINGYUN.Abp.AI.Tools;
public class AIToolFactory : IAIToolFactory, ITransientDependency
public class AIToolFactory : IAIToolFactory, IScopedDependency
{
protected ISimpleStateCheckerManager<AIToolDefinition> 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<AITool[]> 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));
}
}

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));
definition.WithProperty(FunctionType, funcType);
definition.WithProperty(FunctionType, funcType.AssemblyQualifiedName);
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.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<AITool[]> 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<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;
namespace LINGYUN.Abp.AI.Tools;
public class GlobalAIToolDefinitionProvider : AIToolDefinitionProvider
public class GlobalFunctionAIToolDefinitionProvider : AIToolDefinitionProvider
{
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;
public interface IAIToolFactory
{
AITool CreateTool(AIToolDefinition definition);
Task<AITool[]> CreateTool(AIToolDefinition definition);
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 System.Threading.Tasks;
namespace LINGYUN.Abp.AI.Tools;
public interface IAIToolProvider
{
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
public class McpAIToolProvider : IAIToolProvider, ITransientDependency
{
public virtual AITool CreateTool(AIToolDefinition definition)
public virtual Task<AITool[]> CreateToolsAsync(AIToolDefinition definition)
{
// 你的具体实现
}

Loading…
Cancel
Save