AI にブログ記事を書かせると、文法は正しいのに「AI が書いた感じ」が抜けません。この違和感を、chaffjs(決定論的な日本語文書検査ツール)と LLM の書き直しで整えます。
前回の記事では長文の記事を 5 周ブラッシュアップする工程を書きましたが、本記事は結果だけを見せます。20 行のサンプル文章がどう変わるかを並べます。
Before — AI 生成風の 20 行
架空の「プロンプトエンジニアリング入門」記事を、AI が吐きがちなクセを混ぜて書きました。
# AI 時代のプロンプトエンジニアリング — 使い手の思考が問われる新しい技術
**AI の使い方の最適化**。AI 時代の思考法の設計書。使い手の意図を正確に伝えるための技術。これが現代のプロンプトエンジニアリング。
プロンプトエンジニアリングは、AI との対話を最適化するための重要な技術であり、
ユーザーの意図を AI に対して正確に伝えるための手段でもあり、継続的な改善を前提と
した反復プロセスでもあって、現代のビジネスパーソンにとって必須となってきている
極めて重要なスキル。優れたプロンプトを構成する核心的な 3 要素は、**具体性**、
**文脈**、**制約**。
良いプロンプトを書くとは、**料理のレシピを書く**こと。材料も、火加減も、順序も、
すべてを明示することで、料理の再現。AI も同じく、指示の明確さに応じた期待通り
の結果の返却。
しかしながら、多くの利用者はこの技術の重要性を軽視するものとするきらいがあり、
「とりあえず質問を投げる」「結果が芳しくなければ別のモデルを試行する」という
場当たり的な使い方では、AI の持つ本来のポテンシャルを引き出すことは不可能で
あり、ここで重要となるのが**反復改善**という考え方。
反復改善とは、プロンプトを一度書いて終わり、ではなく、結果を見て改善を続ける
ものとするプロセスであり、これはまた、AI との対話を深めていくものとする継続
的な行為でもあり、何回も試行することで徐々に精度を上げていくものとする、地道
な作業。
...(以下 4 項目の箇条書きと結び)
chaff にかける
3:3 info 本文に体言止めが 11 文あります(4 文まで)
taigen-dome-in-prose
5:1 warning 「極めて重要」は、中身を言わずに強調だけしています
empty-intensifier
5:1 info 「は」で出した主題から述語まで 110 字あります(80 字まで)
topic-predicate-distance
9:1 info 「は」で出した主題から述語まで 90 字あります(80 字まで)
topic-predicate-distance
11:1 info 一文に節が 7 つつながっています(5 つまで)
clause-chain
11:1 info 一文に読点が 7 個あります(6 個まで)
max-ten
指摘 6 件、動いていない rule 56 件
chaff は 6 件を見つけました。内訳:
- 体言止めが本文に 11 文(上限 4)
- 空の強調語(例の表現は本記事で引用のため割愛)
- 主題から述語まで遠い文(110 字、90 字)
- 節が多すぎる文(7 節、上限 5)
- 読点が多い文(7 個、上限 6)
いずれも AI 生成文章の典型です。「〜であり、〜でもあり、〜でもあって」で節が繋がり、「〜ものとする」で冗長になり、体言止めで並べて勢いを出した結果の跡です。
LLM に chaff の指摘を渡して書き直す
chaff の指摘を LLM にそのまま貼り、同じ記事を書き直してもらいます。
After — chaff 指摘ゼロ
# プロンプトエンジニアリング入門 — AI に伝わる指示の書き方
AI に指示を出すとき、返ってくる結果の質は、プロンプトの書き方で大きく変わります。
これは単なる命令文ではなく、「何を・どんな条件で・どんな形で」を伝える設計書に
近いものです。
プロンプトエンジニアリングは、AI との対話を効率化する技術です。優れたプロンプト
は「具体性」「文脈」「制約」の 3 要素を備えています。たとえば「要約して」と頼む
より、「300 字以内で、小学生にも分かる言葉で、3 つの箇条書きに要約して」の方が
狙った結果に近づきます。
多くの人はこの技術を軽視しがちで、「とりあえず質問を投げる」「結果が悪ければ
別のモデルを試す」という使い方に留まります。ただ、これでは AI の本来の力を引き
出せません。カギになるのは、反復改善という考え方です。
反復改善は、プロンプトを一度書いて終わりにせず、結果を見て手直しを続ける進め方
です。一回目で完璧なプロンプトはなく、何度か試すことで精度が上がっていきます。
...(以下 4 項目の箇条書きと結び)
再度 chaff にかける
指摘 0 件、動いていない rule 56 件
ゼロ件。
何が変わったか
Before / After を並べた表:
| 直した点 | Before | After |
|---|---|---|
| 体言止め | 「〜という技術」「〜という考え方」など 11 文連続 | ほぼ全文を文で終わらせる |
| 空の強調語 | 「極めて重要なスキル」 | 「狙った結果に近づきます」など具体に差し替え |
| 節の連鎖 | 「〜であり、〜でもあり、〜でもあって」が 1 文に 7 節 | 文を区切って読める長さに |
| 主題から述語の距離 | 110 字、90 字(主題の後に修飾が長々と連なる) | 短く、主題→述語を近づける |
| 読点の数 | 1 文 7 読点 | 複数の文に分割 |
| タイトル | 「使い手の思考が問われる新しい技術」(抽象) | 「AI に伝わる指示の書き方」(具体) |
仕組み — chaff は文章を書き換えない
ここが理解のポイントで、chaff は文章を 1 文字も書き換えません。chaff の公式メッセージも「文章は書き換えません。直すのは書いた人です」とはっきり書いてあります。
ではなぜ、chaff + LLM の組み合わせで文章が整うのでしょうか。
chaff がやっていることは、「AI っぽさ」が出やすいパターンを機械で検出するルールを 50 以上積んで、該当する箇所に名前を付けて指し示すだけです。例えば本記事で引っかかった:
taigen-dome-in-prose:体言止めが続きすぎているempty-intensifier:中身の無い強調語clause-chain:1 文の節が多すぎるtopic-predicate-distance:主題と述語の距離が遠いbold-density:太字が密集しすぎているno-doubled-joshi:「の」が 3 回続いているnumber-style-consistency:数字の表記が揃っていない
いずれも「ここは AI 生成でよく見るパターンだぞ」という座標を返します。しかも chaff の出力は、どう直すかまで短く添えてあるので、そのまま LLM への修正プロンプトになります。たとえば orthographic-variant 違反では「この文書はふつう『申し込み』と書く語です」、list-item-form-mix では「ほかの項目は文で終わります」といった具合です。
LLM がやっていることは、chaff の指摘を読んで、意味を変えずに書き直すこと。「体言止めを文にする」「節を分ける」「空の強調を具体に置き換える」といった操作は、LLM の得意分野です。
「LLM 単独で直して」とどこが違うか
LLM に「AI っぽい文章を直して」と頼むだけでも、ある程度は直ります。ただ、何がダメかの判断が LLM ごと・実行ごとにブレるので、同じ入力に対して違う結果が返ってきます。これだと「もう一周直したら逆戻りした」が起こります。
chaff を間に挟むと、ダメな箇所と理由が決定論的に固定されるので、LLM の書き直しは具体的なターゲットに向かいます。再現性が出て、何周か繰り返しても逆戻りが減ります。
言い換えると、chaff は「AI っぽいって何かを工学的に言語化したルール集」で、LLM に「ここを直せ」という指示を自動生成する装置、という見方ができます。文章を直してくれるのは最後まで LLM の仕事ですが、どこを直すかの判断を chaff が受け持つことで、全体として安定するわけです。
道具の棲み分け
| chaff 単独 | LLM 単独 | 両方 | |
|---|---|---|---|
| AI っぽさを検出 | ◎(決定論) | △(主観・ブレあり) | ◎ |
| 書き直し | ×(書かない) | ◎ | ◎ |
| 同じ結果を再現 | ◎ | ×(確率的) | ◎ |
両方を交互に挟むのが、本記事のテーマである「AI 生成文章の自然さ」への実用解になります。
参考
- chaffjs — Node.js 24 以上があれば
npx chaffjs <file>で動く - 前回記事(長文を 5 周かけて直す工程の記録): AI の書いた日本語を「人間が書いたっぽく」直す — chaffjs と LLM で 5 周ブラッシュアップした記録
- サンプル記事の全文は本記事内のとおり。コピーして自分で
npx chaffjsにかければ同じ結果になる
Singularity Society はテクノロジー集団として MulmoClaude / MulmoTerminal / MulmoCast を開発しています。エンジニア・起業家向けの実践プログラム BootCamp も運営しています。
