#8、SpringAI MCP 服务端开发实战(图片搜索)
SpringAI MCP 服务端开发实战图片搜索服务本章定位承接上一章《Spring AI 使用 MCP 客户端调用高德 MCP》。上一章我们从消费方的角度使用别人提供的 MCP 服务本章反过来从提供方的角度基于 Spring AI 从 0 到 1 开发一个图片搜索 MCP 服务端并用客户端分别通过stdio和SSE两种传输方式完成调用。技术栈Spring AI 1.0.0-M6 · Spring Boot 3.4.x · JDK 17 · Maven · Hutool · Pexels API一、MCP 架构回顾客户端与服务端1.1 MCP 客户端MCP Client 是 MCP 架构中的关键组件主要负责和 MCP 服务器建立连接并进行通信。它能自动匹配服务器的协议版本、确认可用功能、负责数据传输和 JSON-RPC 交互。此外它还能发现和使用各种工具、管理资源、和提示词系统进行交互。除了这些核心功能MCP 客户端还支持一些额外特性比如根管理Roots、采样控制Sampling以及同步或异步操作。为了适应不同场景它提供了多种数据传输方式包括Stdio 标准输入 / 输出客户端启动一个子进程通过标准输入输出流与其通信适用于本地调用SSE 传输基于 Java HttpClient / WebFlux通过 HTTP Server-Sent Events 与远程服务通信适用于远程调用。客户端可以通过不同传输方式调用不同的 MCP 服务可以是本地的、也可以是远程的。上一章节已经实现 MCP 客户端调用高德 MCP 服务本章在此基础上新增对自研图片搜索服务的调用。1.2 MCP 服务端MCP Server 也是整个 MCP 架构的关键组件主要用来为客户端提供各种工具、资源和功能支持。它负责处理客户端的请求包括解析协议、提供工具、管理资源以及处理各种交互信息。同时它还能记录日志、发送通知并且支持多个客户端同时连接保证高效的通信和协作。和客户端一样它也可以通过多种方式进行数据传输比如 Stdio 标准输入 / 输出、基于 Servlet / WebFlux / WebMVC 的 SSE 传输满足不同应用场景。这种设计使得客户端和服务端完全解耦任何语言开发的客户端都可以调用我们开发的 MCP 服务。二、MCP 服务端开发图片搜索服务服务端开发主要基于 Spring AI MCP Server Boot Starter它能够自动配置 MCP 服务端组件使开发者能够轻松创建 MCP 服务向 AI 客户端提供工具、资源和提示词模板从而扩展 AI 模型的能力范围。图片搜索服务使用 Pexels 图片资源网站的 API 构建。2.1 前置准备开始之前请确认环境满足以下要求项目要求JDK17 及以上Maven3.6Spring Boot3.4.x与 Spring AI 1.0.0-M6 匹配Spring AI1.0.0-M6示例基于该里程碑版本Pexels一个可用的 API Key见 2.2版本提示重要Spring AI 迭代极快本文示例基于1.0.0-M6对应 Spring Boot 3.4.x。升级到 Spring AI 1.0.0 GA 后MCP 相关 starter 名称发生过调整见 2.3 与 3.1 的提示注解也有变化ToolParam→ToolParameter实操时请以官方文档和 Maven 仓库中的实际坐标为准重点关注思路和方法而非死记版本。2.2 申请 Pexels API Key进入 Pexels 官网注册登录后在 API 管理页面创建一个 Key 即可。免费额度足够本地开发调试使用。2.3 新建 Maven moduleimgSearch_mcpServer在项目根目录下新建一个 Maven module名称为imgSearch_mcpServer示例名可按自己的规范命名。建议单独打开该模块或在 IDE 中将它作为独立工程操作不要在原有项目的子文件夹里混着改避免 Maven 依赖、资源路径等出现不必要的问题。2.4 引入服务端依赖引入必要的依赖包括 Lombok、Hutool 工具库和 Spring AI MCP 服务端依赖。MCP 服务端依赖有 3 种可选开发流程完全一致只是配置不同依赖说明spring-ai-mcp-server-spring-boot-starter仅支持 stdio无需 Web 容器spring-ai-mcp-server-webmvc-spring-boot-starter基于 Spring MVC 的 SSE 传输同时可选用 stdio本章选择spring-ai-mcp-server-webflux-spring-boot-starter基于 Spring WebFlux 的响应式 SSE 传输可选用 stdio此处我们选择引入WebMVC版本同时支持 stdio 与 SSE方便后续切换测试dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-mcp-server-webmvc-spring-boot-starter/artifactIdversion1.0.0-M6/version/dependency再补上 Hutool 工具库发起 HTTP 请求、解析 JSON 用与 LombokdependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.25/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency版本提示1.0.0-M6阶段的服务端 starter 坐标形如spring-ai-mcp-server-webmvc-spring-boot-starterSpring AI 1.0.0 GA 后更名为spring-ai-starter-mcp-server-webmvc。建议通过spring-ai-bom统一管理 Spring AI 各模块版本。引入 WebMVC 依赖后启动时会自动注册 MCP 的SSE 端点与消息端点默认路径为/sse与/mcp/message供客户端连接使用无需我们自己写 Controller。2.5 编写配置文件stdio / SSE 双模式在src/main/resources目录下编写三份配置通过 Spring Profile 灵活切换 stdio / SSE 两种传输模式。① stdio 配置application-stdio.yml需关闭 Web 支持因为 stdio 模式不启动 Web 容器spring:ai:mcp:server:name:image-search-mcp-serverversion:0.0.1type:SYNC# 同步模式若需响应式可改为 ASYNCstdio:true# 启用 stdio 传输main:web-application-type:none# 关闭 Web 容器banner-mode:off② SSE 配置application-sse.yml需关闭 stdio 模式由 WebMVC 提供 SSE 端点spring:ai:mcp:server:name:image-search-mcp-serverversion:0.0.1type:SYNCstdio:false# 关闭 stdio走 SSE③ 主配置application.yml指定激活哪套配置并声明服务端口与 Pexels Keyserver:port:9090spring:application:name:imgSearch_mcpServerprofiles:active:sse,local# 切换 stdio 时改为: stdio,local## Pexels 图片搜索 API Key申请地址: https://www.pexels.com/zh-cn/api/key/Pexels:api-key:你的api-key提示上面激活了local这个 Profile一般用于存放本地私有配置比如 API Key、数据库密码等。可以把Pexels.api-key挪到application-local.yml中并把该文件加入.gitignore避免密钥提交到代码库application.yml只保留公共配置。如果没有这个文件也可以先把api-key直接写在主配置文件里或删除local激活项。2.6 编写图片搜索工具 ImageSearchTool在tools包下新建ImageSearchTool使用Tool注解标注方法作为 MCP 服务对外提供的工具。核心逻辑调用 Pexels 搜索接口把返回的多张图片 URL 用逗号拼接后返回给 AI。packagecom.example.imgsearch.tools;importcn.hutool.core.util.StrUtil;importcn.hutool.http.HttpUtil;importcn.hutool.json.JSONObject;importcn.hutool.json.JSONUtil;importorg.springframework.ai.tool.annotation.Tool;importorg.springframework.ai.tool.annotation.ToolParam;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;/** * 图片搜索工具对外暴露为一个 MCP Tool */ComponentpublicclassImageSearchTool{// 替换为你的 Pexels API 密钥从官网申请建议通过环境变量/配置中心注入勿硬编码Value(${Pexels.api-key})privateStringapiKey;// Pexels 常规搜索接口请以官方文档为准privatestaticfinalStringAPI_URLhttps://api.pexels.com/v1/search;Tool(descriptionsearch image from web)publicStringsearchImage(ToolParam(descriptionSearch query keyword)Stringquery){try{// 多张图片 URL 用逗号分隔便于客户端/AI 解析returnString.join(,,searchMediumImages(query));}catch(Exceptione){returnError search image: e.getMessage();}}/** * 搜索图片列表 * * param query 搜索关键词 * return 图片 URL 列表 */publicListStringsearchMediumImages(Stringquery){// 设置请求头Pexels 要求将 API Key 直接放在 Authorization 头无需 Bearer 前缀MapString,StringheadersnewHashMap();headers.put(Authorization,apiKey);// 设置请求参数query 必填可按需补充 page、per_page 等MapString,ObjectparamsnewHashMap();params.put(query,query);params.put(per_page,10);// 发送 GET 请求StringresponseHttpUtil.createGet(API_URL).addHeaders(headers).form(params).execute().body();// 解析响应 JSONphotos[] 数组 → 每项的 src 对象 → 图片地址returnJSONUtil.parseObj(response).getJSONArray(photos).stream().map(photoObj-(JSONObject)photoObj).map(photoObj-photoObj.getJSONObject(src)).map(src-src.getStr(original))// 图片规格original 为原图可选 large/medium/small 等.filter(StrUtil::isNotBlank).collect(Collectors.toList());}}说明Tool/ToolParam注解来自 Spring AI 的org.springframework.ai.tool.annotation包与原生工具调用一致Spring AI 1.0.0 GA 后ToolParam更名为ToolParameter。Pexels 的photos[].src对象提供了多种尺寸original原图、large2x/large宽 ≤ 940px、medium宽 ≤ 350px、small宽 ≤ 130px等按需选择即可。工具内部做了 try-catch 兜底即使 Pexels 接口异常也会返回友好的错误文本避免整个对话流程中断这也是 MCP 服务端的最佳实践之一。2.7 单元测试验证工具编写对应的单元测试类先不启动 MCP直接验证工具类本身是否可用packagecom.example.imgsearch.tools;importjakarta.annotation.Resource;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.springframework.boot.test.context.SpringBootTest;SpringBootTestclassImageSearchToolTest{ResourceprivateImageSearchToolimageSearchTool;TestvoidsearchImage(){StringresultimageSearchTool.searchImage(美女图片);Assertions.assertNotNull(result);System.out.println(result);}}测试通过后控制台会输出搜索到的多张图片地址。2.8 在主类中注册工具在主类中通过定义ToolCallbackProviderBean 来注册工具Spring AI 会自动把ImageSearchTool中Tool注解的方法转换为 MCP 工具并在启动时发布packagecom.example.imgsearch;importcom.example.imgsearch.tools.ImageSearchTool;importorg.springframework.ai.tool.MethodToolCallbackProvider;importorg.springframework.ai.tool.ToolCallbackProvider;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.context.annotation.Bean;SpringBootApplicationpublicclassImgSearchMcpServerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ImgSearchMcpServerApplication.class,args);}BeanpublicToolCallbackProviderimageSearchTools(ImageSearchToolimageSearchTool){returnMethodToolCallbackProvider.builder().toolObjects(imageSearchTool).build();}}提示示例将主类名统一为ImgSearchMcpServerApplication与 module 名保持一致。JAR 包名由 Maven 的artifactId决定默认artifactId-version.jar与主类名无关但主类名必须与文件名一致、且被SpringBootApplication标注。2.9 打包可执行 JAR至此服务端就开发完成了。在imgSearch_mcpServer模块下执行 Maven Package 打包mvn clean package-DskipTests打包成功后会在target目录下生成可执行 JAR 包例如imgSearch_mcpServer-0.0.1-SNAPSHOT.jar等会儿客户端调用时会依赖这个文件。三、MCP 客户端开发调用图片搜索服务接下来直接在根项目中开发客户端调用刚才创建的图片搜索服务。前置条件客户端项目已完成上一章调用高德 MCP的全部配置引入了 MCP 客户端依赖、实现doChatWithMcp方法、具备mcp-servers.json。本章只需在此基础上新增一个图片搜索 Server 的配置即可。3.1 引入客户端依赖如果上一章已引入过可跳过本步。未引入的话先加入 MCP 客户端依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-mcp-client-spring-boot-starter/artifactIdversion1.0.0-M6/version/dependency实际开发中你也可以按需添加 WebFlux 支持但传输方式要与服务端模式匹配stdio 客户端用 Java HttpClientSSE 客户端可选用 WebFlux。GA 版本后该 starter 更名为spring-ai-starter-mcp-client。3.2 stdio 模式调用1配置mcp-servers.json在客户端resources目录的mcp-servers.json中新增我们刚打包好的图片搜索服务。通过java命令执行 JAR 包-D参数相当于命令行注入 stdio 相关配置{mcpServers:{amap-maps:{command:npx.cmd,args:[-y,amap/amap-maps-mcp-server],env:{AMAP_MAPS_API_KEY:你的api-key}},image-search-mcp-server:{command:java,args:[-Dspring.ai.mcp.server.stdiotrue,-Dspring.main.web-application-typenone,-Dlogging.pattern.console,-jar,imgSearch_mcpServer/target/imgSearch_mcpServer-0.0.1-SNAPSHOT.jar],env:{}}}}要点说明amap-maps是上一章配置的高德 MCP保留即可两者可共存-Dspring.ai.mcp.server.stdiotrue让服务端以 stdio 模式运行-Dspring.main.web-application-typenone关闭 Web 容器-Dlogging.pattern.console置空控制台日志格式必须配置——因为 stdio 使用标准输入输出流通信多余的控制台日志会干扰 JSON-RPC 报文-jar后的路径是相对客户端项目根目录的 JAR 路径请确保已先打包、且路径与你的实际产物一致。2客户端 Spring 配置在客户端application.yml中启用 stdio 模式并指定mcp-servers.json位置spring:ai:mcp:client:stdio:servers-configuration:classpath:mcp-servers.json3启动项目发起对话沿用上一章的doChatWithMcp方法内部通过ToolCallbackProvider把 MCP 工具注入ChatClient4运行效果以 Debug 模式运行通过断点可以看到functionCallbacks中成功加载了图片搜索工具最终输出结果包含多个图片地址。小贴士stdio 模式下服务端是以子进程形式被客户端拉起的代码上打断点不方便调试。若想调试服务端逻辑建议使用下文 3.3 的 SSE 模式。3.3 SSE 模式调用SSE 模式下服务端是一个独立启动的 Web 服务客户端通过网络连接它调试体验更好服务端可以单独打断点、看日志。1服务端切换到 SSE 配置修改服务端application.yml激活 SSE 配置server:port:9090spring:application:name:imgSearch_mcpServerprofiles:active:sse,localapplication-sse.yml中stdio: false让服务端以 SSE 模式启动。2以 Debug 模式启动服务端直接运行ImgSearchMcpServerApplication主类即可启动成功后服务端监听9090端口并提供/sse与/mcp/message两个端点。3修改客户端配置修改客户端application.yml添加 SSE 连接配置同时注释掉原有的 stdio 配置避免两种模式冲突、产生端口或进程问题spring:ai:mcp:client:sse:connections:server1:url:http://localhost:9090# stdio:# servers-configuration: classpath:mcp-servers.json注意url的端口必须与服务端server.port保持一致示例均为9090。如果端口不一致客户端会连接失败。4运行测试再次运行doChatWithMcp测试会发现这次 MCP 服务端的代码被真实执行可在服务端打断点确认。3.4 stdio 与 SSE 对比小结对比维度stdioSSE传输方式标准输入 / 输出子进程HTTP Server-Sent Events运行方式由客户端自动拉起子进程独立部署、独立启动的 Web 服务适用场景本地调用、小型项目远程调用、多客户端共享调试难度较高stdout 被协议占用低服务端可打断点、看日志安全本地进程不暴露网络端口需自行处理鉴权 / 网络安全性能无网络开销相对更高有网络传输开销客户端配置mcp-servers.json stdio 配置sse.connections.url指向服务端地址四、常见问题排查JAR 包找不到 / 报无法执行客户端启动前必须先mvn package打包服务端并核对mcp-servers.json中-jar的路径与文件名是否与 target 目录中的实际产物一致。stdio 模式启动后控制台乱码 / 卡住 / 通信异常确认已在启动参数中加入-Dlogging.pattern.console关闭控制台日志服务端代码里不要用System.out.println直接输出业务信息会污染 stdio 协议报文。Pexels 返回 401 / 鉴权失败检查Pexels.api-key是否配置正确、Key 是否已生效。Pexels 要求把 Key 直接放在Authorization请求头中无需Bearer前缀。SSE 连接失败Connection refused / timeout服务端是否已启动客户端url的端口是否与服务端server.port一致切换模式后是否残留了旧的 stdio 配置切换传输模式后出现端口冲突 / 重复进程客户端配置里 stdio 与 SSE二选一把另一份注释掉服务端 Profilesse/stdio同样只激活一份。工具未加载functionCallbacks为空检查服务端ToolCallbackProviderBean 是否已注册、依赖是否引入完整、JAR 是否已重新打包再看客户端启动日志中 MCP 连接的tools/list是否正常参考上一章的经验。ToolParam报找不到符号Spring AI 版本差异导致。1.0.0-M6使用ToolParamGA 版本后更名为ToolParameter请按依赖版本替换。Windows 下命令找不到在 Windows 下npx需写成npx.cmd高德 MCP 场景服务端用java命令时请确认 JDK 已加入 PATH。五、最佳实践与部署建议慎用 MCPMCP 不是银弹本质就是标准化的工具调用。如果只是应用内部自用、不需要共享的工具直接用原生Tool即可能省去打包、部署、进程管理的成本。建议能不用就不用先用工具调用确有共享 / 生态诉求时再转 MCP。传输模式选型stdio 适合本地小型项目安全且性能好SSE 适合独立服务、多客户端共享的中大型项目。服务端开发时推荐引入 WebMVC 版本一套代码两种模式随意切换。工具描述要清晰Tool、ToolParam的description要写清楚用途、参数含义AI 才能准确判断何时调用、传什么参数。注意容错工具方法内部捕获所有可能异常并返回友好错误信息本章示例已体现避免一次失败拖垮整个对话流程。性能与超时服务端耗时的操作可改用 ASYNC 模式或设置合理超时客户端也要配置request-timeout防止 MCP 调用过久阻塞 AI 应用。安全与密钥管理API Key 不要硬编码、不要提交 Git。用环境变量 /application-local.ymlgitignore/ 配置中心注入。远程部署 SSE 服务时务必考虑鉴权与网络隔离避免服务被滥用。跨平台兼容stdio 模式注意 Windows 与 Linux 的命令差异.cmd后缀、路径分隔符、进程启动方式。生产环境建议用 Linux / Docker 统一运行时。部署方式本地部署stdio把服务端 JAR 放到客户端可访问的机器上通过mcp-servers.json配置即可适合小项目远程部署SSE与部署普通后端 Web 项目一致JAR 容器 / systemd / 云主机适合需要共享的服务Serverless阿里云百炼等平台支持将 MCP 服务部署到函数计算。注意目前主要通过npx/uvx方式部署Java 服务一般需要自行部署或选择兼容方案。六、小结MCP 服务端开发 用Tool写工具 用ToolCallbackProvider注册工具再通过 starter 依赖自动发布为 MCP 服务开发过程与原生工具调用几乎一致。服务端支持 stdio / SSE 两种传输模式通过配置文件即可切换客户端在mcp-servers.jsonstdio或sse.connectionsSSE中登记服务即可调用。MCP 的本质是标准化的工具调用不是 AI 主动调服务而是客户端把工具清单告诉 AIAI 决定调用时由我们的程序执行并回填结果。

