关于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 的样例代码:
配置文件示例
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 重复注册的问题。
📝 总结
然后就没有然后啦。
