SpringAI+MCP协议 实战

article/2025/6/19 4:50:42

文章目录

  • 前言
    • Spring AI
    • Mcp(Model Context Protocol)
  • 快速实战
    • Spring AI
    • Spring AI 集成 MCP 协议
      • Spring Mcp Client 示例
      • Spring Mcp Server 示例

前言

大模型发展可能到了接近成熟的程度了,但是业界的重点肯定不会仅仅就放在大模型上的,还有就是业务和应用。

大模型如果投入应用,其中很重要的配套技术叫AI Agents,就是智能体。AI Agent(也称人工智能代理)是一种能够感知环境、进行决策和执行动作的智能实体。智能体像人一样,它有记忆、有逻辑分析能力、有任务的拆解能力、问题的拆解能力和最后综合回来统一解决问题的能力。

AI Agents竞争就是未来很重要的方向。我们大部分人都优势应该不是大模型,但可以是AI Agents,也就是在配套技术上面有很多的优势,才能使得他做任何一个业务的完成度极大地提升了。

现在,Agent 基本就等于 “大模型 + 插件 + 执行流程 / 思维链”,分别会对应控制端 (Brain / 大脑)、感知端 (Preception)、执行端 (Action) 环节:在这里插入图片描述

Spring AI

尽管Python最近成为了编程语言的首选,但是Java在人工智能领域的地位同样不可撼动,得益于强大的Spring框架。随着人工智能技术的快速发展,我们正处于一个创新不断涌现的时代。从智能语音助手到复杂的自然语言处理系统,人工智能已经成为了现代生活和工作中不可或缺的一部分。在这样的背景下,Spring AI 项目迎来了发展的机遇。尽管该项目汲取了Python项目如LangChain和LlamaIndex的灵感,但Spring AI并不是简单的移植。该项目的初衷在于推进生成式人工智能应用程序的发展,使其不再局限于Python开发者。

Spring AI 的核心理念是提供高度抽象化的组件,作为开发AI应用程序的基础。这些抽象化组件具备多种实现,使得开发者能够以最少的代码改动便捷地交换和优化功能模块。

具体而言,Spring AI 提供了支持多种主流模型提供商的功能,包括OpenAI、Microsoft、Amazon、Google和Hugging Face。支持的模型类型涵盖了从聊天机器人到文本生成、图像处理、语音识别等多个领域。而其跨模型提供商的可移植API设计,不仅支持同步和流式接口,还提供了针对特定模型功能的灵活选项。

此外,Spring AI 还支持将AI模型输出映射为POJO,以及与主流矢量数据库提供商(如Apache Cassandra、Azure Vector Search、MongoDB Atlas等)无缝集成的能力。其功能不仅局限于模型本身,还包括了数据工程中的ETL框架和各种便利的函数调用,使得开发AI应用程序变得更加高效和可靠。

Spring Ai官网:https://spring.io/projects/spring-ai

Mcp(Model Context Protocol)

什么是Mcp?

在这里插入图片描述

Model Context Protocol 是Anthropic 于2024年11月重磅开源的「模型上下文协议」MCP。其是一种开放的通信协议,是人工智能领域的 “USB 接口”,在大模型和其他数据源(数据、工具、开发环境等)之间建立了双向、并且更加安全的连接。
Mcp 将LLM的数据孤岛被彻底打破,LLM应用和外部数据源、工具都将无缝集成。目标是实现LLM应用程序与外部数据源和工具之间的无缝集成。

官方文档:https://modelcontextprotocol.io/introduction

在这里插入图片描述

快速实战

Spring AI

当我们开始时,首先需要创建一个项目结构。我们可以前往官方网站,快速生成Spring AI的依赖并创建项目。

在这里插入图片描述
IDEA配置方式不过多介绍,参考:https://blog.csdn.net/qq_15437629/article/details/131912201

Maven 仓库配置在pom.xml中添加以下内容:

<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository>
</repositories>

