블로그

Elastic 에이전트 빌더와 GPT-OSS로 HR용 AI 에이전트 구축하기

Elastic 에이전트 빌더와 GPT-OSS를 사용해 직원 인사 데이터에 대한 자연어 쿼리에 답변할 수 있는 AI 에이전트를 구축하는 방법을 알아보세요.

소개

이 문서에서는 GPT-OSS와 Elastic 에이전트 빌더를 사용해 HR용 AI 에이전트를 구축하는 방법을 설명합니다. 상담원은 OpenAI, Anthropic 또는 외부 서비스에 데이터를 보내지 않고도 질문에 답변할 수 있습니다.

LM Studio를 사용하여 GPT-OSS를 로컬로 서비스하고 이를 Elastic Agent Builder에 연결합니다.

이 글을 마치면 정보와 모델을 완벽하게 제어하면서 직원 데이터에 대한 자연어 질문에 답할 수 있는 맞춤형 AI 에이전트를 보유하게 됩니다.

필수 구성 요소

이 문서에는 다음이 필요합니다:

GPT-OSS를 사용하는 이유는 무엇인가요?

로컬 LLM을 사용하면 자체 인프라에 배포하고 필요에 맞게 미세 조정할 수 있습니다. 이 모든 기능을 사용하면서 모델과 공유하는 데이터를 제어할 수 있으며, 물론 외부 제공업체에 라이선스 비용을 지불할 필요가 없습니다.

OpenAI는 개방형 모델 생태계를 위한 노력의 일환으로 2025년 8월 5일에 GPT-OSS를 출시했습니다.

20B 매개변수 모델은 다음을 제공합니다:

  • 도구 사용 기능

  • 효율적인 추론

  • OpenAI SDK 호환

  • 에이전트 워크플로와 호환

벤치마크 비교:

벤치마크 소스.

솔루션 아키텍처

아키텍처는 전적으로 로컬 컴퓨터에서 실행됩니다. Elastic(Docker에서 실행)은 LM Studio를 통해 로컬 LLM과 직접 통신하며, Elastic 에이전트 빌더는 이 연결을 사용하여 직원 데이터를 쿼리할 수 있는 사용자 정의 AI 에이전트를 생성합니다.

자세한 내용은 이 문서를 참조하세요.

HR용 AI 에이전트 구축: 단계

구현을 5단계로 나눠서 설명하겠습니다:

  1. 로컬 모델로 LM 스튜디오 구성

  2. Docker로 로컬 Elastic 배포

  3. Elastic에서 OpenAI 커넥터 생성

  4. Elasticsearch에 직원 데이터 업로드

  5. AI 에이전트 빌드 및 테스트

1단계: GPT-OSS 20B로 LM Studio 구성하기

LM Studio는 컴퓨터에서 로컬로 대규모 언어 모델을 실행할 수 있는 사용자 친화적인 애플리케이션입니다. OpenAI 호환 API 서버를 제공하므로 복잡한 설정 과정 없이 Elastic과 같은 도구와 쉽게 통합할 수 있습니다. 자세한 내용은 LM Studio 문서를 참조하세요.

먼저 공식 웹사이트에서 LM Studio를 다운로드하여 설치합니다. 설치가 완료되면 애플리케이션을 엽니다.

LM Studio 인터페이스에서:

  1. 검색 탭으로 이동하여 "GPT-OSS"를 검색합니다.

  2. OpenAI에서 openai/gpt-oss-20b

  3. 다운로드를 클릭하세요.

이 모델의 크기는 약 12.10GB입니다. 인터넷 연결 상태에 따라 다운로드하는 데 몇 분 정도 걸릴 수 있습니다.

모델이 다운로드되면

  1. 로컬 서버 탭으로 이동합니다.

  2. OPENAI/GPT-OSS-20B를 선택합니다.

  3. 기본 포트 1234 사용

  4. 오른쪽 패널에서 로드로 이동하여 컨텍스트 길이를 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-local

Kibana에 액세스

브라우저를 열고 다음으로 이동합니다:

http://localhost:5601

터미널 출력에서 얻은 자격 증명을 사용하여 로그인합니다.

상담원 빌더 사용

Kibana에 로그인한 후, 관리 > AI > 에이전트 빌더로 이동하여 에이전트 빌더를 활성화합니다.

3단계: Elastic에서 OpenAI 커넥터 만들기

이제 로컬 LLM을 사용하도록 Elastic을 구성하겠습니다.

액세스 커넥터

  1. Kibana에서

  2. 프로젝트 설정으로 이동 > 관리

  3. 알림 및 인사이트에서 커넥터를선택합니다.

  4. 커넥터 만들기를 클릭합니다.

커넥터 구성

커넥터 목록에서 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/_search

5단계: AI 에이전트 빌드 및 테스트

모든 구성이 완료되었으면 이제 Elastic 에이전트 빌더를 사용해 사용자 정의 AI 에이전트를 빌드할 차례입니다. 자세한 내용은 Elastic 설명서를 참조하세요.

커넥터 추가

새 에이전트를 생성하기 전에, 기본 커넥터가 Elastic Managed LLM이므로 LM Studio - GPT-OSS 20B 이라는 사용자 정의 커넥터를 사용하도록 에이전트 빌더를 설정해야 합니다. 이를 위해 프로젝트 설정 > 관리 > GenAI 설정으로 이동한 다음, 생성한 프로젝트를 선택하고 저장을 클릭합니다.

에이전트 빌더 액세스

  1. 상담원으로이동

  2. 새 상담원 만들기를클릭합니다.

상담원 구성하기

새 상담원을 만들 때 필수 필드는 상담원 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 ResourcesGPT-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 공식 문서를 참조하세요.

관련 콘텐츠

채팅창을 넘어선 Agent Builder: Augmented Infrastructure 소개

Alexander Wert

Elasticsearch로 에이전틱 메모리 관리하기

Someshwaran Mohankumar

Elasticsearch 추론 API와 Hugging Face 모델 함께 사용하기

Jeffrey Rengifo

TypeScript로 Elasticsearch MCP 서버 생성

Jeffrey Rengifo

셸 도구는 컨텍스트 엔지니어링을 위한 만능 해결책이 아닙니다

Leonie Monigatti

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요