使用 Elasticsearch 和 GitHub Copilot SDK 构建一个 RAG agent
作者来自 Elastic Greg Crist用五行 C# 代码将 Elasticsearch 接入 GitHub Copilot SDK 作为 RAG 工具让你的 agent 基于自己的日志、文档和数据进行检索而不是依赖模型的训练数据。Agent Builder 现已正式可用。你可以开始使用 Elastic Cloud 试用版并查看这里的 Agent Builder 文档。通过大约五行 C# 代码将 Elasticsearch 接入 GitHub Copilot SDK让你的 agent 直接从真实数据中检索信息而不是依赖模型去猜测。Copilot 负责规划与编排Elasticsearch 负责在你的日志、文档和数据之上进行检索。最终效果是不再产生来自过时训练数据的幻觉而是基于系统中真实存在的内容给出答案。本文将使用 Elastic.Extensions.AI 桥接库介绍完整的搭建流程。为什么没有检索层的 RAG agents 会产生幻觉如果没有检索层AI agents 只能基于训练数据生成回答因此当被问及你的日志、文档或专有系统时就容易产生幻觉。GitHub Copilot SDK 提供了一个经过生产验证的编排引擎Elasticsearch 提供了对你自己的日志、文档和业务数据的高效检索能力。当你把两者连接起来后agent 就不再 “猜答案”。在本文中我们将通过 Elastic.Extensions.AI 桥接库来完成这种连接并提供完整的 .NET 代码示例让你能够构建一个真正可运行的 检索增强生成Retrieval Augmented Generation - RAG agent由 Copilot 负责规划由 Elasticsearch 负责检索。核心技术栈概览GitHub Copilot SDK 与 Elastic AI 生态系统GitHub Copilot SDK 负责编排与规划Elasticsearch 负责检索与上下文。以下是各组件的作用。GitHub Copilot SDKGitHub Copilot SDK 是一个多平台工具集目前处于技术预览阶段。它支持 Python、TypeScript、Go、.NET 和 Java。在架构上该 SDK 通过 JSON Remote Procedure CallJSON-RPC与 Copilot 命令行接口CLI服务器通信并自动管理进程生命周期。它负责 agent 行为中的核心复杂部分规划复杂任务、调用工具以及管理模型交互。Elastic AI 生态系统在技术栈的另一侧Elastic 提供两个主要 AI 组件Elastic AI Assistant一个专门用于可观测性Observability和安全Security的工具帮助构建查询、排障以及威胁分析。Elastic Agent Builder一个用于创建基于 Elasticsearch 数据的自定义 agents 的框架。它提供可视化聊天界面并支持由 Elasticsearch Query LanguageES|QL驱动的 skills 和 tools。功能分工在该集成中GitHub Copilot 是编排器负责规划与决策的“大脑”而 Elasticsearch 是上下文提供者作为“记忆”和“知识库”存储你的日志、文档和专有数据。图 1GitHub Copilot SDK 与 Elastic 组件如何交互。Elasticsearch 与 Copilot 集成的架构模式将 Elasticsearch 与 GitHub Copilot SDK 连接主要有三种方式用例关键协议/库开发者收益RAG / 混合检索Microsoft.Extensions.AI / Elastic.Extensions.AI用“5 行代码”级别的复杂度让 agent 基于私有文档、日志和工单进行回答集群管理运维Elasticsearch 管理 API / SDK 工具通过自然语言控制集群健康状态与重建索引注意索引生命周期管理 ILM 复杂度较高Agent 互操作性Model Context ProtocolMCP / Agent2AgentA2A协议直接调用预构建 Elastic agents无需编写新的工具函数分步指南构建一个由 Elasticsearch 驱动的 Copilot agent步骤 1环境准备GitHub Copilot 订阅必需除非使用 Bring Your Own KeyBYOK。Copilot CLI已安装并加入 PATH。Elasticsearch 集群一个可用实例Elasticsearch Serverless 或 Elastic Cloud。步骤 2安装 SDK该 SDK 支持 Python、TypeScript、Go、.NET 和 Java开发中。本文示例使用 .NET在该环境中 Elastic.Extensions.AI 桥接库提供了最紧密的集成。安装 .NET 包如下dotnet add package GitHub.Copilot.SDK dotnet add package Elastic.Clients.Elasticsearch dotnet add package Elastic.Extensions.AI步骤 3将 Elasticsearch 注册为原生工具该集成通过 Elastic.Extensions.AI 桥接库运行这是由 Martijn LaarmanElastic 前 .NET 客户端维护者开发的库用于将 Elastic Agent Builder 与 GitHub Copilot SDK 连接起来。核心模式包含四个步骤用大约 20 行 C# 代码实现而在逻辑上可以归纳为 5 个操作// 1. Initialize the Elasticsearch client var client new ElasticsearchClient( new Uri(Environment.GetEnvironmentVariable(ES_URL)!), new ApiKey(Environment.GetEnvironmentVariable(ES_API_KEY)!)); // 2. Decorate a search method as a Copilot tool [Description(Search Elasticsearch for documents relevant to the query)] async Taskstring SearchAsync( [Description(Natural-language search query)] string query) { // 3. Define the schema: ask the LLM to drive query DSL via SearchAsync var response await client.SearchAsyncJsonElement(s s .Index(your-index) .Query(q q.Match(m m.Field(content).Query(query)))); return JsonSerializer.Serialize(response.Documents.Take(5)); } // 4. Register the tool and run via the Elastic.Extensions.AI bridge var agent CopilotAgent.Create(new CopilotAgentOptions()); agent.AddTool(AIFunctionFactory.Create(SearchAsync)); await agent.StartAsync();步骤 4实现安全防护与隐私控制Copilot SDK 内置了安全模型用户必须确认工具调用除非使用--allow-all-tools标志。关于数据隐私Elastic 不会使用客户数据提示词、查询或事件数据用于模型训练。对于希望实现零配置 AI 的团队可以通过 Elastic Inference ServiceEIS使用 Elastic 托管的大语言模型LLMs以便立即访问生成式能力但这些会根据 Elastic Cloud 定价产生额外费用。如果使用 EIS数据将由你选择的第三方 LL 提供商进行处理。开始使用用 GitHub Copilot SDK 构建 Elasticsearch RAG agent通过使用你自己的数据进行 grounding可以解决幻觉问题。将 Elasticsearch 通过 Elastic.Extensions.AI 桥接库连接到 GitHub Copilot SDK 后你的 agent 就可以以最少的样板代码访问你的数据。Copilot 负责规划与编排Elasticsearch 负责快速、准确的检索。最终结果是agent 基于系统中真实存在的数据进行推理而不是基于数月前训练得到的模型知识。下一步搭建你的 Elasticsearch RAG agent探索源码查看 elastic-ingest-dotnet 仓库了解 Elastic.Extensions.AI 桥接实现。阅读 cookbook参考 GitHub Copilot SDK Cookbook 获取多语言示例。实施建议从简单工具开始例如 Cluster Health。ILM 管理复杂度较高在 agentic 工作流中应谨慎使用。技术说明GitHub Copilot SDK 目前仍处于技术预览阶段在正式发布前可能会有破坏性变更。补充资源你可以阅读关于 Elasticsearch 与 Microsoft Agent Framework 结合使用的相关博客。常见问题解答AI agent 的 grounding基于真实数据是什么意思grounding 指的是 agent 在生成回答之前会先从 Elasticsearch 等数据源检索真实数据而不是仅依赖 LLM 的训练数据。这可以防止幻觉并确保答案反映你真实环境中的日志、文档和专有记录。Elastic 会使用我的查询或数据来训练 AI 模型吗不会。Elastic 不会使用客户数据包括提示词、查询或事件数据来训练模型。如果你使用 BYOKBring Your Own Key你的数据会保留在你自己的环境中。如果使用第三方 LLM 提供商则适用其各自的数据政策。MCP 互操作性如何与 Elastic Agent Builder 协作Elastic Agent Builder 的 agents 会暴露一个 MCP 服务器端点GitHub Copilot SDK 可以直接连接该端点。这样已有的 Elastic agents 可以无需重写工具函数就能被 Copilot 原生调用。可以用 GitHub Copilot 来管理 Elasticsearch 集群操作吗基础操作例如检查集群健康状态或触发 reindex适合作为 Copilot 工具使用。但复杂操作例如 ILM 策略管理较难安全地通过自然语言自动化在 agentic 工作流中应谨慎处理。GitHub Copilot SDK 支持哪些语言来集成 Elasticsearch截至目前该 SDK 支持 Python、TypeScript、Go 和 .NETJava 仍在开发中。在 Elasticsearch 集成方面Python 和 .NET 提供最直接的路径。由于这两种语言都与 Microsoft Agent Framework 深度集成开发者可以通过现有桥接如 Elastic.Extensions.AI无缝连接 Copilot 与 Elasticsearch。这篇内容对你有多大帮助原文Elasticsearch RAG agent with GitHub Copilot SDK in 5 lines - Elasticsearch Labs