该项目展示了如何在 Spring Boot 应用程序中集成 Spring AI 对 MCP(模型上下文协议)的支持,涵盖服务器端和客户端实现。
MCP 是一个标准,简化了 AI 模型中上下文交互的管理,使与外部数据源和工具的一致集成成为可能。
Spring AI MCP 扩展了 MCP Java SDK,并提供了专门针对客户端和服务器的 Spring Boot 启动器。
MCP 客户端负责与 MCP 服务器的通信和连接管理。
在此项目中,我们利用 Spring AI 构建 MCP 服务器,使其功能可供大语言模型(LLMs)使用。请注意,需要使用支持 TOOLS 的模型;我们通过 Ollama 使用 Llama3.2。
该项目由三个主要模块组成:
public interface Geocoder {
GeoCodeResult geocode(String city) throws Exception;
}
public record GeoCodeResult(double latitude, double longitude) {}
public interface TimeZoneService {
Optional<TimeZone> getTimeZoneFromLocation(double latitude, double longitude) throws Exception;
}
public record TimeZone(
String id,
String name,
int rawOffset,
int dstSavings
) {}
@Bean
CommandLineRunner runner(final ChatClient.Builder chatClientBuilder, List<ToolCallback> toolCallbacks) {
final ChatClient agent = chatClientBuilder.build();
return args -> {
try (Scanner scanner = new Scanner(System.in)) {
while (true) {
System.out.print("\n\n请输入城市(或输入 'exit' 退出): ");
String city = scanner.nextLine();
if ("exit".equalsIgnoreCase(city)) {
break;
}
String queryTemplate = """
请使用可用工具查找城市 `{city}` 的经纬度。一旦获得这些信息,请使用工具确定并提供该位置的所有时区详情,且使用相同的语言。
""";
String systemTemplate = """
你是一个专长于提供地理信息的人工智能助手。你的任务是使用提供的工具收集并传递准确的数据。
""";
String llmResponse = agent
.prompt()
.advisors(new SimpleLoggerAdvisor())
.system(systemSpec -> systemSpec.text(systemTemplate))
.user(userSpec -> userSpec.text(queryTemplate).param("city", city))
.tools(toolCallbacks)
.call()
.content();
log.info("\n\n{}", llmResponse);
}
}
};
}
启动地理编码服务:
cd geocoder
mvn spring-boot:run
启动时区服务:
cd timezone
mvn spring-boot:run
启动 MCP 主机:
cd mcp-host
mvn spring-boot:run
插入图片
