利用弹性代理生成器和 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 个步骤:
使用本地模型配置 LM 工作室
使用 Docker 部署本地弹性
在 Elastic 中创建 OpenAI 连接器
将员工数据上传到 Elasticsearch
构建并测试人工智能代理
步骤 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 部署本地弹性
现在,我们将使用 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。
接入连接器
在 Kibana 中
转到项目设置 > 管理
在"警报和洞察 "下,选择 "连接器
单击创建连接器
配置连接器
从连接器列表中选择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 设置";现在选择我们创建的设置,然后单击 "保存"。

访问代理生成器
前往代理商
点击创建新代理

配置代理
要创建新代理,必须填写代理 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 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)构建了一个自定义人工智能代理,以连接到本地运行的 OpenAI GPT-OSS 模型。通过在本地机器上部署 Elastic 和 LLM,这种架构可以让您利用生成式人工智能功能,同时保持对数据的完全控制,而无需向外部服务发送信息。
我们使用 GPT-OSS 20B 作为实验,但此处参考了官方推荐的 Elastic Agent Builder 模型。如果您需要更高级的推理能力,还可以选择120B 参数变体,它在复杂情况下的表现更好,不过需要更高级的机器才能在本地运行。更多详情,请参阅OpenAI 官方文档。




