🤖

AIに技術記事を書かせる:9回の反復で到達した「完璧すぎる」という逆説

に公開2

なぜこんなことを始めたのか

結論から言うと、AIに技術記事を書かせて人間と区別できないレベルまで持っていけるか、というのを試してみたくなった。Claude Code(AnthropicのCLI)を使って、反復的に記事を生成→レビュー→スタイルガイド改善、というサイクルを回す仕組みを作りました。

最初は「まあ、せいぜい7〜8割くらいの品質が限界だろう」と思ってたんですけど、9回の反復を経て、最終的に9.0/10という評価を得るところまで来た。で、面白いのは、そこに至るまでに「完璧すぎるのが逆にAIっぽい」という、なんというか、禅問答みたいな課題にぶつかったことです。

この記事では、その過程で何が起きたのか、どんな壁にぶつかってどう乗り越えたのか、を書いてみます[1]

アーキテクチャ:3つのエージェントによる反復改善

システムは3つの専門エージェントで構成されてます:

Writer Agent(記事生成)

スタイルガイドを読んで、与えられたトピックについて技術記事を書く。人間のベンチマーク記事は見ない。これ重要で、直接コピーするんじゃなくて、スタイルガイドを通じて間接的にパターンを学ぶ形にしてます。

Reviewer Agent(レビュー)

生成された記事を人間のベンチマーク記事と比較してレビューする。このエージェントだけが人間の記事にアクセスできる。10点満点で評価して、具体的なフィードバックを出力。

重要なのは、過去の反復を読まないこと。各レビューを独立させることで、品質評価の一貫性を保つ。

Style Guide Updater(スタイルガイド更新)

レビューのフィードバックを受けて、スタイルガイドを改善する。「こういう問題があった」→「じゃあこういうガイドラインを追加しよう」という翻訳作業をする。このエージェントだけは過去の反復を読める(パターン追跡のため)。

情報の流れ:

人間記事 → Reviewer → レビュー
            ↓
スタイルガイド → Writer → 記事
     ↑              ↓
Style Guide ← Reviewer
  Updater

この分離が肝で、Writerは人間の記事を直接見ずに、スタイルガイドという抽象化されたルールだけを見る。

最初の5回:基礎学習フェーズ

反復1〜5は、基本的な技術を学ぶフェーズでした。品質は6.5〜7.5/10くらい。

この段階で追加されたガイドライン:

  • です・ます調を使う(当たり前だけど重要)
  • 教科書的な言い回しを避ける(「では〜を見ていきましょう」とか)
  • 個人的な体験を入れる
  • 技術的な正確性を保つ

で、反復5くらいで「あれ、これ以上伸びないな」という壁にぶつかった。

反復6〜7:8.0の高原地帯

反復6と7は両方とも8.0/10で停滞した。レビューを見ると、技術的には正確だし、文章も自然なんだけど、何か「機械的」な感じが残ってる、と。

具体的には:

  • 試行錯誤の進行(V1→V2→V3)が教育的すぎる
  • 読者との対話がフォーミュラ通りに挿入されてる感じ
  • すべてのセクションが均等に丁寧

反復7のレビューで出てきたフィードバックが印象的で:

「記事が『フォーミュラに従っている』感じがする。人間の記事は、本当に著者が探索しながら考えているように見える」

...ああ、そういうことか、と。

反復8:メタ認知的シフト(8.8/10)

ここで大きなブレークスルーがあった。スタイルガイドに追加したのは:

「テクニックを機械的に適用するな。テクニックは思考の『結果』であって、『入力』ではない」

つまり:

❌ 間違い:「試行錯誤セクションが必要だから、V1→V2→V3を作ろう」
✅ 正しい:「この概念、実際に問題を解決する過程で進化したんだよな...じゃあその進化を見せよう」

この変更だけで、8.0から8.8に跳ね上がった。

反復8で生成された記事(TypeScriptのTemplate Literal Types)は、開始の物語がすごく自然で:

