Kiro で行うちょっと進んだ AI 駆動開発(1)
はじめに
AI は一部の研究者しか利用できない役に立たないものだという状況はかなり変わってきました。
誰でも無料から月数千円で最先端のモデルにアクセスできるようになり、手の届く所に降りてきました。ただ、手に届くところに降りてきただけでなく、ソフトウェア開発の現場でも有効に活用されるようになってきました。
生成AIを利用した開発について
問題点と対策
ハルシネーションについて
とはいえ、AIを盲信できないのは現状でも変わりありません。AIは嘘を付く「ハルシネーション(Hallucination)」という事象がついて回ってくるからです。このままでは単に動作しないシステムを構築しようとするダメアシスタントとなってしまいますが、ここに RAG「Retrieval-Augmented Generation(検索拡張生成)」という仕組みを加えることで、嘘を劇的に減らすことができます。
生成AIは基本的には自分のモデルの中にある知識から回答するのですが、世の中のことをすべてモデル内に持てるようなモデルは現時点では作成できていません。その為、回答できる内容には限界があるのですが、特定の事柄に対して正しいデータを与え、それを読ませてから回答することでかなり精度を上げることができます。では、必要な情報を全部与えればいいのですが、残念ながら LLM (Large Language Model) が1回のやり取りでの入力、出力、やり取りを記憶していくための容量(コンテキストウィンドウといいます)には限界がありますので、何でもかんでも入力、というわけには行きません。
そこで、文書データをベクトルデータベースに変換します。これは意味や内容の「類似性」に基づいて検索・比較しやすいデータベースです。質問内容に関連する箇所のドキュメントを取得し、その内容に基づいて回答させることで、限定された容量のやりとりでも嘘の少ない回答を得ることができます。
生成AI(LLMモデル) は次々と新しい良いモデルができてしまい、専用システムを作るのも大変
ChatGPT一番だろ! いやいや、Claude だろ! いやいやGeminiもきてるぞ! と、いろいろな企業が次々と新しい優れたモデルをリリースしてきており、どれか1つを選ぶような状況にはなっていませんし、古いモデルはもう終了してしまったりしています。
当然それぞれ利用法が違うのでそれぞれのモデルの為にそれぞれ処理を書く必要があります。
このままでは割りを食うのは利用者やシステムエンジニアで、すべてのLLMに接続するためのすべてのLLMに接続するために、LLM個別の専用接続処理を書いたり、新しいバージョンになったらそれを都度修正リリースするのは大変です。
そこで生まれたのが MCP ( Model Context Protocol ) です。
What is the Model Context Protocol (MCP)?
https://modelcontextprotocol.io/docs/getting-started/intro
Introducing the Model Context Protocol
https://www.anthropic.com/news/model-context-protocol
ユーザーがチャットで LLM に質問を投げたり、LLM がデータベースや他のサーバーに接続したりする際の接続方法(プロトコル)を統一することで、容易に接続できるようになりました。
「USBコネクタのように」接続することができるようになる、と、上記の例でも例えられています。
これにより、簡単に ユーザーあるいは開発ツールが、いろいろな種類の LLMや MCP Server と呼ばれる LLM 用に用意されたデータベース、もちろんRAGにも接続できるようになるという事になりました。
長いやり取りをしていると、古いやり取りや前提事項を忘れてしまう
LLM (Large Language Model) が1回のやり取りでの入力、出力、やり取りを記憶していくための容量(コンテキストウィンドウ)には限界があるという説明をしましたが、これも問題点の1つです。
システム開発を行う為には、膨大な量の資料から、仕様を読み取り、ソースコードや設定に落としてゆく必要があるのですが、資料をすべて含み、与えた仕様に加え、ソースコードを読み込んで作成、修正していく必要があるのですが、LLMと何度もやり取りしていくと、コンテキストが上限に達してしまい、すべての前提条件を覚えきれなくなってしまいます。そのため、現状では、いきなり大きなお題を与えず、限定された範囲に小さく区切って考えさせる必要があります。
ただ、その為に人間側が必要な情報を選別、限定して与えたりするとなると、毎回毎回チャットでやり取りする際にコンテキストウィンドウをオーバーしないように前提条件を適切な長さにいちいち考えて絞って指示を与える必要が出てきてしまいます。これではAIを使っていると言うよりは、AIに使われている感が否めませんね。
Kiro の登場
ここで Kiro の登場です!
Kiro は、現在のLLMを取り巻く環境の制約事項を理解したうえで、それらの制約内で開発ができるように作られた統合開発環境です。
売り文句は「Agentic AI development from prototype to production – プロトタイプから製品化までのエージェントAI開発」です。
Kiro は Visual Studio Code 互換の統合開発環境として動作します。Visual Studio Code の特徴でもある豊富な機能拡張を組み込むことで自分好みの開発環境にすることができますが、Kiro の Kiro たる所以はここではありません。 Kiro Spec モードにあります。
次回は Kiro Spec モード について説明します。
