Python - 深度学习系列33 - ollama_langchain_ppt生成

说明

只是为了速记一下这个实践过程。整体上说,这个结果并不是那么好用,但有一些可以借鉴的地方。

先看结果:

在这里插入图片描述
生成的PPT
在这里插入图片描述

说的直白点,就是用大模型生成了一堆没太有意义的文字,然后做成ppt。所以实用是不成的,但是里面有一些过程可以借鉴。

内容

1 项目地址

ppt_generator

整个项目没有几个文件,感觉也就是一个原型实验。

在这里插入图片描述
需要的环境是本地ollama(恰好我有),然后拉一个模型
在这里插入图片描述
项目里还漏了 requirement.txt,我的环境下,主要再安装一个包就可以了

pip3 install python-pptx  -i https://mirrors.aliyun.com/pypi/simple/

2 使用

启动 streamlit run main.py,然后会弹出一个web页面,输入一个主题,然后就返一个ppt给你。整体过程大概1~2分钟,考虑是笔记本,而且也看到什么资源占用,所以可以认为是不太占资源的。

3 核心代码

使用langchain加载了ollama模型,生成数据

def slide_data_gen(topic):llm = Ollama(model="dolphin2.1-mistral",temperature="0.4")slide_data = []point_count = 5slide_data.append(extract_items(llm(f"""You are a text summarization and formatting specialized model that fetches relevant informationFor the topic "{topic}" suggest a presentation title and a presentation subtitle it should be returned in the format :<< "title" | "subtitle >>example :<< "Ethics in Design" | "Integrating Ethics into Design Processes" >>""")))slide_data.append(extract_items(llm(f"""You are a text summarization and formatting specialized model that fetches relevant informationFor the presentation titled "{slide_data[0][0]}" and with subtitle "{slide_data[0][1]}" for the topic "{topic}"Write a table of contents containing the title of each slide for a 7 slide presentationIt should be of the format :<< "slide1" | "slide2" | "slide3" | ... | >>example :<< "Introduction to Design Ethics" | "User-Centered Design" | "Transparency and Honesty" | "Data Privacy and Security" | "Accessibility and Inclusion" | "Social Impact and Sustainability" | "Ethical AI and Automation" | "Collaboration and Professional Ethics" >>          """)))for subtopic in slide_data[1]:data_to_clean = llm(f"""You are a content generation specialized model that fetches relevant information and presents it in clear concise mannerFor the presentation titled "{slide_data[0][0]}" and with subtitle "{slide_data[0][1]}" for the topic "{topic}"Write the contents for a slide with the subtopic {subtopic}Write {point_count} points. Each point 10 words maximum.Make the points short, concise and to the point.""")cleaned_data = llm(f"""You are a text summarization and formatting specialized model that fetches relevant information and formats it into user specified formatsGiven below is a text draft for a presentation slide containing {point_count} points , extract the {point_count} sentences and format it as :<< "point1" | "point2" | "point3" | ... | >>example :<< "Foster a collaborative and inclusive work environment." | "Respect intellectual property rights and avoid plagiarism." | "Uphold professional standards and codes of ethics." | "Be open to feedback and continuous learning." >>-- Beginning of the text --{data_to_clean}-- End of the text --         """)slide_data.append([subtopic] + extract_items(cleaned_data))return slide_data

根据数据生成ppt

def ppt_gen(slide_data):ppt = Presentation()# Setting Backgroundslide_master = ppt.slide_masterslide_master.background.fill.solid()slide_master.background.fill.fore_color.rgb = RGBColor(0, 0, 0)# Title Screencurr_slide = ppt.slides.add_slide(ppt.slide_layouts[0])curr_slide.shapes.title.text = slide_data[0][0]curr_slide.shapes.title.text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPEcurr_slide.shapes.title.text_frame.paragraphs[0].runs[0].font.color.rgb = RGBColor(255, 255, 255)curr_slide.shapes.placeholders[1].text = slide_data[0][1]curr_slide.shapes.placeholders[1].text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPEcurr_slide.shapes.placeholders[1].text_frame.paragraphs[0].runs[0].font.color.rgb = RGBColor(255, 255, 255)# Overviewcurr_slide = ppt.slides.add_slide(ppt.slide_layouts[1])curr_slide.shapes.title.text = "Overview"curr_slide.shapes.title.text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPEcurr_slide.shapes.title.text_frame.paragraphs[0].runs[0].font.color.rgb = RGBColor(255, 255, 255)for content in slide_data[1]:tframe = curr_slide.shapes.placeholders[1].text_frametframe.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPEpara = tframe.add_paragraph()para.text = contentpara.level = 1para.font.color.rgb = RGBColor(255, 255, 255)# Content Slidesfor curr_slide_data in slide_data[2:]:curr_slide = ppt.slides.add_slide(ppt.slide_layouts[1])curr_slide.shapes.title.text = curr_slide_data[0]curr_slide.shapes.title.text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPEcurr_slide.shapes.title.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)for content in curr_slide_data[1:]:tframe = curr_slide.shapes.placeholders[1].text_frametframe.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPEpara = tframe.add_paragraph()para.text = contentpara.level = 1para.font.color.rgb = RGBColor(255, 255, 255)# Thank You Screencurr_slide = ppt.slides.add_slide(ppt.slide_layouts[2])curr_slide.shapes.placeholders[1].text = "Thank You"curr_slide.shapes.placeholders[1].text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)curr_slide.shapes.placeholders[1].text_frame.paragraphs[0].font.size = Pt(96)curr_slide.shapes.placeholders[1].text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER# f"{sanitize_string(slide_data[0][0])}.pptx"ppt_stream = io.BytesIO()ppt.save(ppt_stream)ppt_stream.seek(0)return ppt_stream

