Skills Plugins MCP Prompt Model 博客 我的中心

competition-ppt

中国国际大学生创新大赛(国赛)路演PPT制作。当用户提到"竞赛PPT"、"国赛"、"路演PPT"、"创新创业大赛"、"比赛幻灯片"时触发。基于两份国赛金奖级模板的设计方法论,使用python-pptx + PIL生成原创高质量PPT。

DeepseekModel Curated skill Quality Good · 64 v1.0.0

Get

https://deepseekmodel.com/api/download.php?id=2750527986liu-maker-competition-ppt-skill-skill-md&format=skill
Download .skill Standard format with system_prompt and model_config, ready for any agent framework
The actual content of the system_prompt field in the .skill file.
name competition-ppt description 中国国际大学生创新大赛(国赛)路演PPT制作。当用户提到"竞赛PPT"、"国赛"、"路演PPT"、"创新创业大赛"、"比赛幻灯片"时触发。基于两份国赛金奖级模板的设计方法论,使用python-pptx + PIL生成原创高质量PPT。 竞赛PPT制作 Skill 触发条件 用户需要制作参加中国国际大学生创新大赛(或类似创新创业比赛)的路演PPT。 第一步:需求收集(必须先做) 在开始制作前,用 AskUserQuestion 工具收集以下信息: 项目文件 :用户是否有策划书、路演稿、流程大纲等文件?如果有,先全部读取理解内容。 参考模板 :用户是否提供了参考PPT模板?如果有,必须用python-pptx分析其结构(见"模板分析"章节), 不要直接复制模板素材 ,而是学习其设计思路。 页数要求 :一般20-43页,根据内容量决定。 配色偏好 :默认深蓝+金色,用户可指定。 第二步:模板分析(如有参考模板) 如果用户提供了参考PPT, 必须 执行以下分析流程: 2.1 用python-pptx提取结构信息 from pptx import Presentation prs = Presentation( "模板路径.pptx" ) slides_list = list (prs.slides) print ( f"尺寸: {prs.slide_width/ 914400 : .1 f} x {prs.slide_height/ 914400 : .1 f} 英寸" ) print ( f"总页数: { len (slides_list)} " ) for i, slide in enumerate (slides_list): pics = sum ( 1 for s in slide.shapes if s.shape_type == 13 ) groups = sum ( 1 for s in slide.shapes if s.shape_type == 6 ) # 提取文本和图片位置 for shape in slide.shapes: if shape.has_text_frame: print ( f" 文本: {shape.text[: 100 ]} @( {shape.left/ 914400 : .1 f} , {shape.top/ 914400 : .1 f} )" ) if shape.shape_type == 13 : print ( f" 图片: @( {shape.left/ 914400 : .1 f} , {shape.top/ 914400 : .1 f} ) {shape.width/ 914400 : .1 f} x {shape.height/ 914400 : .1 f} " ) 2.2 提取背景图片(理解配色和视觉风格) from pptx.oxml.ns import qn import os os.makedirs( "template-bg" , exist_ok= True ) for i, slide in enumerate (slides_list): bg_elem = slide.background._element nsmap = { 'a' : 'http://schemas.openxmlformats.org/drawingml/2006/main' , 'r' : 'http://schemas.openxmlformats.org/officeDocument/2006/relationships' } blip = bg_elem.find( './/a:blipFill/a:blip' , nsmap) if blip is not None : embed = blip.get(qn( 'r:embed' )) if embed: rel = slide.part.rels[embed] img_part = rel.target_part ext = img_part.content_type.split( '/' )[- 1 ].replace( 'jpeg' , 'jpg' ) with open ( f"template-bg/slide {i+ 1 :02d} . {ext} " , 'wb' ) as f: f.write(img_part.blob) 2.3 用Read工具查看背景图片 将提取的背景图片复制到用户可见的工作文件夹,用Read工具查看,理解: 封面的配色方案(渐变色、主色调) 内容页的背景风格(浅色/深色、有无纹理) 特殊页面(时间线、致谢页)的设计 2.4 总结设计语言(不复制素材) 从模板中学习以下设计原则,然后 自己制作 设计素材: 配色方案(主色、辅色、强调色) 排版节奏(标题位置、内容区域划分) 元素密度(每页多少图片、多少文字块) 装饰手法(边框、分割线、图标风格) 第三步:内容大纲 3.1 国赛标准结构(参考两份模板的共同模式) 根据对两份国赛级PPT(41页冰雪经济 + 43页低空经济)的分析,标准结构如下: 编号 页面类型 内容 建议页数 1 封面 项目名称+副标题+团队+赛道+负责人 1页 2 政策背景 国家/行业政策支撑 1-2页 3 行业现状 市场数据、图表 1-2页 4 痛点分析 行业核心痛点(通常3个) 1-2页 5 项目概述 技术原理+核心突破+产品展示 1-2页 6 研发历程 时间线展示 1页 7-N 核心技术 每个核心技术独立1-2页 3-6页 N+1 核心子系统 系统架构展示 1-2页 N+2 核心母系统 整体系统集成 1页 N+3 衍生技术 技术延伸应用 1-2页 N+4 衍生场景 应用场景拓展 1页 N+5 技术参数 关键指标对比表 1页 N+6 技术壁垒/专利 知识产权保护 1页 N+7 项目荣誉 获奖/认证 1页 N+8 应用案例 实际落地案例(每个1页) 2-4页 N+9 应用场景 典型使用场景 1-2页 N+10 竞品分析 对比表格/雷达图 1页 N+11 服务客群/商业模式 用户画像+盈利模式 2-4页 N+12 行业/技术认可 合作方背书 1-2页 N+13 媒体报道 权威媒体引用 1页 N+14 领导关怀 领导视察/指导 1页(可选) N+15 个人成长 负责人成长历程 1-2页 N+16 团队介绍 负责人+成员+顾问 2-3页 N+17 学科引领/带动教育 产教融合成果 1-2页 N+18 社会价值 产业+人才+行业价值 1页 N+19 财务分析 收入预测+盈利模型 1页 N+20 未来规划 发展路线图 1页 N+21 致谢 感谢聆听 1页 关键原则 : 竞赛PPT要 信息密度高、论证充分 ,不要怕页数多 每个核心技术点 独立成页 团队/教育/社会价值需要 多页展开 案例、荣誉、媒体报道都是 加分页 3.2 页面标题体系(必须遵守) 每页内容页必须包含: Section标签 :左上角深色圆角矩形,显示页面类别(如"核心技术"、"痛点分析") 副标题 :以"——"开头,描述本页核心论点 页码 :右下角 "X/总数" [Section标签] ——副标题描述本页核心论点 ───────────────────────────────────────── 正文内容区域 第四步:设计素材制作 4.1 用PIL生成原创背景(不要复制模板素材) from PIL import Image, ImageDraw, ImageFilter import math, random W, H = 2000 , 1125 # 13.33x7.5英寸 @ 150DPI def gradient ( draw, w, h, c1, c2, direction= 'vertical' ): for i in range (h if direction == 'vertical' else w): ratio = i / (h if direction == 'vertical' else w) r = int (c1[ 0 ] + (c2[ 0 ] - c1[ 0 ]) * ratio) g = int (c1[ 1 ] + (c2[ 1 ] - c1[ 1 ]) * ratio) b = int (c1[ 2 ] + (c2[ 2 ] - c1[ 2 ]) * ratio) if direction == 'vertical' : draw.line([( 0 , i), (w, i)], fill=(r, g, b)) else : draw.line([(i, 0 ), (i, h)], fill=(r, g, b)) 必须生成的素材 (每种都需要): cover-bg.png (2000x1125):封面背景。深色渐变+抽象几何/光线/网络线条 content-bg.png (2000x1125):内容页背景。浅色+微妙网格/纹理+角落点缀 timeline-bg.png (2000x1125):时间线/研发历程背景。彩墨飞溅/渐变色块 dark-section-bg.png (2000x1125):深色强调页背景。深蓝+对角线纹理 thankyou-bg.png (2000x1125):致谢页背景。深色+中央金色光晕 gold-line.png (900x6):金色渐变分割线 section-badge.png (400x80):深色section标签底图(可选,也可以用代码画) moon-icon.png 或其他项目相关图标 (200x200) 封面背景制作要点 : 深色渐变(如深蓝→更深蓝) 添加径向光晕(金色/蓝色) 抽象几何线条(网络节点、数据流、网格线) 不能太花哨,要保持专业感 内容页背景制作要点 : 浅色为主(白/浅灰/浅蓝) 极其微妙的网格纹理 角落淡淡的蓝色水彩点缀 保持文字可读性 4.2 配色方案 默认配色(可按项目主题调整): NAVY = RGBColor( 0x0A , 0x16 , 0x28 ) # 深海军蓝,用于标题和section标签 DARK_BLUE = RGBColor( 0x0F , 0x1D , 0x35 ) # 深蓝 GOLD = RGBColor( 0xC9 , 0xA8 , 0x4C ) # 金色,用于强调和装饰 LIGHT_GOLD = RGBColor( 0xE8 , 0xD5 , 0x8C ) # 浅金色 WHITE = RGBColor( 0xFF , 0xFF , 0xFF ) # 白色 DARK_TEXT = RGBColor( 0x1E , 0x29 , 0x3B ) # 深色正文 SUB_TEXT = RGBColor( 0x64 , 0x74 , 0x8B ) # 灰色副文本 ACCENT_BLUE = RGBColor( 0x38 , 0x6F , 0xC4 ) # 蓝色强调 4.3 字体 标题 :等线(DengXian),Windows自带,现代清秀 正文 :等线(DengXian)或微软雅黑 数据/数字 :等线 Bold,突出显示 英文 :等线自动适配 第五步:PPT生成代码模板 5.1 基础框架 from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.enum.shapes import MSO_SHAPE import os W = Inches( 13.33 ) H = Inches( 7.5 ) IMG = "项目图片目录" BG = "设计素材目录" OUT = "输出路径.pptx" prs = Presentation() prs.slide_width = W prs.slide_height = H BLANK = prs.slide_layouts[ 6 ] # blank layout # 颜色定义(根据项目主题调整) NAVY = RGBColor( 0x0A , 0x16 , 0x28 ) GOLD = RGBColor( 0xC9 , 0xA8 , 0x4C ) WHITE = RGBColor( 0xFF , 0xFF , 0xFF ) DARK_TEXT = RGBColor( 0x1E , 0x29 , 0x3B ) SUB_TEXT = RGBColor( 0x64 , 0x74 , 0x8B ) ACCENT = RGBColor( 0x38 , 0x6F , 0xC4 ) 5.2 核心Helper函数 def add_bg ( slide, bg_path ): """添加全出血背景图""" if os.path.exists(bg_path): slide.background.fill.background() pic = slide.shapes.add_picture(bg_path, Emu( 0 ), Emu( 0 ), W, H) sp = pic._element sp.getparent().remove(sp) slide.shapes._spTree.insert( 2 , sp) def text_box ( slide, left, top, width, height, text, font_size= 18 , color=DARK_TEXT, bold= False , align=PP_ALIGN.LEFT, font_name= "等线" , line_spacing= 1.5 ): """添加文本框""" txBox = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height)) tf = txBox.text_frame tf.word_wrap = True p = tf.paragraphs[ 0 ] p.alignment = align run = p.add_run() run.text = text run.font.size = Pt(font_size) run.font.color.rgb = color run.font.bold = bold run.font.name = font_name if line_spacing: p.line_spacing = Pt(font_size * line_spacing) return txBox def multi_text ( slide, left, top, width, height, lines, font_size= 16 , color=DARK_TEXT, bold= False , align=PP_ALIGN.LEFT, font_name= "等线" , line_spacing= 1.5 ): """添加多段文本""" txBox = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height)) tf = txBox.text_frame tf.word_wrap = True for i, line_text in enumerate (lines): p = tf.paragraphs[ 0 ] if i == 0 else tf.add_paragraph() p.alignment = align p.space_after = Pt( 6 ) run = p.add_run() run.text = line_text run.font.size = Pt(font_size) run.font.color.rgb = color run.font.bold = bold run.font.name = font_name p.line_spacing = Pt(font_size * line_spacing) return txBox def gold_line ( slide, left, top, width ): """金色分割线""" shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(left), Inches(top), Inches(width), Pt( 3 )) shape.fill.solid() shape.fill.fore_color.rgb = GOLD shape.line.fill.background() def section_badge ( slide, text, left= 0.3 , top= 0.2 ): """左上角Section标签""" shape = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, Inches(left), Inches(top), Inches( 2.6 ), Inches( 0.6 )) shape.fill.solid() shape.fill.fore_color.rgb = NAVY shape.line.fill.background() tf = shape.text_frame p = tf.paragraphs[ 0 ] p.alignment = PP_ALIGN.CENTER run = p.add_run() run.text = text run.font.size = Pt( 22 ) run.font.color.rgb = WHITE run.font.bold = True run.font.name = "等线" def sub_header ( slide, text, left= 3.2 , top= 0.2 ): """副标题(——前缀)""" text_box(slide, left, top, 9.5 , 0.6 , f"—— {text} " , font_size= 16 , color=SUB_TEXT) def card_shape ( slide, left, top, width, height, fill=WHITE ): """白色卡片""" shape = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, Inches(left), Inches(top), Inches(width), Inches(height)) shape.fill.solid() shape.fill.fore_color.rgb = fill shape.line.color.rgb = RGBColor( 0xE2 , 0xE8 , 0xF0 ) shape.line.width = Pt( 1 ) return shape def add_img ( slide, path, left, top, width= None , height= None ): """安全添加图片""" if not os.path.exists(path): return None if width and height: return slide.shapes.add_picture(path, Inches(left), Inches(top), Inches(width), Inches(height)) elif width: return slide.shapes.add_picture(path, Inches(left), Inches(top), width=Inches(width)) else : return slide.shapes.add_picture(path, Inches(left), Inches(top)) def page_num ( slide, num, total ): """页码""" text_box(slide, 12.0 , 6.9 , 1.0 , 0.4 , f" {num} / {total} " ,
Keywords that activate this skill. Click one to copy it.

This skill does not provide trigger words.

The downloaded .skill package contains the following fields.
Field Description
formatFormat tag (skill/v1)
skill_idUnique skill ID
nameSkill name
versionVersion
descriptionDescription
categoryCategories (array)
trigger_wordsTrigger words
tagsTags
sourceSource
source_urlSource URL (this page)
exported_atExported at (set per download)
system_promptSystem prompt body
model_configModel config: provider / model / temperature / max_tokens / top_p
examplesExamples
install_guideImport guide for Coze / Dify / Claude / custom frameworks
The same skill can be exported in different platform formats.
.skill Standard format with system_prompt and model_config, ready for any agent framework Download
.skillpro Enhanced format with scripts, tools, dependencies and hooks Download
.json Plain JSON export with system_prompt and model parameters only Download
Coze Markdown with frontmatter, for Coze platform import Download
Dify Dify DSL, import directly after creating an app Download

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

验证码 --

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。