Google AI Studioで始める!最強のお笑いLLMを目指して (Day 2: 対話型生成編)

LLMTech

はじめに

AIを活用して笑いを創るプロジェクト「最強のお笑いLLMを目指す」シリーズ、第2回目は対話型生成について解説します。今回は、Google AI StudioGeminiモデルを利用して、漫才形式の対話を自動生成するPythonスクリプトを構築する方法を詳しく紹介します。

Day 2のテーマ

対話型生成を活用し、AIが指定されたテーマで複数回の応答を行い、漫才のような掛け合いを再現します。


対話型生成とは?

対話型生成は、ユーザーからの入力を元に、AIが継続的に応答を生成するプロセスです。1回限りの応答とは異なり、生成された応答を会話の履歴に反映させながら、文脈を考慮した自然な対話を目指します。

特徴

  • 文脈に応じた応答: 会話の履歴を保持し、前後の文脈を考慮。
  • 反復処理: 複数回のやり取りを通じて、自然な対話が可能。
  • 柔軟性: 生成内容や会話テーマを動的に変更可能。

スクリプト概要

以下のスクリプトは、Geminiモデルを用いて、漫才のような掛け合いを生成する仕組みを実現しています。


スクリプト例

from typing import List
from dataclasses import dataclass, field
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.output_parsers import StrOutputParser
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import ChatPromptTemplate
import os
import time

# 環境変数からAPIキーを取得
api_key = os.getenv("GOOGLEAI_API_KEY")
gemini = ChatGoogleGenerativeAI(model="gemini-1.5-flash", google_api_key=api_key)

# 会話履歴の初期化
history = ChatMessageHistory()

# プロンプトの定義
answer_prompt = ChatPromptTemplate.from_messages([
    ("system", "You are comedian"),
    ("human", """
You are talking about the following theme.
Theme: {theme}
Generate answer for the following conversation.
REQUIREMENTS: ONLY GENERATE YOUR SHORT RESPONSE
If there's no conversation history, start talking about the theme.
Conversation: {conversation}
You are in round {round}, if round is over 10 and you think conversation is over, you can say 'もうええわ'.
""")
])

# 応答生成チェーンのセットアップ
answer_parser = StrOutputParser()
answer_chain = answer_prompt | gemini | answer_parser

# 会話ループ
for i in range(100):
    time.sleep(10)  # 応答間に待機
    answer = answer_chain.invoke({
        "theme": "漫才をしてください。",
        "conversation": "\n".join([f"{msg.type.capitalize()}: {msg.content}" for msg in history.messages]),
        "round": i + 1
    })
    print(f"Answer {i + 1}: {answer}")
    
    # 履歴にAIの応答を追加
    history.add_ai_message(answer)

    if "もうええわ" in answer:
        print("Conversation ended.")
        break

スクリプトの仕組み

1. APIキーの設定

api_key = os.getenv("GOOGLEAI_API_KEY")
gemini = ChatGoogleGenerativeAI(model="gemini-1.5-flash", google_api_key=api_key)

Google AI Studioから取得したAPIキーを環境変数から読み込み、Geminiモデルのインスタンスを作成します。

2. 会話履歴の管理

history = ChatMessageHistory()

ChatMessageHistoryを使用して、会話の履歴を保存。これにより、文脈に応じた応答が可能です。

3. プロンプトの定義

answer_prompt = ChatPromptTemplate.from_messages([
    ("system", "You are comedian"),
    ("human", "...")
])

漫才形式の会話を生成するためのプロンプトを設計。AIの役割(漫才師)を指定し、条件に応じて応答を生成します。

4. 対話ループ

for i in range(100):
    time.sleep(10)
    answer = answer_chain.invoke({...})
    history.add_ai_message(answer)

最大100回までの対話を実施。応答を履歴に追加しながら進行します。

5. 会話終了条件

if "もうええわ" in answer:
    print("Conversation ended.")
    break

特定のフレーズが生成された場合、会話を終了します。


応用例

漫才の生成例

Round 1:
A: こんにちは! 私、宇宙から来たツッコミ宇宙人です!
B: 宇宙人ちゃうわ! 漫才やるんやぞ!
...
Round 10:
A: もうええわ。

応用: 他のテーマへの拡張

テーマを「スポーツ」や「歴史」などに変更することで、さまざまな対話シナリオを生成できます。


まとめ

本記事では、Google AI StudioのGeminiモデルを活用し、対話型の漫才生成スクリプトを解説しました。文脈を考慮した応答生成の仕組みは、エンターテインメント分野だけでなく、教育やカスタマーサービスにも応用が可能です。

次回は、生成結果の評価方法や、さらに高度なプロンプト設計のテクニックを紹介予定です!

コメント

タイトルとURLをコピーしました