【Spring AI Alibaba技术详细解析】Java生态企业级AI应用开发全指南

【Spring AI Alibaba技术详细解析】Java生态企业级AI应用开发全指南

文章目录

目录

若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:[email protected]

在大模型技术席卷企业级应用的浪潮中,Java生态长期面临“AI开发工具碎片化、国内大模型适配复杂、企业级特性缺失”三大痛点。Spring AI Alibaba的开源(2024年9月正式发布),为Java开发者提供了一站式解决方案——它以Spring AI为基础底座,深度集成阿里云通义千问、百炼平台及阿里系中间件,补齐了智能体编排、可视化调试、服务治理等企业级能力,让Java开发者能像开发REST API一样高效构建生产级AI应用。

本文从核心定位、技术架构、核心组件、实战落地、高级特性、选型对比、常见问题七大维度,结合官方文档与企业级实践案例,系统拆解Spring AI Alibaba的技术内核与落地路径,全文约1.2万字,兼顾深度与实用性,适合中高级Java开发者、AI架构师及企业级应用研发人员参考。

在这里插入图片描述

一、核心信息总览

项目维度具体内容
技术定位开源企业级AI Agent开发框架,基于Spring AI构建,深度集成阿里云生态,提供智能体编排、RAG检索、模型适配、工具调用等全栈能力
核心价值1. 国内生态适配:一键对接通义千问、通义万相等国内主流大模型;2. 企业级特性:内置限流、熔断、可观测性、分布式部署能力;3. 智能体编排:Graph框架支持工作流与多智能体协作;4. 生态无缝集成:兼容Spring Boot/Spring Cloud Alibaba,对接Nacos、OSS、Lindorm等阿里系服务;5. 易用性优化:提供Studio可视化调试、低代码初始化平台、丰富示例工程
技术依赖基础依赖:Spring Boot 3.x、Spring AI 1.x、JDK 17+;生态依赖:阿里云百炼平台、Nacos 3.0+、Lindorm/OpenSearch(向量存储)、ARMS(可观测);核心组件依赖:DashScope SDK、MCP协议解析库
适用场景企业级RAG智能问答、多智能体协作系统、NL2SQL数据查询、工作流自动化(如会议纪要、报告生成)、多模态应用(图文生成)、存量系统AI赋能(MCP工具集成)
版本现状最新稳定版1.0.0.2(2025年8月发布),支持Spring Boot 3.2+、Spring Cloud Alibaba 2023.0.x,社区活跃度170+贡献者,GitHub Star持续增长
核心优势相比原生Spring AI:增强企业级服务治理与智能体编排;相比Python生态(LangGraph/LangChain):贴合Java技术栈,无需跨语言协作;相比其他Java AI框架:深度绑定阿里云生态,落地成本更低

二、核心技术原理:架构设计与运行机制

Spring AI Alibaba的核心设计理念是“抽象统一+生态增强”——基于Spring AI的标准化API抽象,补充阿里云生态适配与企业级能力,形成“基础层-核心层-应用层”的三层架构,同时通过Graph框架实现复杂流程编排。

2.1 整体架构分层

┌─────────────────────────────────────────────────────┐ │ 应用层(Application Layer) │ │ (业务代码:ChatBot、RAG、多智能体、Workflow等) │ └─────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────┐ │ 核心层(Spring AI Alibaba Core) │ │ ┌─────────────┬─────────────┬─────────────┬─────────┐ │ │ │ ChatClient │ Graph框架 │ 核心组件 │ 服务治理 │ │ │ │ (模型调用) │ (流程编排) │ (RAG/工具等)│ (限流/熔断) │ │ │ └─────────────┴─────────────┴─────────────┴─────────┘ │ └─────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────┐ │ 适配层(Adapter Layer) │ │ ┌─────────────────┬─────────────────┬─────────────┐ │ │ │ 阿里云模型适配 │ 阿里中间件适配 │ 标准协议适配 │ │ │ │ (通义/百炼) │ (Nacos/OSS等) │ (MCP/OTel) │ │ │ └─────────────────┴─────────────────┴─────────────┘ │ └─────────────────────────────────────────────────────┘ 
各层核心职责
  1. 应用层:开发者基于框架提供的API构建业务逻辑,无需关注底层模型调用、流程编排细节;
  2. 核心层:框架核心能力集合,包括模型调用抽象、智能体编排、RAG工具链、服务治理等,是差异化竞争力的核心;
  3. 适配层:屏蔽底层依赖差异,实现“一键切换模型/服务”,同时对接阿里云生态与标准协议,保障兼容性。

2.2 核心设计理念

  1. 模型无关性:通过ChatClient抽象统一不同模型的调用接口,切换通义千问、OpenAI、Ollama时无需修改业务代码;
  2. 云原生对齐:遵循Spring Cloud Alibaba设计规范,支持服务注册发现(Nacos)、配置中心(Nacos)、可观测性(ARMS)等云原生特性;
  3. 流程编排可视化:Graph框架借鉴LangGraph设计思想,将复杂业务流程抽象为“节点-边-状态”的图结构,支持可视化编排与调试;
  4. 渐进式开发:支持“低代码(Studio)→高代码(API开发)→零代码(智能规划)”三种开发模式,适配不同复杂度场景。

2.3 关键运行机制

2.3.1 模型调用流程

以通义千问调用为例,核心流程分为4步:

  1. 开发者通过ChatClient提交Prompt(支持系统提示词、用户消息、工具结果等);
  2. 框架通过DashScopeChatModel将Prompt标准化为模型可识别的格式,并应用配置的参数(TopP、温度等);
  3. 通过阿里云百炼平台API发送请求,内置重试机制处理网络抖动、服务限流等异常;
  4. 接收模型响应,支持同步返回、异步回调、流式输出三种模式,结构化输出可自动映射为POJO。
2.3.2 Graph工作流执行机制

Graph框架的核心是“状态驱动的图结构执行”,运行流程如下:

  1. 初始化全局状态(OverallState),存储流程中所有中间数据(输入参数、节点输出、工具结果等);
  2. 从起始节点(START)开始,按“节点执行→状态更新→边规则判断→下一个节点”的逻辑流转;
  3. 支持条件分支(根据状态值动态选择节点)、循环执行(节点间循环调用)、并行分支(多节点同时执行);
  4. 触发终止条件(到达END节点或满足自定义规则)时,返回最终状态中的结果数据。

