Dify学习-04-学习DifyMarpFlask_PPT(生成PPT)实操笔记

https://www.bilibili.com/video/BV1CL6MYKEGd/?vd_source=c47fbb8166930edc486d8fdc405bf569
(项目作者:BannyLon)

准备工作

下载node.js

Command 'node' not found, but can be installed with:

apt install nodejs

在这里插入图片描述

node -v

在这里插入图片描述

# 安装 Node.js 和 npm
sudo apt install nodejs npm

# 验证安装
node --version
npm --version

还是不行

https://go.lightnode.com/zh/tech/install-node-js-on-ubuntu

在这里插入图片描述
好啦

全局安装Marp-cli

npm install -g @marp-team/marp-cli

大致看了一眼,我目前用到dify不是自己部署的,所以好像那个工具我目前用不了,还是需要学习一下docker如何搞

未完待续!!!!!!!!


继续

问题1:MARP是啥

Marp是一个基于MarkDown快速编写幻灯片的工具,可以基于VScode环境,实现MarkDown幻灯的编写和预览。

问题2:Flask 中 request.get_data() 和 request.get_json()

https://zhuanlan.zhihu.com/p/436378878

在这里插入图片描述

PPT前面有一个❓是什么意思?

在返回的下载链接 http://127.0.0.1:5004/data/{pptx_filename}?pptx 中,问号 ? 是 URL 的查询参数起始符号,但在这个特定代码中,它并没有实际的参数传递作用,可能是出于以下原因:

send_from_directory 和send_file 有什么区别?

用于生成保存markdown的工作流

为什么没有发布工具选项

在这里插入图片描述

我重新创建了工作流就是这样子了
在这里插入图片描述

在这里插入图片描述
但为什么发布为工具还是点击不了?
在这里插入图片描述
版本的问题???

制作工具

你是一个顶尖的PPT制作专家,专注于根据用户的多样化需求打造专业且富有吸引力的PPT内容。你的工作流程严谨而高效,旨在确保每一步都精准满足用户的期望。具体流程如下:

一、需求理解与大纲生成

你擅长倾听并深入理解用户的具体PPT制作需求,无论是主题、风格还是内容要点,你都能准确把握。若用户未提出明确需求或需求不严谨,你将运用自身丰富的经验和专业知识,主动为其构思并生成一份结构清晰、逻辑连贯的大纲。这一步骤为后续PPT制作奠定了坚实基础,确保内容策划的方向正确无误。

二、大纲确认与内容搜索

在生成大纲后,你会与用户进行确认,确保其满足用户的期望。一旦用户对大纲无异议,你将立即进入内容搜索阶段。你精通使用searxng工具,能够高效搜索互联网上的最新、最相关信息,确保PPT内容既准确又具时效性。你擅长按照用户的需求或已确认的大纲进行内容的筛选、整合和优化,使其与PPT主题和用户需求完美契合。

三、PPT内容生成与确认

根据已确认的大纲和searxng工具检索出的内容,你将逐步生成PPT内容。每页内容都经过精心设计和编排,确保视觉效果和信息传递效果最佳。你注重内容的精炼和简洁,每页内容不超过5行,以提高观众的阅读体验和注意力集中度。完成所有PPT页内容的生成后,你会与用户进行确认,并根据其反馈进行必要的修改,直至用户完全满意。

四、格式调整与问答沟通

在与用户沟通的过程中,你始终使用普通PPT格式给出内容,避免使用Marp等特定格式,以确保沟通的顺畅性和用户的理解度。你擅长根据用户的反馈和意见,对PPT的排版、结构和显示内容进行合理调整,确保PPT整体风格统一、排版优美、结构清晰。

需要合理分页,合理控制每页的显示内容,避免内容超出边界,确保观众能够轻松阅读和理解。

五、最终生成与交付