导入 Spring AI BOM

<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

添加 OpenAI 聊天

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

使用 OpenAI 创建 API 来访问 ChatGPT 模型。在OpenAI 注册页面创建账户并在API 密钥页面生成令牌。如果需要其他AI,则添加对应的starter即可,如Ollama:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

Ollama Chat 示例:
https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html

package com.example.spring_ai;import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;import java.util.Map;@RestController
public class ChatController {private final OllamaChatModel chatModel;@Autowiredpublic ChatController(OllamaChatModel chatModel) {this.chatModel = chatModel;}@GetMapping("/ai/generate")public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", this.chatModel.call(message));}@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {Prompt prompt = new Prompt(new UserMessage(message));return this.chatModel.stream(prompt);}
}

application.properities:

spring.application.name=spring-ai
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.options.model=deepseek-r1
server.port=8181
logging.level.org.springframework.ai=DEBUG

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>spring-ai</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-ai</name><description>Demo project for Spring Boot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version><spring-ai.version>1.0.0-M6</spring-ai.version> <!-- 或最新稳定版 --></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

测试结果:
在这里插入图片描述

Spring AI 集成 MCP 协议

在这里插入图片描述

对于 Mcp Client,Spring AI 提供了如下两个 Starter 集成 MCP Client;

  • spring-ai-mcp-client-spring-boot-starter: 实现基于 STDIO 和 HTTP 的 SSE 传输协议的 Mcp Client
  • spring-ai-mcp-client-webflux-spring-boot-starter: 实现基于 WebFlux 的 SSE 传输协议的 Mcp Client

对于 Mcp Server, Spring AI 提供了如下三个 Starter 集成 Mcp Server:

  • spring-ai-mcp-server-spring-boot-starter: 实现支持 STDIO 传输协议的 Mcp Server
  • spring-ai-mcp-server-webmvc-spring-boot-starter: 实现基于 webmvc 的 SSE 传输协议的 Mcp Server
  • spring-ai-mcp-server-webflux-spring-boot-starter: 实现基于 webflux 的 SSE 传输协议的 Mcp Server

Spring Mcp Client 示例

https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html

基于SpringAI 1.0.0-M5实现:

对于 Mcp Client,Spring AI 提供了如下两个 Starter 集成 MCP Client;

spring-ai-mcp-client-spring-boot-starter: 实现基于 STDIO 和 HTTP 的 SSE 传输协议的 Mcp Client
spring-ai-mcp-client-webflux-spring-boot-starter: 实现基于 WebFlux 的 SSE 传输协议的 Mcp Client

pom依赖:

		<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId></dependency>

配置文件:

spring.application.name=spring-ai
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.options.model=qwen2.5:0.5b
server.port=8181# MCP Client Configuration
spring.ai.mcp.client.enabled=true
spring.ai.mcp.client.name=mcp-client
spring.ai.mcp.client.version=1.0.0
spring.ai.mcp.client.type=SYNC
spring.ai.mcp.client.request-timeout=30s
spring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-servers-config.json

mcp-servers-config.json:

{"mcpServers": {"filesystem": {"command": "D:\\\\node_js\\\\npx.cmd","args": ["-y","@modelcontextprotocol/server-filesystem","."]}}
}

1,服务包说明:

@modelcontextprotocol/server-filesystem 是 MCP 协议中用于对接文件系统的标准化服务模块,其配置通过 Node.js 环境快速启动,使 LLM 能够安全、可控地操作本地文件资源‌。

MCP 生态中还有其他类型的服务包,例如:
‌@modelcontextprotocol/server-postgres‌:支持数据库查询‌;
‌@modelcontextprotocol/server-http‌:集成 RESTful API‌。

2,npx

本地需要提前安装配置npx和uvx。npx是nodeJs下的一个工具可以执行一些Ts或者JS脚本甚至应用程序,uvx的功能则和他很类似是python环境下执行脚本的工具。简单来说,使用 TypeScript 编写的 MCP server 可以通过 npx 命令来运行,使用 Python 编写的 MCP server 可以通过 uvx 命令来运行。npx 是 Node.js 自带的工具,无需单独安装,但需先安装 Node.js。

