生成AIを組み込んだシステムを作っているとき、「指示通りのデータ構造(JSON)だけを返してほしいのに、前後に『はい、承知しました!』などの余計な挨拶や解説が入ってしまう」「思考プロセスが長すぎて、後続の処理でエラーになってしまう」といった問題に頭を悩ませたことはありませんか?

人間同士の会話であれば親切に思える「一言」も、プログラムが自動で処理するシステムにおいては、システムエラーを引き起こす原因や、無駄な通信コスト(トークン費用の増大)になってしまいます。

このような「生成AIが吐き出してしまう不要なトークン(言葉のデータ)を、プロンプトエンジニアリングと別のAIモデルを活用して綺麗に掃除する」というアプローチが注目を集めています。その代表的な概念・オープンソースプロジェクトが「Vomit」です。

この記事では、AIの無駄な出力を削減し、実務で安定して動くシステムを作るための「プロンプトエンジニアリング」と「出力クリーンアップ手法」について、専門用語をわかりやすく噛み砕きながら導入・設計・運用のポイントを徹底解説します。


1. なぜAIは「余計なこと」を話してしまうのか?(課題と背景)

AIの余計な一言に悩んでいませんか?「Vomit」に学ぶ、プロンプトエンジニアリングによる出力クリーンアップ設計ガイドの概念図

まずは、なぜ生成AI(LLM:大規模言語モデル)が実務において余計な言葉を出力してしまうのか、その背景と課題を整理してみましょう。

1-1. 生成AIの基本的な仕組みと「親切心」の正体

生成AIは、膨大な文章データを学習し、「入力された文章の次に続く確率が最も高い言葉」を予測して出力する仕組みを持っています。

一般的な対話型AIサービスでは、ユーザーにとって親しみやすく、役に立つ回答をするように訓練されています。そのため、「〇〇のデータを抽出して」と頼むと、以下のような出力を返そうとします。

AIの出力例: 「ご指定のデータを抽出しました。以下のJSONデータをご確認ください。

1
{ "status": "success", "user_id": 12345 }

その他にご不明な点がございましたら、お気軽にお尋ねください!」

画面越しに人間が読む分には素晴らしい対応ですが、この出力をそのままプログラム(バックエンドシステム)で受け取るとどうなるでしょうか。プログラムはJSONデータの部分({ "status"... })だけを期待しているため、前後の挨拶が原因でデータの解析(パース)に失敗し、システムが停止してしまいます。

1-2. 思考プロセス(CoT)の肥大化とトークンコスト

近年の非常に賢いAIモデル(高度な推論能力を持つモデル)は、回答を導き出す前に「頭の中で考えるステップ(Chain of Thought:思考の鎖)」を出力する傾向があります。

思考をオープンにさせることで回答の正確性は劇的に向上するのですが、その反面、数千〜数万語におよぶ「思考過程の文章」が同時に出力されてしまいます。

AIの利用料金や処理速度は、扱った言葉の量である「トークン」単位で計算されます。つまり、最終的に欲しい答えがたった1行だったとしても、AIが途中で長く考えた分だけ、以下のようなデメリットが発生します。

  • コストの増加:不要なトークンに対してもAPI利用料が発生する。
  • 応答速度(レイテンシ)の低下:文字数が多いほど、画面に結果が表示されるまでの待ち時間が長くなる。
  • システム連携の不安定化:不要なテキストが混ざることでプログラムの自動処理が破綻する。

このような「AIが吐き出した不要なデータ群(トークン)」をいかに排除し、純粋で扱いやすい出力だけを取り出すかが、実務における「プロンプトエンジニアリング」の極めて重要な題材となっています。


2. 別モデルで出力を洗浄する「Vomit」のプロンプトエンジニアリング設計

「1回のプロンプト(指示文)で、思考も完璧に行い、かつフォーマットも余計な文字を一切含めず完璧に出力させる」というのは、実は非常に難易度が高い作業です。どれほど完璧な指示文を書いても、確率で動くAIは一定の割合で失敗してしまいます。

