博客

利用弹性代理生成器和 GPT-OSS 构建人力资源人工智能代理

了解如何使用 Elastic Agent Builder 和 GPT-OSS 构建一个人工智能代理,回答有关员工人力资源数据的自然语言查询。

引言

本文将向您展示如何使用GPT-OSS和 Elastic Agent Builder 为人力资源部门构建人工智能代理。代理可以回答你的问题,而无需向 OpenAI、Anthropic 或任何外部服务发送数据。

我们将使用 LM Studio 在本地为 GPT-OSS 提供服务,并将其连接到 Elastic Agent Builder。

本文结束时,您将拥有一个定制的人工智能代理,可以回答有关员工数据的自然语言问题,同时保持对信息和模型的完全控制。

准备工作

这篇文章需要

为什么使用 GPT-OSS?

有了本地 LLM,您就可以将其部署到自己的基础设施中,并根据自己的需求进行微调。当然,您也不必向外部供应商支付许可费。

作为对开放模型生态系统承诺的一部分,OpenAI 于 2025 年 8 月 5 日发布了 GPT-OSS

20B 参数模型提供

  • 工具使用能力

  • 高效推理

  • 兼容 OpenAI SDK

  • 与代理工作流程兼容

基准比较:

基准 来源

解决方案架构

该架构完全在本地计算机上运行。Elastic(在 Docker 中运行)通过 LM Studio 与本地 LLM 直接通信,Elastic Agent Builder 利用这种连接创建可查询员工数据的自定义人工智能代理。

有关详细信息,请参阅本文档

为人力资源部门建立人工智能代理:步骤

我们将把实施分为 5 个步骤:

  1. 使用本地模型配置 LM 工作室

  2. 使用 Docker 部署本地弹性

  3. 在 Elastic 中创建 OpenAI 连接器

  4. 将员工数据上传到 Elasticsearch

  5. 构建并测试人工智能代理

步骤 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 部署本地弹性

现在,我们将使用 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 > Agent Builder 并激活 Agent Builder。

第 3 步:在 Elastic 中创建 OpenAI 连接器

现在,我们将配置 Elastic 以使用本地 LLM。

接入连接器

  1. 在 Kibana 中

  2. 转到项目设置 > 管理

  3. "警报和洞察 "下,选择 "连接器

  4. 单击创建连接器

配置连接器

从连接器列表中选择OpenAI。LM Studio 使用 OpenAI SDK,因此与 OpenAI 兼容。

用这些值填写字段:

  • 连接器名称: 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

现在,我们将上传人力资源员工数据集,以演示代理如何处理敏感数据。我用这种结构生成了一个虚构的数据集。

数据集结构

{
  "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 的 Dev Tools 中并执行:

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 步:构建并测试人工智能代理

一切配置完成后,就可以使用 Elastic Agent Builder 创建自定义人工智能代理了。有关详细信息,请参阅Elastic 文档

添加连接器

在创建新代理之前,我们必须将代理生成器设置为使用名为LM Studio - GPT-OSS 20B 的自定义连接器,因为默认连接器是Elastic Managed LLM。为此,我们需要进入 "项目设置"> "管理"> "GenAI 设置";现在选择我们创建的设置,然后单击 "保存"

访问代理生成器

  1. 前往代理商

  2. 点击创建新代理

配置代理

要创建新代理,必须填写代理 ID显示名称显示说明

但还有更多的自定义选项,比如 "自定义指令",它可以指导代理如何与工具进行交互,类似于系统提示,但适用于我们的自定义代理。标签可帮助您组织代理人、头像颜色和头像符号。

我根据数据集为我们的代理选择的代理编号是: Agent 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.生成适当的 Elasticsearch 查询(使用内置工具或自定义ES|QL)

3.检索匹配的员工记录

4.以自然语言和适当的格式呈现结果

与传统的词法搜索不同,由 GPT-OSS 支持的代理可以理解意图和上下文,从而在不知道确切字段名称或查询语法的情况下更容易找到信息。有关代理人思维过程的更多详情,请参阅本文

结论

在本文中,我们使用 Elastic 的代理生成器(Agent Builder)构建了一个自定义人工智能代理,以连接到本地运行的 OpenAI GPT-OSS 模型。通过在本地机器上部署 Elastic 和 LLM,这种架构可以让您利用生成式人工智能功能,同时保持对数据的完全控制,而无需向外部服务发送信息。

我们使用 GPT-OSS 20B 作为实验,但此处参考了官方推荐的 Elastic Agent Builder 模型。如果您需要更高级的推理能力,还可以选择120B 参数变体,它在复杂情况下的表现更好,不过需要更高级的机器才能在本地运行。更多详情,请参阅OpenAI 官方文档

相关内容

Agent Builder,超越聊天框:介绍增强型基础架构

Alexander Wert

使用 Elasticsearch 管理智能体记忆

Someshwaran Mohankumar

使用 Elasticsearch 推理 API 以及 Hugging Face 模型

Jeffrey Rengifo

使用 TypeScript 构建 Elasticsearch MCP 服务器

Jeffrey Rengifo

shell 工具并非上下文工程的灵丹妙药

Leonie Monigatti

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用