mcpField
T
tool-function-schema-designer

tool-function-schema-designer

github.com/patricio0312revAgent 工作流63246 次安装41 周前更新
代码仓库

关于 tool-function-schema-designer

面向构建 LLM 工具调用的开发者,提供工具架构设计指导,涵盖类型定义、运行时校验、注册和错误处理。

主要功能

  1. 01设计函数调用 JSON Schema
  2. 02定义 TypeScript 类型接口
  3. 03使用 Zod 进行校验
  4. 04组织工具注册表
  5. 05规划错误处理与调用示例

适用场景

  1. 01为文档搜索定义工具参数
  2. 02校验 LLM 生成的工具输入
  3. 03将工具实现与架构关联

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/patricio0312rev/skills --skill tool-function-schema-designer

安装后在 Claude Code 中输入/tool-function-schema-designer确认已加载。

详细介绍

工具/函数架构设计器

设计稳健的工具架构,让大模型能够可靠地调用工具。

函数架构格式

// OpenAI function calling format
const searchDocsTool = {
  type: "function",
  function: {
    name: "search_documentation",
    description:
      "Search through product documentation using semantic search. Use this when the user asks about features, how-tos, or troubleshooting.",
    parameters: {
      type: "object",
      properties: {
        query: {
          type: "string",
          description: "The search query, phrased as a question or keywords",
        },
        filters: {
          type: "object",
          properties: {
            category: {
              type: "string",
              enum: ["api", "guides", "tutorials", "troubleshooting"],
              description: "Filter by documentation category",
            },
            version: {
              type: "string",
              description: "Filter by product version (e.g., 'v2.0')",
            },
          },
        },
        max_results: {
          type: "integer",
          minimum: 1,
          maximum: 10,
          default: 5,
          description: "Maximum number of results to return",
        },
      },
      required: ["query"],
    },
  },
};

类型化接口

// TypeScript types matching schema
interface SearchDocsParams {
  query: string;
  filters?: {
    category?: "api" | "guides" | "tutorials" | "troubleshooting";
    version?: string;
  };
  max_results?: number;
}

// Implementation
async function search_documentation(
  params: SearchDocsParams
): Promise<SearchResult[]> {
  const { query, filters = {}, max_results = 5 } = params;

  // Implementation
  return await vectorStore.search(query, {
    filter: filters,
    limit: max_results,
  });
}

验证策略

import { z } from "zod";

// Zod schema for runtime validation
const searchDocsSchema = z.object({
  query: z.string().min(1, "Query cannot be empty"),
  filters: z
    .object({
      category: z
        .enum(["api", "guides", "tutorials", "troubleshooting"])
        .optional(),
      version: z.string().optional(),
    })
    .optional(),
  max_results: z.number().int().min(1).max(10).default(5),
});

// Validate before execution
function validateAndExecute(toolName: string, params: unknown) {
  const validated = searchDocsSchema.parse(params);
  return search_documentation(validated);
}

工具注册表

export const TOOLS = {
  search_documentation: {
    schema: searchDocsTool,
    implementation: search_documentation,
    validator: searchDocsSchema,
  },
  create_ticket: {
    schema: createTicketTool,
    implementation: create_ticket,
    validator: createTicketSchema,
  },
  // ... more tools
};

// Execute tool safely
async function executeTool(name: string, params: unknown) {
  const tool = TOOLS[name];
  if (!tool) throw new Error(`Unknown tool: ${name}`);

  const validated = tool.validator.parse(params);
  return tool.implementation(validated);
}

调用示例

// Example 1: Simple search
{
  "name": "search_documentation",
  "parameters": {
    "query": "How do I authenticate API requests?"
  }
}

// Example 2: With filters
{
  "name": "search_documentation",
  "parameters": {
    "query": "rate limiting",
    "filters": {
      "category": "api",
      "version": "v2.0"
    },
    "max_results": 3
  }
}

错误处理

interface ToolResult {
  success: boolean;
  data?: any;
  error?: {
    code: string;
    message: string;
  };
}

async function safeExecuteTool(
  name: string,
  params: unknown
): Promise<ToolResult> {
  try {
    const data = await executeTool(name, params);
    return { success: true, data };
  } catch (error) {
    if (error instanceof z.ZodError) {
      return {
        success: false,
        error: {
          code: "VALIDATION_ERROR",
          message: `Invalid parameters: ${error.message}`,
        },
      };
    }
    return {
      success: false,
      error: {
        code: "EXECUTION_ERROR",
        message: error.message,
      },
    };
  }
}

最佳实践

  1. 清晰的描述:说明何时使用该工具
  2. 具体的类型:使用枚举、范围、模式
  3. 合理的默认值:减少必填参数
  4. 严格验证:不要盲目信任大模型的输出
  5. 错误消息:帮助大模型纠正错误
  6. 调用示例:展示成功案例
  7. 类型安全:使用 TypeScript 接口

输出检查清单

  • 已定义 JSON 架构
  • TypeScript 接口
  • 使用 Zod 进行验证
  • 实现函数
  • 错误处理
  • 调用示例(至少 3 个)
  • 工具注册表条目
  • 文档

评论

支持 Markdown