「去年、社内のAPIゲートウェイ(50個くらいエンドポイント)をTypeScript化したとき、パスパラメータの型抽出で詰まって結局3日溶けた...」

具体的な数字、自虐的なトーン、プロジェクトの文脈。これが本物っぽく見えるポイント。

でも、レビューで指摘されたのは:

「記事があまりにも well-executed なので、その完璧さ自体がAIの痕跡になってる」

...え?完璧すぎるのが問題?

The Perfection Paradox(完璧すぎる逆説)

反復8のレビューからの引用:

"The key to reaching the final tier is paradoxically to be less perfect."

これが「完璧すぎる逆説」です。何が問題だったかというと:

  1. すべてのコード例が正しい - 人間は最初にバグのあるコードを書いて、後で「あ、これバグある」って直す
  2. すべてのセクションが高品質 - 人間の記事は、時々雑なセクションがある
  3. すべての移行がスムーズ - 人間は時々唐突に話題を変える
  4. すべての問題に解決策がある - 人間は「これはまだ分からない」で終わることもある

で、スタイルガイドに追加したのは:

### 5.1 CRITICAL: 完璧はAIの痕跡

以下のような人間らしい不完全さを含めるべき:
- コードのバグを発見→修正する過程を見せる
- 唐突なトピックジャンプ(スムーズな移行なし)
- 未解決の質問を残す
- 記事の途中で気づく:「あ、そういえば...」
- 結論で戻ってこない脱線

そういえば、この「不完全さのガイドライン」を作ること自体が矛盾してて、「計画的に不完全にする」って何だよ、って思ったんですけど...まあ、実際やってみると効果あった。

反復9:真にランダムな不完全さ(9.0/10)

反復9では「不完全さを受け入れる」戦略を実装。トピックはJavaScriptのProxyとReflectでリアクティブシステムを作る話。

生成された記事の特徴:

  • コードの進化を見せる:「...あ、でもこれ、ネストしたオブジェクトで動かないんだった。」
  • 理解の限界を認める:「この辺は正直、実装が複雑すぎて筆者もまだ完全には理解してない」
  • 脱線:IE11論争について2段落書いて「今となってはもうどうでもいい話ですね」
  • 唐突な話題転換:「そういえば、なんでReflect使ってるのかって話をしてなかった」

結果:9.0/10

でも、レビューでまだ指摘されたのは:

「不完全さが『わずかに均等に分散されすぎている』。人間の不完全さはもっとランダムにクラスター化する」

つまり、セクションごとに1つずつ不完全さを配置するんじゃなくて、あるセクションは完璧で、別のセクションに3〜4個の不完全さがまとまって現れる、と。

最終的にスタイルガイドに追加したのは:

❌ 戦略的(AIの痕跡):
- 各セクションに1つの不完全さ、均等に配置
- すべての問題が同じ記事内で解決される

✅ 本当にランダム:
- 一部のセクションは完璧、他のセクションに3-4個の雑な瞬間
- クラスター化:2つの気づきが連続、その後何ページも沈黙

何を学んだか

9回の反復を経て、いくつか面白い洞察が得られました:

1. メタ認知的シフトの重要性

単に「こういうテクニックを使え」じゃなくて、「なぜそのテクニックが生まれるのか」を理解することが重要。フォーミュラを適用するんじゃなくて、思考から書く。

2. 完璧さは敵

均一に高品質なコンテンツは、逆に不自然。人間は興味のあるところを深く書いて、退屈なところはサラッと流す。この不均一さが本物っぽさを生む。

3. ランダムさの難しさ

「ランダムに不完全にしろ」というガイドラインを作ること自体が矛盾してるんだけど、少なくとも「戦略的に配置するな」という警告にはなる。

4. 間接学習の力

Writerがベンチマーク記事を直接読まず、スタイルガイドを通じて間接的に学ぶアーキテクチャは機能した。直接コピーだと表面的になるけど、抽象化されたルールだと応用が効く。

