Elasticsearch Serverlessプロジェクトを管理するAIエージェント
Elasticsearch Serverless プロジェクトを簡単に管理し、プロジェクトの作成、削除、ステータス チェックを可能にする自然言語対応の AI エージェント。
AIエージェントを使用してサーバーレスElasticsearchプロジェクトを管理する方法
リポジトリのクローンを作成します。
git clone https://github.com/elastic/elasticsearch-labs/supporting-blog-content/serverless-ai-agentaを使用して GitHub からツールのコードをダウンロードし、cd serverless-ai-agentを使用してディレクトリに移動します。環境の設定:
python -m venv venvを使用して仮想環境 (オプション) を作成し、アクティブ化します (Windows の場合はsource venv/bin/activateまたはvenv\Scripts\activate)。次に、pip install -r requirements.txtを使用して必要な Python パッケージをインストールします。資格情報を構成する:プロジェクト ルートに
.envファイルを作成し、Elasticsearch API URL (ES_URL)、API キー (API_KEY)、リージョン (REGION)、OpenAI API キー (OPENAI_API_KEY) を入力します。ツールを実行します:ターミナルで
python main.pyを実行してツールを実行します。これにより、AI エージェントが起動し、コマンドのプロンプトが表示されます。自然言語でプロジェクトを管理する: 「my\_project という名前のサーバーレス プロジェクトを作成する」、「my\_project という名前のサーバーレス プロジェクトのステータスを取得する」、「my\_project という名前のサーバーレス プロジェクトを削除する」などのわかりやすい英語のコマンドを使用してツールを操作します。AI はコマンドを解釈し、対応する機能を実行します。
背景
この小さなコマンドライン ツールを使用すると、Serverless Elasticsearch プロジェクトをわかりやすい英語で管理できます。AI (この場合は OpenAI) と対話して、ユーザーの意図を理解し、LlamaIndex を使用して適切な関数を呼び出します。
Elasticsearch Serverless AIエージェントは何ができるのか
プロジェクトを作成する: 新しい Serverless Elasticsearch プロジェクトを起動します。
プロジェクトの削除: 既存のプロジェクトを削除します (削除後はクリーンアップされます)。
プロジェクトのステータスを取得: プロジェクトの進行状況を確認します。
プロジェクトの詳細を取得: プロジェクトに関するすべての重要な詳細を取得します。
Elasticsearch Serverless AIエージェントの仕組み
次のように入力すると:
「my_project という名前のサーバーレス プロジェクトを作成する」
…舞台裏ではこんなことが起こっています:
ユーザー入力とコンテキスト:自然言語コマンドが AI エージェントに送信されます。
関数の説明:詳細な説明が与えられているため、AI エージェントは、create_ess_project、delete_ess_project、get_ess_project_status、get_ess_project_details などのいくつかの関数についてすでに認識しています。これらの説明は、各関数が何を実行し、どのようなパラメータが必要かを AI に伝えます。
LLM 処理:クエリと関数情報が LLM に送信されます。つまり、AI は次のことを認識します。
ユーザークエリ: わかりやすい英語での指示。
利用可能な機能と説明: 各ツールの機能の詳細により、適切なツールを選択できます。
コンテキスト/履歴チャット情報: 会話なので、以前に話された内容を記憶します。
関数の呼び出しと応答: AI はどの関数を呼び出すかを判断し、適切なパラメーター (プロジェクト名など) を渡して、関数が実行されます。応答はわかりやすい形式で返されます。
つまり、自然言語クエリと詳細なツール説明のリストの両方を LLM に送信して、LLM がそれを「理解」し、リクエストに適したアクションを選択できるようにします。
AIエージェントを設定する
前提条件:
AI エージェントを実行する前に、次の設定がされていることを確認してください。
Python (v3.7 以降)がインストールされています。
Elastic Cloud にセットアップされたElasticsearch サーバーレス アカウント。
言語モデルと対話するためのOpenAI アカウント。
手順:
1. リポジトリをクローンします。
git clone https://github.com/elastic/elasticsearch-labs/supporting-blog-content/serverless-ai-agent
cd serverless-ai-agent2. 仮想環境を作成する (オプションですが推奨):環境関連の問題に直面している場合は、分離のために仮想環境を設定できます。
python -m venv venv
source venv/bin/activate # On Windows, use venv\Scripts\activate3. 依存関係をインストールします。次のコマンドを実行して、必要な依存関係がすべてインストールされていることを確認します。
pip install -r requirements.txt4. 環境を設定する: .env を作成するプロジェクト ルートに次の変数を含むファイルを作成します。以下に、役に立つサンプルの.env.exampleファイルを示します。
ES_URL=your_elasticsearch_api_url # The base URL for your Elasticsearch service (e.g., https://your-cluster-id.es.region.aws.elastic-cloud.com)
API_KEY=your_elasticsearch_api_key # Your API key for Elasticsearch
REGION=your_region # Example: aws-eu-west-1
OPENAI_API_KEY=your_openai_api_key # Your OpenAI API keyES_URL 、 API_KEY 、 OPENAI_API_KEYの値が正しいことを確認してください。API キーはそれぞれのサービス ダッシュボードで確認できます。
5. プロジェクト ファイル:ツールは、 projects.jsonファイルを使用してプロジェクト マッピング (プロジェクト名とその詳細) を保存します。このファイルが存在しない場合は自動的に作成されます。
AIエージェントの実行
python main.py次のようなプロンプトが表示されます。
Welcome to the Serverless Project AI Agent Tool!
You can ask things like:
- 'Create a serverless project named my_project'
- 'Delete the serverless project named my_project'
- 'Get the status of the serverless project named my_project'
- 'Get the details of the serverless project named my_project'コマンドを入力すると、AI エージェントが魔法のように動作します。完了したら、 exitまたはquitと入力して終了します。
さらに詳しい情報
LLM 統合: LLM には、クエリと利用可能な各機能の詳細な説明の両方が提供されます。これにより、コンテキストを理解し、たとえば、
create_ess_projectを呼び出すかdelete_ess_projectを呼び出すかを決定するのに役立ちます。ツールの説明: 各関数ツール (FunctionTool.from_defaults を使用して作成)親切な説明があります。この説明は LLM に送信されるプロンプトに含まれているため、LLM は利用可能なアクションと各アクションで期待される内容を「認識」します。
永続性: プロジェクトとその詳細はprojects.jsonに保存されます。毎回情報を再入力する必要がなくなります。
詳細ログ: エージェントは詳細モードに設定されており、デバッグや、命令が関数呼び出しにどのように変換されるかを確認するのに最適です。
Elasticsearch AIエージェントの利用例
python main.py
Welcome to the Serverless Project AI Agent Tool!
You can ask things like:
- 'Create a serverless project named my_project'
- 'Delete the serverless project named my_project'
- 'Get the status of the serverless project named my_project'
- 'Get the details of the serverless project named my_project'
User: Create a serverless project named my-february-test
Added user message to memory: Create a serverless project named my-february-test
=== Calling Function ===
Calling function: create_ess_project with args: {"project_name":"my-february-test"}
========================
Agent: The serverless Elasticsearch project named "my-february-test" has been created successfully. Here are the details:
- **Project ID:** <>>
- **Elasticsearch Endpoint:** [https://my-february-test-ccc399.es.eu-west-1.aws.qa.elastic.cloud](https://my-february-test-ccc399.es.eu-west-1.aws.qa.elastic.cloud)
- **Kibana Endpoint:** [https://my-february-test-ccc399.kb.eu-west-1.aws.qa.elastic.cloud](https://my-february-test-ccc399.kb.eu-west-1.aws.qa.elastic.cloud)
User: get my-february-test status
Added user message to memory: get my-february-test status
=== Calling Function ===
Calling function: get_ess_project_status with args: {"project_name":"my-february-test"}
========================
Agent: The status of the "my-february-test" project is currently **initializing**.
User: get my-february-test info
Added user message to memory: get my-february-test info
=== Calling Function ===
Calling function: get_ess_project_details with args: {"project_name":"my-february-test"}
========================
Agent: Here are the details for the "my-february-test" project:
- **Project Name:** my-february-test
- **Alias:** my-february-test-ccc399
- **Cloud ID:** ""
- **Project ID:** ""
- **Region ID:** aws-eu-west-1
- **Created At:** 2025-02-12T15:42:00.530177619Z
- **Created By:** 571213384
- **Organization ID:** ""
- **Type:** Elasticsearch
- **Optimized For:** General Purpose
- **Search Lake:**
- **Boost Window:** 7
- **Search Power:** 100
- **Endpoints:**
- **Elasticsearch:** https://my-february-test-ccc399.es.eu-west-1.aws.qa.elastic.cloud
- **Kibana:** https://my-february-test-ccc399.kb.eu-west-1.aws.qa.elastic.cloud
- **Credentials:**
- **Username:** ""
- **Password:** ""
Please ensure to keep the credentials secure.
User: please delete the my-february-test project
Added user message to memory: please delete the my-february-test project
=== Calling Function ===
Calling function: delete_ess_project with args: {"project_name":"my-february-test"}
========================
Agent: The "my-february-test" project has been deleted successfully.