npm 全局目录配置:

mkdir D:\node_js\pm-cache
npm config set prefix "D:\node_js"
npm config set cache "D:\node_js\pm-cache"
npm config get prefix
npm config get cachenpm cache clean --force

执行以下命令检查是否成功:

npx -v          # 应输出 npx 版本(如 10.8.2)
npm ls -g --depth=0  # 检查全局依赖是否可正常列出

如果出现权限问题: 右键点击 D:\node_js → 属性 → 安全 → 高级 ,添加当前用户并勾选 完全控制

3,模型选择

出现报错:deepseek-r1 does not support tools,需要选择支持tools的模型:

在这里插入图片描述

示例代码:

package com.example.spring_ai;import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.ai.mcp.SyncMcpToolCallbackProvider;@RestController
public class ChatController {@Resourceprivate OllamaChatModel ollamaChatModel;@Resourceprivate SyncMcpToolCallbackProvider toolCallbackProvider;@GetMapping("/chat")public String call(@RequestParam String input) {ChatClient chatClient = ChatClient.builder(ollamaChatModel).defaultTools(toolCallbackProvider.getToolCallbacks()).build();return chatClient.prompt(input).call().content();}
}

测试结果:

在这里插入图片描述
在这里插入图片描述

Spring Mcp Server 示例

https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html

基于SpringAI 1.0.0-M6实现:

依赖:

<!--标准IO通信类型的MCP服务端,适合命令行形式的桌面工具,例如之前的案例中的文件助手  -->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency><!--基于Http协议通信类型的MCP服务端  -->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
</dependency><!--基于SSE通信类型的MCP服务端  -->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-server-webflux-spring-boot-starter</artifactId>
</dependency>

一个标准的MCP服务端程序需要包含三个主要信息分别为Tools、Prompts、Resources

  • 资源(Resources):资源是AI可以读取的数据,比如文件内容、数据库查询结果或API的响应。 例如,AI可能通过资源获取你的日历事件列表。
  • 工具(Tools):工具是AI可以调用的函数,用于执行特定操作,比如添加新任务或发送邮件,使用工具时,通常需要用户先批准,以确保安全。
  • 提示词(Prompts):提示词是服务器提供给AI的预写消息或模板,帮助AI理解如何使用资源和工具,例如,服务器可能告诉AI:“你可以添加任务,试试说‘添加任务:买牛奶’”,从而帮助用户更轻松地完成任务。提示词虽然直接提供给AI,但实际上是通过AI间接帮助用户,比如AI会根据提示词告诉用户如何操作。

依赖版本:

<properties><java.version>17</java.version><spring-ai.version>1.0.0-M6</spring-ai.version> 
</properties>		
<dependency><groupId>io.modelcontextprotocol.sdk</groupId><artifactId>mcp</artifactId><version>0.8.1</version>
</dependency>

配置:

spring.ai.mcp.server.enabled=true
spring.ai.mcp.server.name=custom-mcp-server
spring.ai.mcp.server.version=1.0.0
spring.ai.mcp.server.type=ASYNC   
spring.ai.mcp.server.sse-message-endpoint=/mcp/stream  # SSE????

1,定义外部工具类

实现两个示例工具:查询当前时间和计算数学表达式。

package com.example.spring_ai;import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.ai.tool.annotation.Tool;import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class CustomTools {@Tool(description = "获取当前系统时间")public String getCurrentTime() {return LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);}@Tool(description = "执行数学运算(支持加减乘除)")public double calculateExpression(@Parameter(name = "expression", description = "数学表达式,如 3+5*2") String expr) {ScriptEngineManager mgr = new ScriptEngineManager();ScriptEngine engine = mgr.getEngineByName("JavaScript");try {return (double) engine.eval(expr);} catch (ScriptException e) {throw new RuntimeException("表达式解析失败: " + e.getMessage());}}
}

