> 技术文档 > Dify平台下基于搜索引擎SearXNG 和文本转换工具Marp的PPT助手搭建_dify ppt助手

Dify平台下基于搜索引擎SearXNG 和文本转换工具Marp的PPT助手搭建_dify ppt助手


marp-cli安装:

Marp 是一个基于 Markdown 的开源幻灯片制作工具,可以轻松将 Markdown 文档转换为精美的幻灯片。其核心是 Marpit 框架,支持可定制主题、多种输出格式和动态功能。

Marp 支持的功能

  1. 通过插件快速制作:支持 VS Code 插件和实时预览。
  2. 命令行工具 (CLI):批量处理,导出 HTML、PDF 等格式。
  3. 支持 YAML 配置:灵活设置幻灯片主题、尺寸和分页。
  4. 自定义样式:支持 CSS 修改主题和排版样式。
  5. 嵌入动态内容:如代码高亮、公式 (MathJax)、图片背景等。
  6. 多种主题支持:内置主题(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 subprocessfrom flask import Flask, request, send_from_directoryimport osimport timeapp = 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/\')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-settingsuse_default_settings: trueserver: # base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml secret_key: \"4bbad1031e0b4345e894f5558bafa9e5ecd981220e86e8b30f8f099e4b8a46d6\" limiter: false image_proxy: trueui: static_use_hash: trueredis: url: falsesearch: formats: - html - jsonengines:# 启用默认禁用的引擎 - 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工作流,你可以免费获取,无论是出于个人需求还是学习目的,它都能为您开启一段充满无限可能的智能之旅。