| CARVIEW |
?O???@?\?Ƃ̘A?g??MCP?ւ̓W?J?\?\Tool Calling?̊?b??Spring AI?ŗ????????FSpring AI?Ŏn?߂鐶??AI?v???O???~???O?i8?j
Java?~Spring AI?Ŏn?߂?AI?v???O???~???O?̓???A?ځB?O??܂ł?RAG?i?????g???????j?𗘗p????AI?V?X?e???̍\?z?ɂ??Đ??????Ă??܂????B????́ALLM?????????ł͑Ή??ł??Ȃ??O???@?\???Ăяo????@?Ƃ??āASpring AI??Tool Calling??MCP?ɂ??ĉ?????܂??B
???̋L???͉??????ł??B????o?^?i?????j????ƑS?Ă????????????܂??B
?A?ځFSpring AI?Ŏn?߂鐶??AI?v???O???~???O
?{?A?ڂ̃T???v???R?[?h??GitHub?Ō??J???Ă??܂??B??????????_?E?????[?h???Ă݂Ă????????B
?ڎ?
?O???@?\?Ƃ̘A?g?iTool Calling?j
?@?O???@?\?A?g?iFunction Calling?܂???Tool Calling?j?Ƃ́ALLM?i??K?͌??ꃂ?f???j?̒m???x?[?X?␄?_?\?͂????ł͑Ή??ł??Ȃ????????A?O???V?X?e???Ɛڑ????邱?ƂŎ???????d?g?݂ł??B?ď̂̓x???_?[?ɂ???ĈقȂ?܂????A?{?e?ł?Spring AI?̌????h?L???????g?ɏ????āuTool Calling?v?Ƃ????p??ɓ??ꂵ?Đ??????܂??B
?@Tool Calling?𗘗p???邱?ƂŁA?Ⴆ???A???^?C?????̎擾?i?V?C?A?בւȂǁj??O???V?X?e???̐???i?A???[???ݒ?A?ʒm???M?Ȃǁj???\?ɂȂ?܂??BTool Calling?́A?ꌩ????RAG?iRetrieval-Augmented Generation?j?Ǝ??Ă???_??????܂??B?ǂ????LLM?̒m?????g??????Ƃ????Ӗ??ł́uLLM???ƘA?g????v?A?v???[?`?ł????A???̐????Ɠ???t?F?[?Y???قȂ?܂??B
RAG??Tool Calling?̈Ⴂ
?@RAG??Tool Calling?̈Ⴂ?́AAI?ł̎???`?̃v???Z?X?ɖڂ???????Ɨ????ł??܂??i?}1?j?B
?@RAG?́A??Ɂu?v?????v?g?\?z?v?i?K?ŋ@?\???܂??B???[?U?[?̎???ɑ??āA?֘A?h?L???????g?????????A???????v?????v?g?ɓ??????邱?ƂŁALLM?????K?ȕ???????ɉ??ł???悤?ɂ??܂??B????ATool Calling?́u???_?t?F?[?Y?iLLM???v?l???j?v?ō?p???܂??BLLM?͉????钆?ŕK?v?ɉ????ăc?[?????Ăяo???A???̌??ʂ?????̏o?͂Ɏ?????܂??B
Tool Calling???g???Ă݂?
?@?ł͑????A?T???v???R?[?h???쐬???Ȃ???ATool Calling?̊?{?𗝉????Ă????܂??B
?m1?n?????̓??t????V?C???擾???郁?\?b?h???쐬????
?@Spring AI?ŁATool Calling?̂??߂̃??\?b?h???`????̂͊ȒP?ł??B?Ⴆ?u?????̓V?C?́v?Ƃ???????́A?u?????Ƃ͋?̓I?ɉ??????v?Ɓu?w?肳?ꂽ???̓V?C?́v?Ƃ???2?̎???ɕ???????ƍl?????܂??B?????ŁA????2?̎???ɓ????郁?\?b?h?????X?g1?̂悤?ɍ???Ă????܂??B
// ?ȗ?
import org.springframework.ai.tool.annotation.Tool;
public class SimpleTools {
// ?ȗ?
// (1) @Tool ?łǂ̂悤?Ȏ??Ɏ??s????邩?????
@Tool(description = "???݂̓??t???擾???܂??B?????⌻?ݎ????Ȃǂ̏??????߂?ꂽ?Ƃ??ɒl????܂?")
public String getCurrentDate(){
String date = java.time.LocalDate.now().toString();
return date;
}
// (2) ???????g???ă??\?b?h???쐬????
@Tool(description = "?^????ꂽ???t(YYYY-MM-DD?`??)????A?V?C??????܂?")
public String getWeatherInfo(String date){
// ???ۂɂ́A?????œV?CAPI?Ȃǂ????s???Ď擾????B???̂??߂ɂ͈ʒu?????K?v?ł????A?????ł͏ȗ????܂?
return "????";
}
// ?ȗ?
}
?@?i1?j???A?u?????Ƃ͋?̓I?ɉ??????v?Ƃ????????擾???邽?߂̃??\?b?h?ł??B???\?b?h???̂??̂͒ʏ?̍\???ŕ\???܂????A@Tool?A?m?e?[?V??????t?^???Ă???_???|?C???g?ł??B@Tool?́AAI???f???ɑ??āA???̃c?[???i???\?b?h?j?̋@?\??`???܂??B
?@?????āA?i2?j???u?w?肳?ꂽ???̓V?C?v????郁?\?b?h?ł??B???̃??\?b?h?́AAI???f???????????͂??A?K?v?Ȉ????i???t?j???????Őݒ肵?ČĂяo???܂??B?????ł͌Œ?̕??????Ԃ??Ă??܂????A???ۂ̗??p?V?[???ł́A?O??API?????s???ē??I?ȏ????擾????悤?ȏ????????邱?ƂɂȂ?ł??傤?B
?m2?n?쐬???????\?b?h???g????悤?ɂ???
?@?????āA?m1?n?œo?^???????\?b?h???????悤?ɓo?^???Ă????܂??傤?i???X?g2?j?B
@ShellComponent
public class ToolCommand {
// ?ȗ?
public ToolCommand(ApplicationContext context) {
this.context = context;
client = ChatClient.builder(context.getBean(ChatModel.class))
// (1)?쐬?????c?[????o?^????
.defaultTools(new SimpleTools())
.build();
}
}
?@ChatClient?̃C???X?^???X???쐬????ہA?i1?j??defaultTools???\?b?h?ɁA??ق?@Tool?A?m?e?[?V??????t?^???????\?b?h??????SimpleTools?N???X?̃C???X?^???X??o?^???܂??B???̐ݒ???s???????ŁAChatClient??ʂ???API???p???Ƀc?[?????????I?ɍl???????悤?ɂȂ?܂??B
?m3?n?T???v???????s????
?@?T???v???R?[?h?????s????ƁA?ȉ??̂悤?Ȍ??ʂ??????܂??B
shell:>tool-query ?????̓V?C?? ?????̓V?C?͐???ł??B shell:>tool-query ?????̓V?C?? ?????̓V?C?͐???ł??B shell:>tool-query ?????͉????ł??̓V?C?? ??????2025?N11??15???ŁA?V?C?͐???ł??B
?@?????ŋ????[???̂??A?u?????v?Ɠ??͂????ꍇ??LLM?̓???ł??BLLM?͂܂??A????ɓ????邽?߂?getCurrentDate???\?b?h?̎??s???K?v?ł???Ɣ??f???A???s???w?????܂??B
?@???ɁA???̌??ʁi?????̓??t?j?ƁA???̎???i?v?????v?g?j?Ɋ܂܂??u?????v?Ƃ??????A??????2025?N11??15???i???ۂɂ͍????̓??t?ɂ???ĕς??܂??j?Ɠ??肵?܂??B?????āA???̓??t???????Ƃ???getWeatherInfo???\?b?h?????s????킯?ł??B
?@???̂悤?ȁALLM?̎????I?Ȕ??f?ƁA????Ɋ?Â????????i?c?[?????s?j?̘A?g???????ATool Calling?̃????b?g?ł??B
MCP?̗??p
?@Tool Calling?̊T?O??????ɔ??W?????AAI?ƊO???V?X?e???̘A?g??W?????^?g???????d?g?݂Ƃ???MCP?iModel Context Protocol?j??????܂??i?}2?j?BMCP?́A???݂?AI?V?X?e???ɂ?????g?????h?̈?Ƃ????????r?I?V?????T?O?ł??B????܂ł̃??[?J???ȃc?[???Ăяo???iTool Calling?j????A?l?b?g???[?N?o?R?ł̊O???T?[?r?X?̋@?\?A?g???\?ɂ??A???g?????̍???AI?V?X?e???\?z???x?????܂??B
?@???̂悤?ȋ@?\?g???̈Ⴂ?́A?Z?p?I?ȑ??ʂ????łȂ??A?s??i?}?[?P?b?g?j?◘?p?҂??猩???j?[?Y?ɂ??ω????????炷?\????????܂??B?Ⴆ?A????܂Łi?}3???j?́A?J???҂?AI?V?X?e???S?̂𗝉????A???̒??Ńc?[?????Ăяo???V?X?e?????\?z????K?v??????܂????B?r?W?l?X?ʂł́ATool Calling?????s????V?X?e???҂?AI??API???p???????x?????K?v??????܂????B
?@???????AMCP?Ƃ???AI???ɊO???T?[?r?X?̋@?\????邾???Ȃ?i?}3?E?j?A?J???҂?AI?V?X?e???̐??m?????قƂ?Ǖs?v?ɂȂ?܂??B?܂??A?O???T?[?r?X???p??????AI???g?????p?҂??x?????P?[?X???z?肳??邽?߁A?V?X?e???ґ??̓R?X?g?????܂?C?ɂ????AAI?ƊO???V?X?e???̓??????????ł???悤?ɂȂ?܂??B
MCP?T?[?o???쐬????
?@MCP?T?[?o?ɂ?HTTP?v???g?R?????g???^?C?v?ƁA?R?}???h?N???̃^?C?v??????܂??B?????ł?Tool Calling?Ƃ̗ގ????𗝉????₷???R?}???h?N???^?iSTDIO?j??MCP?T?[?o?ɂ??Đ??????܂??B
?m1?n?ˑ??W??ݒ肷??
?@MCP?T?[?o?͏]???̃v???O?????Ƃ͕ʃv???O?????ƂȂ邽?߁A?v???W?F?N?g???Đ??????Ă??܂??B?܂??A?K?v?Ȉˑ??W?̐ݒ?̓??X?g3?̂悤?ɂȂ?܂??B
dependencies {
implementation("org.springframework.ai:spring-ai-starter-mcp-server")
// Web?͂??Ȃ????A?ˑ??????̂??߂ɕK?v
implementation("org.springframework.boot:spring-boot-starter-web")
}
?@MCP?T?[?o?̋@?\???̂?org.springframework.ai:spring-ai-starter-mcp-server?Œ???܂????Aspring-boot-starter-web?܂???spring-boot-starter-web-flux?????̈ˑ??????̂??߂ɕK?v?ɂȂ?܂??B?????̈ˑ??W?̈Ⴂ?ɂ??Ă͎???Ő??????܂??B
?m2?n?A?v???̊?{?????`????
?@?????āAapplication.properties?Ƀ??X?g4?̂悤?Ȑݒ??lj????܂??B
spring.main.web-application-type=none // (1) Web?A?v???P?[?V?????Ƃ??ċN?????Ȃ? spring.main.banner-mode=off // (2) ???S???\?? spring.ai.mcp.server.stdio=true // (3) STDIO(?R?}???h?^)?Ƃ??ċ@?\??? spring.ai.mcp.server.name=my-mcp-server // (4) MCP?Ƃ??čD???Ȗ??O spring.ai.mcp.server.version=0.0.1 // (5) ?o?[?W?????ԍ?
?@?i2?j?́A?N??????Spring Boot?̃??S?Ȃǂ̕s?v?ȃ??O?\????}?????邽?߂̐ݒ?ł??B????́AMCP?@?\??STDOUT?i?W???o?́j???g?????߁A?@?\?ɊW?Ȃ????O?o?͂???????Ȃ??悤?ɂ??邽?߂ł??B???????A???S?Ƀ??O?o?͂??????Ă??܂??ƃf?o?b?O???ɕ?????ɂ??????߁A?T???v???R?[?h???̃??O?o?͐ݒ?ilogback.xml?Ȃǁj???Q?l?ɂ??Ă????????B
?@?i4?j?i5?j?́AMCP?T?[?o?̃??^???ł??B???̏??i?T?[?o?̖??O?ƃo?[?W?????j?́AMCP?𗘗p????N???C?A???g???ɒ????Ǘ????ƂȂ?܂??B
?m3?n?@?\??????????
?@MCP?Œ???@?\?́ATool Calling?ŗ??p?????R?[?h?Ɠ????悤?ɕ\???܂??i???X?g5?j?B
import org.springframework.ai.tool.annotation.Tool;
// (?ȗ?)
public class SimpleService {
@Tool(description = "???݂̓??t???擾???܂??B?????⌻?ݎ????Ȃǂ̏??????߂?ꂽ?Ƃ??ɒl????܂?")
public String getCurrentDate(){
String date = java.time.LocalDate.now().toString();
return date;
}
@Tool(description = "?^????ꂽ???t(YYYY-MM-DD?`??)????A?V?C??????܂?")
public String getWeatherInfo(String date){
// ?????ł́ATool-Calling?Ɠ??????K???قȂ?悤?ɈӐ}?I?ɕς??Ă??܂?
return "?܂?";
}
}
?@???̂??Ƃ?????ATool Calling??MCP?͔??Ɏ??Ă???Ƃ??????Ƃ???????܂??B
?m4?n????@?\?????J????
?@?m3?n?ō쐬????SimpleService?N???X???AMCP?T?[?o??œ??삷??@?\?Ƃ??Ē??܂??i???X?g5?j?B
@Configuration
public class McpConfiguration {
@Bean
// (1) Bean?Ƃ??Č??J????
public ToolCallbackProvider simpleTools() {
return MethodToolCallbackProvider.builder()
// (2) [2]?ō쐬?????N???X??o?^
.toolObjects(new SimpleService())
.build();
}
}
?@?i1?j?̂悤?ɁA@Bean?A?m?e?[?V??????t?^????ToolCallbackProvider?^?Œ?`???邱?ƂŁA???̃??\?b?h?͎????I??MCP?T?[?o?̌??J?@?\?Ƃ??Ē???܂??B???J???????@?\???܂ރN???X?́A?i2?j?̂悤??MethodToolCallbackProvider?𗘗p???āASimpleService?̃C???X?^???X??toolObjects?ɓo?^???邾????OK?ł??B
?`???b?g?v???O?????????痘?p????
?@Spring AI?ō\?z????MCP?T?[?o?@?\???A????܂ł?ChatClient???痘?p?ł???悤?ɐݒ肵?܂??BMCP?N???C?A???g?@?\???g?????ƂŁAMCP?T?[?o??????O???@?\???A?`???b?g?v???O?????̒????瓧?ߓI?ɌĂяo????悤?ɂȂ?܂??B
?m1?n?ˑ??W??lj?????
?@?܂??A?r???h?t?@?C???ibuild.gradle.kts?j??MCP?N???C?A???g?p?̈ˑ??W??lj????܂??i???X?g6?j?B
dependencies {
implementation("org.springframework.ai:spring-ai-starter-mcp-client")
}
?@???̈ˑ??W??lj????邱?ƂŁAMCP?T?[?o?ƒʐM???邽?߂̃N???C?A???g?@?\?????p?\?ɂȂ?܂??B
?m2?nMCP?T?[?o??o?^????
?@?????āAMCP?N???C?A???g?@?\??L???ɂ???ƂƂ??ɁAMCP?T?[?o????o?^???邽?߂̐ݒ??lj????܂??i???X?g7?j?B
spring.ai.mcp.client.enabled=true // (1) spring.ai.mcp.client.stdio.servers-configuration=classpath:mcp-server.json // (2)
?@?i1?j??enabled??true??ݒ肷?邱?Ƃ?Spring Boot??MCP?N???C?A???g?Ƃ??ĕK?v?Ȋ????????I?ɐݒ肵?܂??B?????āA?i2?j??MCP?T?[?o?Ɋւ???????w?肵?܂??B???ۂ?MCP?T?[?o?̏??́A???X?g8?̒ʂ?ł??B
{
"mcpServers": {
"filesystem": {
"command": "java",
"args": [
"-jar",
"<path_to_mcp_jar_file>/mcp-0.0.1.jar"
]
}
}
}
?@???̐ݒ?́A?`???b?g?v???O?????̋N?????ɁA?ȉ??̃R?}???h?????s????MCP?T?[?o???N?????邱?Ƃ??Ӗ????܂??B<path_to_mcp_jar_file>?ɂ́AMCP?T?[?o?v???W?F?N?g?Ńr???h????JAR?t?@?C???imcp-0.0.1.jar?j?̐?p?X?܂??͑??p?X???w?肵?Ă????????B
java -jar <path_to_mcp_jar_file>/mcp-0.0.1.jar
?m3?nChatClient????g????悤?ɂ???
?@Tool Calling?Ɠ????悤??MCP?T?[?o?̋@?\?𗘗p?ł???悤?ɂ???ɂ́AChatClient?C???X?^???X???쐬????ۂɖ????I?ɓo?^????K?v??????܂??i???X?g9?j?B
@ShellComponent
public class McpCommand {
// (?ȗ?)
// (1) ToolCallbackProvider?́ASpring AI???Ŏ????I?ɍ쐬?????
public McpCommand(ApplicationContext context, ToolCallbackProvider tools) {
this.context = context;
client = ChatClient
.builder(context.getBean(ChatModel.class))
// (2) MCP?Ŏg????@?\??o?^????
.defaultToolCallbacks(tools)
.build();
}
// (?ȗ?)
}
?@?i1?j?̃R???X?g???N?^?????iToolCallbackProvider?j?́AMCP?N???C?A???g???A?ݒ?t?@?C???imcp-server.json?j?Ɋ?Â??A?O????MCP?T?[?o????擾?????c?[???Q???????I?ɐ??????ASpring??DI?R???e?i?ɓo?^???܂??B???????????ꂽToolCallbackProvider???A?i2?j?̂悤??defaultToolCallbacks???\?b?h?ɓo?^????ΐݒ?͊????ł??B?????ō쐬????ChatClient??ʂ??ăv?????v?g?????s????ƁAAI???f?????K?v???Ɣ??f?????ꍇ?Ɏ????I??MCP?T?[?o?̋@?\?????p????܂??B
?m4?n?T???v???????s????
?@???ۂɃT???v???????s???Ă݂܂??傤?B?`???b?g?R?}???h?Ȃǂ???ChatClient???g???ă??b?Z?[?W?𑗂?ƁAAI???f???ɂ?鏈???̓r???ŁA?K?v?ɉ????Ď????I??MCP?T?[?o??̋@?\?Ƀ??N?G?X?g???]??????܂??B?????āA???̋@?\????Ԃ??ꂽ?ŐV?̏??⏈?????ʂ?????ĉ?????????܂??B
shell:>tool-query ?????͉????ł??̓V?C?? ??????2025?N11??15???ŁA?V?C?͓܂?ł?
?@???̂悤?ɁA?????̒ʐM?v???g?R??????s???Ƃ??????ׂ????????͈قȂ?܂????ATool Calling?ł?MCP?ł??A???ۂɖʓ|?ȘA?g??????Spring AI???????肵?Ă???邽?߁A?J???҂͂قƂ?Ǔ??????@?ŊO???@?\?𗘗p???邱?Ƃ??ł??܂??B
?@???݂͂܂??Z?p?I?ɂ??n?[?h????????????????????̂́A?????I?ɂ?AI?u???E?U?iAI?G?[?W?F???g?j?̕??y?ɔ????AMCP??IT?C???t???Ƃ??ĕW?????????\????????܂??B????ɂ??AAI???p?R?X?g???l?b?g???[?N??p?̂悤?Ȋ?ƃC???t????p?ւƈڍs???AAI???{?i?I?Ɋ?ƃ??x???ŕ??y???邽?߂̉??n???????Ă??????ƂɂȂ?ł??傤?B
?܂Ƃ?
?@????́ATool Calling????MCP?܂ł̎d?g?݂◬???c?????܂????B???̂??ߊJ?????̍\?z?ȂǍׂ??????????ȗ????܂??????A????͊J?????̍\?z???܂߂?MCP?T?[?o?????[???@?艺???Ă????܂??B
?M?ҏЉ?
WINGS?v???W?F?N?g
?L????? WINGS?v???W?F?N?g???^?c????A?e?N?j?J?????M?R?~???j?e?B?[?i??\?R?c?ˊ??j?B???Web?J??????̏??Ё^?L?????M?A?|??A?u?????L????|????B2021?N10?????_?ł̓o?^?????o?[??55?l?ŁA???݂????M?????o?[???W???B?????̂?????́A?ǂ??ǂ????咸???????B?????A?L???????B
?E?T?[?o?[?T?C?h?Z?p?̊w?ю? - WINGS?ihttps://wings.msn.to/?j
?ERSS?ihttps://wings.msn.to/contents/rss.php?j
?EX: @WingsPro_info?ihttps://x.com/WingsPro_info?j
?EFacebook?ihttps://www.facebook.com/WINGSProject?j
Copyright © ITmedia, Inc. All Rights Reserved.
?A?C?e?B???f?B?A????̂??m?点
??IT eBook
?ҏW??????̂??m?点
RSS?ɂ???
?A?C?e?B???f?B?AID?ɂ???
???[???}?K?W???o?^
??IT?̃??[???}?K?W???́A ???????A???ׂĖ????ł??B???Ѓ??[???}?K?W???????w?ǂ????????B
ITmedia?̓A?C?e?B???f?B?A??????Ђ̓o?^???W?ł??B
???f?B?A?ꗗ | ????SNS | ?L???ē? | ???₢???킹 | ?v???C?o?V?[?|???V?[ | RSS | ?^?c??? | ?̗p??? | ??????








