Elastic Agent Builder と GPT-OSS を使用した HR 向け AI エージェントの構築
Elastic Agent Builder と GPT-OSS を使用して、従業員の HR データに関する自然言語クエリに回答できる AI エージェントを構築する方法を学びます。
はじめに
この記事では、GPT-OSSと Elastic Agent Builder を使用して HR 向けの AI エージェントを構築する方法を説明します。エージェントは、OpenAI、Anthropic、その他の外部サービスにデータを送信せずに質問に答えることができます。
LM Studio を使用して GPT-OSS をローカルで提供し、Elastic Agent Builder に接続します。
この記事を読み終える頃には、情報とモデルを完全に制御しながら、従業員データに関する自然言語の質問に答えることができるカスタム AI エージェントが完成しているはずです。
要件
この記事には以下が必要です:
Elastic Cloudホスト 9.2、サーバーレスまたはローカル展開
32GB RAM搭載マシンを推奨(GPT-OSS 20Bの場合は最低16GB)
LM Studioがインストール済み
Dockerデスクトップがインストール済み
GPT-OSS を使用する理由は何ですか?
ローカル LLM を使用すると、独自のインフラストラクチャに LLM を展開し、独自のニーズに合わせて微調整することができます。モデルと共有するデータの制御を維持しながら、これらすべてを実行できます。もちろん、外部プロバイダーにライセンス料を支払う必要はありません。
OpenAI は、オープン モデル エコシステムへの取り組みの一環として、2025 年 8 月 5 日にGPT-OSS をリリースしました。
20B パラメータ モデルは以下を提供します。
ツール使用能力
効率的な推論
OpenAI SDK対応
エージェントワークフローと互換性あり
ベンチマーク比較:

ベンチマークソース。
ソリューションアーキテクチャ
アーキテクチャは完全にローカル マシン上で実行されます。Elastic (Docker で実行) は LM Studio を介してローカル LLM と直接通信し、Elastic Agent Builder はこの接続を使用して従業員データを照会できるカスタム AI エージェントを作成します。
詳細については、 こちらのドキュメントを参照してください。

HR向けAIエージェントの構築:手順
実装は 5 つのステップに分けられます。
ローカルモデルでLMスタジオを構成する
DockerでローカルElasticをデプロイする
ElasticでOpenAIコネクタを作成する
従業員データをElasticsearchにアップロードする
AIエージェントを構築してテストする
ステップ1:LM StudioをGPT-OSS 20Bで構成する
LM Studio は、大規模な言語モデルをコンピュータ上でローカルに実行できるユーザーフレンドリーなアプリケーションです。OpenAI 互換の API サーバーを提供するため、複雑なセットアップ プロセスなしで Elastic などのツールと簡単に統合できます。詳細については、 LM Studio ドキュメントを参照してください。
まず、公式サイトからLM Studioをダウンロードしてインストールします。インストールしたら、アプリケーションを開きます。
LM Studio インターフェースの場合:
検索タブに移動して「GPT-OSS」を検索します。
OpenAIから
openai/gpt-oss-20bを選択してくださいダウンロードをクリック
このモデルのサイズは約12.10 GBになります。インターネット接続によっては、ダウンロードに数分かかる場合があります。

モデルをダウンロードしたら:
ローカルサーバータブに移動します
openai/gpt-oss-20bを選択します
デフォルトのポート1234を使用する
右側のパネルで、 「ロード」に移動し、コンテキストの長さを40K以上に設定します。

5. サーバーの開始をクリック

サーバーが実行中の場合はこれが表示されます。
[LM STUDIO SERVER] Success! HTTP server listening on port 1234
[LM STUDIO SERVER] Supported endpoints:
[LM STUDIO SERVER] -> GET http://localhost:1234/v1/models
[LM STUDIO SERVER] -> POST http://localhost:1234/v1/responses
[LM STUDIO SERVER] -> POST http://localhost:1234/v1/chat/completions
[LM STUDIO SERVER] -> POST http://localhost:1234/v1/completions
[LM STUDIO SERVER] -> POST http://localhost:1234/v1/embeddings
Server started.ステップ2: DockerでローカルElasticをデプロイする
ここで、Docker を使用して Elasticsearch と Kibana をローカルにセットアップします。Elastic は、セットアッププロセス全体を処理する便利なスクリプトを提供します。詳細については、公式ドキュメントを参照してください。
start-local スクリプトを実行する
ターミナルで次のコマンドを実行します。
curl -fsSL https://elastic.co/start-local | shこのスクリプトは次のことを行います。
ElasticsearchとKibanaをダウンロードして設定する
Docker Composeを使用して両方のサービスを開始します
30日間のプラチナトライアルライセンスを自動的に有効化
期待される出力
次のメッセージが表示されるまで待ち、表示されるパスワードと API キーを保存します。これらは Kibana にアクセスするために必要になります。
🎉 Congrats, Elasticsearch and Kibana are installed and running in Docker!
🌐 Open your browser at http://localhost:5601
Username: elastic
Password: KSUlOMNr
🔌 Elasticsearch API endpoint: http://localhost:9200
🔑 API key: cnJGX0pwb0JhOG00cmNJVklUNXg6cnNJdXZWMnM4bncwMllpQlFlUTlWdw==
Learn more at https://github.com/elastic/start-localKibanaにアクセスする
ブラウザを開いて次の場所に移動します:
http://localhost:5601ターミナル出力で取得した資格情報を使用してログインします。
エージェントビルダーを有効にする
Kibana にログインしたら、 [Management] > [AI] > [Agent Builder]に移動して、Agent Builder をアクティブ化します。