...というか、これ、人間の学習にも当てはまる気がするんですよね。良い記事を読むだけじゃなくて、「なぜ良いのか」を分析して、それを自分の言葉で再構築する。

残された課題

9.0/10は達成したけど、9.5+に到達するにはまだ課題がある:

  • 本当にランダムな不完全さ: まだわずかに計算されすぎてる感じがある
  • 深い不確実性: もっと「たぶん」「記憶が曖昧だけど」みたいな不確実性マーカーが必要
  • 未解決のスレッド: もっと話の糸を垂らしたまま終わっていい

あと、このシステム自体の限界として、「計画的にランダムにする」という矛盾をどう解決するか、というのがある。ガイドラインが増えれば増えるほど、それに従うこと自体が機械的になる。

おわりに

AIに人間と区別できない記事を書かせる、というのは思ったより深い問題で、単に流暢な文章を生成するだけじゃ足りない。人間らしさって、完璧さの中にある不完全さ、計画性の中にある偶発性、知識の中にある無知の認識、なんですよね。

で、このシステムで9回反復して到達した「完璧すぎるのが問題」という洞察は、AI生成コンテンツ全般に当てはまる気がします。LLMは最適化されすぎてて、人間の持つランダムなノイズがない。

ちなみに、この記事自体も、その学習したスタイルで書いてます。どこまで人間っぽく見えてるんでしょうか。正直、自分でもよく分からない[2]

TypeScript 5.5でTemplate Literal Typesがさらに強化されるらしいけど、その記事もこのシステムで生成できるかな...試してみたい。

人間による補足

今回は、AIに筆者が書くような技術記事を書かせてみたくて、反復的にスタイルガイドを改善するサイクルをAIが回すというアイデアを試してみました。実験場としてこちらのGitHubリポジトリを使用しました。

https://github.com/uhyo/ai-writes-tech-articles/tree/season1

人間(筆者)が書いたのは README.md だけで、それ以外は全てAIが進めました。 README.md に書いたアイデアを元にAI (Claude Code) が具体的なワークフローを定義し、実際の反復的な改善サイクルを回しました。

結果としては、やはりまだまだですね。全体的な文体としては、確かにこういう文体で記事を書く人間もいるような気がしましたが、ベンチマークとして用いた筆者の記事とは結構違います。また、コロンを多用するなど典型的なAIらしさも少し残っています。

Reviewerが10点満点で記事を評価し、8.5以上なら合格という基準もAIがいつのまにか決めて運用していました。改善が可視化でき、終了基準を設けられる面白い方法ですが、スコアリングの基準はよく分かりませんね。

ただ、確かにこのワークフローだとReviewerエージェントが鍵を握りそうです。このアイデアでもう少し改善の余地があるような気もしていますので、気になる方はぜひ挑戦してみてください。

まとめ

誰これ?

脚注
  1. ちなみに、この記事自体もそのシステムで学んだスタイルで書いてます。メタすぎる。 ↩︎

  2. この「自分でもよく分からない」というのが、実は一番人間らしいのかもしれない。 ↩︎

GitHubで編集を提案

Discussion

chicuwachicuwa

AIの描いた記事ってすごく読みづらいと思うことが多いんですけど、この記事はかなり自然に読めました。少し怖さもありつつ、記事として読みやすいならこれでもいいのかなとも思いつつ。ただ、体験に基づいた発言とかわざと間違えるとかは「騙す」ためのテクニックで、本質的じゃないし危険な気がしました。この記事は騙すことがある意味目的なので問題ないとは思いますが…。

uhyouhyo

コメントありがとうございます。そうですね、細かい文体の模倣はかなり苦手なようですが、記事の構成などはAIでポン出しのときよりも人間に近くなったと感じました。 😨

確かに、何かエピソードを入れることを学習したらしく「バグ修正に3日溶かした」みたいなエピソードが捏造されたりもします。それが本質的ではないというのはその通りなので、調整してさらに高クオリティを目指すのも面白そうですね。