marp-cli安装:
Marp 是一个基于 Markdown 的开源幻灯片制作工具,可以轻松将 Markdown 文档转换为精美的幻灯片。其核心是 Marpit 框架,支持可定制主题、多种输出格式和动态功能。
Marp 支持的功能
- 通过插件快速制作:支持 VS Code 插件和实时预览。
- 命令行工具 (CLI):批量处理,导出 HTML、PDF 等格式。
- 支持 YAML 配置:灵活设置幻灯片主题、尺寸和分页。
- 自定义样式:支持 CSS 修改主题和排版样式。
- 嵌入动态内容:如代码高亮、公式 (MathJax)、图片背景等。
- 多种主题支持:内置主题(default、gaia、uncover)和自定义扩展主题。
Marp CLI 是一个命令行工具,用于处理 Marp(基于 @marp-team/marp-core)和所有基于 Marpit 框架的幻灯片转换器。
它可以轻松地将 Mapped 或 Marpit 格式的 Markdown 文件转换为静态 HTML/CSS、PDF、PowerPoint 文档和图像。
https://github.com/marp-team/marp-cli/releases
这里直接安装的windows版本exe
Marp服务搭建:
import subprocess
from flask import Flask, request, send_from_directory
import os
import time
app = Flask(__name__)
# 获取marp的路径
marp_path = os.getenv('MARP_PATH', './marp')
# 保存上传的Markdown内容,并转换成PPT
@app.route('/upload', methods=['POST'])
def upload_markdown():
content = request.get_data(as_text=True)
timestamp = str(int(time.time()))
md_filename = f"{timestamp}.md"
pptx_filename = f"{timestamp}.pptx"
# 保存Markdown文件
with open(f"data/{md_filename}", 'w', encoding='utf-8') as f:
f.write(content)
# 使用marp-cli将Markdown转换为PPT
try:
#需要安装LibreOffice
#subprocess.run([marp_path, '--pptx', '--pptx-editable', f'data/{md_filename}', '-o', f'data/{pptx_filename}'], check=True)
subprocess.run([marp_path, f'data/{md_filename}', '-o', f'data/{pptx_filename}'], check=True)
except subprocess.CalledProcessError as e:
return {
'message': 'Failed to convert Markdown to PPT',
'error': str(e)
}
# 返回文件链接
return f'Markdown 文件已保存\n预览链接: http://192.168.26.75:5004/data/{md_filename} \n下载链接: http://192.168.26.75:5004/data/{pptx_filename}?pptx'
# 提供静态文件服务
@app.route('/data/<path:filename>')
def serve_file(filename):
return send_from_directory('data', filename)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5004)
启动服务,
python .\marp-flask-service.py
SearXNG安装:
SearXNG 是一款免费、开源的元搜索引擎,能够聚合来自多达 200 多个搜索服务的结果,同时为用户提供强大的隐私保护。与商业搜索引擎不同,SearXNG 不会跟踪用户行为或存储个人数据,避免了个性化过滤和广告干扰。此外,它还支持通过 Tor 网络进行匿名访问,进一步增强了安全性和隐私性。
简单来说,SearXNG 是一个可以私有化部署的开源搜索引擎,既满足了用户对隐私的需求,又提供了灵活的自定义选项。无论是个人使用还是企业部署,它都是一个值得信赖的搜索解决方案。
1、拉取镜像,
docker pull searxng/searxng
2、启动容器,
sudo docker run --rm -d -p 8085:8080 -v ./searxng:/etc/searxng -e "BASE_URL=http://localhost:8085/" -e "INSTANCE_NAME=my-instance" searxng/searxng
3、生成密钥,输入指令,
openssl rand -hex 32
生成,cd535235f119844852cf24616bdb6e40ab3c2ee917296c115e05d0cf09555573
4、修改searxng/settings.yml文件配置信息,
# see https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true
server:
# base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml
secret_key: "4bbad1031e0b4345e894f5558bafa9e5ecd981220e86e8b30f8f099e4b8a46d6"
limiter: false
image_proxy: true
ui:
static_use_hash: true
redis:
url: false
search:
formats:
- html
- json
engines:
# 启用默认禁用的引擎
- name: baidu
engine: baidu
disabled: false
- name: 360search
engine: 360search
disabled: false
- name: sogou
engine: sogou
disabled: false
- name: bing
engine: bing
disabled: false
- name: bilibili
engine: bilibili
disabled: false
# 禁用默认启用的引擎
- name: archlinuxwiki
engine: archlinux
disabled: true
- name: duckduckgo
engine: duckduckgo
distabled: true
- name: github
engine: github
shortcut: gh
disabled: true
- name: wikipedia
engine: wikipedia
disabled: true
- name: google
engine: google
disabled: true
- name: youtube
engine: youtube_noapi
disabled: true
- name: duckduckgo
engine: duckduckgo
disabled: true
- name: qwant
engine: qwant
disabled: true
- name: brave
engine: brave
disabled: true
- name: startpage
engine: startpage
disabled: true
说明:
secret_key: 上面生成的密钥
limiter: false,禁用请求限制器,否则可能触发 too many requests 的问题
redis:
url: false,这里不需要使用redis存储
search:
formats:
- html
- json,扩展数据返回格式,增加json,否则设置SearXNG插件,添加访问search接口会报错403
engines:
搜索引擎设置,这里开启了国内几个能访问的搜索引擎,禁用了一些无法访问的国外搜索引擎。
5、重新启动容器,执行命令,sudo docker restart gallant_chandrasekhar
6、dify工具集成,
dify流程搭建:
1、SearXNG搜索的配置如下,
2、LLM中配置如下,
模型配置为qwen2.5:7b
上下文配置为SearXNG搜索/json Array[Object]
system配置如下,
##角色定位
你是一个顶尖的PPT制作专家,专注于根据用户的多样化需求打造专业且富有吸引力的PPT内容。你的工作流程严谨而高效,旨在确保每一步都精准满足用户的期望。
##执行命令
1、根据{x}SearXNG/{x}text
,你将逐步生成PPT内容(包括提纲和详细内容)。每页内容都经过精心设计和编排,确保视觉效果和信息传递效果最佳。你注重内容的精炼和简洁,每页内容不超过10行,以提高观众的阅读体验和注意力集中度。
2、你擅长对PPT的排版、结构和显示内容进行合理调整,确保PPT整体风格统一、排版优美、结构清晰。
3、需要合理分页,合理控制每页的显示内容,避免内容超出边界,确保观众能够轻松阅读和理解。对于要分页的地方,需要在每一个分页的内容后面单独另起一行,写入“---”。示例如下,
"""
第1页:简介
内容是****
---
第2页:背景信息
内容是****
---
第3页:技术特点
内容是****
---
第4页:应用案例
内容是****
"""
4、直接生成ppt,去掉不必要的开场白和结束语。
User配置,
开始/{x}sys.query
3、http请求配置如下,
API选择POST方式,然后配置服务的地址,
BODY选择raw模式,内容为LLM/{x}text
4、直接回复内容如下,包括2项,大模型的生成内容、PPT链接。
LLM/{x}text
HTTP请求/{x}body
整体测试:
总结:
1、基于marp生成的ppt不可以编辑,主要原因是,Marp依赖的PptxGenJS库会将每张幻灯片转换为背景图像,而非可编辑的文本或形状。Marp团队优先保证输出美观性而非可编辑性,重建HTML到PPTX的渲染引擎成本过高。
2、基于marp生成的ppt质量很低,和主流的AIPPT差距天壤之别,更建议基于AIPPT来生成,但是AIPPT需要付费。
3、本文只是一个demo,不具备实际实践意义。
参考:
GitHub - BannyLon/DifyAIA: 基于Dify自主创建的AI应用DSL工作流,你可以免费获取,无论是出于个人需求还是学习目的,它都能为您开启一段充满无限可能的智能之旅。