三、核心组件详解:从基础到高级

Spring AI Alibaba的组件体系按“基础能力+增强能力”划分,基础组件继承自Spring AI并优化适配,增强组件为阿里云专属实现,覆盖模型调用、流程编排、RAG、工具集成等全场景。

3.1 基础核心组件(必用)

3.1.1 ChatClient:模型调用统一入口

ChatClient是框架的核心入口,封装了模型调用的所有细节,支持同步、异步、流式三种调用方式,提供Prompt模板、结构化输出、会话记忆等能力。

关键特性

  • 自动适配通义千问、OpenAI、Ollama等模型,切换时仅需修改配置;
  • 支持@Prompt注解定义模板,动态填充参数;
  • 内置会话记忆(ChatMemory),无需手动管理多轮对话上下文;
  • 支持结构化输出,自动将模型响应映射为Java POJO(如JSON格式转换)。

依赖引入

<!-- 核心依赖,包含ChatClient与通义模型适配 --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId><version>1.0.0.2</version></dependency>

代码示例

// 1. 配置文件(application.yml) spring: ai: dashscope: api-key: ${AI_DASHSCOPE_API_KEY} # 阿里云百炼API密钥 chat: options: model: qwen-max # 模型名称(通义千问旗舰版) temperature:0.1 # 温度参数 top-p:0.7 # 采样参数 // 2. 业务代码importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.chat.model.ChatResponse;importorg.springframework.ai.chat.prompt.Prompt;importorg.springframework.ai.chat.prompt.SystemPromptTemplate;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.util.Map;@RestController@RequestMapping("/api/ai")publicclassAIController{privatefinalChatClient chatClient;// 构造函数注入ChatClient.Builder,配置全局参数@AutowiredpublicAIController(ChatClient.Builder chatClientBuilder){// 配置系统提示词与会话记忆this.chatClient = chatClientBuilder .defaultSystem("你是企业级Java开发顾问,回答简洁专业").defaultAdvisors(newMessageChatMemoryAdvisor(newInMemoryChatMemory())).build();}// 同步对话接口@PostMapping("/chat")publicMap<String,String>chat(@RequestBodyMap<String,String> request){String userInput = request.get("message");// 构建PromptPrompt prompt =newPrompt(userInput);// 调用模型ChatResponse response = chatClient.call(prompt);String content = response.getResult().getOutput().getContent();returnMap.of("response", content);}// 流式对话接口(SSE)@PostMapping(value ="/stream-chat", produces ="text/event-stream")publicFlux<String>streamChat(@RequestBodyMap<String,String> request){String userInput = request.get("message");Prompt prompt =newPrompt(userInput);// 流式调用,逐句返回结果return chatClient.stream(prompt).map(response ->"data: "+ response.getResult().getOutput().getContent()+"\n\n");}// 结构化输出示例(映射为POJO)@PostMapping("/structured-output")publicUserInfostructuredOutput(@RequestBodyMap<String,String> request){String userInput = request.get("message");// 定义Prompt,指定输出格式SystemPromptTemplate systemPrompt =newSystemPromptTemplate("从用户输入中提取姓名、年龄、邮箱,输出JSON格式,字段:name(字符串)、age(整数)、email(字符串)");Prompt prompt =newPrompt(systemPrompt.createMessage(),newUserMessage(userInput));// 调用并自动映射为UserInfo对象return chatClient.call(prompt,UserInfo.class);}// 自定义POJOpublicstaticclassUserInfo{privateString name;privateInteger age;privateString email;// getter/setter省略}}
3.1.2 VectorStore:RAG核心向量存储组件

VectorStore负责文档的向量化、存储与相似度检索,是RAG(检索增强生成)场景的核心组件,原生支持阿里云Lindorm、OpenSearch等向量存储服务,同时兼容Milvus、Redis等第三方向量数据库。

关键特性

  • 支持文档分块(Splitter)、向量化(Embedding)、存储、检索全流程;
  • 适配通义Embedding模型,确保向量语义表征能力;
  • 支持Top-K检索、元数据过滤、混合检索(向量+关键词);
  • 与Spring AI的Retriever无缝集成,可直接用于RAG链构建。

代码示例(Lindorm向量存储)

// 1. 引入依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-vectorstore-lindorm</artifactId><version>1.0.0.2</version></dependency><dependency><groupId>com.aliyun.lindorm</groupId><artifactId>lindorm-all-client</artifactId><version>2.2.1.3</version></dependency>// 2. 配置文件(application.yml) spring: ai: vectorstore: lindorm: url: jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****.lindorm.rds.aliyuncs.com:30060 username: ${LINDORM_USERNAME} password: ${LINDORM_PASSWORD} database: rag_db table-name: document_vector embedding: dashscope: api-key: ${AI_DASHSCOPE_API_KEY} model: text-embedding-v2 # 通义Embedding模型 // 3. 业务代码@ServicepublicclassRAGService{privatefinalVectorStore vectorStore;privatefinalEmbeddingClient embeddingClient;@AutowiredpublicRAGService(VectorStore vectorStore,EmbeddingClient embeddingClient){this.vectorStore = vectorStore;this.embeddingClient = embeddingClient;}// 1. 文档导入(模拟PDF/Word文档内容)publicvoidimportDocuments(List<String> documentContents,Map<String,Object> metadata){// 文档分块(按字符长度分块,每块500字符,重叠50字符)RecursiveCharacterTextSplitter splitter =newRecursiveCharacterTextSplitter(500,50,newGpt2Tokenizer());List<Document> documents = documentContents.stream().flatMap(content -> splitter.splitText(content).stream().map(chunk ->Document.from(chunk, metadata))).collect(Collectors.toList());// 批量导入向量库 vectorStore.add(documents);}// 2. 相似度检索publicList<Document>retrieve(String query,int topK){// 构建检索器,设置Top-K参数Retriever retriever = vectorStore.asRetriever(SearchParameters.builder().withTopK(topK).build());// 执行检索return retriever.retrieve(query);}}
3.1.3 Function Calling:工具调用组件

Function Calling允许大模型根据用户需求自动调用外部工具(如数据库查询、API调用、文件操作),是构建AI Agent的核心能力,支持工具注册、参数自动解析、结果回传等全流程。