ps:Java 15+ 移除了 Nashorn JavaScript 引擎,导致 getEngineByName(“JavaScript”) 返回 null:

<!-- Nashorn 兼容依赖 -->
<dependency><groupId>org.openjdk.nashorn</groupId><artifactId>nashorn-core</artifactId><version>15.4</version>
</dependency>

2,注册工具到MCP服务器

通过@Configuration类将工具暴露为MCP协议的可调用接口:

package com.example.spring_ai;import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.ToolCallbacks;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class McpServerConfig {@Bean@Primary // 添加此注解指定优先使用此Beanpublic ToolCallbackProvider toolProvider() {// 注册工具类实例ToolCallback[] callbacks = ToolCallbacks.from(new CustomTools());return ToolCallbackProvider.from(callbacks);}
}

4,客户端调用示例

package com.example.spring_ai;import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/client")
public class McpClientController {private final ChatClient chatClient;public McpClientController(ChatClient.Builder builder, ToolCallbackProvider tools) {this.chatClient = builder.defaultTools(tools).build();}@GetMapping("/time")public String getTime() {return chatClient.prompt("调用getCurrentTime工具").call().content();}@GetMapping("/calc")public String calculate(@RequestParam String expr) {return chatClient.prompt("计算表达式:" + expr).call().content();}
}

当客户端发送请求时,Spring AI 的底层流程会遍历所有已注册工具,检查输入文本是否与工具描述(如:执行数学运算(支持加减乘除))匹配。若匹配成功,直接调用 对应方法,无需显式指定工具名称。

测试结果如下:

在这里插入图片描述

在这里插入图片描述

日志:

[spring-ai] [nio-8181-exec-3] o.s.a.m.tool.DefaultToolCallingManager   : Executing tool call: getCurrentTime
[spring-ai] [nio-8181-exec-3] o.s.ai.tool.method.MethodToolCallback    : Starting execution of tool: getCurrentTime
[spring-ai] [nio-8181-exec-3] o.s.ai.tool.method.MethodToolCallback    : Successful execution of tool: getCurrentTime
[spring-ai] [nio-8181-exec-3] o.s.a.t.e.DefaultToolCallResultConverter : Converting tool result to JSON.[spring-ai] [nio-8181-exec-7] o.s.a.m.tool.DefaultToolCallingManager   : Executing tool call: calculateExpression
[spring-ai] [nio-8181-exec-7] o.s.ai.tool.method.MethodToolCallback    : Starting execution of tool: calculateExpression
[spring-ai] [nio-8181-exec-7] o.s.ai.tool.method.MethodToolCallback    : Successful execution of tool: calculateExpression
[spring-ai] [nio-8181-exec-7] o.s.a.t.e.DefaultToolCallResultConverter : Converting tool result to JSON.

在这里插入图片描述


http://www.hkcw.cn/article/VukRpDGMPR.shtml

相关文章

AI+游戏开发:如何用 DeepSeek 打造高性能贪吃蛇游戏

文章目录 一、技术选型与准备1.1 传统开发 vs AI生成1.2 环境搭建与工具选择1.3 DeepSeek API 初步体验 二、贪吃蛇游戏基础实现2.1 游戏结构设计2.2 初始化游戏2.3 DeepSeek 生成核心逻辑 三、游戏功能扩展3.1 多人联机模式3.2 游戏难度动态调整3.3 游戏本地保存与回放3.4 跨平…

AI智能体|扣子(Coze)全网最详细讲解(保姆级)

没有任何编程基础&#xff1f;没关系&#xff01; 这篇保姆级教程将手把手教你用Coze平台打造能搜索新闻、分析数据、创作内容的AI智能体&#xff0c;让你的工作效率提升300%。从此告别加班&#xff0c;让AI成为你最强力的工作伙伴&#xff01; 什么是AI智能体&#xff1f;一个…

