From 5c460742de40386f0494c161e6811b04a5a3a837 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 27 Mar 2026 19:00:59 +0800 Subject: [PATCH] feat(ai): Fix the invalid user-defined function name issue --- .../AIServiceModule.Configure.cs | 3 +++ .../FunctionAIToolDefinitionExtenssions.cs | 9 ++++++++- .../Abp/AI/Tools/FunctionAIToolProvider.cs | 17 ++++++++++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.Configure.cs index f654a1bc1..d205da0cc 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.Configure.cs @@ -125,6 +125,9 @@ public partial class AIServiceModule { options.IsDynamicWorkspaceStoreEnabled = true; options.SaveStaticWorkspacesToDatabase = true; + + options.IsDynamicAIToolStoreEnabled = true; + options.SaveStaticAIToolsToDatabase = true; }); } 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 09bb67f6c..ab688c02f 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 @@ -25,7 +25,7 @@ public static class FunctionAIToolDefinitionExtenssions return definition; } - public static Type GetFunction(this AIToolDefinition definition) + public static Type GetFunctionType(this AIToolDefinition definition) { var funcTypeSet = definition.Properties.GetOrDefault(FunctionType); Check.NotNull(funcTypeSet, nameof(FunctionType)); @@ -36,4 +36,11 @@ public static class FunctionAIToolDefinitionExtenssions return funcType; } + + public static string? GetFunctionNameOrNull(this AIToolDefinition definition) + { + var funcNameSet = definition.Properties.GetOrDefault(FunctionName); + + return funcNameSet?.ToString(); + } } 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 af9b3335c..d0936bd07 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 @@ -3,6 +3,7 @@ using Microsoft.Extensions.AI; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using System; +using System.Reflection; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.DependencyInjection; @@ -36,9 +37,19 @@ public class FunctionAIToolProvider : IAIToolProvider, ITransientDependency public virtual Task CreateToolsAsync(AIToolDefinition definition) { - var aiToolType = definition.GetFunction(); - // 框架约定, 自定义Tool只需要定义同步方法(Invoke)或异步方法(InvokeAsync)即可 - var aiToolMethodInfo = aiToolType.GetMethod("Invoke") ?? aiToolType.GetMethod("InvokeAsync"); + var aiToolType = definition.GetFunctionType(); + var aiToolMethod = definition.GetFunctionNameOrNull(); + + MethodInfo? aiToolMethodInfo = default!; + if (!aiToolMethod.IsNullOrWhiteSpace()) + { + aiToolMethodInfo = aiToolType.GetMethod(aiToolMethod); + } + else + { + // 框架约定, 自定义Tool只需要定义同步方法(Invoke)或异步方法(InvokeAsync)即可 + aiToolMethodInfo = aiToolType.GetMethod("Invoke") ?? aiToolType.GetMethod("InvokeAsync"); + } Check.NotNull(aiToolMethodInfo, nameof(aiToolMethodInfo));