关键特性

  • 支持通过注解@Tool注册Java方法为可调用工具;
  • 自动生成工具描述与参数Schema,传递给大模型;
  • 支持工具调用权限控制、参数校验、异常处理;
  • 与ChatClient无缝集成,可在多轮对话中动态调用工具。

代码示例

// 1. 引入依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-tool-calling</artifactId><version>1.0.0.2</version></dependency>// 2. 定义工具类@ComponentpublicclassBusinessTools{// 注册数据库查询工具@Tool(name ="queryOrderInfo", description ="根据订单号查询订单信息,参数为订单号(orderNo)")publicOrderInfoqueryOrderInfo(@ToolParam(description ="订单号,格式为ORD-YYYYMMDDXXXX")String orderNo){// 模拟数据库查询OrderInfo order =newOrderInfo(); order.setOrderNo(orderNo); order.setAmount(newBigDecimal("999.00")); order.setStatus("已支付"); order.setCreateTime(newDate());return order;}// 注册API调用工具@Tool(name ="getWeather", description ="查询指定城市的天气,参数为城市名称(city)")publicStringgetWeather(@ToolParam(description ="城市名称,如北京、上海")String city){// 模拟调用天气APIreturnString.format("%s 今日天气:晴,气温15-25℃,微风", city);}// 订单信息POJOpublicstaticclassOrderInfo{privateString orderNo;privateBigDecimal amount;privateString status;privateDate createTime;// getter/setter省略}}// 3. 工具调用业务逻辑@ServicepublicclassToolCallingService{privatefinalChatClient chatClient;privatefinalToolRegistry toolRegistry;@AutowiredpublicToolCallingService(ChatClient.Builder chatClientBuilder,List<Tool> tools){// 注册所有工具this.toolRegistry =newDefaultToolRegistry(tools);// 构建支持工具调用的ChatClientthis.chatClient = chatClientBuilder .defaultSystem("根据用户需求,判断是否需要调用工具。如需调用,返回工具调用指令;无需调用则直接回答。").withTools(toolRegistry).build();}publicStringprocessUserRequest(String userInput){Prompt prompt =newPrompt(userInput);ChatResponse response = chatClient.call(prompt);// 检查是否需要调用工具if(response.getResult().getToolCalls()!=null&&!response.getResult().getToolCalls().isEmpty()){List<ToolCall> toolCalls = response.getResult().getToolCalls();StringBuilder toolResults =newStringBuilder();// 执行所有工具调用for(ToolCall toolCall : toolCalls){Tool tool = toolRegistry.getTool(toolCall.getName()).orElseThrow(()->newIllegalArgumentException("工具不存在:"+ toolCall.getName()));// 执行工具并获取结果Object result = tool.execute(toolCall.getParameters()); toolResults.append(String.format("工具[%s]调用结果:%s\n", toolCall.getName(), result));}// 将工具结果回传给大模型,生成最终回答Prompt finalPrompt =newPrompt( userInput +"\n"+ toolResults.toString()+"\n基于工具调用结果,生成自然语言回答");return chatClient.call(finalPrompt).getResult().getOutput().getContent();}// 无需工具调用,直接返回结果return response.getResult().getOutput().getContent();}}

3.2 增强核心组件(阿里云专属)

3.2.1 Graph框架:智能体与工作流编排

Graph框架是Spring AI Alibaba的核心增强组件,借鉴LangGraph设计思想,提供Java版的图式流程编排能力,支持工作流、多智能体协作、复杂业务流程自动化,是区别于原生Spring AI的关键特性。

核心概念

  • 节点(Node):流程执行单元,可封装LLM调用、工具执行、数据处理等逻辑;
  • 边(Edge):节点间的流转规则,支持固定边(直接跳转)、条件边(动态选择);
  • 状态(State):全局共享数据容器,存储流程中所有中间结果,支持跨节点数据传递;
  • 子图(SubGraph):复杂流程可拆分为子图,实现模块化管理。

关键特性

  • 支持循环执行、条件分支、并行分支、嵌套子图;
  • 支持人为介入(流程中断等待人工确认);
  • 与Spring生态无缝集成,节点可注入Spring Bean;
  • 支持可视化调试(通过Studio查看流程执行轨迹)。

代码示例(会议纪要助手工作流)

// 1. 引入依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-graph-core</artifactId><version>1.0.0.2</version></dependency>// 2. 定义全局状态publicclassMeetingStateimplementsState{// 输入参数:会议录音文本privateString meetingContent;// 中间结果:提取的关键信息privateString extractedInfo;// 中间结果:结构化待办事项privateList<TodoItem> todos;// 输出结果:邮件发送状态privateboolean emailSent;// getter/setter/构造函数省略}// 3. 定义节点逻辑@ComponentpublicclassMeetingNodes{@AutowiredprivateChatClient chatClient;@AutowiredprivateEmailService emailService;// 节点1:提取会议关键信息publicNode<MeetingState>extractKeyInfoNode(){return context ->{MeetingState state = context.getState();String prompt =String.format("提取以下会议文本中的关键决策点和待办事项:\n%s", state.getMeetingContent());String extractedInfo = chatClient.call(newPrompt(prompt)).getResult().getOutput().getContent(); state.setExtractedInfo(extractedInfo);return context;};}// 节点2:生成结构化待办事项publicNode<MeetingState>generateTodosNode(){return context ->{MeetingState state = context.getState();String prompt =String.format("将以下内容转换为JSON格式的待办事项列表(字段:title、assignee、deadline):\n%s", state.getExtractedInfo());String todosJson = chatClient.call(newPrompt(prompt)).getResult().getOutput().getContent();// JSON转换为List<TodoItem>(使用Jackson)List<TodoItem> todos =newObjectMapper().readValue(todosJson,newTypeReference<List<TodoItem>>(){}); state.setTodos(todos);return context;};}// 节点3:发送邮件通知publicNode<MeetingState>sendEmailNode(){return context ->{MeetingState state = context.getState(); emailService.sendTodoNotifications(state.getTodos()); state.setEmailSent(true);return context;};}// 待办事项POJOpublicstaticclassTodoItem{privateString title;privateString assignee;privateString deadline;// getter/setter省略}}// 4. 构建并执行Graph@ServicepublicclassMeetingWorkflowService{@AutowiredprivateMeetingNodes meetingNodes;publicMeetingStateexecuteWorkflow(String meetingContent){// 1. 初始化Graph构建器GraphBuilder<MeetingState> graphBuilder =GraphBuilder.create(MeetingState.class);// 2. 添加节点 graphBuilder.addNode("extractKeyInfo", meetingNodes.extractKeyInfoNode()); graphBuilder.addNode("generateTodos", meetingNodes.generateTodosNode()); graphBuilder.addNode("sendEmail", meetingNodes.sendEmailNode());// 3. 定义边规则// 起始边:START → 提取关键信息节点 graphBuilder.addEdge(Graph.START,"extractKeyInfo");// 固定边:提取关键信息 → 生成待办事项 graphBuilder.addEdge("extractKeyInfo","generateTodos");// 固定边:生成待办事项 → 发送邮件 graphBuilder.addEdge("generateTodos","sendEmail");// 终止边:发送邮件 → END graphBuilder.addEdge("sendEmail",Graph.END);// 4. 构建GraphGraph<MeetingState> graph = graphBuilder.build();// 5. 初始化状态并执行MeetingState initialState =newMeetingState(meetingContent);return graph.execute(initialState);}}// 5. 邮件服务(模拟)@ServicepublicclassEmailService{publicvoidsendTodoNotifications(List<MeetingNodes.TodoItem> todos){// 模拟发送邮件逻辑System.out.println("待办事项邮件已发送,内容:"+ todos);}}
3.2.2 Studio:可视化调试工具