当用户对PPT内容完全确认后,你会询问其是否需要生成PPT文件。若用户确认需要,你将按照Marp格式要求生成最终内容,并调用save_marp_content进行保存。随后,你会将生成的PPT文件链接及时提供给用户,确保其能够顺利获取和使用。同时,你也会提供必要的操作指南或建议,以帮助用户更好地理解和利用PPT内容。

六、专业能力与服务态度

你具备深厚的PPT制作经验和专业知识,能够应对各种复杂需求,确保PPT内容的专业性和准确性。你始终保持耐心和细心,关注用户的反馈和需求变化,及时调整和优化PPT内容。你注重与用户的沟通和合作,尊重其意见和建议,共同打造出真正符合用户需求的PPT作品。

直接导入这个DSL就有,可能就已经内置了把
在这里插入图片描述
就是不能导入
在这里插入图片描述
!!!
要运用这个SearXNG
启动不了docker
因为是用的别人部署的,不会!!!!!

啊啊啊啊

在这里插入图片描述

因为不是自己的所以不存在
在这里插入图片描述

那我自己重新制作一个流呢?

现在需要制作一个术语语义的PPT,要求描述什么是术语学,术语学研究的近况

在这里插入图片描述
因为他有确认沟通,所以不太行,但是我觉得可以稍微换一种方式

就是这个工具就是把最终的内容上传到后端,之后转化为ppt的格式就可以
它主要是生成Marp形式

代码

import subprocess
from flask import Flask, request, send_from_directory
import os
import time
import logging

app = Flask(__name__)
logging.basicConfig(level=logging.DEBUG)

DATA_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data')
if not os.path.exists(DATA_DIR):# DATA_DIR是否存在
    os.makedirs(DATA_DIR)# 创建路径
logging.info(f'DATA_DIR的路径:{DATA_DIR}')

# 获取marp的路径 获取Marp工具的路径: 首先尝试从环境变量MARP_PATH获取 如果不存在则使用默认路径/Users/habhy/.npm-global/bin/marp
marp_path = os.getenv('MARP_PATH', '/Users/habhy/.npm-global/bin/marp')

# 保存上传的Markdown内容,并转换成PPT
@app.route('/upload', methods=['POST'])
def upload_markdown():
    content = request.get_data(as_text=True)
    print(content)
    timestamp = str(int(time.time()))
    md_filename = f"{timestamp}.md"
    pptx_filename = f"{timestamp}.pptx"

    # 保存Markdown文件
    md_filePath = os.path.join(DATA_DIR, md_filename)
    pptx_filePath = os.path.join(DATA_DIR, pptx_filename)
    with open(md_filePath, 'w', encoding='utf-8') as f:
        f.write(content)

    # 使用marp-cli将Markdown转换为PPT
    """
    调用Marp转换PPT:
    使用subprocess运行marp命令
    将Markdown转换为PPTX
    如果出错返回错误信息
    -o:Marp 的输出选项(--output 的简写)。
    作用:如果命令执行失败(返回非零退出码),会抛出 subprocess.CalledProcessError 异常。
    """
    try:
        subprocess.run([marp_path, md_filePath, '-o', pptx_filePath], check=True)
    except subprocess.CalledProcessError as e:
        return {
            'message': 'Failed to convert Markdown to PPT',
            'error': str(e)
        }

    # 返回文件链接
    Pre_url = request.host_url + os.path.basename(md_filePath)
    download_url = request.host_url + 'download/' + os.path.basename(pptx_filename)
    print(Pre_url)
    print(download_url)
    # return {'download_url': download_url}
    # f'Markdown 文件已保存\n预览链接: http://127.0.0.1:5004/data/{md_filename} \n下载链接: http://127.0.0.1:5004/data/{pptx_filename}?pptx'

    return f'Markdown 文件已保存\n预览链接: {Pre_url} \n下载链接: {download_url}'

# 提供静态文件服务
@app.route('/data/<path:filename>')
def serve_file(filename):
    return send_from_directory('data', filename)

if __name__ == '__main__':
    app.run(host=,debug=True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向上Claire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值