feat: 新增tools接口

This commit is contained in:
ccnetcore
2025-12-22 00:17:10 +08:00
parent fcb74eb28c
commit 8f515f76c0
5 changed files with 63 additions and 0 deletions

View File

@@ -1,17 +1,23 @@
using System.Collections.Concurrent;
using System.Reflection;
using System.Text;
using System.Text.Encodings.Web;
using Dm.util;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using ModelContextProtocol;
using ModelContextProtocol.Server;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using OpenAI.Chat;
using Volo.Abp.Application.Services;
using Volo.Abp.Users;
using Yi.Framework.AiHub.Application.Contracts.Dtos;
using Yi.Framework.AiHub.Domain;
using Yi.Framework.AiHub.Domain.Entities;
using Yi.Framework.AiHub.Domain.Entities.Model;
using Yi.Framework.AiHub.Domain.Extensions;
@@ -175,4 +181,26 @@ public class AiChatService : ApplicationService
await _aiGateWayManager.CompleteChatStreamForStatisticsAsync(_httpContextAccessor.HttpContext, input,
CurrentUser.Id, null, null, cancellationToken);
}
[HttpPost("ai-chat/tool")]
public string GetTool()
{
var toolClasses = typeof(YiFrameworkAiHubDomainModule).Assembly.GetTypes()
.Where(x => x.GetCustomAttribute<McpServerToolTypeAttribute>() is not null)
.ToList();
List<McpServerTool> mcpTools = new List<McpServerTool>();
foreach (var toolClass in toolClasses)
{
var instance = LazyServiceProvider.GetRequiredService(toolClass);
var toolMethods = toolClass.GetMethods()
.Where(y => y.GetCustomAttribute<McpServerToolAttribute>() is not null).ToList();
foreach (var toolMethod in toolMethods)
{
mcpTools.add(McpServerTool.Create(toolMethod, instance));
}
}
var json = System.Text.Json.JsonSerializer.Serialize(mcpTools.Select(x=>x.ProtocolTool).ToList(),McpJsonUtilities.DefaultOptions);
return json;
}
}

View File

@@ -1,3 +1,7 @@
using System.ComponentModel;
using System.Text.Json;
using ModelContextProtocol;
using ModelContextProtocol.Server;
using Yi.Framework.AiHub.Application.Contracts;
using Yi.Framework.AiHub.Domain;
using Yi.Framework.Ddd.Application;

View File

@@ -0,0 +1,15 @@
using System.ComponentModel;
using ModelContextProtocol.Server;
using Volo.Abp.DependencyInjection;
namespace Yi.Framework.AiHub.Domain.Mcp;
[McpServerToolType]
public class DeepThinkTool:ISingletonDependency
{
[McpServerTool, Description("进行深度思考")]
public void DeepThink()
{
}
}

View File

@@ -0,0 +1,15 @@
using System.ComponentModel;
using ModelContextProtocol.Server;
using Volo.Abp.DependencyInjection;
namespace Yi.Framework.AiHub.Domain.Mcp;
[McpServerToolType]
public class OnlineSearchTool:ISingletonDependency
{
[McpServerTool, Description("进行在线搜索")]
public void OnlineSearch()
{
}
}

View File

@@ -3,6 +3,7 @@
<ItemGroup>
<PackageReference Include="AlipayEasySDK" Version="2.1.3" />
<PackageReference Include="Azure.AI.OpenAI" Version="2.2.0-beta.4" />
<PackageReference Include="ModelContextProtocol.Core" Version="0.5.0-preview.1" />
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="$(AbpVersion)" />
<PackageReference Include="Volo.Abp.DistributedLocking" Version="$(AbpVersion)" />
</ItemGroup>