Elastic 에이전트 빌더와 GPT-OSS로 HR용 AI 에이전트 구축하기
Elastic 에이전트 빌더와 GPT-OSS를 사용해 직원 인사 데이터에 대한 자연어 쿼리에 답변할 수 있는 AI 에이전트를 구축하는 방법을 알아보세요.
소개
이 문서에서는 GPT-OSS와 Elastic 에이전트 빌더를 사용해 HR용 AI 에이전트를 구축하는 방법을 설명합니다. 상담원은 OpenAI, Anthropic 또는 외부 서비스에 데이터를 보내지 않고도 질문에 답변할 수 있습니다.
LM Studio를 사용하여 GPT-OSS를 로컬로 서비스하고 이를 Elastic Agent Builder에 연결합니다.
이 글을 마치면 정보와 모델을 완벽하게 제어하면서 직원 데이터에 대한 자연어 질문에 답할 수 있는 맞춤형 AI 에이전트를 보유하게 됩니다.
필수 구성 요소
이 문서에는 다음이 필요합니다:
Elastic Cloud 호스팅 9.2, 서버리스 또는 로컬 배포
32GB RAM이 장착된 머신 권장(GPT-OSS 20B의 경우 최소 16GB)
LM Studio 설치
도커 데스크톱 설치
GPT-OSS를 사용하는 이유는 무엇인가요?
로컬 LLM을 사용하면 자체 인프라에 배포하고 필요에 맞게 미세 조정할 수 있습니다. 이 모든 기능을 사용하면서 모델과 공유하는 데이터를 제어할 수 있으며, 물론 외부 제공업체에 라이선스 비용을 지불할 필요가 없습니다.
OpenAI는 개방형 모델 생태계를 위한 노력의 일환으로 2025년 8월 5일에 GPT-OSS를 출시했습니다.
20B 매개변수 모델은 다음을 제공합니다:
도구 사용 기능
효율적인 추론
OpenAI SDK 호환
에이전트 워크플로와 호환
벤치마크 비교:

벤치마크 소스.
솔루션 아키텍처
아키텍처는 전적으로 로컬 컴퓨터에서 실행됩니다. Elastic(Docker에서 실행)은 LM Studio를 통해 로컬 LLM과 직접 통신하며, Elastic 에이전트 빌더는 이 연결을 사용하여 직원 데이터를 쿼리할 수 있는 사용자 정의 AI 에이전트를 생성합니다.
자세한 내용은 이 문서를 참조하세요.

HR용 AI 에이전트 구축: 단계
구현을 5단계로 나눠서 설명하겠습니다:
로컬 모델로 LM 스튜디오 구성
Docker로 로컬 Elastic 배포
Elastic에서 OpenAI 커넥터 생성
Elasticsearch에 직원 데이터 업로드
AI 에이전트 빌드 및 테스트
1단계: GPT-OSS 20B로 LM Studio 구성하기
LM Studio는 컴퓨터에서 로컬로 대규모 언어 모델을 실행할 수 있는 사용자 친화적인 애플리케이션입니다. OpenAI 호환 API 서버를 제공하므로 복잡한 설정 과정 없이 Elastic과 같은 도구와 쉽게 통합할 수 있습니다. 자세한 내용은 LM Studio 문서를 참조하세요.
먼저 공식 웹사이트에서 LM Studio를 다운로드하여 설치합니다. 설치가 완료되면 애플리케이션을 엽니다.
LM Studio 인터페이스에서:
검색 탭으로 이동하여 "GPT-OSS"를 검색합니다.
OpenAI에서
openai/gpt-oss-20b다운로드를 클릭하세요.
이 모델의 크기는 약 12.10GB입니다. 인터넷 연결 상태에 따라 다운로드하는 데 몇 분 정도 걸릴 수 있습니다.

모델이 다운로드되면
로컬 서버 탭으로 이동합니다.
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은 전체 설정 프로세스를 처리하는 편리한 스크립트를 제공합니다. 자세한 내용은 공식 문서를 참조하세요.
시작-로컬 스크립트 실행
터미널에서 다음 명령을 실행합니다:
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에 로그인한 후, 관리 > AI > 에이전트 빌더로 이동하여 에이전트 빌더를 활성화합니다.

3단계: Elastic에서 OpenAI 커넥터 만들기
이제 로컬 LLM을 사용하도록 Elastic을 구성하겠습니다.
액세스 커넥터
Kibana에서
프로젝트 설정으로 이동 > 관리
알림 및 인사이트에서 커넥터를선택합니다.
커넥터 만들기를 클릭합니다.
커넥터 구성
커넥터 목록에서 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 서버는 인증이 필요하지 않으므로 어떤 텍스트도 작동합니다.)

구성을 완료하려면 저장 & 테스트를 클릭합니다.
중요: 상담원 빌더가 제대로 작동하려면 '네이티브 함수 호출 사용'을 켜야 합니다. 이 기능을 활성화하지 않으면 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"
}
}
}
}대량 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/_search5단계: AI 에이전트 빌드 및 테스트
모든 구성이 완료되었으면 이제 Elastic 에이전트 빌더를 사용해 사용자 정의 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. (기본 제공 도구 또는 사용자 정의 ES|QL을 사용하여) 적절한 Elasticsearch 쿼리를 생성합니다.

3. 일치하는 직원 기록 검색
4. 적절한 서식을 사용하여 자연어로 결과 표시
기존의 어휘 검색과 달리 GPT-OSS 기반 에이전트는 의도와 문맥을 이해하므로 정확한 필드 이름이나 쿼리 구문을 몰라도 정보를 쉽게 찾을 수 있습니다. 상담원의 사고 과정에 대한 자세한 내용은 이 문서를 참조하세요.
결론
이 문서에서는 Elastic의 에이전트 빌더를 사용해 로컬에서 실행 중인 OpenAI GPT-OSS 모델에 연결하기 위해 사용자 정의 AI 에이전트를 구축했습니다. 이 아키텍처는 로컬 머신에 Elastic과 LLM을 모두 배포함으로써 외부 서비스로 정보를 전송하지 않고도 데이터를 완벽하게 제어하면서 생성형 AI 기능을 활용할 수 있게 해줍니다.
실험으로 GPT-OSS 20B를 사용했지만, 공식적으로 Elastic 에이전트 빌더에 권장되는 모델은 여기를 참조하세요. 고급 추론 기능이 필요한 경우, 로컬에서 실행하려면 더 높은 사양의 컴퓨터가 필요하지만 복잡한 시나리오에서 더 나은 성능을 발휘하는 120B 매개변수 변형도 있습니다. 자세한 내용은 OpenAI 공식 문서를 참조하세요.




