SpringAI MCP学习

0

最近几年AI大模型非常火,所以现在MCP非常火,对模型进行统一管理,主要是能够自定义一些提示功能引导模型正确输出。
刚好最近SpringAI推出了1.0.0版本,所以做了一些简单研究。

这里有个自己写的简单项目:https://gitee.com/acgist/mcp

下面是一些官方文档:

https://docs.spring.io/spring-ai/reference/index.html
https://docs.spring.io/spring-ai/reference/concepts.html

https://docs.spring.io/spring-ai/reference/api/index.html
https://docs.spring.io/spring-ai/reference/api/chatclient.html
https://docs.spring.io/spring-ai/reference/api/embeddings.html

https://docs.spring.io/spring-ai/reference/api/chat-memory.html

https://docs.spring.io/spring-ai/reference/api/vectordbs.html
https://docs.spring.io/spring-ai/reference/api/etl-pipeline.html
https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html

https://docs.spring.io/spring-ai/reference/api/mcp/mcp-overview.html
https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html
https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html

https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html
https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html

https://docs.spring.io/spring-ai/reference/api/structured-output-converter.html

https://docs.spring.io/spring-ai/reference/api/testing.html

https://modelcontextprotocol.io/docs/getting-started/intro
https://modelcontextprotocol.io/specification/2025-06-18/server/tools
https://modelcontextprotocol.io/specification/2025-06-18/server/prompts
https://modelcontextprotocol.io/specification/2025-06-18/server/resources

当然也可以看中文文档,不过更新可能稍慢一点:

https://docs.springframework.org.cn/spring-ai/reference/index.html

这里记录几个问题

流式stream响应返回tool调用参数而不是直接返回结果

这个问题其实就是大模型返回时也是流式的,导致SpringAI不能判断是否需要调用tool,这个建议就是使用官方推荐的部署方式。
我这里使用的是ollama版本太低导致的,升级到最新的0.10.1使用llama3.1模型就没问题了。

提示deepseek-r1 does not support tools

标签显示deepseek是支持tool的,但是使用ollama部署就是不会调用,包括qwen2.5也是一样,感觉可能换一个模型部署工具就好了,但是没有验证。

配置tool后直接没有相关性的时候也会调用没有声明的tool导致直接返回调用参数

使用ollamallama3.1发现调用声明的tool没问题,但是每次必然调用tool且没有相关性,导致直接返回调用参数问题。
后来改用deepseek在线版本发现就没问题了,我发现这个模型选择非常重要。
使用国外的模型还经常都会返回英文。