相关新闻

Cadence Allegro实战避坑指南:从安装配置到PCB设计的核心技巧

Cadence Allegro实战避坑指南:从安装配置到PCB设计的核心技巧

1. 从“随记”到“避坑指南”:一个Cadence老用户的日常 “Cadence&Allegro随记02”这个标题,乍一看像是个人的学习笔记,随意且零散。但如果你在EDA(电子设计自动化)这个圈子里待久了,尤其是和Cadence这…

2026/10/20 18:54:47 阅读更多 →
Mac安装VMware Fusion虚拟机:从原理到实战的完整指南

Mac安装VMware Fusion虚拟机:从原理到实战的完整指南

1. 项目概述:为什么Mac用户需要虚拟机? 作为一名长期在Mac和Windows双平台切换的开发者,我深知“生态壁垒”带来的不便。Mac的macOS系统以其流畅和稳定著称,但在某些特定场景下,比如需要使用仅支持Windows的行业软件、…

2026/10/20 0:44:21 阅读更多 →
Codex:从代码生成器到职场AI副驾的实战应用与挑战

Codex:从代码生成器到职场AI副驾的实战应用与挑战

1. 从“代码生成器”到“职场副驾”:Codex的定位演变如果你最近在技术社区或者一些效率工具论坛里逛,可能会发现一个有趣的现象:讨论OpenAI Codex的人,不再仅仅是程序员了。产品经理在用它快速生成需求文档的框架,运营…

