Clineに見る、タスク駆動型AIエージェントとヒューマンインザループ設計
TL;DR
- Cline: 「タスク」を軸に自律的に行動する AI エージェントの VSCode 拡張
-
Human In the Loop: AIの行動に対して人間が
Approve
/Reject
/Reject & Feedback
で介入できる設計により、AIとの協働がスムーズになる - 応用可能性: このアプローチは開発以外の領域にも応用できる可能性がある
はじめに
最近、GitHub Copilot や Cursor などエディタ上で AI アシスタントを使ってコードを書いたり修正したりするシーンが増えています。
そんな中、VSCode 拡張として動作する「Cline」というAI開発エージェントを触ってみたところ、「タスク」を中心に据えた設計や、人間が常に介入できる “ヒューマンインザループ” (HITL) の仕組みが目を引きました。
今回は、この Cline を通じて感じた、タスク駆動型の設計やヒューマンインザループ前提のUXが、今後の AI エージェント設計にどう役立つかについて、実際のコード(OSSリポジトリ内の実装例)も交えながら紹介したいと思います。
Clineとは?
Cline は、VSCode 拡張として動作する AI 開発エージェントです。
「このプロジェクト内のシンタックスエラーを修正して」といった指示を与えると、Clineはプロジェクト全体を分析し、シンタックスエラーがありそうな箇所を特定して順次修正します。
OSSとしてのcline
Cline は OSS として公開されているのも特長で、全てのコードを読むことができます。GitHub で公開されているので、自分で clone してコードを修正して自分の好きなようにカスタマイズすることも出来ます。
タスク駆動型のAIエージェントとは何か
Clineはユーザーが最初に出した指示を「タスク」として認識し、それを軸に動きます。「この機能を追加して」「ここのバグを修正して」といった指示があれば、AIはそれをタスクとして、実行可能なステップに分解して処理を実行します。
「このプロジェクト内のシンタックスエラーの箇所を修正して下さい」をタスクとして扱っている
そして、色々な処理を実行し、AI自身が「タスクが完了した」と判断したタイミングで終了します。
シンタックスエラー修正が終わったと自己判断し、タスク完了を報告するCline
この「タスク」を軸にする設計は、従来の会話中心のAIとは異なり、目的達成にフォーカスします。そのため、「会話が進むうちに主題がずれる」問題が起こりにくくなり、常にタスク完遂をゴールとして動作できる点が画期的です。
Clineによるタスク駆動実現の仕組み
ユーザー指示をタスク化する処理
ユーザー指示を受けたとき、Clineはその指示を <task>タグで囲んでユーザープロンプトに組み込みます。
複数のゴールへ分解
システムプロンプト上で、ユーザーのタスクを分析し、達成可能な複数のゴールへ分解するプロセスがあります。
例:MarkdownをPDF化するプロセスで、「目次作成ロジックを変更して」と指示すると、Clineはコードを分析して「対象ファイルを確認」「目次生成ロジックの編集」といったステップに分解し、順次実行します。
**Assistant:**
<thinking>
タスクを理解しました。目次を作成するために、まず現在のコードを確認し、その後必要な修正を加えていきます。
1. まず、src/pack-pdf/make-table-of-contents/index.tsの内容を確認する必要があります。
2. その後、ディレクトリ構造に応じた目次を作成するロジックを実装します。
</thinking>
Human-in-the-Loop を前提としたユーザー体験
Cline を使っていて気付いたのは、Cline のユーザー体験が「人間が介入すること」を前提として設計されているということです。
Clineがコード修正の反映の承認を求めている
このように、システムが人間が介入することを前提としていることを「ヒューマン・イン・ザ・ループ(HITL:Human-in-the-Loop)」と呼ぶそうです。
工学やコンピュータ科学などさまざまな分野で広く用いられている用語のヒューマン・イン・ザ・ループ(HITL:Human-in-the-Loop)とは、「人間がループ(システム)の中に組み込まれている」という言葉通りに、システム(ループ)の中に人間との相互作用(interaction)が含まれることを指す。
「AI・機械学習の用語辞典 - ヒューマン・イン・ザ・ループ(HITL :Human-in-the-Loop)とは?」より引用
Cline の場合、「ファイル修正」「CLIでのコマンド実行」などを行う際に、ユーザーの承認を求めます。(破壊的操作ではないファイル読み込みは自動承認が可能)
これは Cline 上では、この承認操作を3つの操作体系に絞っており、UI も非常にシンプルになっています。
- Approve: タスクの実行の承認。成果物の承認
- Reject: 簡易的な却下
- Reject & Feedback: 却下しつつ具体的な指示や要望を伝える
gh コマンドで Pull Request を作成する承認を求めている
これらの操作体系によって、ユーザーは最小限のコストでAIを制御できます。Approveで素早く前進させるもよし、Reject & Feedbackで細かな修正要求を挟むもよし。
私は、この単純化された承認フローが、今後のAIエージェント全般におけるユーザー体験の基本形になるのではないかと感じました。
Clineによる承認フロー実現の仕組み
say / ask メッセージモデル
Cline内部では、AIからユーザーへ送るメッセージは say(単なる通知)と ask(承認要求)に分けられています。
askメッセージが送られた段階でAIの処理は一時停止し、ユーザーの反応(Approve / Reject / Feedback)を待ちます。
SystemPromptでの承認フロー表現
SystemPrompt上では、「ツール使用時はユーザー承認を要する」というルールとして記述されています。承認が不要、または、ユーザーがオプションで自動承認を有効にしている場合は、システム側は即時ツールを実行して結果が自動で返却され、AIはユーザーが承認したものと見なします。
まとめ
Clineのようなタスク駆動型かつHITL前提のエージェント設計は、開発タスク以外にも応用できる気がしていて、割りとスタンダードな設計になってきそうに思っています。
例えば、ドキュメント整理、タスク管理、ビジネス上の特定プロセス自動化など、明確なゴールがあり、かつ人間が判断すべきポイントが存在する領域では、同様の設計が有効になります。
- タスクを軸としたアプローチ:目的逸脱を防ぎ、常にアウトプットを念頭に行動
- ヒューマンインザループによる承認フロー:社会的説明責任や信頼性確保をサポート
- シンプルなApprove / Reject / Reject & Feedbackモデル:ユーザーの判断コストを最小化
特に「ヒューマンインザループ」は、確率的に生じるAIの低品質なアウトプットを人間がサポートできる他、人間がAIの動作を把握することにも繋がります。個人的には、人の社会で活動する以上、AIがどのような意図でアウトプットを生成したかを、人が把握して説明できる必要がある気もしています。
Cline はその一例として、非常に良い事例だと思いますので、興味を持たれた方はぜひ Cline を触ってみていただけると幸いです。
参考
Discussion