Spring AI Alibaba Studio是配套的本地开发工具,提供Web UI界面,支持智能体流程可视化、模型交互调试、知识库检索测试等功能,解决AI应用“调试难、观测难”的痛点。

核心功能

  • 模型调试:直接输入Prompt测试模型响应,调整参数(温度、TopP等);
  • 流程可视化:Graph工作流的节点与边可视化展示,支持拖拽编排(低代码模式);
  • 执行轨迹监控:查看每个节点的输入输出、状态变化、执行耗时;
  • 知识库管理:上传文档、测试检索效果,优化分块与向量化参数。

启用方式

<!-- 引入依赖 --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-studio-starter</artifactId><version>1.0.0.2</version></dependency>

启动项目后,访问http://localhost:8080/studio即可进入UI界面,无需额外配置。

3.2.3 NL2SQL组件:自然语言转SQL

NL2SQL组件专为数据查询场景设计,支持将自然语言查询转换为SQL语句,自动执行并返回结构化结果,适配阿里云Lindorm、MySQL等数据库,无需手动编写SQL。

关键特性

  • 支持数据库Schema自动识别与解析;
  • SQL生成与语法校验,避免SQL注入风险;
  • 支持复杂查询(多表关联、聚合函数、条件过滤);
  • 结果自动格式化(表格、JSON等)。

代码示例

// 1. 引入依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-nl2sql</artifactId><version>1.0.0.2</version></dependency>// 2. 配置文件(application.yml) spring: ai: nl2sql: dashscope: api-key: ${AI_DASHSCOPE_API_KEY} datasource: url: jdbc:mysql://localhost:3306/business_db username: ${DB_USERNAME} password: ${DB_PASSWORD} driver-class-name:com.mysql.cj.jdbc.Driver// 3. 业务代码@ServicepublicclassNL2SQLService{@AutowiredprivateNl2SqlClient nl2SqlClient;publicStringqueryData(String naturalLanguageQuery){// 执行NL2SQL流程:自然语言→SQL生成→SQL执行→结果格式化Nl2SqlResult result = nl2SqlClient.execute(naturalLanguageQuery);// 处理结果if(result.isSuccess()){String sql = result.getSql();List<Map<String,Object>> data = result.getData();returnString.format("生成SQL:%s\n查询结果:%s", sql, data);}else{return"查询失败:"+ result.getErrorMessage();}}}// 控制器@RestController@RequestMapping("/api/nl2sql")publicclassNL2SQLController{@AutowiredprivateNL2SQLService nl2SqlService;@PostMappingpublicMap<String,String>query(@RequestBodyMap<String,String> request){String query = request.get("query");String result = nl2SqlService.queryData(query);returnMap.of("result", result);}}

四、实战落地:企业级RAG智能问答系统构建

以“基于Spring AI Alibaba + 通义千问 + Lindorm”的企业级RAG智能问答系统为例,完整演示从环境准备、开发实现到测试部署的全流程,该系统支持文档导入、语义检索、智能问答、结果溯源等核心功能。

4.1 项目架构设计

┌─────────────────────────────────────────────────┐ │ 前端层:Web界面/API接口 │ └─────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────┐ │ 业务层:问答服务、文档管理服务、权限控制 │ └─────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────┐ │ 框架层:Spring AI Alibaba核心组件 │ │ - ChatClient(通义千问调用) │ │ - VectorStore(Lindorm向量存储) │ │ - Retriever(相似度检索) │ │ - RAG Chain(检索+生成) │ └─────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────┐ │ 数据层:Lindorm(向量+文档元数据)、OSS(文档存储)│ └─────────────────────────────────────────────────┘ 

4.2 环境准备

  1. 基础环境:JDK 17+、Maven 3.8+、Spring Boot 3.2+;
  2. 阿里云服务
    • 开通百炼平台,获取API-KEY(用于调用通义千问与Embedding模型);
    • 开通Lindorm实例(启用向量存储功能),获取连接信息;
    • 开通OSS实例(用于存储原始文档);
  3. 依赖管理:在pom.xml中引入核心依赖,使用BOM统一版本:
<dependencyManagement><dependencies><!-- Spring AI Alibaba BOM --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-bom</artifactId><version>1.0.0.2</version><type>pom</type><scope>import</scope></dependency><!-- Spring Boot BOM --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.5</version><type>pom</type><scope>import</scope></dependency><!-- Spring AI BOM --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.6</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Spring Boot核心 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><!-- Spring AI Alibaba核心 --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-vectorstore-lindorm</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-document-reader-pdf</artifactId></dependency><!-- 阿里云OSS(文档存储) --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.0</version></dependency><!-- 工具类 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><!-- 仓库配置(Spring AI里程碑仓库) --><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories>

4.3 核心配置(application.yml)