ステップ3: ElasticでOpenAIコネクタを作成する
ここで、ローカル LLM を使用するように Elastic を構成します。
アクセスコネクタ
キバナで
プロジェクト設定>管理に移動します
アラートとインサイトの下で、コネクタを選択します。
コネクタの作成をクリック
コネクタを構成する
コネクタのリストからOpenAI を選択します。LM Studio は OpenAI SDK を使用しているため、互換性があります。

次の値をフィールドに入力します。
コネクタ名: LM Studio - GPT-OSS 20B
OpenAIプロバイダーを選択:その他 (OpenAI互換サービス)
URL:
http://host.docker.internal:1234/v1/chat/completionsデフォルトモデル: openai/gpt-oss-20b
API キー: testkey-123 (LM Studio Server では認証が不要なので、任意のテキストを使用できます。)

設定を完了するには、 「保存してテスト」をクリックします。
重要: 「ネイティブ関数の呼び出しを有効にする」をオンにします。これは、Agent Builder が正しく動作するために必要です。これを有効にしないと、 No tool calls found in the responseエラーが発生します。
接続をテストする
Elastic は自動的に接続をテストするはずです。すべてが正しく構成されている場合、次のような成功メッセージが表示されます。

対応:
{
"status": "ok",
"data": {
"id": "chatcmpl-flj9h0hy4wcx4bfson00an",
"object": "chat.completion",
"created": 1761189456,
"model": "openai/gpt-oss-20b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! 👋 How can I assist you today?",
"reasoning": "Just greet.",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 69,
"completion_tokens": 23,
"total_tokens": 92
},
"stats": {},
"system_fingerprint": "openai/gpt-oss-20b"
},
"actionId": "ee1c3aaf-bad0-4ada-8149-118f52dad757"
}ステップ4: 従業員データをElasticsearchにアップロードする
ここで、 HR 従業員データセットをアップロードして、エージェントが機密データをどのように処理するかを説明します。私はこの構造を持つ架空のデータセットを生成しました。
データセットの構造
{
"employee_id": "0f4dce68-2a09-4cb1-b2af-6bcb4821539b",
"full_name": "Daffi Stiebler",
"email": "lscutchings0@huffingtonpost.com",
"date_of_birth": "1975-06-20T15:39:36Z",
"hire_date": "2025-07-28T00:10:45Z",
"job_title": "Physical Therapy Assistant",
"department": "HR",
"salary": "108455",
"performance_rating": "Needs Improvement",
"years_of_experience": 2,
"skills": "Java",
"education_level": "Master's Degree",
"manager": "Carl MacGibbon",
"emergency_contact": "Leigha Scutchings",
"home_address": "5571 6th Park"
}マッピングを使用してインデックスを作成する
まず、適切なマッピングを使用してインデックスを作成します。一部のキー フィールドにsemantic_textフィールドを使用していることに注意してください。これにより、インデックスのセマンティック検索機能が有効になります。
PUT hr-employees
{
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
},
"employee_id": {
"type": "keyword"
},
"full_name": {
"type": "text",
"copy_to": "employee_semantic"
},
"email": {
"type": "keyword"
},
"date_of_birth": {
"type": "date",
"format": "iso8601"
},
"hire_date": {
"type": "date",
"format": "iso8601"
},
"job_title": {
"type": "text",
"copy_to": "employee_semantic"
},
"department": {
"type": "text",
"copy_to": "employee_semantic"
},
"salary": {
"type": "double"
},
"performance_rating": {
"type": "text",
"copy_to": "employee_semantic"
},
"years_of_experience": {
"type": "long"
},
"skills": {
"type": "text",
"copy_to": "employee_semantic"
},
"education_level": {
"type": "text",
"copy_to": "employee_semantic"
},
"manager": {
"type": "text",
"copy_to": "employee_semantic"
},
"emergency_contact": {
"type": "keyword"
},
"home_address": {
"type": "keyword"
},
"employee_semantic": {
"type": "semantic_text"
}
}
}
}Bulk APIを使用したインデックス
データセットをコピーして Kibana の開発ツールに貼り付け、実行します。
POST hr-employees/_bulk
{"index": {}}
{"employee_id": "57728b91-e5d7-4fa8-954a-2384040d3886", "full_name": "Filide Gane", "email": "vhallahan1@booking.com", "job_title": "Business Systems Development Analyst", "department": "Marketing", "salary": "$52330.27", "performance_rating": "Meets Expectations", "years_of_experience": 12, "skills": "Java", "education_level": "Bachelor's Degree", "date_of_birth": "2000-02-07T16:49:32Z", "hire_date": "2023-11-07T13:03:16Z", "manager": "Freedman Kings", "emergency_contact": "Vilhelmina Hallahan", "home_address": "75 Dennis Junction"}
{"index": {}}
{"employee_id": "...", ...}データを検証する
クエリを実行して確認します。
GET hr-employees/_searchステップ5: AIエージェントを構築してテストする
すべての設定が完了したら、Elastic Agent Builder を使用してカスタム AI エージェントを構築します。詳細については、 Elastic のドキュメントを参照してください。
コネクタを追加する
新しいエージェントを作成する前に、デフォルトのコネクタはElastic Managed LLMであるため、 LM Studio - GPT-OSS 20Bというカスタム コネクタを使用するようにエージェント ビルダーを設定する必要があります。そのためには、 「プロジェクト設定」 > 「管理」 > 「GenAI 設定」に移動し、作成した設定を選択して「保存」をクリックします。

