ハーネスとは?AIエージェントを動かす「外側」の仕組み

同じAIモデルを使う製品でも、できる作業や進め方が違うのはなぜでしょうか。その差を生む外側の仕組みの1つがハーネスです。本記事では、AIエージェントを作るAnthropicの技術記事をもとに、ハーネスの役割を説明します。
ハーネスとは
ハーネスは、AIエージェントの中でLLMを呼び出し、LLMが求めたツールの実行を受け持つ、外側の仕組みです。
英語のharnessには、馬につける引き具という意味があります。力の強い馬も、引き具がなければ荷車を引けません。LLMも同じで、文章を作る力はあっても、自分でファイルを開いたり、コマンドを実行したりはできないのです。その力を作業に結び付けるのが、ハーネスの役目になります。
Anthropicの説明では、ハーネスは「Claudeを呼び出し、Claudeのツール呼び出しを、それを実行する仕組みへ振り分けるループ」です。開発キットのClaude Agent SDKも、汎用のエージェントのハーネスと呼ばれています。
LLMとの役割分担
Anthropicは、AIエージェントを「脳」と「手」に分けて考えています。
脳にあたるのが、LLMとハーネスです。LLMが考え、ハーネスがその考えを実行に移します。手にあたるのは、実際に操作をするツールと、プログラムを実行したりファイルを書き換えたりする作業場所(サンドボックス)です。これに、起きたことをすべて書き残す記録(セッション)が加わります。
こう分けておくと、同じハーネスで手だけを取り替えたり、LLMを新しいものに替えたりしやすくなるのが利点です。
ハーネスが受け持つ仕事
ハーネスの仕事は、大きく3つあります。
1つ目の仕事は、AIエージェントの繰り返しを回すことにあります。LLMに依頼とツールの一覧を渡し、LLMが使いたいと言ったツールを実行し、結果をLLMに返す、という流れです。実行の前に利用者へ確認を求める仕事も、ハーネスに含まれます。
2つ目は、記憶の整理です。LLMが一度に読める量(コンテキストウィンドウ)には上限があるため、作業が長くなると、それまでの経過をすべては渡せません。Anthropicの記事も、古いやりとりを要約して詰める(compaction)といった管理を、ハーネスの働きに数えていました。
3つ目は指示と決まりごとの管理で、LLMに渡す指示(プロンプト)の組み立てや、作業の進め方の決まりを扱います。
長い作業を続けるための工夫
何時間もかかる作業では、LLMが読める量の上限を何度も超えるため、途中で記憶を引き継ぐ必要があります。Anthropicの記事は、ハーネスの工夫として次のような方法を紹介しました。
- 最初に、作業の環境を整える役のエージェントを動かし、やるべきことの一覧を作る
- 進み具合を記録するファイルと、変更の履歴(Git)を残し、次の回はそれを読んでから始める
- 一度にすべてを作らせず、1つずつ進めて、そのつど動作を確かめさせる
Anthropicは、ハーネスには「LLMが自分だけではできないこと」についての前提が含まれる、とも書いています。LLMの性能が上がれば、その前提は古くなり、ハーネスも作り直されていくものです。
製品での使われ方
ファイルやコマンドを扱うAIエージェントの製品は、LLMを外から動かすハーネスにあたる部分を、それぞれ持っています。同じLLMを使う製品どうしでも使い勝手が違うのは、このハーネスの作りが違うためです。
自分でAIエージェントを作るときは、Claude Agent SDKのような開発キットを使うと、ハーネスを一から作らずに済みます。