feat: 初始化NewLife Studio项目,完成基础框架与数据管理模块
何炳宏 authored at 2026-05-26 12:09:09
1.92 KiB
NewLife.Studio
using System.Text.Json;
using NewLife.Studio.AI.Models;

namespace NewLife.Studio.AI.ToolCalling;

/// <summary>工具注册中心</summary>
public class ToolRegistry
{
    private readonly Dictionary<string, ToolHandler> _handlers = new();

    /// <summary>注册工具</summary>
    public void Register(string name, string description, object? parameters, Func<string, Task<string>> handler)
    {
        _handlers[name] = new ToolHandler
        {
            Definition = new ToolDefinition
            {
                Function = new FunctionDef
                {
                    Name = name,
                    Description = description,
                    Parameters = parameters
                }
            },
            Handler = handler
        };
    }

    /// <summary>获取所有工具定义</summary>
    public List<ToolDefinition> GetAllDefinitions()
    {
        return _handlers.Values.Select(h => h.Definition).ToList();
    }

    /// <summary>执行工具</summary>
    public async Task<ToolResult> ExecuteAsync(ToolCall toolCall)
    {
        if (!_handlers.TryGetValue(toolCall.Function.Name, out var handler))
        {
            return new ToolResult
            {
                ToolCallId = toolCall.Id,
                Error = $"Unknown tool: {toolCall.Function.Name}"
            };
        }

        try
        {
            var output = await handler.Handler(toolCall.Function.Arguments);
            return new ToolResult
            {
                ToolCallId = toolCall.Id,
                Output = output
            };
        }
        catch (Exception ex)
        {
            return new ToolResult
            {
                ToolCallId = toolCall.Id,
                Error = ex.Message
            };
        }
    }

    private class ToolHandler
    {
        public required ToolDefinition Definition { get; init; }
        public required Func<string, Task<string>> Handler { get; init; }
    }
}