前回、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:4b | 0.88 |
| mistral:7b | 1.55 |
| llama3.1:8b | 2.34 |
| gemma3:12b | 3.04 |
| qwen3:8b | 5.42 |
| gpt-oss:20b | 43.53 |
| qwen3:4b | 38.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による評価比較表
| 評価AI | 1位 | 2位 | 3位 | 総合コメント |
|---|---|---|---|---|
| Claude Sonnet 4.5 | gemma3:4b 速度・品質・安定性のバランス最優秀 日本語SNS最適 | llama3.1:8b 論理的考察が必要な場合に有効 メタ出力フィルタ必須 | gemma3:12b 丁寧な表現 制約外れやすい | 実運用即投入可能なのはgemma3:4b。避けるべき: qwen3:4b, gpt-oss:20b(タイムアウト・英語比率高) |
| GPT-4.1 | gemma3:4b 速さ・日本語・安定性・要約力でバランス良好 SNS用途向き | llama3.1:8b 指示遵守度高 論理的出力 やや説明的 | gemma3:12b 4bより遅い 自然な日本語 安定性高 | 実用・日本語SNS用途ならgemma3:4bかllama3.1:8b。品質重視ならllama3.1:8b、速さ重視ならgemma3:4b |
| GPT-5.2 | gemma3: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.5 | GPT-4.1 | GPT-5.2 |
|---|---|---|---|
| 2位 | llama3.1:8b | llama3.1:8b | gemma3:12b |
| 3位 | gemma3:12b | gemma3:12b | llama3.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によるモデル評価レポート
- gemma3:4b
- 速さ・日本語・安定性・要約力でバランス良好。SNS用途にも向く。
- llama3.1:8b
- 指示遵守度が高く、論理的な出力。やや説明的だが高品質。
- gemma3:12b
- 4bよりやや遅いが、自然な日本語と安定性。
GPT-5.2によるモデル評価レポート
【総合ランキング(自動スコアベース)】
- gemma3:4b 自動総合=92.2 avg=0.88s 日本語率=85% 遵守=88% 安定=100%
- gemma3:4b: バランス良く安定。SNS向けにそのまま流しやすい
- gemma3:12b 自動総合=86.8 avg=3.04s 日本語率=74% 遵守=84% 安定=100%
- gemma3:12b: 80-200字制約を外しやすい
- 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とプロンプトの組み合わせを探ってみたいと思います。