4 总结

  • 1 可以参考langchain,进行增强。langchain本身还有agent的能力,继续融合后,是有可能完全不一样的。例如当你提到一个论点,agent可以自动查询实时数据,找到论据来support.
  • 2 ppt生成(及读取)。之前比较少用python操作ppt,现在看来,读和简单写应该是没问题的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/691416.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络 | 应用层-websocket协议报文格式解析

websocket的官方文档为rfc(request for comments)&#xff0c;是网络协议的规范文档。它包含了许多计算机世界的核心知识 除了这里的websocket&#xff0c;它里边还包含我们熟知的http,tcp等协议的解析。 websocket协议对应的编号是rfc 6455 websocket协议格式解析 由图可知&a…

EPAI手绘建模APP工程图顶部工具栏

7、工程图 图 302 工程图 工程图包括顶部常用工具栏、右侧工程图工具栏、左侧模型列表栏、中间的工程图。 (1) 常用工具栏 ① 删除&#xff0c;选中场景中工程图元素后&#xff0c;删除。可以选择多个工程图元素同时删除。 ② 设置&#xff0c;打开工程图设置页面&#xff0…

Pikachu 靶场 RCE 通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

C++ vs Rust vs Go 性能比较

本文对C、Rust和Go三种编程语言编写的gunzip程序进行了性能比较&#xff0c;通过基准测试试图尽可能公平的比较它们的性能。原文: Performance — C vs Rust vs Go 本文将通过一些基准测试&#xff0c;比较 C 和 Rust 以及 Go 编写的相同程序的性能。我们将尽最大努力将语言差异…

RFID在汽车制造中的应用如何改变行业

随着工业4.0和中国制造2025的推进&#xff0c;企业对于智能化、自动化的需求日益增长&#xff0c;RFID射频技术在制造业中已经相当普遍了。在如今这瞬息万变的行业与时代中&#xff0c;RFID技术可以帮助企业获得竞争优势&#xff0c;简化日益复杂的生产流程&#xff0c;推动企业…

No module named ‘sklearn.metrics.ranking‘ 解决方法

错误代码 from sklearn.metrics.classification import * from sklearn.metrics.ranking import * 错误原因 sklearn这个文件夹下的_classification和_ranking前面有下划线&#xff01; 解决方法 第一步&#xff1a;找到sklearn位置&#xff0c;可以打开命令行输入 pip sh…

不错的招聘时候要注意的知识

来自《行为心理学在团队管理中的应用》行为心理学在团队管理中的应用_哔哩哔哩_bilibili

train_gpt2_fp32.cu - layernorm_forward_kernel3

源码 __global__ void layernorm_forward_kernel3(float* __restrict__ out, float* __restrict__ mean, float* __restrict__ rstd,const float* __restrict__ inp, const float* __restrict__ weight,const float* __restrict__ bias, int N, int C) {cg::thread_block bl…

WordPress插件Show IDs by Echo,后台显示文章、页面、分类、标签、媒体库、评论、用户的ID

WordPress的这款Show IDs by Echo插件&#xff0c;可以让我们设置是增加一列ID还是直接在“编辑 |快速编辑 |查看”操作后面增加ID&#xff0c;而且支持展示以下内容的ID&#xff1a; 文章页面类别标签评论自定义帖子类型自定义分类法用户媒体 Show IDs by Echo插件的安装及启…

Redis简单使用

认识Redis redis&#xff1a;字典型数据库&#xff0c;存储的是键值对&#xff0c;是NoSql数据库 关系型数据库和NoSql之间的区别&#xff1a; 结构化&#xff1a;NoSql非结构化数据库&#xff0c;松散结构&#xff08;键值对key-value&#xff08;可以任意类型&#xff09;&…

汽车EDI:安通林Antolin EDI 项目案例

安通林&#xff08;Antolin&#xff09;是一家全球性的汽车零部件制造商&#xff0c;专注于汽车内饰系统和零部件的生产&#xff0c;致力于创新和采用先进的技术。近年来 安通林Antolin 推动其供应商部署EDI系统&#xff0c;使得双方能够通过EDI传输业务单据&#xff0c;极大提…

【基础绘图】 09.小提琴图

效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;生成随机数组 2. 数据处理&#xff1a;计算四分位数、中位数、均值、最大最小值 3. 图像绘制&#xff1a;绘制小提琴图 详细代码&#xff1a;着急的直接拖到最后有完整代码 步骤一&#xff1a;导入库包及…