You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Spring AI MCP工具,让LLM主动请求缺失必填参数?

问题描述

使用Spring AI 1.1.0-M3搭建MCP服务器,对外提供搜索内部联系人的工具,工具代码简化如下:

public class myTool {

    @McpTool(
        name = "searchContacts",
        description = "Search contacts by first name, last name, email, and phone."
    )
    public List<Contact> execute(ContctDTO request) throws Exception {
        log.info("Executing search contacts with args: {}", request);

        return List.of(ContattoDTO.builder()
            .name("name")
            .surname("surname")
            .email("email@example.com")
            .phone("1234567890")
            .build());
    }

}

public class ContactDTO {
    @NotBlank private String name;
    @NotBlank private String surname;
    @NotBlank private String email;
    @NotBlank private String phone;
}

当前遇到的问题:在OpenAI Playground或MCPJAM中,LLM调用该工具时,若用户请求缺少部分参数,工具会自动用空字符串填充,而非询问用户补充缺失值。需求是让LLM在调用工具前,提示用户提供所有未填写的必填参数。

解决方案

1. 启用参数引导(Elicitation)的核心配置

Spring AI MCP的参数引导功能依赖工具元数据与LLM的工具调用能力,需完成以下配置:

  • 强化DTO的参数约束标记:虽然使用了@NotBlank注解,仍需补充Spring AI的@Parameter注解明确参数的必填性与描述,确保MCP服务器能将这些约束传递给LLM:
    public class ContactDTO {
        @NotBlank
        @Parameter(description = "联系人的名字(必填)", required = true)
        private String name;
        
        @NotBlank
        @Parameter(description = "联系人的姓氏(必填)", required = true)
        private String surname;
        
        @NotBlank
        @Parameter(description = "联系人的邮箱(必填)", required = true)
        private String email;
        
        @NotBlank
        @Parameter(description = "联系人的电话(必填)", required = true)
        private String phone;
        
        // 补充Getter和Setter方法
    }
    
  • 更新工具注解描述:在@McpTool的description中明确标注每个参数为必填,帮助LLM理解约束:
    @McpTool(
        name = "searchContacts",
        description = "根据必填的名字、姓氏、邮箱、电话搜索联系人"
    )
    

2. 配置MCP服务器的工具调用策略

在Spring AI MCP服务器的配置类中,创建ToolCallingConfig Bean并启用参数引导:

@Configuration
public class McpConfig {
    @Bean
    public ToolCallingConfig toolCallingConfig() {
        return ToolCallingConfig.builder()
            .enableElicitation(true) // 启用参数引导
            .build();
    }
}

该配置会让MCP服务器在生成工具调用请求前检查必填参数,若发现缺失则触发LLM向用户索要补充信息。

3. 无需单独构建MCP客户端

不需要额外构建MCP客户端,只要确保OpenAI Playground或MCPJAM正确连接到你的MCP服务器,工具的元数据(包括必填参数信息)会自动传递给LLM。LLM会依据这些约束判断是否需要向用户询问缺失的参数。

4. 代码修正建议

修正工具类中的拼写错误(ContctDTO → ContactDTO,ContattoDTO → ContactDTO),确保代码可正常运行:

public class MyTool {

    @McpTool(
        name = "searchContacts",
        description = "根据必填的名字、姓氏、邮箱、电话搜索联系人"
    )
    public List<ContactDTO> execute(ContactDTO request) throws Exception {
        log.info("Executing search contacts with args: {}", request);

        return List.of(ContactDTO.builder()
            .name("name")
            .surname("surname")
            .email("email@example.com")
            .phone("1234567890")
            .build());
    }
}

内容的提问来源于stack exchange,提问作者gs fs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 05:12:45