2026/10/20 8:44:56 阅读更多 →

最新新闻

基于STM32的猪舍环境监测与控制系统设计与调试实战

基于STM32的猪舍环境监测与控制系统设计与调试实战

做毕业设计选题的时候,我拿到“基于单片机的猪舍环境监测与控制系统设计”这个题目,第一反应是“这能有什么技术含量”。传感器加单片机加继电器,采集几个环境参数,超过阈值就开风机,听起来就是入门级组合。真正动手之…

2026/10/21 7:11:52 阅读更多 →
CMOS两级运放设计:从仿真抖动到版图稳定的全链路工程实践

CMOS两级运放设计:从仿真抖动到版图稳定的全链路工程实践

简介:本资源是一份完整的CMOS两级运算放大器课程设计报告,面向微电子、集成电路设计及相关专业高年级本科生与研究生,解决模拟IC设计中核心模块——密勒补偿型两级运放的手工计算、仿真验证与性能评估问题。文档为单文件Word格式(…

2026/10/21 7:11:52 阅读更多 →
动静结合的程序分析:让静态分析缩小战场,动态分析验明告警

动静结合的程序分析:让静态分析缩小战场,动态分析验明告警

做检测工具的人多半经历过这种拉扯:动态分析跑出来的每条报告都有真实执行作为依据,可换个输入就什么都复现不出来;静态分析能在几分钟内把整个代码库里的可疑点全标出来,可仔细一查,大半是误报。我就是在反复被这两者…

2026/10/21 7:11:52 阅读更多 →
PDF儿童发育量表的结构化解析与临床逻辑落地

PDF儿童发育量表的结构化解析与临床逻辑落地

简介:本资源为国家卫生行业标准《WS/T 580—2017 0岁~6岁儿童发育行为评估量表》完整PDF版,面向儿科医生、儿童保健人员、特教教师、康复治疗师及婴幼儿发展研究者,用于科学、标准化地评估0~6岁(未满7周岁&…

2026/10/21 7:11:52 阅读更多 →
Markdown自动化三大利器:目录、标签、索引生成实战指南

Markdown自动化三大利器:目录、标签、索引生成实战指南

1. 为什么说标签、索引、目录是Markdown自动化的核心写过上千篇Markdown文档之后,我最想推荐给同行的自动化方向,就是围绕标签、索引、目录生成这三个点做文章。你可能觉得这不就是三个很基础的功能吗?随便找个编辑器插件就能搞定。但真当你维…

2026/10/21 7:11:52 阅读更多 →
《数字设计-原理与实践》PDF实操指南:从可运行Verilog到FPGA时序约束落地

《数字设计-原理与实践》PDF实操指南:从可运行Verilog到FPGA时序约束落地

简介:《数字设计-原理与实践》是一本面向计算机科学与电子工程专业初学者及入门工程师的经典教材,系统讲授数字电路设计的核心原理与工程实践方法。资源为单文件PDF格式,共1个4.52MB高清电子书,内容覆盖组合逻辑、时序逻辑、有限状…

2026/10/21 7:10:51 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →