chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

生成AI(Claude Sonnet 4)で、県民アルアルクイズを作ってみる

背景:マイコンだって生成AIしたい・・・ネタの続き
課題:AWS Bedrockが提供する言語モデルの中で安価な Nova Microを使って県民アルアルクイズを作ってみたが、指定した問題を生成できなかった
取り組み:高性能な Claude Sonnet 4で県民アルアルの問題を作ってみる
結果:ええ感じの仕上がりになった。だが、調子にのって使っていると、ThrottlingExceptionが発生。利用料金もイマイチ不明
詳細:

サンプル等を参考に以下のコードを作った(boto3版、ローカルで実行)

#!/usr/bin/python3

# https://ap-northeast-1.console.aws.amazon.com/bedrock/home?region=ap-northeast-1#/model-catalog/serverless/anthropic.claude-sonnet-4-20250514-v1:0
# [https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/inference-profiles-support.html]

# anthropic.claude-sonnet-4-20250514-v1:0
# Use the Conversation API to send a text message to Anthropic Claude.

import boto3
from botocore.exceptions import ClientError

# Set the model ID, e.g., Claude 3 Haiku.
REGION = 'ap-northeast-1'
MODEL_ID = 'apac.anthropic.claude-sonnet-4-20250514-v1:0'

# Create a Bedrock Runtime client in the AWS Region you want to use.
client = boto3.client("bedrock-runtime", region_name = REGION)

# Start a conversation with the user message.
query_string = '''
県民性に着目した県民アルアルクイズを作ってください。
県民性とは、好まれる郷土料理や、特産品、ことわざ等です。
県民アルアルクイズは、問と選択肢で構成されます。選択肢は(A),(B)の2択で、どちらがかが正解です。
正解はBに固定してください。
問はカタカナ12文字、選択枝は(A),(B)、合わせてカタカナ12文字。
問と選択枝は以下の様なJSON形式で作成してください。
{ 'Q': <問>, 'A' : <選択肢(A)> , 'B' : <選択肢(B)> }
回答はJSONのみで結構です。
問の県は山梨としてください。
'''
conversation = [
    {
        "role": "user",
        "content": [{"text": query_string}],
    }
]

try:
    # Send the message to the model, using a basic inference configuration.
    response = client.converse(
        modelId = MODEL_ID,
        messages = conversation,
        inferenceConfig = {"maxTokens": 512, "temperature": 0.5, "topP": 0.9},
    )

    # Extract and print the response text.
    response_text = response["output"]["message"]["content"][0]["text"]
    print(response_text)

except (ClientError, Exception) as e:
    print(f"ERROR: Can't invoke '{model_id}'. Reason: {e}")
    exit(1)

実行結果は以下

```json
{ "Q": "ヤマナシケンミンガアイスルキョウドリョウリハ?", "A": "モツニ", "B": "ホウトウ" }
```

正解はB固定にしているので、ホウトウが好まれると・・・

県民アルアルの程度で良いのだがどの規模の言語モデルが適切かを質問

具体的な候補は以下

一度に全部作らず、ネタ出し-> クイズ形式に変換 の2ステップでもいいのかもしれない
以下を問いかけてみた

query_string = '''
県民性に着目した県民アルアルクイズを考えています。
県民性とは、好まれる郷土料理や、特産品、ことわざ等です。
県民性でみんながなるほどと思えるような県ごとの特徴はありますか?
'''

回答は以下。

県民性を活用したクイズは面白いアイデアですね!以下のような特徴的な県民性があります:

## 食べ物・郷土料理系
**北海道** - ジンギスカン、海鮮丼を愛し、本州を「内地」と呼ぶ
**青森** - りんごとねぶた祭り、津軽弁が独特
**大阪** - たこ焼き・お好み焼きが主食級、エスカレーターは右立ち
**香川** - うどん消費量日本一、「うどん県」を名乗る
**沖縄** - ゴーヤチャンプルー、時間にゆったり「うちなータイム」

## 気質・行動パターン系
**京都** - 「ぶぶ漬けでもどうどす?」(帰れの意味)
**名古屋** - 喫茶店のモーニングが豪華、味噌文化
**福岡** - 屋台文化、明太子愛が強い
**秋田** - 美人が多いと言われる、きりたんぽ
**高知** - 酒豪が多い、カツオのたたき

## クイズ例
「この県の人は『今度お茶しに来てください』と言われたら帰り時だと理解する」→京都
「この県では朝食代だけでトースト・卵・サラダ・コーヒーが付いてくる」→愛知

いかがでしょうか?

ネタとしては面白いけどこれをクイズ形式に仕上げるのは大変な印象も。。県民性をRAGとして補強して、軽量な言語モデルに質問形式に仕上げてもらうか???
サクッと作るつもりだったのに、段々と沼にはまってきた。値段を安くしようとするといろいろ苦労が発生する。

まだ仕上げは必要だが、だいたい動く感じにはなったので、一旦終了。

コードが固まるまではIaCはやらない(試作中にエラーが出てもどっちの問題か切り分け大変なので)