1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Langchainとpython-pptxによるスライド生成を試してみる

Posted at

すでに本格的に取り組まれている方がいらっしゃいますが、自分もpython-pptxの勉強も兼ねて動かしてみます。

python-pptx

PythonからPowerPointファイルを操作できるライブラリ。

python-pptxは、PowerPoint (.pptx) ファイルを作成、読み取り、更新するためのPythonライブラリです。

一般的な使用例としては、データベースクエリ、分析結果、またはJSONペイロードなどの動的コンテンツからPowerPointプレゼンテーションを生成し、HTTPリクエストに応答して生成されたPPTXファイルをダウンロードすることが考えられます。これは、macOSやLinuxを含むPython対応プラットフォームで動作し、PowerPointアプリケーションのインストールやライセンスは不要です。

Langchainとの連携

ChatGPTに教えてもらいながら動かします。langchainからプレゼンを作る方法などで、基本的なコードも教えてもらいました。

%pip install -Uq langchain openai python-pptx mlflow langchain-openai
%restart_python
import os
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from pptx import Presentation

# APIキー設定
os.environ["OPENAI_API_KEY"] = dbutils.secrets.get("demo-token-takaaki.yayoi", "openai_api_key")
import mlflow
# MLflow Tracingの有効化
mlflow.langchain.autolog()

マークダウンをそのまま渡してもスライドでは反映されないの、教えてもらったものからプロンプトは少し変更しています。

# モデル設定
llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0.7)

# プレゼンのテーマを入力
topic = "エージェントシステムの日本における導入事例"

# プロンプト作成
prompt = ChatPromptTemplate.from_template("""
あなたはプレゼンテーション資料を作成するAIアシスタントです。
以下のトピックについて、プレゼンテーションの構成を作成してください。
トピック:{topic}

構成:
・タイトルスライド(プレゼンのタイトル)
・概要(目的や背景)
・導入事例(3つ程度)
・まとめ

指示:
・マークダウンは使わないでください
・python-pptx への入力を想定してください
""")

# チェーンの構築
chain = prompt | llm
# チェーンの呼び出し
outline = chain.invoke({"topic": topic}).content

Screenshot 2025-03-10 at 13.39.43.png

まずは、生成AIにアウトラインを作成してもらうということですね。

outline
'タイトルスライド\n- タイトル: エージェントシステムの日本における導入事例\n- 副題: 効率化と革新の実現\n- 日付: [プレゼンテーションの日付]\n- 発表者: [発表者の名前]\n\n概要\n- エージェントシステムとは何か\n- 日本におけるエージェントシステムの導入背景\n- 目的: エージェントシステムがもたらす利点と実際の影響を理解する\n\n導入事例\n1. 事例1: 企業Aの顧客サポートエージェント\n   - 概要: 顧客からの問い合わせに自動応答するシステム\n   - 導入の目的: サポート業務の効率化\n   - 結果: 応答時間の短縮と顧客満足度の向上\n\n2. 事例2: 企業Bの製造業向けエージェントシステム\n   - 概要: 生産ラインの監視と最適化を行うエージェント\n   - 導入の目的: 生産効率の向上\n   - 結果: コスト削減と生産性の向上\n\n3. 事例3: 企業Cのマーケティングエージェント\n   - 概要: 顧客データを分析し、ターゲット広告を自動生成するシステム\n   - 導入の目的: マーケティング戦略の最適化\n   - 結果: 広告効果の向上とROIの増加\n\nまとめ\n- エージェントシステムの導入がもたらした効果の総括\n- 今後の展望: 日本におけるエージェントシステムのさらなる普及の可能性\n- 質疑応答の時間を設ける旨の案内'

そして、これらをバラしてpython-pptxへの入力にすると。

# スライド生成
presentation = Presentation()

for slide_content in outline.split("\n\n"):
    slide = presentation.slides.add_slide(presentation.slide_layouts[1])
    title, *body = slide_content.strip().split("\n")
    slide.shapes.title.text = title
    slide.placeholders[1].text = "\n".join(body)

# 保存
presentation.save("agent_system_presentation.pptx")

別のスライドも作ってみます。

topic = "カレーライスの作り方"
outline = chain.invoke({"topic": topic}).content

Screenshot 2025-03-10 at 13.41.24.png

# スライド生成
presentation = Presentation()

for slide_content in outline.split("\n\n"):
    slide = presentation.slides.add_slide(presentation.slide_layouts[1])
    title, *body = slide_content.strip().split("\n")
    slide.shapes.title.text = title
    slide.placeholders[1].text = "\n".join(body)

# 保存
presentation.save("curry_rice.pptx")

ノートブックと同じパスにPowerPointファイルが作成されるのでダウンロードします(ノートブックでレンダリングする方法を探しましたが見つからず)。

Screenshot 2025-03-10 at 13.41.42.png

エージェントシステムの導入事例

Screenshot 2025-03-10 at 13.43.27.png
Screenshot 2025-03-10 at 13.43.37.png
Screenshot 2025-03-10 at 13.43.41.png

カレーライスの作り方

プロンプトのテンプレート自体を変えていなかったので、なかなかシュールなプレゼンに。

Screenshot 2025-03-10 at 13.44.42.png
Screenshot 2025-03-10 at 13.44.48.png
Screenshot 2025-03-10 at 13.44.53.png

まあ、元記事の方が苦戦されているように、レイアウトやテイストを洗練させるにはプレースホルダーにテキストなどを埋め込むようにした方が良いのかもしれません。

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?