アクセスエージェントビルダー
エージェントへ
「新しいエージェントを作成」をクリックします

エージェントを構成する
新しいエージェントを作成するには、エージェント ID 、表示名、および表示手順が必須フィールドです。
ただし、システム プロンプトに似ていますが、カスタム エージェント用の、エージェントの動作やツールとの対話方法をガイドするカスタム インストラクションなど、さらに多くのカスタマイズ オプションがあります。ラベルは、エージェント、アバターの色、アバター シンボルを整理するのに役立ちます。
データセットに基づいてエージェント用に選択したものは次のとおりです。
エージェントID: hr_assistant
カスタム指示:
You are an HR Analytics Assistant that helps answer questions about employee data.
When responding to queries:
- Provide clear, concise answers
- Include relevant employee details (name, department, salary, skills)
- Format monetary values with currency symbols
- Be professional and maintain data confidentiality
ラベル: Human Resourcesおよび GPT-OSS
表示名: HR Analytics Assistant
表示の説明:
A specialized AI assistant for Human Resources that helps analyze employee data, compensation, performance metrics, and talent management. Ask questions about employees, departments, salaries, or performance analytics.
すべてのデータが入力されたら、新しいエージェントの「保存」をクリックします。
エージェントをテストする
従業員データについて自然言語で質問できるようになり、GPT-OSS 20B が意図を理解して適切な応答を生成します。
プロンプト:
Which employee is the one with the highest salary in the hr-employees index?答え:

エージェントのプロセスは次のとおりです。
1. GPT-OSSコネクタを使用して質問を理解する
2. 適切なElasticsearchクエリを生成する(組み込みツールまたはカスタムES|QLを使用)

3. 一致する従業員レコードを取得する
4. 適切なフォーマットで自然言語で結果を提示する
従来の語彙検索とは異なり、GPT-OSS を搭載したエージェントは意図とコンテキストを理解するため、正確なフィールド名やクエリ構文を知らなくても情報を簡単に見つけることができます。エージェントの思考プロセスの詳細については、こちらの記事を参照してください。
まとめ
この記事では、Elastic の Agent Builder を使用してカスタム AI エージェントを構築し、ローカルで実行されている OpenAI GPT-OSS モデルに接続しました。このアーキテクチャでは、Elastic と LLM の両方をローカルマシンにデプロイすることで、外部サービスに情報を送信することなく、データに対する完全な制御を維持しながら生成 AI 機能を活用できます。
実験としてはGPT-OSS 20Bを使用しましたが、Elastic Agent Builderの公式推奨モデルはこちらを参考にしています。より高度な推論機能が必要な場合は、複雑なシナリオでより優れたパフォーマンスを発揮する120B パラメータ バリアントもありますが、ローカルで実行するにはより高性能なマシンが必要です。詳細については、 OpenAI の公式ドキュメントを参照してください。




