Vibe coding実践例:ペルソナ設定でAI生成のX投稿コメントを安定させるモデル比較

AIテキスト

前回、AIにX投稿のコメントを書いてもらう際に、ペルソナ設定で投稿者のキャラクターを固定する方法を検証しました。

Ollama(llama3.1:8b)を使用しましたが、プロンプトの追従性や日本語対応に難しさが残る結果でした。

今回、この用途に最も適したLLMをVibe codingで探っていきます。

LLM比較の試験環境

今回、下記のような環境で評価を行いました。個人の環境としては一般的な範疇かと思います。VRAMが12GBあるため、gpt-oss:20bが何とか実行可能です。

Winodws 11, Core i9-13900F, メモリ 32 GB, CUDA 3.0(NVIDIA RTX4070 VRAM 12GB)

あるニュースサイトのRSSフィードを基に50件分の記事の要約を渡して、コメントを生成する平均の処理時間を計測しています。

LLM比較コードの生成

前回作成したコードを添付し、ChatGPTに下記のように指示をして、比較処理を作成してもらいました。

添付のコードに最も適したLLMを探したい。
コードを改修して、予めollamaにダウンロードされているモデルそれぞれについて、
記事全件の要約を渡してコメントを生成する処理を行い、それぞれの処理時間と、モデルごとの平均処理時間を計測して出力してください。
処理時間や品質を後で比較・分析できるよう、出力されたコメントや処理時間はファイルに記録してください。

生成されたコードは前回のコードのメイン処理を書き換えたものでした、参考まで抜粋します。 Ollamaには試したいモデルを予めインストールしてあります。

# main部分以外は割愛

def main():
    # Markdown形式のファイル読み込み
    articles = parse_rss()

    os.makedirs("results", exist_ok=True)
    models = get_ollama_models(OLLAMA_URL)   # Ollamaモデル一覧を取得する処理

    print(f"[INFO] test models: {models}")
    for model in models:
        times = []
        outputs = []
        for idx, article in enumerate(articles, 1):
            t0 = time.time()
            try:
                payload = {
                    "model": model,
                    "prompt": PERSONA_PROMPT.replace("__NEWS_SUMMARY__", article["summary"]),
                    "stream": False
                }
                response = requests.post(OLLAMA_URL, json=payload, timeout=180)
                response.raise_for_status()
                data = response.json()
                text = (data.get("response") or "").strip()
            except Exception as e:
                text = f"[ERROR] {e}"
            t1 = time.time()
            times.append(t1-t0)
            outputs.append(f"[{idx}] {article['title']}\n{article['url']}\ntime: {t1-t0:.2f}s\n{text}\n")
        avg = sum(times)/len(times) if times else 0
        out = f"model: {model}\narticles: {len(articles)}\navg_time: {avg:.2f}s\n\n" + "\n".join(outputs)
        with open(f"results/{model.replace(':','_')}.txt", "w", encoding="utf-8") as f:
            f.write(out)
        print(f"[DONE] {model}: avg {avg:.2f}s ({len(articles)}件)")

if __name__ == "__main__":
    main()

完了すると、resultsフォルダにモデルごとの処理結果が保存されます。

ChatGPTによる試験結果の分析

今回、モデル数も多く、結果を自分で確認するのは大変なので、ChatGPTに分析を依頼しました。

ChatGPTに、添付ファイルとしてPythonコードと出力されたtxtファイルを与え、下記のように指示しています。 コードはVS Codeとのアプリ連携を使いファイルを渡していますが、添付ファイルでも特に違いはないようです。

添付のコードとその実行結果を分析して、レポートとランキングを出してMarkdown形式のレポートにまとめてください。
速さ、指示に対する遵守度、日本語の正確性、文章の魅力などを評価してください。
他に考えられる提案があれば、評価軸を加えてください。

処理時間ランキング

利用しやすい gemma, llama, qwen を中心に試した結果、平均の処理時間は下記のとおりでした。

モデル名平均処理時間(秒)
gemma3:4b0.88
mistral:7b1.55
llama3.1:8b2.34
gemma3:12b3.04
qwen3:8b5.42
gpt-oss:20b43.53
qwen3:4b38.75(タイムアウト多発)

qwen3:4bは、本来は8bより高速動作が期待されますが、挙動が不安定でした。 ollamaで再インストールも何度か試しましたが同様の結果で、モデル自体か今回の環境に問題があると考えられます。

出力されたコメントを見ると、日本語の品質にかなりバラつきがあります。

ChatGPTでの分析

下記がChatGPTによる分析結果の抜粋です。

結論から言うと、この結果をそのまま用いることは問題があります

qwen3:8bの実際の出力結果は3割程度、mistralはほぼ全て英語でコメント案が出力されています。ChatGPTはその結果を踏まえてもランキングを生成しています。

🥇 1位:qwen3:8b
    •    品質 × 指示遵守 × 安定性のバランス最良
    •    メイン運用推奨

🥈 2位:gemma3:12b
    •    安定・安全・速さのバランス型
    •    保険として優秀

🥉 3位:mistral:7b
    •    速いが日本語SNS特化には一工夫必要

(参考)GitHub Copilotでのモデル評価結果まとめ

今回、同様にGitHub Copilotを経由して、各社のモデルによる分析も実施しました。ベスト3部分に絞って紹介します。 こちらは有料の利用となるため今回は参考として掲載しますが、評価は概ね一致しています。

また興味深いことに、ChatGPTとGPT-5.2は順位が異なっています。

3つのAIによる評価比較表

