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

背景

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

INFO

这里讲述一下我踩的坑。


1. 合理选择 Spring AI 的依赖

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

首先说一下我用的依赖:

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

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

WARNING

注意不要选择类似于下面这个:

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

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


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

这个我问 AI 是问不出的,啥 b AI 只会在本地注册 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
  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"
            }
        }
    }
}

TIP

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

注入方式

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

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

DANGER

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


📝 总结

然后就没有然后啦。

Last Updated 7/19/2026, 1:55:12 PM