国足备战世预赛生死战 力争两连胜

中国男足国家队于6月2日晚抵达印度尼西亚首都雅加达,准备参加5日举行的2026美加墨世界杯亚洲区预选赛18强赛第9轮对阵印尼队的比赛。当地时间晚上10时30分,中国队在主教练伊万科维奇的带领下走出雅加达苏加诺-哈达国际机场,随后登上大巴前往酒店。伊万科维奇表示,中国队在…

滕州走失男孩遗体被发现 溺水身亡排除刑案

6月2日晚,山东省滕州市公安局发布警情通报。5月31日22时35分许,滕州市公安局接到孔某某报警,称其10岁的外孙赵某某于当日17时许离家后失联。接警后,公安机关迅速行动,调阅监控、走访群众,并联合当地政府和社会救援力量,使用搜救警犬和无人机等手段持续搜寻。6月2日15时许…

官方通报幼童掉入高铁股道 儿童已安全交还家长

6月2日下午,上铁淮南西站发布了一则情况说明。5月31日16时09分左右,铁路工作人员在淮南南站3号站台边缘下方发现了一名儿童,并迅速将其拉上站台。经了解,这名儿童当天随家长乘坐G7446次列车,在列车停靠淮南南站3号站台期间,不慎从列车和站台之间的间隙掉入股道。经过初步…

ubuntu安装devkitPro

建议开个魔法 wget https://apt.devkitpro.org/install-devkitpro-pacman chmod x ./install-devkitpro-pacman sudo ./install-devkitpro-pacman&#xff08;下面这句如果报错也没事&#xff09; sudo ln -s /proc/self/mounts /etc/mtab往~.bashrc添加 export DEVKITPRO/o…

西藏那曲市双湖县发生地震 震级3.4级

西藏那曲市双湖县发生地震 震级3.4级!中国地震台网正式测定:6月3日9时44分在西藏那曲市双湖县(北纬33.65度,东经89.37度)发生3.4级地震,震源深度10千米。(总台央视记者 张腾飞)责任编辑:0882

张雪峰直播含泪自曝告别直播 压力山大但问心无愧

6月2日,张雪峰自曝可能告别直播的话题登上微博热搜。据报道,张雪峰结束了2025届高考志愿填报直播,并宣布暂停直播两个月。在直播结束时,张雪峰哽咽着向屏幕前的家长和考生深深鞠躬:“不管以后发生什么事,希望大家记住,我对得起大家。”他直言一路压力山大,但问心无愧。…

使用 Deepseek AI 制作视频的完整教程

使用 Deepseek AI 制作视频的完整教程 一、简介 Deepseek 作为一款强大的国产 AI 模型&#xff0c;可以帮助我们快速生成视频创作所需的脚本和画面描述。本教程将介绍如何利用 Deepseek AI 辅助视频制作的完整流程。 二、准备工作 需要准备的工具&#xff1a; Deepseek AI…

b站缓存视频导出/转换成.mp4文件

以Redmi K40S手机为例 1.查询视频id 1.首先缓存好要转换的视频 2.打开手机b站离线缓存->离线设置->离线诊断 3.选择要转换成mp4的缓存视频 4.记住视频id 2.根据id寻找对应的m4a文件 在/Android/data/tv.danmaku.bili/文件下&#xff0c;根据视频id找到对应的文件夹…

uniapp [全端兼容] - 实现瀑布流自定义单列+双列+三列布局,瀑布流组件插件可配置页面显示多少列数+自适应计算页面,实现瀑布流列表懒加载上拉页面触底加载(图片瀑布流、图文瀑布流、视频瀑布流)

前言 如果您需要 Vue 版本,请访问 这篇文章。 在 uni-app 全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)开发中,实现瀑布流布局列表+无限懒加载完整实现思路及源码,可配置瀑布流布局列数(支持1列/2列/3列/多列)组件改个配置项后自动重构瀑布流布局…