そこで登場したアプローチが、GitHub上で話題となったリポジトリ「Vomit」に代表される**「生成とクリーンアップ(清掃)を役割分担させる設計手法」**です。

※なお、GitHub上の「zachahn/vomit」リポジトリに関する詳細な内部実装や依存ライブラリのバージョン制限などの未確認事項については、各自の導入環境に合わせて検証が必要です。ここでは本プロジェクトが示している設計思想とプロンプトエンジニアリングの構造について解説します。

2-1. 2段階パイプライン(生成と洗浄の分離)

「Vomit」の考え方の核心は、**「重く賢いAIに自由に思考させ、吐き出された混沌とした出力(Vomit)を、後段の軽くて速いAIで綺麗に拭き取る」**という2段階の処理(パイプライン)にあります。

従来の1段階アプローチ:

[ユーザー指示] ➔ 【超賢いAI】 ➔ (思考+挨拶+JSONが混ざった複雑な出力) ➔ パースエラー!

「Vomit」パターンの2段階アプローチ:

[ユーザー指示] ➔ 【メインAI(賢いモデル)】 ➔ (自由な思考と回答を出力)   ↓(そのまま後段に渡す) 【クリーンアップAI(軽量モデル)】 ➔ (プロンプトで「JSON部分以外を捨てろ」と指示)   ↓ 【クリーンなデータのみ】 ➔ システムへ安全に自動連携!

2-2. なぜこの設計がプロンプトエンジニアリングとして強力なのか?

この設計の利点は、各ステップでのプロンプト(指示文)の目的が明確化される点にあります。

  1. メインプロンプト(第1段階)の役割: フォーマットの制約(「余計なことを書くな」「JSONだけ出せ」など)を極力減らし、「問題を正しく解くこと」「深く思考すること」だけに集中させます。制約が少ない方が、AI本来の推論能力が最大限に発揮されます。
  2. クリーンアッププロンプト(第2段階)の役割: 高度な思考は不要で、「渡された文章から必要な形式(JSONやコードなど)を抜き出すこと」だけに特化させます。この処理には、応答速度が速くコストが安い小規模なAIモデル(軽量LLM)を使用できます。

このように役割を分担させることで、1つのプロンプトに無理な条件を詰め込みすぎてAIが混乱する「指示のオーバーロード」を防ぐことができます。


3. 実務で使える!プロンプト設計と導入のステップ

それでは、実際にこのクリーンアップ手法を実務に導入する際の手順と、プロンプトの設計例を見ていきましょう。

3-1. ステップ1:メインLLMのプロンプト設計(思考の解放)

メインのAIには、フォーマットの厳密さよりも「正確な思考と分析」を行わせます。

1
2
3
【メインプロンプト例】
以下のカスタマーサポートログを分析し、ユーザーの潜在的な不満点と改善案を挙げてください。
分析の過程で気付いたことや思考のステップも含めて、詳しく出力してください。

この段階では、AIがどれだけ長文の解説や思考プロセスを出力しても問題ありません。むしろ、自由に思考させることで質の高い分析結果が得られます。

3-2. ステップ2:クリーンアップLLMのプロンプト設計(抽出・整形)

次に、メインAIが出力したテキスト全体をそのまま引き取り、不要な部分を削ぎ落とすための専用プロンプトを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
【クリーンアッププロンプト例】
あなたは厳格なデータ整形アナリストです。
以下の「入力テキスト」には、分析結果の他におしゃべりや思考過程が含まれています。

入力テキストから「潜在的な不満点」と「改善案」だけを抽出し、指定のJSON形式に変換して出力してください。

