knowledging

同時にn人(nの生成AIモデル)に尋ねる

サマリー

背景

少しでも速く。少しでも滑らかに。

ChatGPT との往復は原始的であり、改善の余地があります。Copilot、Cline、Cursor などの内蔵型 AI エージェントを使っているエンジニアは、もはや原始的なコピペには戻れないでしょう。

これは何もコーディングに限った話ではなく、問い合わせ全般に対して言えることです。たとえば知らない用語を尋ねたり、ブレストとして 10 個挙げてもらったりする場合も、エディタや IDE からシームレスに呼び出せた方が良いに決まっています。

このように 少しでもシームレスにする ことは非常に大事です。日々の利便性も、魔法のようなイノベーションも効率化の先にあり、効率化の大黒柱はシームレスです。少しでも手間をなくし、滑らかに使えるようにすることはエンジニアリングの本懐の一つでもあると思います。

並列にしよう

私はナレッジ・アーキテクトとして、発散的・創造的な仕事にあたることが多いです。だからこそ、生成 AI をいかにシームレスに呼び出せるかは生産性に直結します。

目をつけたのは並列の概念です。つまり、n のモデルに同時に問い合わせるのです。

アプローチ

1: モデルを人として捉える

OpenAI API を例にします。

モデルとして、たとえば以下があります:

各モデルは微妙に性質が異なります。まるで人のようです。そこで人だと捉えてしまいます。

この場合、7 人の異なる人が存在しているようなものです。

※余談ですが、自身が使える OpenAI API モデルは ここから確認できます

2: 同時に尋ねる

この 7 人に同時に尋ねる、と考えます。

コードで示します。pgpt.py という小さなツールの一部を抜粋します。

def request_to_model(model_name, prompt, timeout=130):
    try:
        response = client.chat.completions.create(
            model=model_name,
            messages=[
                {'role': 'user', 'content': prompt},
            ],
            timeout=timeout
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"[ERROR in {model_name}]: {str(e)}"

def main():
    with concurrent.futures.ThreadPoolExecutor() as executor:
        future_to_model = {
            executor.submit(request_to_model, model, prompt): model
            for model in MODELS
        }
        for future in concurrent.futures.as_completed(future_to_model):
            model = future_to_model[future]
            content = future.result()
            save_response(args.input, model, content)

Python の並行処理を使って、同時に リクエストを投げています。処理を終えた人(モデル)の回答から順次保存していきます。

3: 同時に尋ねた分の結果を取得する

これは単純で、単に 7 人分の結果(の出力先テキストファイル)をすべて開いておく だけです。

pgpt.py では p-gpt-4.1.md、p-gpt-4o.md のように p-(モデル名).md のファイル名で保存します。これを全部 VSCode で開いておきます。他のエディタでも構いません。

エディタには 外部から更新されたときに自動でリロードする仕組みがある ので、これで十分です。7 人同時に尋ねた結果が並列に処理され、自動で表示される 体験が手に入ります。これで私はエディタ上でショートカットキーで即座に pgpt に尋ね、その 7 人分の結果も即座にショートカットキーで辿れます。ブラウザで ChatGPT を行き来するよりもはるかに体験が良いです。

余談: 個人的な感想

各人物の印象を述べておきましょう。

おわりに

n のモデルに並列にリクエストすることで、n 人分の意見を素早く入手する――そんな体験を実現できます。

私はナレッジ・アーキテクトであり、普段は概念をつくるところまでやりますが、小さなツールであればこのように実装もします。私はエンジニアとしては下手くそなので、実装はあくまで参考程度にしてください。

それよりも 「モデルを人のように扱い、かつ同時に n 人に尋ねる」 との考え方をぜひ持ち帰ってください。私よりも優秀な皆さんなら、もっと便利に実装できるでしょう。n 人同時に尋ねる体験のパワーを体感してください!