本文将向您展示如何使用GPT-OSS和 Elastic Agent Builder 构建一个用于人力资源的 AI 代理。该代理无需将数据发送到 OpenAI、Anthropic 或任何外部服务即可回答您的问题。
我们将使用 LM Studio 在本地部署 GPT-OSS,并将其连接到 Elastic Agent Builder。
读完本文,您将拥有一个定制的 AI 代理,它可以回答有关员工数据的自然语言问题,同时保持对您的信息和模型的完全控制。
撰写本文需要以下工具:
使用本地生命周期管理 (LLM) 模型,您可以将其部署在自己的基础设施中,并根据自身需求进行微调。同时,您还可以掌控与模型共享的数据,而且无需向外部供应商支付许可费。
OpenAI于 2025 年 8 月 5 日发布了 GPT-OSS,这是其对开放模型生态系统承诺的一部分。
20B 参数模型提供:
基准对比:

基准测试来源。
该架构完全运行在您的本地计算机上。Elastic(运行在 Docker 中)通过 LM Studio 直接与您的本地 LLM 系统通信,Elastic Agent Builder 利用此连接创建可查询员工数据的自定义 AI 代理。
更多详情请参阅此文档。

我们将实施过程分为 5 个步骤:
LM Studio 是一款用户友好的应用程序,可让您在本地计算机上运行大型语言模型。它提供与 OpenAI 兼容的 API 服务器,无需复杂的设置过程即可轻松与 Elastic 等工具集成。更多详情,请参阅LM Studio 文档。
首先,从官方网站下载并安装LM Studio 。安装完成后,打开该应用程序。
openai/gpt-oss-20b从 OpenAI 中选择此模型的大小约为12.10GB。下载可能需要几分钟时间,具体取决于您的网络连接速度。


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.现在我们将使用 Docker 在本地部署 Elasticsearch 和 Kibana。Elastic 提供了一个便捷的脚本来处理整个安装过程。更多详情请参阅官方文档。
在终端中执行以下命令:
curl -fsSL https://elastic.co/start-local | sh此脚本将执行以下操作:
请等待以下消息并保存显示的密码和 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打开浏览器并访问:
http://localhost:5601使用终端输出中获取的凭据登录。
登录 Kibana 后,导航至“管理” > “AI” > “代理构建器”,然后激活代理构建器。

现在我们将配置 Elastic 以使用您的本地 LLM。
从连接器列表中选择OpenAI。LM Studio 使用 OpenAI SDK,因此与之兼容。

请在各字段中填写以下值:
http://host.docker.internal:1234/v1/chat/completions
要完成配置,请单击“保存并测试”。
重要提示:请启用“启用原生函数调用”;这是 Agent Builder 正常工作的必要条件。如果未启用,将会出错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"
}现在我们将上传人力资源员工数据集,以演示代理如何处理敏感数据。我生成了一个具有以下结构的虚拟数据集。
{
"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"
}
}
}
}将数据集复制粘贴到 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一切配置完毕,现在可以使用 Elastic Agent Builder 构建自定义 AI 代理了。更多详情请参阅Elastic 文档。
在创建新代理之前,我们需要将代理构建器设置为使用我们自定义的连接器,LM Studio - GPT-OSS 20B因为默认连接器是Elastic Managed LLM。为此,我们需要转到“项目设置” > “管理” > “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. 生成合适的 Elasticsearch 查询(使用内置工具或自定义ES|QL)

3.检索匹配的员工记录
4. 以自然语言和适当的格式呈现结果
与传统的词汇搜索不同,基于 GPT-OSS 的智能体能够理解意图和上下文,因此无需知道确切的字段名称或查询语法即可轻松找到信息。有关智能体思考过程的更多详细信息,请参阅这篇文章。
本文中,我们使用 Elastic 的 Agent Builder 构建了一个自定义 AI 代理,用于连接到本地运行的 OpenAI GPT-OSS 模型。通过在本地计算机上部署 Elastic 和 LLM,这种架构使您能够在充分利用生成式 AI 功能的同时,完全掌控自己的数据,而无需将信息发送到外部服务。
我们使用 GPT-OSS 20B 作为实验模型,但 Elastic Agent Builder 官方推荐的模型请参考此处。如果您需要更高级的推理能力,还可以使用参数量为 120B 的变体,它在复杂场景下表现更佳,但本地运行需要配置更高的机器。更多详情,请参阅OpenAI 官方文档。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。