今日は、ChatGPTなどの AI を使う時に、意識していることをまとめようと思います。
AI を使いこなしている人からすれば当たり前の話が多いかもしれないですが、最近は仕事で社内に AI 系ツールの導入をすることもあり、そこまでガンガン使ってない人でもよりうまく活用してもらうために、基本的なノウハウを改めて整理しておこうかなと思っています。
会話は適度に「まとめて切る」
まず最初に意識していることは、会話は適度に「まとめて切る」ことです。 ChatGPTなどのLLMとやり取りしていると、会話が長くなるにつれて、応答の精度が落ちてきたように感じることがあります。 内容が曖昧になったり、最初に話していた前提がずれてきたり……といったことが起こるのは、一見するとモデルの性能に原因があるようにも思えますが、実際は 会話の長さ=コンテキストの肥大化 が影響していることが多いです。
ぼくはこの問題を避けるために、会話を適度なタイミングで要約し、次のチャットとして区切るという方法を取るようにしています。 たとえば、あるテーマについて一通り話し終えたら、その時点で内容を整理しておきます。そして、そのまとめを新しい会話の冒頭に貼って、次のステップへと進めていきます。
こうすることで、モデルに渡す文脈がスリムになり、余計な情報に引っ張られずに、今フォーカスしたい内容に集中してもらえるようになります。
会話が長くなると精度が落ちてくる理由
会話は適度に「まとめて切る」ことを意識するうえで、AIがどのようにレスポンスを生成しているのか、その仕組みを理解しておくことが大切です。
Transformer モデルの内部構造まで詳しく知る必要はありませんが、どのようなAPIでやり取りが行われているのかといった基本的な動作原理は、押さえておくべきだと思います。
たとえば、OpenAIの Chat Completions API では、モデルが過去の会話を自動的に記憶しているわけではなく、毎回「messages」という形式で過去の履歴をすべてクライアント側から送信する必要があります。
つまり、会話が長くなればなるほど、APIに送るデータ量が増え、それがそのままモデルの処理対象になります。
以下は、その仕組みを示すcurlの例です。
curl -X POST https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "system", "content": "あなたは親切なアシスタントです。"},
{"role": "user", "content": "こんにちは"},
{"role": "assistant", "content": "こんにちは!どのようにお手伝いできますか?"},
{"role": "user", "content": "おすすめのラーメン屋を教えて"}
]
}'
このように、APIではこれまでのやり取りをすべてmessagesとして構造化して送ります。 それぞれのメッセージにはroleという属性があり、これはその発言が「誰によるものか」を示します:
- "system":モデルの振る舞いや前提を指定するシステムメッセージ
- "user":ユーザーからの入力
- "assistant":AI(モデル)からの応答
会話が続くたびにこのmessages配列が長くなっていき、やがてモデルの処理限界(トークン上限)に近づいていきます。
また、古い文脈が新しい話題に影響を与えてしまうことで、応答の焦点がずれてしまうといった現象も起こります。
このような仕組みのため、必要な文脈だけを切り出し、次の会話に引き継ぐという整理がとても重要になってくるのです。
これは OpenAI の API に限らず、 Anthropic などの他の AI ツールでも同様です。
AIツール全般においてもコンテキスト長を意識する
ここまで紹介してきた、会話は適度に「まとめて切る」といった工夫は、ChatGPTのようなテキストベースのツールに限った話ではありません。
DevinやClineのような、開発支援や操作代行を行うAIツールでも、同じ考え方が通用します。
こうしたツールも、裏側では大規模言語モデル(LLM)とAPI経由でやり取りをしており、ユーザーからの命令や指示は、文脈(コンテキスト)として蓄積されながら処理されています。
つまり、セッションが長くなったり、やり取りが複雑になったりすると、モデルが処理する文脈も膨らみ、期待した通りの応答が返りにくくなる という課題は避けられません。
そのため、これらのツールでは 「うまくいかない」 と感じたときに、同じセッション上で試行錯誤を重ねるのではなく、 一度プロンプトを整理・改善して、ゼロからやり直す方が有効なケースが多い です。
複雑な作業ほど、ステップに分けて進める
次にぼくが意識していることは、やらせたい作業をいきなり一気に頼むのではなく、いくつかのステップに分けて段階的に進めるということです。
その際に大事なのが、最終的にどういう成果物を作りたいのかをざっくりでもイメージしておくことです。
ゴールを頭の中で思い描いておくと、そこにたどり着くまでに必要な要素や順序が見えてくるので、自然と「まずは〇〇を決めて、その次に△△を考える」といった進め方がしやすくなります。
たとえば次のような流れです:
最初に大枠や方向性を決める
- 「どういう構成で進めるか?」などをAIに相談する
個々の要素を1つずつ深掘りする
- 各パートや手順について、対話を通じて整理していく
最後に全体をまとめて仕上げる
- 各ステップで得られた内容を統合して、完成させる
こうしてステップごとに切り分けてやり取りを進めることで、AIとのやり取りが明確になり、意図に沿った出力を得やすくなると感じています。 結果として、自分自身の考えも整理され、作業全体がスムーズに進みやすくなる効果もあります。
重要なポイントはObsidianに抜き出して保存
AIとやり取りを重ねていると、「あれ、さっきのいいアイディア、どこで出てきたんだっけ?」と、必要な情報を見失いがちになることがあります。
特にチャット形式のツールでは、やり取りが流れていくため、会話の中に埋もれた重要な情報をあとから見返すのが意外と大変です。
ぼくはそれを防ぐために、ステップ分けした作業の各段階や、やり取りの中で出てきた大事なポイントを都度Obsidianに抜き出して整理するようにしています。
たとえば、AIと相談して出てきた構成案や、途中で得られた洞察、具体的な手順などは、そのまま貼り付けたり要約して記録しておきます。
このようにまとめておくことで、次のようなメリットがあります:
- チャット内で情報を探し回らずに済む
- 別セッションでAIとやり取りを再開する際、コンテキストを簡単に共有できる
- 複数ステップにまたがるタスクでも、情報が断片化せずに管理できる
Obsidianのようなノートツールを活用することで、チャットの断片的な情報を自分なりに整理された知識として残しておけるので、AIとのやり取りを一時的なものにせず、継続的な成果につなげやすくなると感じています。
まとめ
ChatGPTをはじめとする大規模言語モデル(LLM)を活用する場面が増えてくる中で、ただ使うだけでなく、どう使うかがますます重要になってきていると感じています。
この記事では、ぼく自身がLLMを活用するうえで日頃意識しているポイントを紹介してきました。
- 会話が長くなりすぎる前に内容を整理し、新しいセッションに切り替える
- モデルの仕組み(API)を理解し、文脈の持たせ方を工夫する
- 複雑な作業は、最終的なゴールを見据えたうえでステップに分割して進める
- 重要な情報はObsidianに抜き出し、流れない形で整理・再活用できるようにしておく
これらは一つひとつは地味な工夫ですが、積み重ねることでAIから引き出せるアウトプットの質が大きく変わってくると思います。
AIとの対話は、単なる「質問と答え」のやり取りではなく、思考や作業を支えるパートナーとの共同作業に近いものです。
だからこそ、そのやり取りをいかに設計するかが成果を左右する鍵になります。
今後もツールやモデルが進化していく中で、こうした基本的な使い方の工夫は、むしろより重要になっていくのではないかと思っています。
この記事が、これからAIツールをより深く活用していきたい人のヒントになればうれしいです。