【制約事項】
・Markdownのバックティック(```json )や説明文、前置き、後書きは絶対に含めないでください。
・出力は純粋なJSONオブジェクトのみとしてください。

【出力フォーマット】
{
  "complaints": ["不満点1", "不満点2"],
  "improvements": ["改善案1", "改善案2"]
}

【入力テキスト】
{{メインAIの生の出力}}

3-3. 実務におけるプロンプトエンジニアリングのテクニック

後段のクリーンアッププロンプトの精度をより高めるために、以下のテクニックを組み合わせます。

  • One-Shot / Few-Shot 提示(例示の追加): 「汚い入力テキスト」と「整形後のきれいなJSON」の対の例を1〜2セットプロンプト内に含めることで、AIの出力ブレを最小限に抑えられます。
  • システムプロンプトの活用: 「あなたはAPIのエンドポイントとして振る舞います。文字列以外を出力するとシステム障害が発生します」といった強い役割定義(ロールプレイ)を与えることで、余計な挨拶を防止します。

4. 導入時の注意点とトレードオフ

非常に強力な「Vomit」手法ですが、実務に導入する際にはいくつかの注意点やトレードオフ(トレードオフ:一方を得れば他方を失う関係)が存在します。プロジェクトの要件に合わせて慎重に判断する必要があります。

4-1. レイテンシ(応答時間)の増加

AIモデルを2回呼び出すことになるため、単純計算でネットワークの通信時間とAIの処理時間が2回分かかります。

  • 対策: 2段目のクリーンアップ用モデルには、処理速度が非常に速い「軽量モデル」を採用します。また、リアルタイム性が求められる画面(チャットボットなど)では画面描画を工夫する、非同期のバッチ処理(裏側での自動処理)で採用するなどの工夫が効果的です。

4-2. トークンコストの二重発生

1段目の出力テキスト全体を2段目の入力として送信するため、入力トークン数が大きくなります。

  • 対策: 2段目のモデルには単価の安い軽量モデルを選ぶことで、トータルコストの上昇を数%〜数十%程度に抑えることができます。メインモデルに何度もやり直し(リトライ)をさせるコストに比べれば、トータルで安くなるケースも多く存在します。

4-3. 未確認事項と実装上のリスクについての明記

※「Vomit」リポジトリおよび周辺ライブラリの具体的コードや、将来的な「Claude 5」などの未発表モデルに対する完全な互換性・動作保証については、技術の進歩が非常に早いため現時点では「未確認」です。

自社システムに導入する際は、必ず以下の点について事前にPoC(概念実証:小さなテスト実験)を実施してください。

  • 使用するクリーンアップ用モデルが、意図通りにJSONなどのフォーマットを維持できるか
  • クリーンアップ時に、メインAIが出力した重要な情報が削ぎ落とされたり変形されたり(ハルシネーション:AIの嘘)していないか

5. まとめ

今回は、AIの「余計な一言」や「過剰な思考出力」を整理し、実務で安定して動くシステムを構築するためのプロンプトエンジニアリング手法「Vomit(出力クリーンアップ手法)」について解説しました。

本記事の要点を振り返ります。

  1. AIが出力しすぎる問題:AIの性質上、思考プロセスや親切な挨拶が出力され、システム連携のエラーやコスト増加の原因になる。
  2. 生成と清掃の役割分担:1つのプロンプトで「思考」と「厳格なフォーマット出力」の両立を求めず、メインAIとクリーンアップ用AIの2段階に処理を分ける。
  3. プロンプトエンジニアリングの視点:前段では思考を解放し、後段(軽量AI)で「抽出と形式変換」に特化させたプロンプトを与えることで、安定性が劇的に向上する。

プロンプトエンジニアリングは、単に「1つの指示文をいかに上手く書くか」というテクニックにとどまりません。AIの特性を理解し、複数のモデルや後処理プロセスをどのように組み合わせるかという「パイプライン全体の設計」こそが、実務におけるAI活用成功の鍵となります。

「AIの出力が安定しなくてシステムに組み込めない」とお悩みの方は、ぜひこの「出力クリーンアップ設計」を自社のプロンプトエンジニアリングに取り入れてみてください。


参考資料