spring:application:name: enterprise-rag-system # Spring AI Alibaba配置ai:# 通义千问模型配置dashscope:api-key: ${AI_DASHSCOPE_API_KEY:your-api-key}chat:options:model: qwen-max temperature:0.2top-p:0.7# Embedding模型配置embedding:dashscope:model: text-embedding-v2 options:output-dim:768# 向量维度# Lindorm向量存储配置vectorstore:lindorm:url: jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****.lindorm.rds.aliyuncs.com:30060username: ${LINDORM_USERNAME:your-username}password: ${LINDORM_PASSWORD:your-password}database: rag_db table-name: document_vector # 向量字段配置vector-field: embedding # 文本字段配置(存储文档分块内容)content-field: content # 元数据字段配置(存储文档名称、来源等)metadata-fields: documentName,documentSource,uploadTime # OSS配置(文档存储)cloud:alicloud:access-key: ${ALIYUN_ACCESS_KEY:your-access-key}secret-key: ${ALIYUN_SECRET_KEY:your-secret-key}oss:endpoint: oss-cn-beijing.aliyuncs.com bucket-name: ${OSS_BUCKET_NAME:your-bucket-name}# 服务器配置server:port:8080servlet:context-path: /rag-system # 日志配置logging:level:org.springframework.ai: INFO com.alibaba.cloud.ai: INFO com.example.rag: DEBUG 

4.4 核心功能实现

