关于AI开发的那些事(智能旅游规划)

背景

单纯只是一个外包,单纯的AI调用MCP,随便微信登录和微信支付,再简单生成一下PDF,没啥技术含量,都被做烂的东西了。这里讲述一下我踩的坑。


1. 合理选择Spring AI的依赖

SpringAI的依赖是有很多种类的,如果你要使用alibaba的模型,可以使用SpringAI alibaba,即使他兼容openAI格式

首先说一下我用的依赖

implementation("com.alibaba.cloud.ai:spring-ai-alibaba-starter-dashscope:1.0.0.4")

这个依赖是可以直接使用alibaba的dashscope模型的。

注意不要选择类似于

implementation("com.alibaba.cloud.ai:spring-ai-alibaba-starter:1.0.0")

这个依赖你启动的时候,你控制台会输出一大堆报错喵,如果你没有连接上nacos


2. 怎么注入node起的MCP服务到Chat??

这个我问AI是问不出的,啥bAI只会在本地注册MCP tools然后注入Chat。

我们直接去看Spring AI alibaba到样例代码

地址: https://github.com/spring-ai-alibaba/examples/tree/main/spring-ai-alibaba-mcp-example/spring-ai-alibaba-mcp-starter-example/client/mcp-stdio-client-example/src/main/resourcesopen in new window

配置文件示例

application.yml:

spring:
  application:
    name: mcp
  main:
    web-application-type: none
  ai:
    dashscope:
      api-key: ${AI_DASHSCOPE_API_KEY}
    mcp:
      client:
        stdio:
          servers-configuration: classpath:/mcp-servers-config.json
          # 直接配置
          # connections:
          #   server1:
          #     command: java
          #     args:
          #       - -jar
          #       - /Users/xiadong/mcp-stdio-server-exmaple-0.0.1-SNAPSHOT.jar  # 放一个绝对路径,修改为server jar包所在位置
  mandatory-file-encoding: UTF-8

mcp-servers-config.json:

{
    "mcpServers": {
        "amap-maps": {
            "command": "npx",
            "args": [
                "-y",
                "@amap/amap-maps-mcp-server"
            ],
            "env": {
                "AMAP_MAPS_API_KEY": "您在高德官网上申请的key"
            }
        }
    }
}

这样写之后 在启动SpringBoot的时候会启动MCP服务

注入方式

然后就是注入问题,我这边是每次请求都是一个新的Chat,所以我是这样写的

Flux<ChatResponse> responseFlux = chatClientBuilder.build()
                    .prompt()
                    .user(prompt)
                    .toolCallbacks(toolCallbackProvider)
                    .stream()
                    .chatResponse();

⚠️ 注意: 如果你每次都在请求的时候在chat.Budlder()中注入toolCallbacks(toolCallbackProvider),那么在多次请求之后会引发MCP重复注册的问题


然后就没有然后啦。

Last Updated 10/16/2025, 2:49:43 PM