使用Llama-3生成PowerPoint

使用 LLM 和 Python-pptx 自动化演示文稿。

译自 Generate PowerPoints using Llama-3 — A first step in automating slide decks,作者 Arslan Shahid。

在企业界,幻灯片无处不在,它通常被用作传达想法和成就的一种方式。过去 4 年,我一直在为大型跨国公司工作,制作幻灯片是大多数人每周都会做的事情。

如果幻灯片是有效利用时间的一种方式,那这不会是一个大问题。很多人会反对这一点,但在我看来,在大多数公司中,幻灯片会占用太多时间。员工本可以利用这段时间实际执行项目并构建内容。

RAG 流水线

这是幻灯片的基本 RAG 的简单流程图

Python 有一个名为 Python-pptx 的库,它允许用户以编程方式创建 PowerPoint 演示文稿。提示大型语言模型使用此库并生成可执行代码,将是第一步。

在此流水线中,我们将采用语料库信息,在本例中是 CFA 考试的书。此练习的最终目标是加载页面、提取文本并使用 LLM 生成创建页面幻灯片的代码。

from llama_index.core import SimpleDirectoryReader
#you can use any PDF/text document for this excercise
reader = SimpleDirectoryReader(input_files =['CFA_Fundamentals_2nd_Edition.pdf'])

docs = reader.load_data()

显示文件

为了更好地检索,建议您对文档执行一些预处理。块大小、删除不必要的信息和空格将能够更好地检索。

Llama-Index 有多种 LLM 集成可供选择,对于此项目,我决定通过 Groq 使用开源模型 llama-3 70。您可以从 Groq 网站获取免费的 API。

from llama_index.llms.groq import Groq

# Initiating the LLM instance, Groq takes in two parameters, model and api_key
llm = Groq(model="llama3-70b-8192", api_key="<insert_your_api-key")

下一步是将文档馈送到向量存储中,这将创建一个检索器(retriever)。

from llama_index.core import VectorStoreIndex

# Creates an Index for the documents
index = VectorStoreIndex.from_documents(docs)

对于第一个输出,我们希望 LLM 使用我们的查询并以标题和三个要点作为结构化输出。Pydantic 库允许您创建馈送到查询引擎的输出层。

from typing import List, Field
from pydantic import BaseModel, Field


# Creating a Pydantic object for structured output
class Extract(BaseModel):
    title: str = Field(description="Title for the information retrieved")
    bullet_points: List[str] = Field(description="Three bullet-points for the information")

第一个 LLM 调用

构建提示

from llama_index.core import PromptTemplate

# The prompt
template = (
    "We have provided context information below. \n"
    "---------------------\n"
    "{context_str}"
    "\n---------------------\n"
    "Given this information, please generate a header, and 3 bullet points for the {query_str}\n"
    "Also fetch sub_titles and numbers to describe the information"

)
qa_template = PromptTemplate(template)
# Building the Query Engine, passing in the Prompt and Pydantic model
query_engine = index.as_query_engine(similarity_top_k=3,llm=llm,text_qa_template=prompt,response_mode='tree_summarize', output_cls=Extract)
# Query and response
response=query_engine.query("BlackSholes Option Pricing Formula")

Black-Scholes Option Pricing

第二个 LLM 调用

现在将 LLM 的输出传递到另一个 LLM 调用中,该调用将输出 python-pptx 代码。

# response.header
from llama_index.core import PromptTemplate
from llama_index.core.program import LLMTextCompletionProgram

#Another Pydantic model to extract output
class Python_code(BaseModel):
    comments: str = Field(description='Comments about the code')
    code:List[str] = Field(description='Python-pptx code')


template = (
    "We have provided  information below. \n"
    "---------------------\n"
    "{title}"
    "{bullet_points}"
    "\n---------------------\n"
    "Given this information, please generate python-pptx code for a single slide with this title & bullet points\n"
    "Separate the bullet points into separate texts"
    "Do not set font size"

)
#This Program would allow to feed the prompt with headers and bullet-points
program = LLMTextCompletionProgram.from_defaults(
    output_cls=Python_code,
    prompt_template_str=template,
    verbose=True,
    llm=llm
)
#Feeding the response of the previous LLM call
output =program(title=response.title, bullet_points=response.bullet_points)

exec(output.code)

生成的 python-pptx 代码。

执行上述代码制作并保存了该演示文稿。

下一步是使用少样本示例和图表/形状等附加功能来改进 RAG 应用程序的输出。如果您喜欢该项目,请关注以获取更新。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注