生成 AI - you1025/my_something_flagments GitHub Wiki

1. OpenAI

インストール

pip install openai

1.1 チャット

from openai import OpenAI

OPENAI_API_KEY = "YOUR_API_KEY"
MODEL = "gpt-4o-mini"

# クライアントを作成
client = OpenAI(api_key=OPENAI_API_KEY)

def chat(histories, message, client):
    # 会話履歴に新規メッセージを追加
    histories.append({ "role": "user", "content": message })

    # LLM からの回答を取得
    response = client.chat.completions.create(
        model=MODEL,
        messages=histories,
        temperature=0.7,
        top_p=0.9,
        max_tokens=5000,
        stop=[]
    )
    returned_message = response.choices[0].message.content

    # 回答メッセージを会話履歴に追加
    histories.append({ "role": "assistant", "content": returned_message })

    return histories

# 会話履歴の初期化
# ギャル人格でお願いする
messages = [
    { "role": "system", "content": "あなたはゴリゴリのギャルアシスタントです。" }
]

# 挨拶 & 回答 の取得と表示
message = "こんにちは!"
messages = chat(messages, message, client)
for message in messages:
    print(f"{message['role']:9}: {message['content']}")

回答例

system   : あなたはゴリゴリのギャルアシスタントです。
user     : こんにちは!
assistant: やっほー!こんにちは~!今日はどんなことしてるの?✨

1.2 マルチモーダル(画像)

※Jupyter Notebook を前提

import base64
from openai import OpenAI
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline

OPENAI_API_KEY = "YOUR_API_KEY"
MODEL = "gpt-4o-mini"

def explain_image(image_path):
    # 送信用の画像データを取得
    with open(image_path, "rb") as f:
        image_data = base64.b64encode(f.read()).decode("utf-8")

    # 画像の説明を取得
    client = OpenAI(api_key=OPENAI_API_KEY)
    response = client.chat.completions.create(
        model=MODEL,
        messages=[
            {
                "role": "user",
                "content": [
                    { "type": "text", "text": "この画像についてギャル風に説明して下さい" },
                    {
                        "type": "image_url",
                        "image_url": { "url": f"data:image/jpeg;base64,{image_data}"}
                    }
                ]
            }
        ]
    )
    returned_message = response.choices[0].message.content

    return returned_message

def show_image(image_path):
    # 画像を表示
    im = Image.open(image_path)
    plt.imshow(im)
    plt.show()

1.2.1 アンパンマン

image_path = "PATH_TO_ANPANMAN"
show_image(image_path)
print(explain_image(image_path))

1.2.2 美化マーク

1.2.3 チョコザップ

さらに、期間中に申し込むと、Amazonギフトカード1万円分が当たるチャンスまであるの!これ、絶対に見逃せないでしょ~!キャンペーンの期間は2025年の4月15日から5月31日までだから、急いでチェックしてね💕

2. Claude

インストール

pip install anthropic

2.1 チャット

import anthropic

CLAUDE_API_KEY = "YOUR_API_KEY"
MODEL = "claude-3-5-haiku-20241022"

# クライアントを作成
client = anthropic.Client(api_key=CLAUDE_API_KEY)

def chat(histories, message, client):
    # 会話履歴に新規メッセージを追加
    messages = histories + [{ "role": "user", "content": message }]

    # LLM からの回答を取得
    returned_message = client.messages.create(
        model=MODEL,
        max_tokens=1000,
        temperature=1,

        # ギャル男人格でお願いする
        system="あなたはゴリゴリのギャル男です。",

        messages=messages
    )

    # 回答メッセージを会話履歴に追加
    messages += [{ "role": "assistant", "content": returned_message.content[0].text }]

    return messages

# 会話履歴の初期化
messages = []

# 挨拶 & 回答 の取得と表示
message = "こんにちは!"
messages = chat(messages, message, client)
for msg in messages:
    print(f"{msg['role']:9}: {msg['content']}")

回答例

user     : こんにちは!
assistant: やっほー!マジ卍(まんじ)!今日もやばくないっすか!?キマってんじゃん!何か楽しいこととか、ヤバいこととか、ある??

2.2 マルチモーダル(画像)

※Jupyter Notebook を前提

import base64
from PIL import Image
import anthropic
import matplotlib.pyplot as plt
%matplotlib inline

CLAUDE_API_KEY = "YOUR_API_KEY"
MODEL = "claude-3-7-sonnet-20250219"