懒人必备!Coze一键制作火柴人心理学视频,新号45天涨了2.6w粉!(附超详细实战教程)

目录 一、工作流设计思路 二、制作工作流 2.1 开始节点 2.2 文案分镜分割 2.3 生成火柴人的提示词 2.4 字幕翻译成英文 2.5 图像内容生成 2.5.1 图像生成 2.5.2 选择器 2.5.3 补充图片工作流 2.5.4 智能抠图01 2.5.5 智能抠图02 2.5.6 变量聚合 2.6 固定背景图 …

iOS视频编码详细步骤(视频编码器,基于 VideoToolbox,支持硬件编码 H264/H265)

iOS视频编码详细步骤流程 1. 视频采集阶段 视频采集所使用的代码和之前的相同&#xff0c;所以不再过多进行赘述 初始化配置&#xff1a; 通过VideoCaptureConfig设置分辨率1920x1080、帧率30fps、像素格式kCVPixelFormatType_420YpCbCr8BiPlanarFullRange设置摄像头位置&am…

FramePack本地部署教程:6GB显存即可生成高质量视频,彻底摆脱显存线性依赖!

FramePack 由ControlNet之父张吕敏团队研发&#xff0c;是一种用于逐步生成视频的下一帧&#xff08;下一帧部分&#xff09;预测神经网络结构。FramePack 将输入上下文压缩到固定长度&#xff0c;以便生成工作量与视频长度无关。即使在笔记本电脑 GPU 上&#xff0c;FramePack…

OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;分享&#xff5c;16个含源码和数据集的计算机视觉实战项目 本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括&#xff1a; 1. 人…

04、Python爬虫——批量爬取douyin视频,下载到本地,半个小时内解决批量下载douyin视频

概要 针对批量爬取douyin视频分为两期进行讲解&#xff0c;本期&#xff08;第一期&#xff09;内容是讲解如何在上批量下载视频&#xff0c;如何快速的搭建环境&#xff0c;修改参数&#xff0c;让小伙伴们边看边学&#xff0c;半个小时内就可以轻松将douyin视频批量进行下载。…

opencv下载安装及VS配置(笔记)

1、opencv下载及安装 官网地址&#xff1a;https://opencv.org/&#xff0c;点击Releases进入下载界面&#xff1a; 根据自己的需要下载相应的版本&#xff0c;这里我下载的是opencv-4.10版本&#xff1a; 找到下载的exe文件&#xff1a; 双击安装&#xff0c;选择安装路径&…

[ComfyUI]腾讯混元视频:v2v视频驱动,最强开源视频模型,影视级画质与导演级运镜,本地16G可体验

前言 腾讯混元视频&#xff1a;v2v视频驱动&#xff0c;影视级画质与导演级运镜&#xff0c; HunyuanVideo简介 在之前文章中已经介绍过腾讯最新开源的当前最大参数的文生视频模型&#xff1a;HunyuanVideo。这是一款全新的开源视频生成具有130 亿参数大模型&#xff0c;具有…

一文就懂:基带、视频、中频、射频

在无线电领域&#xff0c;经常接触到基带、视频、中频、射频等概念。这些专业名词比较基础&#xff0c;大部分电子相关专业工程师对于这些概念都比较清楚&#xff0c;无需再往下看。因此本文的受众主要是非本专业相关人士但是又经常接触这些名词的同学&#xff0c;有些同学似懂…

离家出走的卡皮巴拉豆包回家了 两个月后胖了一斤多

6月3日凌晨2点,扬州市茱萸湾风景区之前出走的卡皮巴拉“豆包”走进园区诱捕笼,触动机关后自动门关闭,“豆包”顺利回家。据饲养员介绍,“豆包”出逃整整两个月,在外面不仅没有瘦,反而胖了一斤多,毛发圆润光滑。现在,“霸总”、“躲躲”与归来的“豆包”终于团圆,毛茸茸…