博客

利用弹性代理生成器和 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 官方文档

相关内容

如何使用 Mastra 和 Elasticsearch 构建代理式 AI 应用程序

Enrico Zimuel

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

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

亲自试用