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