1. 功能概述
1.1 版本与状态说明
-
功能名称:RAG Playground(检索增强生成 playground)
-
部署支持:
-
Elastic Serverless(测试版 Beta)
-
Elastic Stack(测试版 Beta)
-
-
版本要求:Elasticsearch 9.1 及以上
-
核心价值:将 Elasticsearch 数据与大语言模型(LLM)结合,通过自然语言交互实现 RAG,无需手动编写复杂查询。
1.2 核心能力
-
自然语言转 Elasticsearch 查询:聊天界面将用户问题自动转换为 DSL 查询。
-
检索-生成流程:从 ES 索引召回相关文档,传递给 LLM 生成定制化回答。
-
查询可视化与修改:在 UI 中查看、编辑自动生成的 ES 查询。
-
Python 代码导出:查看并下载聊天界面的底层 Python 代码,直接集成到自有应用。
2. 工作原理深度解析
| 步骤 | 详细说明 | ES 9.3.0 优化点 |
|---|---|---|
| 1. 创建 LLM 提供商连接 | 支持 Elastic 托管 LLM、第三方提供商(如 OpenAI、Anthropic)或本地 LLM(需兼容 OpenAI SDK)。 | 优化了连接配置的 UI 流程,支持批量管理多个 LLM 连接器。 |
| 2. 选择生成模型 | 从已连接的提供商中选择具体模型(如 GPT-4 Turbo、Claude 3.5 Sonnet)。 | 新增模型性能预览(如响应速度、上下文窗口大小),辅助选择。 |
| 3. 定义模型行为(系统提示词) | 通过初始指令设定模型的角色、语气和回答规则(示例:"你是友好的问答助手,回答需简洁清晰")。 | 支持提示词模板保存,可快速切换不同场景的指令。 |
| 4. 选择 ES 索引 | 指定要搜索的一个或多个 ES 索引(不支持数据流索引,原因见 4.3 节)。 | 新增索引字段预览,可提前查看索引的映射结构,辅助选择。 |
| 5. 输入自然语言问题 | 用户在聊天界面提问。 | 优化了多轮对话的上下文理解,支持追问时自动关联历史问题。 |
| 6. 自动生成 ES 查询 | Playground 基于问题和索引映射,自动生成 DSL 查询(如布尔查询、匹配查询)。 | 9.3.0 中查询生成算法优化,优先使用 kNN 向量搜索(若索引有向量字段)提升召回精度。 |
| 7. 查看/修改查询 | 在 UI 中切换到 Query 模式,可直接编辑 DSL 查询(如调整字段权重、添加过滤条件)。 | 新增查询验证功能,实时提示语法错误或性能风险(如全量扫描)。 |
| 8. 自动选择相关字段 | 从召回文档中自动筛选关键字段(如 title、content)传递给 LLM,减少 Token 消耗。 |
支持基于字段类型(如 text、keyword)和映射属性(如 store: true)自定义字段选择规则。 |
| 9. 传递文档给 LLM | 将过滤后的文档、原始问题、系统提示词和聊天历史一并传递给 LLM。 | 优化了上下文窗口管理,自动截断超长文档(保留核心内容)。 |
| 10. LLM 生成回答 | 基于所有上下文生成最终回答,若开启"引用"功能,会标注答案来源的 ES 文档。 | 引用格式优化,支持点击引用跳转到对应文档的详情页。 |
| 11. 查看/下载 Python 代码 | 导出底层实现代码,支持两种框架:Elasticsearch Python Client 或 LangChain。 | 9.3.0 中代码模板更新,适配最新的 ES 客户端和 LangChain 版本。 |
3. 可用性与前提条件
3.1 部署方式入口
-
Elastic Cloud / 自托管部署:从左侧导航栏选择「Playground」。
-
Elastic Serverless:在 Elasticsearch 项目 UI 中直接访问(9.3.0 中 Serverless 版优化了加载速度)。
3.2 环境要求
-
Elasticsearch 版本:
-
自托管/Cloud:8.14.0 及以上(9.3.0 为推荐版本,修复了多个 Beta 阶段的 Bug)。
-
Serverless:无需关注版本,自动使用最新功能。
-
-
数据要求:至少有一个包含可搜索文档的 ES 索引(非数据流)。
-
LLM 提供商账户:支持以下提供商(9.3.0 新增 Google Gemini 2.5 Pro 支持):
3.3 LLM 提供商详细配置
| 提供商 | 支持模型 | 配置要点 | 注意事项 |
|---|---|---|---|
| Elastic Managed LLMs | 内置模型 | 默认可用,无需额外配置 | 仅在 Elastic Cloud 或 Serverless 中提供 |
| Amazon Bedrock | Anthropic Claude 3.5 Sonnet、Claude 3 Haiku | 需配置 AWS 访问密钥、区域 | 需在 AWS 控制台开通 Bedrock 服务 |
| OpenAI | GPT-3.5 Turbo、GPT-4 Turbo、GPT-4 Omni | 配置 API 密钥、端点(默认 https://api.openai.com/v1) |
需注意 Token 消耗 |
| Azure OpenAI | GPT-3.5 Turbo、GPT-4 Turbo | 配置 Azure 端点、API 密钥、部署名称 | 响应以大块缓冲(可能导致延迟稍高) |
| Gemini 2.5 Pro | 配置 Google AI API 密钥 | 9.3.0 新增支持 | |
| 本地 LLM(兼容 OpenAI SDK) | LM Studio、LocalAI 等 | 使用 OpenAI 连接器,端点设为本地服务地址(如 http://localhost:1234/v1),API 密钥可填任意值 |
需先启动本地 LLM 服务(见 4.2 节示例) |
4. 快速入门:分步操作指南
4.1 步骤 1:连接 LLM 提供商
-
进入 Playground landing 页,点击「New Playground」。
-
在「Large Language Model (LLM)」卡片中点击连接按钮。
-
选择 LLM 提供商(如 OpenAI)。
-
填写连接器名称(如"我的 OpenAI 连接")。
-
配置端点(默认即可,本地 LLM 需修改为本地地址)。
-
输入访问凭证(API 密钥):
-
第三方提供商:填真实密钥。
-
本地 LLM:填任意字符串(如"local-key")。
-
-
点击「Save」完成连接。
管理连接器:后续可点击「Model settings」旁的 🔧 按钮,更新或添加新连接器。
4.2 步骤 2:数据摄入(可选)
若已有索引可跳过此步。以下展开原文提到的 4 种方法:
方法 1:Elastic Crawler(网页内容爬取)
-
适用场景:爬取网站内容构建索引。
-
限制 :Serverless 版本暂不可用(9.3.0 中仍未支持)。
-
操作步骤:
-
在 ES 中创建新索引,选择「Elastic Crawler」作为数据源。
-
输入起始 URL,配置爬取规则(如允许的域名、深度)。
-
启动爬取任务,Crawler 会自动解析网页并写入索引。
-
方法 2:Elastic Connectors(第三方数据同步)
-
适用场景:同步数据库、S3、Notion 等第三方数据源。
-
操作步骤:
-
在 ES 中选择「Connectors」,选择数据源类型(如 PostgreSQL)。
-
配置连接信息(地址、用户名、密码)。
-
设置同步规则(如同步频率、字段映射),启动同步。
-
方法 3:Elasticsearch Bulk API(JSON 文档批量导入)
-
适用场景:导入本地 JSON 数据。
-
Python 示例代码(9.3.0 适配):
Pythonfrom elasticsearch import Elasticsearch from elasticsearch.helpers import bulk # 连接 ES(9.3.0 支持 API 密钥认证) es = Elasticsearch( "https://your-es-host:9243", api_key="your-api-key" ) # 准备数据 docs = [ {"_index": "my_rag_index", "title": "ES 9.3.0 新特性", "content": "RAG Playground 优化了查询生成..."}, {"_index": "my_rag_index", "title": "RAG 原理", "content": "检索增强生成通过召回相关文档提升 LLM 回答准确性..."} ] # 批量导入 bulk(es, docs) print("数据导入成功")
方法 4:Jupyter Notebooks(示例数据导入)
-
官方提供了预构建的 Notebooks,位于 elasticsearch-labs 仓库。
-
使用步骤:
-
克隆仓库,安装依赖(
elasticsearch、openai等)。 -
运行 Notebooks(如
rag_playground_sample_data.ipynb),自动导入示例数据。
-
4.3 步骤 3:选择 Elasticsearch 索引
-
点击「Add data sources」。
-
勾选一个或多个索引(不支持数据流索引:因为数据流主要用于时序数据,不适合 RAG 的文档检索场景,且 Playground 暂未适配数据流的读写逻辑)。
-
点击「Save and continue」进入聊天界面。
动态调整索引:后续可点击主界面的「Data」按钮,添加或移除索引。
5. 核心功能:聊天与查询模式
5.1 Chat 模式(默认)
-
功能:自然语言对话,LLM 基于 ES 数据回答。
-
对话记忆机制:Playground 后台使用另一个 LLM 编码历史问题和回答,确保主模型能理解上下文(9.3.0 中优化了记忆编码的 Token 效率)。
-
引用功能:在「LLM settings」中开启「Include citations」,回答会标注来源文档(如"根据文档 1:...")。
5.2 Query 模式
-
切换方法:点击主界面的「Query」按钮。
-
功能 :查看自动生成的 DSL 查询,并可直接编辑(如修改
match查询为match_phrase,添加filter条件缩小范围)。 -
ES 9.3.0 优化:新增查询性能提示,如检测到慢查询会建议添加索引或调整查询逻辑。
6. 界面高级设置
6.1 LLM 设置
-
AI Connector:切换已连接的 LLM 提供商或模型。
-
Instructions(系统提示词):优化建议:
-
明确角色:"你是 ES 文档专家,仅基于提供的 ES 文档回答问题。"
-
限制范围:"若文档中无相关信息,请回答'未找到相关内容',不要编造。"
-
设定格式:"回答需分点列出,并标注引用来源。"
-
-
Include citations:开关控制是否在回答中包含文档引用。
6.2 快捷操作
-
✨ Regenerate:重新发送最后一个问题,获取新回答(适合对当前回答不满意时)。
-
⟳ Clear chat:清空聊天历史,开始新对话(重置对话记忆)。
7. Python 代码集成:查看与下载
点击界面中的代码图标(</>),可查看并下载底层 Python 代码,支持两种实现方式:
7.1 方式 1:Elasticsearch Python Client + LLM Provider
-
代码结构:
-
连接 ES 和 LLM 提供商。
-
定义查询生成函数(将自然语言转 DSL)。
-
执行 ES 检索,筛选字段。
-
调用 LLM 生成回答。
-
-
修改要点:
-
替换 ES 和 LLM 的连接信息。
-
自定义字段选择逻辑(如只保留
title和content)。 -
调整提示词模板适配业务场景。
-
7.2 方式 2:LangChain + LLM Provider
-
优势:利用 LangChain 的组件化设计,快速集成更多功能(如向量存储、记忆管理)。
-
集成步骤:
-
使用
ElasticsearchRetriever作为检索器。 -
构建
RetrievalQA链,连接 LLM 和检索器。 -
调用链生成回答。
-
-
ES 9.3.0 适配:代码模板已更新为 LangChain 0.2.x 版本,兼容最新的 ES 集成。
8. ES 9.3.0 专属优化与注意事项
8.1 Beta 功能风险
-
Playground 仍处于 Beta 阶段,不建议直接用于生产环境(可用于测试和原型开发)。
-
9.3.0 修复了 9.1/9.2 中的多个 Bug(如本地 LLM 连接失败、查询生成语法错误),但仍可能存在不稳定情况。
8.2 性能优化建议
-
索引优化:
-
为检索字段(如
content)添加text类型映射,并配置合适的分析器(如standard或ik_max_word中文分析器)。 -
若使用向量搜索,需提前为文档生成向量并存储为
dense_vector字段。
-
-
字段选择:在「Indices」设置中仅选择必要字段,减少 LLM 的 Token 消耗。
-
LLM 调用缓存:若使用导出的代码,可添加缓存机制(如 Redis),避免重复问题重复调用 LLM。
8.3 已知限制
-
Serverless 版本暂不支持 Elastic Crawler。
-
不支持数据流索引。
-
本地 LLM 仅支持兼容 OpenAI SDK 的服务(如 LM Studio、LocalAI)。