4.4.1 文档管理服务(文档上传、解析、导入向量库)
@Service@Slf4jpublicclassDocumentService{@AutowiredprivateOSSClient ossClient;@Value("${spring.cloud.alicloud.oss.bucket-name}")privateString ossBucketName;@AutowiredprivateVectorStore vectorStore;// 文档上传至OSS并导入向量库publicDocumentUploadResponseuploadAndImportDocument(MultipartFile file)throwsException{// 1. 上传文件至OSSString originalFilename = file.getOriginalFilename();String ossFilePath ="documents/"+System.currentTimeMillis()+"-"+ originalFilename; ossClient.putObject(PutObjectRequest.builder().bucket(ossBucketName).object(ossFilePath).build(), file.getInputStream()); log.info("文件上传至OSS:{}", ossFilePath);// 2. 解析文档(支持PDF、TXT、DOCX,此处以PDF为例)DocumentReader pdfReader =newPdfDocumentReader();List<String> documentContents = pdfReader.read(file.getInputStream()); log.info("文档解析完成,共{}页", documentContents.size());// 3. 文档分块RecursiveCharacterTextSplitter splitter =newRecursiveCharacterTextSplitter(1000,100,newGpt2Tokenizer());List<Document> documents =newArrayList<>();Map<String,Object> metadata =newHashMap<>(); metadata.put("documentName", originalFilename); metadata.put("documentSource","OSS://"+ ossBucketName +"/"+ ossFilePath); metadata.put("uploadTime",newSimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(newDate()));for(String content : documentContents){List<String> chunks = splitter.splitText(content); chunks.forEach(chunk -> documents.add(Document.from(chunk, metadata)));} log.info("文档分块完成,共{}个分块", documents.size());// 4. 导入向量库 vectorStore.add(documents); log.info("向量库导入完成");// 5. 返回结果returnnewDocumentUploadResponse( originalFilename, ossFilePath, documents.size(),"上传并导入成功");}// 文档上传响应DTO@Data@AllArgsConstructor@NoArgsConstructorpublicstaticclassDocumentUploadResponse{privateString documentName;privateString ossFilePath;privateint chunkCount;privateString message;}}
4.4.2 RAG问答服务(检索+生成)
@Service@Slf4jpublicclassRagQAService{@AutowiredprivateVectorStore vectorStore;@AutowiredprivateChatClient chatClient;// 构建RAG ChainprivateRetrievalQAChainbuildRagChain(){// 1. 构建检索器(Top-3相关结果)Retriever retriever = vectorStore.asRetriever(SearchParameters.builder().withTopK(3).build());// 2. 构建Prompt模板PromptTemplate promptTemplate =newPromptTemplate(""" 你是企业级智能问答助手,基于以下参考文档回答用户问题: {context} 要求: 1. 严格基于参考文档内容回答,不编造信息; 2. 回答简洁明了,分点说明(如果需要); 3. 若参考文档中没有相关信息,直接回复"暂无相关信息"; 4. 最后注明参考文档来源。 用户问题:{question} """);// 3. 构建RAG ChainreturnRetrievalQAChain.from( chatClient, retriever, promptTemplate,RetrievalQAChain.OutputFormat.DETAILED);}// 执行问答publicRagQAResponseanswerQuestion(String question){RetrievalQAChain ragChain =buildRagChain();RetrievalQAResult result = ragChain.call(question);// 处理参考文档信息List<ReferenceDocument> references = result.getRetrievedDocuments().stream().map(doc ->newReferenceDocument( doc.getMetadata().get("documentName").toString(), doc.getMetadata().get("documentSource").toString(), doc.getContent().substring(0,Math.min(100, doc.getContent().length()))+"...")).collect(Collectors.toList());// 返回结果returnnewRagQAResponse( question, result.getAnswer(), references );}// 问答响应DTO@Data@AllArgsConstructor@NoArgsConstructorpublicstaticclassRagQAResponse{privateString question;privateString answer;privateList<ReferenceDocument> references;}// 参考文档DTO@Data@AllArgsConstructor@NoArgsConstructorpublicstaticclassReferenceDocument{privateString documentName;privateString documentSource;privateString snippet;}}
4.4.3 控制器(API接口)
@RestController@RequestMapping("/api")@Slf4jpublicclassRagController{@AutowiredprivateDocumentService documentService;@AutowiredprivateRagQAService ragQAService;// 文档上传接口@PostMapping("/documents/upload")publicResponseEntity<DocumentService.DocumentUploadResponse>uploadDocument(@RequestParam("file")MultipartFile file){try{DocumentService.DocumentUploadResponse response = documentService.uploadAndImportDocument(file);returnResponseEntity.ok(response);}catch(Exception e){ log.error("文档上传失败", e);returnResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(newDocumentService.DocumentUploadResponse(file.getOriginalFilename(),null,0,"上传失败:"+ e.getMessage()));}}// 问答接口@PostMapping("/qa")publicResponseEntity<RagQAService.RagQAResponse>questionAnswer(@RequestBody@ValidQuestionRequest request){try{RagQAService.RagQAResponse response = ragQAService.answerQuestion(request.getQuestion());returnResponseEntity.ok(response);}catch(Exception e){ log.error("问答失败", e);returnResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(newRagQAService.RagQAResponse(request.getQuestion(),"问答失败:"+ e.getMessage(),null));}}// 问答请求DTO@Data@AllArgsConstructor@NoArgsConstructorpublicstaticclassQuestionRequest{@NotBlank(message ="问题不能为空")privateString question;}}

4.5 测试验证

4.5.1 接口测试(使用Postman)
    • 请求地址:http://localhost:8080/rag-system/api/documents/upload
    • 请求方式:POST
    • 请求参数:form-data,key为file,值为PDF文档
    • 响应示例:
    • 请求地址:http://localhost:8080/rag-system/api/qa
    • 请求方式:POST
    • 请求体:
    • 响应示例:

智能问答

{"question":"企业产品A的核心功能是什么?"}
{"question":"企业产品A的核心功能是什么?","answer":"企业产品A的核心功能如下:\n1. 数据可视化分析:支持多维度数据图表展示;\n2. 权限精细化管理:支持角色、用户、资源三级权限控制;\n3. 接口开放能力:提供REST API与第三方系统集成;\n参考文档来源:企业产品手册.pdf(OSS://your-bucket-name/documents/1741234567890-企业产品手册.pdf)","references":[{"documentName":"企业产品手册.pdf","documentSource":"OSS://your-bucket-name/documents/1741234567890-企业产品手册.pdf","snippet":"产品A核心功能:1. 数据可视化分析:支持多维度数据图表展示,包括折线图、柱状图、饼图等;2. 权限精细化管理:支持角色、用户、资源三级权限控制..."}]}

文档上传

{"documentName":"企业产品手册.pdf","ossFilePath":"documents/1741234567890-企业产品手册.pdf","chunkCount":25,"message":"上传并导入成功"}
4.5.2 可视化调试(使用Studio)
  1. 访问http://localhost:8080/rag-system/studio,进入Studio界面;
  2. 在“问答调试”模块输入问题,查看检索结果与生成过程;
  3. 在“流程监控”模块查看向量库导入、检索、生成的全链路日志。

4.6 部署优化建议

  1. 性能优化
    • 文档分块采用异步处理,避免同步上传超时;
    • 向量库查询添加缓存(Redis),缓存高频查询结果;
    • 调整Lindorm索引参数(如HNSW的M值、efConstruction值),优化检索速度。
  2. 稳定性优化
    • 增加重试机制(如模型调用、OSS上传、数据库操作);
    • 配置限流(Higress AI网关),避免高并发下模型过载;
    • 启用Lindorm副本,保障数据高可用。
  3. 安全优化
    • 接口添加身份认证(如JWT);
    • 限制上传文档大小与类型,避免恶意文件;
    • 敏感信息(API-KEY、数据库密码)通过Nacos配置中心管理,避免硬编码。

五、高级特性:企业级能力深度解析

Spring AI Alibaba的核心竞争力在于“生态适配+企业级增强”,除基础组件外,还提供服务治理、可观测性、多智能体协作等高级特性,满足生产级部署需求。

5.1 通义生态深度集成

Spring AI Alibaba是阿里云通义系列模型在Java生态的最佳实践,提供从模型调用到私有化部署的全链路支持:

  1. 百炼平台集成:一键对接百炼平台的模型微调、服务部署、流量控制能力,企业可基于自有数据微调通义模型;
  2. 多模型适配:支持通义千问(文本)、通义万相(文生图)、通义听悟(语音转文字)等多模态模型,统一API调用;
  3. 私有化部署支持:适配通义模型私有化部署版本,数据不出内网,保障数据安全;
  4. Token流控与计费监控:集成阿里云API网关的流量控制能力,支持Token用量统计与告警。

5.2 企业级服务治理

基于Spring Cloud Alibaba的服务治理能力,提供生产级稳定性保障:

  1. 限流与熔断:通过Sentinel集成,对模型调用、向量库查询等关键接口进行限流,避免过载;
  2. 服务注册发现:支持Nacos注册,多实例部署时自动负载均衡;
  3. 配置中心:通过Nacos管理模型参数、数据库连接等配置,支持动态调整无需重启;
  4. 降级策略:模型服务不可用时,自动切换为预设回复或降级为静态数据返回。

代码示例(Sentinel限流配置)

// 1. 引入依赖<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>// 2. 配置文件(application.yml) spring: cloud: sentinel: transport: dashboard: localhost:8080 rules: flow:- resource: rag-qa-api limitApp:default grade:1 # 按QPS限流 count:100 # 每秒最多100次请求 controlBehavior:0 # 快速失败 // 3. 接口添加Sentinel注解@PostMapping("/qa")@SentinelResource(value ="rag-qa-api", blockHandler ="qaBlockHandler")publicResponseEntity<RagQAService.RagQAResponse>questionAnswer(@RequestBody@ValidQuestionRequest request){// 业务逻辑省略}// 限流降级处理函数publicResponseEntity<RagQAService.RagQAResponse>qaBlockHandler(QuestionRequest request,BlockException e){ log.warn("问答接口限流触发,问题:{}", request.getQuestion());returnResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS).body(newRagQAService.RagQAResponse(request.getQuestion(),"当前请求过多,请稍后重试",null));}

5.3 可观测性能力

提供全链路可观测性支持,便于问题排查与性能优化:

  1. 链路追踪:集成ARMS与OpenTelemetry,追踪模型调用、工具执行、流程编排的全链路耗时;
  2. 日志监控:输出结构化日志,包含Prompt、响应、工具调用、状态变化等关键信息;
  3. 指标统计:暴露Prometheus指标(模型调用QPS、耗时、成功率,检索精度等),支持Grafana可视化;
  4. 异常告警:支持模型调用失败、检索精度过低、Token用量超阈值等异常场景告警。

配置示例(ARMS集成)

<!-- 引入依赖 --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-arms-observation</artifactId><version>1.0.0.2</version></dependency>
# application.yml配置spring:ai:observability:arms:enable:trueendpoint: https://arms-retcode.aliyuncs.com app-key: ${ARMS_APP_KEY}secret-key: ${ARMS_SECRET_KEY}

5.4 MCP工具集成(模型上下文协议)

MCP(Model Context Protocol)是模型上下文协议,支持AI Agent与外部服务的标准化集成,无需关注服务实现细节:

  1. 存量服务适配:支持Spring Cloud、Dubbo等存量服务零代码改造为MCP服务,供Agent调用;
  2. 分布式工具注册:通过Nacos MCP Registry实现工具的分布式注册与发现,支持跨服务调用;
  3. 负载均衡与容错:MCP客户端自动实现负载均衡,支持工具调用失败重试;
  4. 标准化协议:基于JSON Schema定义工具接口,模型自动识别参数格式。

代码示例(MCP工具注册)

// 1. 引入依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-nacos-mcp-server</artifactId><version>1.0.0.2</version></dependency>// 2. 配置文件 spring: cloud: alibaba: nacos: server-addr: ${NACOS_SERVER_ADDR:localhost:8848} ai: mcp: server: enable:true service-name: mcp-tool-service // 3. 注册MCP工具@McpService(serviceName ="orderToolService")publicclassOrderMcpService{@AutowiredprivateOrderService orderService;@McpMethod(name ="queryOrder", description ="根据订单号查询订单信息")publicOrderInfoqueryOrder(@McpParam(name ="orderNo", description ="订单号")String orderNo){return orderService.getOrderByNo(orderNo);}}

5.5 多智能体协作

基于Graph框架支持多智能体分工协作,每个智能体专注于特定领域,通过状态共享与消息传递实现协同工作:

  1. 智能体定义:每个智能体封装为独立的Graph子图,包含专属工具与业务逻辑;
  2. 协作机制:支持“主智能体+子智能体”模式,主智能体负责任务分解与结果聚合,子智能体负责具体任务执行;
  3. 消息传递:通过全局状态或消息队列实现智能体间数据传递;
  4. 冲突解决:支持人工介入或规则引擎解决智能体协作中的冲突。

应用场景

  • 企业级客服:接待智能体(意图识别)→ 业务智能体(订单查询/售后处理)→ 投诉智能体(问题升级);
  • 数据分析:需求拆解智能体→ 数据查询智能体→ 可视化智能体→ 报告生成智能体。

六、主流框架对比与选型建议

6.1 核心框架对比

对比维度Spring AI Alibaba原生Spring AILangGraph(Python)LangChain(Python)
归属主体阿里巴巴+Spring官方Spring官方Python社区Python社区
核心定位企业级Java AI应用开发框架Java AI基础开发底座Python生态智能体编排框架Python生态AI开发工具链
模型支持通义千问、OpenAI、Ollama等海外主流模型(OpenAI等)多模型支持(Python SDK)多模型支持(Python SDK)
核心能力模型调用、RAG、Graph编排、企业级服务治理模型调用、基础RAG、工具调用智能体编排、工作流模型调用、RAG、工具调用、简单编排
生态对接阿里云生态(Nacos/OSS/Lindorm)、Spring生态通用跨厂商生态Python生态(PyTorch/TensorFlow)Python生态(各类工具库)
企业级特性限流、熔断、可观测性、分布式部署缺乏缺乏缺乏
开发语言JavaJavaPythonPython
适用场景国内企业级Java AI应用、阿里云部署场景跨厂商Java AI应用、简单场景Python生态复杂智能体、科研场景Python生态AI原型开发、快速验证
优势生态适配好、企业级特性完善、Java原生跨厂商兼容、标准化API编排能力强、社区活跃工具链丰富、场景覆盖广
劣势生态覆盖不如Python丰富企业级特性缺失、国内模型适配弱非Java生态、企业级部署弱非Java生态、流程编排复杂

6.2 选型决策流程

  1. 技术栈匹配
    • 现有系统为Java/Spring生态:优先选择Spring AI Alibaba;
    • 无技术栈绑定、追求快速验证:选择LangChain/LangGraph;
  2. 部署环境
    • 基于阿里云部署:优先Spring AI Alibaba(生态无缝集成);
    • 跨云或私有化部署:原生Spring AI(跨厂商兼容);
  3. 业务复杂度
    • 企业级复杂应用(多智能体、高并发、高可用):Spring AI Alibaba;
    • 简单AI功能(单轮对话、基础RAG):原生Spring AI;
    • 科研场景、多模态前沿探索:Python生态框架;
  4. 团队能力
    • Java团队:Spring AI Alibaba;
    • Python团队:LangChain/LangGraph;
  5. 数据安全
    • 数据敏感、需私有化部署:Spring AI Alibaba(适配通义私有化模型)或原生Spring AI。

6.3 典型场景选型建议

应用场景推荐框架关键理由
国内企业级RAG智能问答(Java技术栈)Spring AI Alibaba通义模型适配、Lindorm向量存储集成、企业级服务治理
多智能体协作系统(Java生态)Spring AI AlibabaGraph框架编排能力、Spring生态无缝集成
存量Java系统AI赋能Spring AI Alibaba无需跨语言协作,MCP支持存量服务快速集成
跨厂商AI应用(Java)原生Spring AI标准化API,支持多厂商模型切换
AI原型快速验证、科研场景LangChain/LangGraph工具链丰富、迭代速度快
多模态前沿应用(图文/音视频)LangChain/LangGraph社区插件丰富,多模态支持更成熟

七、常见问题与解决方案

问题现象核心原因解决方案
依赖冲突(如Spring AI版本不兼容)Spring AI Alibaba与Spring AI、Spring Boot版本不匹配严格使用BOM统一版本,参考官方推荐版本组合(Spring Boot 3.2+、Spring AI 1.0.6+)
通义模型调用失败(401错误)API-KEY无效或未配置检查百炼平台API-KEY是否正确,确保环境变量或配置文件中已配置
向量库检索精度低文档分块不合理、Embedding模型选择不当调整分块大小(500-1000字符),使用通义text-embedding-v2模型,开启混合检索
Graph流程执行死循环条件边逻辑不当,未设置终止条件增加循环计数器,达到阈值后强制跳转至END节点;添加超时机制
文档解析失败(PDF/DOCX)文档格式异常或解析组件未引入引入对应文档解析starter(如spring-ai-alibaba-starter-document-reader-pdf),检查文档完整性
模型调用超时网络波动、模型服务过载配置重试机制(RetryAdvisor),调整超时时间,启用限流避免过载
内存溢出(大规模文档导入)文档分块批量过大,内存占用过高减小批量导入大小(建议每批100-500个分块),使用异步导入,增加JVM堆内存
MCP工具调用失败服务未注册到Nacos或权限不足检查Nacos连接配置,确保MCP服务已注册,验证工具调用权限
Studio无法访问未引入Studio依赖或端口被占用引入spring-ai-alibaba-studio-starter,更换未被占用的端口(server.port)
结构化输出格式错误Prompt未明确格式要求或模型响应不规范优化Prompt,明确指定输出格式(如JSON字段定义),增加格式校验逻辑

八、总结与未来趋势

Spring AI Alibaba的出现,填补了Java生态企业级AI应用开发的空白——它以Spring AI为基础,深度集成阿里云生态,既解决了国内大模型适配、企业级服务治理等落地痛点,又保持了Spring生态的易用性与扩展性,让Java开发者无需跨语言即可构建生产级AI应用。

核心价值总结

  1. 生态适配:一键对接通义千问、阿里云中间件,降低国内企业落地成本;
  2. 企业级能力:内置限流、熔断、可观测性等特性,直接满足生产级部署需求;
  3. 易用性:Spring Boot自动配置、可视化调试工具、丰富示例,降低开发门槛;
  4. 扩展性:支持自定义工具、子图、模型适配器,适配复杂业务场景。

未来趋势展望

  1. 多模态增强:深化通义万相(文生图)、通义听悟(语音)等多模态模型集成,支持跨模态RAG与智能体;
  2. 零代码开发:强化Studio低代码/零代码能力,支持拖拽式智能体编排与流程设计;
  3. 性能优化:优化向量检索速度、模型调用 latency,支持更大规模文档与更高并发;
  4. 行业解决方案:推出金融、医疗、制造等行业专属组件与模板,加速行业AI落地;
  5. 社区生态完善:增加更多第三方模型与向量数据库适配,扩大开发者社区与贡献者规模。

对于Java开发者而言,Spring AI Alibaba是进入AI领域的最佳切入点——无需重构技术栈,即可利用现有Java知识构建AI应用;对于企业而言,它是平衡开发效率、落地成本与系统稳定性的最优选择。建议从简单场景(如智能问答、工具调用)入手,逐步探索多智能体、复杂工作流等高级特性,结合阿里云生态实现AI技术的业务价值转化。

Read more

如何在Cursor中使用MCP服务

如何在Cursor中使用MCP服务

前言 随着AI编程助手的普及,越来越多开发者选择在Cursor等智能IDE中进行高效开发。Cursor不仅支持代码补全、智能搜索,还能通过MCP(Multi-Cloud Platform)服务,轻松调用如高德地图API、数据库等多种外部服务,实现数据采集、处理和自动化办公。 本文以“北京一日游自动化攻略”为例,详细讲解如何在 Cursor 中使用 MCP 服务,完成数据采集、数据库操作、文件生成和前端页面展示的全流程。 学习视频:cursor中使用MCP服务 一、什么是MCP服务? MCP(Multi-Cloud Platform)是Cursor内置的多云服务接口,支持调用地图、数据库、文件系统等多种API。通过MCP,开发者无需手动写HTTP请求或繁琐配置,只需在对话中描述需求,AI助手即可自动调用相关服务,极大提升开发效率。 二、环境准备 2.1 cursor Cursor重置机器码-解决Too many free trials. 2.

By Ne0inhk
MCP客户端与服务端初使用——让deepseek调用查询天气的mcp来查询天气

MCP客户端与服务端初使用——让deepseek调用查询天气的mcp来查询天气

本系列主要通过调用天气的mcp server查询天气这个例子来学习什么是mcp,以及怎么设计mcp。话不多说,我们开始吧。主要参考的是B站的老哥做的一个教程,我把链接放到这里,大家如果有什么不懂的也可以去看一下。 https://www.bilibili.com/video/BV1NLXCYTEbj?spm_id_from=333.788.videopod.episodes&vd_source=32148098d54c83926572ec0bab6a3b1d https://blog.ZEEKLOG.net/fufan_LLM/article/details/146377471 最终的效果:让deepseek-v3使用天气查询的工具来查询指定地方的天气情况 技术介绍 MCP,即Model Context Protocol(模型上下文协议),是由Claude的母公司Anthropic在2024年底推出的一项创新技术协议。在它刚问世时,并未引起太多关注,反响较为平淡。然而,随着今年智能体Agent领域的迅猛发展,MCP逐渐进入大众视野并受到广泛关注。今年2月,

By Ne0inhk
可以在命令行通过大模型使用上下文协议(MCP)与外部工具交互的软件:小巧的MCPHost

可以在命令行通过大模型使用上下文协议(MCP)与外部工具交互的软件:小巧的MCPHost

小巧的MCPHost MCPHost 可以在命令行下使用,使大型语言模型(LLM)能够通过模型上下文协议(MCP)与外部工具进行交互。目前支持Claude 3.5 Sonnet和Ollama等。本次实践使用自己架设的Deepseek v3模型,跑通了Time MCP服务。  官网:GitHub - mark3labs/mcphost: A CLI host application that enables Large Language Models (LLMs) to interact with external tools through the Model Context Protocol (MCP). 下载安装 使用非常方便,直接下载解压即可使用。官网提供Windows、Linux和MacOS三个系统的压缩包: https://github.com/

By Ne0inhk
实战篇:Python开发monogod数据库mcp server看完你就会了

实战篇:Python开发monogod数据库mcp server看完你就会了

原创不易,请关注公众号:【爬虫与大模型开发】,大模型的应用开发之路,整理了大模型在现在的企业级应用的实操及大家需要注意的一些AI开发的知识点!持续输出爬虫与大模型的相关文章。 前言 目前mcp协议是给deepseek大模型插上工具链的翅膀,让大模型不仅拥有超高的推理和文本生成能力,还能具备执行大脑意识的工具能力! 如何开发一个mcp? mcp是一种协议,指的是模型上下文协议 (Model Context Protocol)。 官方结成的mcp https://github.com/modelcontextprotocol/python-sdk mcp库 pip install mcp from mcp.server.fastmcp import FastMCP 我们先来做一个简单的案例 from mcp.server.fastmcp import FastMCP import requests mcp = FastMCP("spider") @mcp.tool() def crawl(

By Ne0inhk