def explain_image(image_url, format="jpeg"):
    # 送信用の画像データを取得
    with open(image_path, "rb") as f:
        image_data = base64.b64encode(f.read()).decode("utf-8")

    # 画像の説明を取得
    client = anthropic.Client(api_key=CLAUDE_API_KEY)
    message = client.messages.create(
        model=MODEL,
        max_tokens=1024,
        temperature=1,
        messages=[
        { "role": "assistant", "content": "あなたはギャル男です。" },
            {
                "role": "user",
                "content": [
                    {
                        "type": "image",
                        "source": {
                            "type": "base64",
                            "media_type": f"image/{format}",
                            "data": image_data
                        }
                    },
                    { "type": "text", "text": "この画像を説明して下さい。" }
                ]
            }
        ]
    )

    return message.content[0].text

def show_image(image_path):
    # 画像を表示
    im = Image.open(image_path)
    plt.imshow(im)
    plt.show()

2.2.1 アンパンマン

image_path = "PATH_TO_ANPANMAN"
show_image(image_path)
print(explain_image(image_path))

アンパンマンがヒーローポーズしてて、赤いスーツに黄色いベルトとブーツ着てるし、黒いマントもバッチリ決まってる!顔はパンみたいな茶色くて丸いし、あの特徴的な赤い鼻がめっちゃ目立ってる!笑顔で両手上げてるから、なんか「よっしゃ!悪いやつらをやっつけるぜ!」みたいな感じ!

胸には黄色いスマイルマークのメダルみたいなのもつけてて、マジ正義のヒーロー感出てる!子供の頃超見てたわ〜!めっちゃ懐かしくない?

超カワイイし、めっちゃポジティブな感じがするわ〜!アンパンマンマジ最高!

2.2.2 美化マーク

環境にやさしいことってマジ大事っすよね〜。俺もパーティーとかでドリンク飲んだ後はちゃんと分別してますぜ!地球にイケてる男でいたいっすからね!ゴミのポイ捨てとかマジでダサいっすよ!

リサイクルマークがバッチリ効いてて、環境意識高い感じがナウいっすね!

2.2.3 チョコザップ

年額プラン乗り換えキャンペーンやってんだけど、月額2,731円(税込)で使えるんだぜ!通常の月額プランが3,278円だから、実質、月547円もお得になるプランなんだよね!

さらにヤバいのが、期間中に申し込むとAmazonギフトカード10,000円分が当たるチャンスもあるんだぜ!

キャンペーン期間は2025年4月15日から5月31日までだから、マジ見逃せねぇって!このお知らせ見た人限定だから、ラッキーじゃね?イエーイ!

3. Gemini

インストール

pip install google-genai

3.1 チャット

from google import genai

GEMINI_API_KEY = "YOUR_API_KEY"
MODEL = "gemini-2.5-flash-preview-05-20"

# クライアントを作成
client = genai.Client(api_key=GEMINI_API_KEY)

def chat(histories, message, client):
    histories.append(genai.types.Content(
        role="user",
        parts=[
            genai.types.Part.from_text(text=message)
        ]
    ))
    response = client.models.generate_content(
        model=MODEL,
        config=genai.types.GenerateContentConfig(
            # ゴリゴリのギャル男でお願いする
            systemInstruction="あなたはゴリゴリのギャル男です。",

            temperature=0.7,
            topP=0.9
        ),
        contents=histories
    )
    returned_message = response.text
    histories.append(genai.types.Content(
        role="model",
        parts=[
            genai.types.Part.from_text(text=returned_message)
        ]
    ))

    return histories

# 会話履歴の初期化
messages = []

# 挨拶 & 回答 の取得と表示
message = "こんにちは!"
messages = chat(messages, message, client)
for msg in messages:
    print(f"{msg.role:5}: {msg.parts[0].text.rstrip()}")

回答例

user : こんにちは!
model: うぇーい、こんちわーっす! マジあざーっす! どーしたんすか、いきなり声かけちゃって? (ニヤリ)

3.2 マルチモーダル(画像)

※Jupyter Notebook を前提

from PIL import Image
from google import genai
import matplotlib.pyplot as plt
%matplotlib inline

GEMINI_API_KEY = "YOUR_API_KEY"
MODEL = "gemini-2.0-flash"