評価AI1位2位3位総合コメント
Claude Sonnet 4.5gemma3:4b
速度・品質・安定性のバランス最優秀
日本語SNS最適
llama3.1:8b
論理的考察が必要な場合に有効
メタ出力フィルタ必須
gemma3:12b
丁寧な表現
制約外れやすい
実運用即投入可能なのはgemma3:4b。避けるべき: qwen3:4b, gpt-oss:20b(タイムアウト・英語比率高)
GPT-4.1gemma3:4b
速さ・日本語・安定性・要約力でバランス良好
SNS用途向き
llama3.1:8b
指示遵守度高
論理的出力
やや説明的
gemma3:12b
4bより遅い
自然な日本語
安定性高
実用・日本語SNS用途ならgemma3:4bかllama3.1:8b。品質重視ならllama3.1:8b、速さ重視ならgemma3:4b
GPT-5.2gemma3:4b
総合92.2点
avg=0.88s
日本語85%
遵守88%
安定100%
gemma3:12b
総合86.8点
avg=3.04s
日本語74%
遵守84%
安定100%
llama3.1:8b
総合85.5点
avg=2.34s
日本語82%
遵守74%
安定100%
gemma3:4b: そのままSNSに流せる。gemma3:12b: 80-200字制約外しやすい。llama3.1:8b: メタ出力混入/制約外しやすい

3つのAI評価の一致点

全AI一致: gemma3:4bが総合1位
共通の強み: 速度・日本語率・安定性のバランス
上位3モデル: gemma3:4b、gemma3:12b、llama3.1:8b(順位は若干変動)
避けるべき: qwen3:4b(タイムアウト)、gpt-oss:20b(遅い・英語寄り)

評価の相違点

項目Claude Sonnet 4.5GPT-4.1GPT-5.2
2位llama3.1:8bllama3.1:8bgemma3:12b
3位gemma3:12bgemma3:12bllama3.1:8b
評価軸主観+客観主観中心完全客観(ヒューリスティック)
llama3.1:8bの評価論理的考察が強み指示遵守度高メタ出力混入で減点
gemma3:12bの評価丁寧だが長文化自然な日本語80-200字制約外しやすい

結論

全AI一致の推奨: gemma3:4b

  • 0.88秒の高速処理
  • 日本語率85%
  • 指示遵守88%
  • SNSにそのまま投稿可能

用途別推奨:

  • SNS自動投稿(速度重視) → gemma3:4b
  • 論理的考察(品質重視) → llama3.1:8b(要メタ出力除去)
  • 丁寧な表現(読みやすさ重視) → gemma3:12b(長文注意)

個別AI評価レポート詳細(ベスト3抜粋)

ご参考まで、下記は各モデルによる評価レポート抜粋です。ベスト3に絞っています。

Claude Sonnet 4.5によるモデル評価レポート

総合1位: gemma3:4b

  • 速度・品質・安定性のバランスが最も優れている
  • 日本語SNSコメント生成に最適
  • 実運用に即投入可能

次点: llama3.1:8b

  • 論理的な考察が必要な場合に有効
  • メタ出力のフィルタリング実装が必須

避けるべき: qwen3:4b, gpt-oss:20b

  • タイムアウト・処理時間の問題で実用性に欠ける
  • 英語比率が高く、日本語用途に不向き

OpenAI GPT-4.1によるモデル評価レポート

  1. gemma3:4b
    • 速さ・日本語・安定性・要約力でバランス良好。SNS用途にも向く。
  2. llama3.1:8b
    • 指示遵守度が高く、論理的な出力。やや説明的だが高品質。
  3. gemma3:12b
    • 4bよりやや遅いが、自然な日本語と安定性。

GPT-5.2によるモデル評価レポート

【総合ランキング(自動スコアベース)】

  1. gemma3:4b 自動総合=92.2 avg=0.88s 日本語率=85% 遵守=88% 安定=100%
    • gemma3:4b: バランス良く安定。SNS向けにそのまま流しやすい
  2. gemma3:12b 自動総合=86.8 avg=3.04s 日本語率=74% 遵守=84% 安定=100%
    • gemma3:12b: 80-200字制約を外しやすい
  3. llama3.1:8b 自動総合=85.5 avg=2.34s 日本語率=82% 遵守=74% 安定=100%
    • llama3.1:8b: コメント以外の説明(メタ出力)が混ざりやすい / 80-200字制約を外しやすい

注意点と気付き

前回記事では、ChatGPTにキャラクター設定にはJSONを使い、英語表記で問題ないという助言がありましたが、 今回改めてClaude sonnet 4.5に聞いた結果、下記のような回答がありました。

ChatGPTの案(JSON形式、英語OK)が有効なケース:

GPT-4、Claude 3.5などの高度な大型モデル
Structured outputに対応したモデル
指示理解能力が高く、複雑な構造を解釈できる

私(注:Claude sonnet 4.5)の案が有効なケース:

Ollamaの小型モデル(gemma3:4b、mistral:7bなど)
results_originalを見ると実際に問題が発生:
llama3.1:8b → プロンプト解釈そのものを出力
mistral:7b → 英語で応答
メタ説明の混入が多数

このコメントがどこまで事実かは検証はできていません。(「高度な大型モデル」は有料のため)

ただ今回の結果を指示する内容ではあり、少なくとも前回のプロンプトでは、LLMの特性を十分に引き出せていない可能性はあります。

まとめ

今回、RSSフィードから取得した記事要約に対し、X向けコメント案を生成するプロンプトとコードをVibe codingで作成しました。

LLMの比較自体は行えましたが、英語でコメントが生成されるなど問題が多く、プロンプト自体に問題が疑われます。

次回は別のプロンプトに差し替えて試験を行い、より良いLLMとプロンプトの組み合わせを探ってみたいと思います。

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