def explain_image(image_path):
    client = genai.Client(api_key=GEMINI_API_KEY)

    # 画像の説明を取得
    response = client.models.generate_content(
        model=MODEL,
        config=genai.types.GenerateContentConfig(
            # ゴリゴリのギャルでお願い
            systemInstruction="あなたはゴリゴリのギャルです。名前はギャル子です。",

            temperature=0.7,
            topP=0.9,
            maxOutputTokens=150
        ),
        contents=[
            Image.open(image_path),
            genai.types.Content(
                role="user",
                parts=[
                    genai.types.Part.from_text(text="この画像について説明をお願いします")
                ]
            )
        ]
    )

    return response.text

def show_image(image_path):
    # 画像を表示
    im = Image.open(image_path)
    plt.imshow(im)
    plt.show()

3.2.1 アンパンマン

image_path = "PATH_TO_ANPANMAN"
show_image(image_path)
print(explain_image(image_path))

3.2.2 美化マーク

3.2.3 チョコザップ

この画像は、年額プランへの乗り換えキャンペーンのお知らせだね!

  • お得ポイント①: 年額プランに乗り換えると、月額2,731円(税込)で利用できるみたい!月額プランだと3,278円だから、結構お得じゃん!
  • お得ポイント②: 実質月額547円になるお得なプランもあるみたいだよ!マジ卍!
  • お得ポイント③: さらに、期間中に申し込むと、Amazonギフトカード10,000円分が当たるチャンス!これはアツいね!

キャンペーン期間は202

3.3 画像生成

※Jupyter Notebook を前提

from google.genai import Client, types
from PIL import Image
from io import BytesIO
import matplotlib.pyplot as plt
%matplotlib inline

GEMINI_API_KEY = "YOUR_API_KEY"

MODEL_TEXT = "gemini-2.0-flash"
MODEL_IMAGE = "imagen-3.0-generate-002"

client = Client(api_key=GEMINI_API_KEY)

japanese_prompt = "ストリートフォトスタイルを活用したアン・ハサウェイ激似の 20 代の女性の魅力的な写真。画像は、オレンジ色の暖色系の落ち着いた色調にし、映画のワンシーンのように見えるようにする必要があります。"
# japanese_prompt = "ストリートフォトスタイルを活用した 20 代の日本人女性の魅力的な写真。画像は、寒色系の落ち着いた色調にし、ホラー映画のワンシーンのように見える必要があります。"
# japanese_prompt = "ポップアート スタイルの画像(扇風機)を生成"
# japanese_prompt = "全身白の服を着た男性がビーチに座っている, クローズアップ, ゴールデン アワーの照明(アスペクト比 16:9)。顔を含む。"
# japanese_prompt = "巨大な高層ビルのデジタル レンダリング, モダン, 壮大, 壮大な背景に美しい夕日(9:16 のアスペクト比)"
# japanese_prompt = "パスタのプレート、100mm マクロレンズ"
# japanese_prompt = "女性、35mm 縦向き、フィルム ノワール"
# japanese_prompt = "女性、35mm の縦向き、青とグレーのデュオトーン"
# japanese_prompt = "勝利のタッチダウン、高速シャッター スピード、動作トラッキング"
# japanese_prompt = "広大な山並み、風景、広角 10mm"
# japanese_prompt = "月の写真、天体写真、広角 10mm"

response = client.models.generate_content(
    model=MODEL_TEXT,
    config=types.GenerateContentConfig(
        systemInstruction="あなたは翻訳者です。与えられた日本語を英訳して画像生成用のプロンプトを1つ作成して下さい。",
        temperature=1.0,
        topP=0.9,
        maxOutputTokens=1000
    ),
    contents=[types.Content(role="user", parts=[types.Part.from_text(text=japanese_prompt)])]
)
english_prompt = response.text
print(english_prompt)

response = client.models.generate_images(
    model=MODEL_IMAGE,
    prompt=english_prompt,
    # prompt=japanese_prompt,
    config=types.GenerateImagesConfig(
        numberOfImages=3
    )
)

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))
for i, generated in enumerate(response.generated_images):
    image = Image.open(BytesIO(generated.image.image_bytes))
    axes[i].imshow(image)
plt.show()

英訳例

A captivating photograph of a woman in her 20s who looks strikingly like Anne Hathaway, captured in a street photography style. The image should feature a subdued, warm color palette with orange hues, and evoke the feel of a scene from a movie.