Elasticsearch 9.3.0 RAG Playground 指南

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. 自动选择相关字段 从召回文档中自动筛选关键字段(如 titlecontent)传递给 LLM,减少 Token 消耗。 支持基于字段类型(如 textkeyword)和映射属性(如 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 环境要求

  1. Elasticsearch 版本

    • 自托管/Cloud:8.14.0 及以上(9.3.0 为推荐版本,修复了多个 Beta 阶段的 Bug)。

    • Serverless:无需关注版本,自动使用最新功能。

  2. 数据要求:至少有一个包含可搜索文档的 ES 索引(非数据流)。

  3. 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 密钥、部署名称 响应以大块缓冲(可能导致延迟稍高)
Google 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 提供商

  1. 进入 Playground landing 页,点击「New Playground」。

  2. 在「Large Language Model (LLM)」卡片中点击连接按钮。

  3. 选择 LLM 提供商(如 OpenAI)。

  4. 填写连接器名称(如"我的 OpenAI 连接")。

  5. 配置端点(默认即可,本地 LLM 需修改为本地地址)。

  6. 输入访问凭证(API 密钥):

    • 第三方提供商:填真实密钥。

    • 本地 LLM:填任意字符串(如"local-key")。

  7. 点击「Save」完成连接。

管理连接器:后续可点击「Model settings」旁的 🔧 按钮,更新或添加新连接器。

4.2 步骤 2:数据摄入(可选)

若已有索引可跳过此步。以下展开原文提到的 4 种方法:

方法 1:Elastic Crawler(网页内容爬取)
  • 适用场景:爬取网站内容构建索引。

  • 限制Serverless 版本暂不可用(9.3.0 中仍未支持)。

  • 操作步骤

    1. 在 ES 中创建新索引,选择「Elastic Crawler」作为数据源。

    2. 输入起始 URL,配置爬取规则(如允许的域名、深度)。

    3. 启动爬取任务,Crawler 会自动解析网页并写入索引。

方法 2:Elastic Connectors(第三方数据同步)
  • 适用场景:同步数据库、S3、Notion 等第三方数据源。

  • 操作步骤

    1. 在 ES 中选择「Connectors」,选择数据源类型(如 PostgreSQL)。

    2. 配置连接信息(地址、用户名、密码)。

    3. 设置同步规则(如同步频率、字段映射),启动同步。

方法 3:Elasticsearch Bulk API(JSON 文档批量导入)
  • 适用场景:导入本地 JSON 数据。

  • Python 示例代码(9.3.0 适配):

    Python 复制代码
    from 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 仓库

  • 使用步骤:

    1. 克隆仓库,安装依赖(elasticsearchopenai 等)。

    2. 运行 Notebooks(如 rag_playground_sample_data.ipynb),自动导入示例数据。

4.3 步骤 3:选择 Elasticsearch 索引

  1. 点击「Add data sources」。

  2. 勾选一个或多个索引(不支持数据流索引:因为数据流主要用于时序数据,不适合 RAG 的文档检索场景,且 Playground 暂未适配数据流的读写逻辑)。

  3. 点击「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

  • 代码结构

    1. 连接 ES 和 LLM 提供商。

    2. 定义查询生成函数(将自然语言转 DSL)。

    3. 执行 ES 检索,筛选字段。

    4. 调用 LLM 生成回答。

  • 修改要点

    • 替换 ES 和 LLM 的连接信息。

    • 自定义字段选择逻辑(如只保留 titlecontent)。

    • 调整提示词模板适配业务场景。

7.2 方式 2:LangChain + LLM Provider

  • 优势:利用 LangChain 的组件化设计,快速集成更多功能(如向量存储、记忆管理)。

  • 集成步骤

    1. 使用 ElasticsearchRetriever 作为检索器。

    2. 构建 RetrievalQA 链,连接 LLM 和检索器。

    3. 调用链生成回答。

  • 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 性能优化建议

  1. 索引优化

    • 为检索字段(如 content)添加 text 类型映射,并配置合适的分析器(如 standardik_max_word 中文分析器)。

    • 若使用向量搜索,需提前为文档生成向量并存储为 dense_vector 字段。

  2. 字段选择:在「Indices」设置中仅选择必要字段,减少 LLM 的 Token 消耗。

  3. LLM 调用缓存:若使用导出的代码,可添加缓存机制(如 Redis),避免重复问题重复调用 LLM。

8.3 已知限制

  • Serverless 版本暂不支持 Elastic Crawler。

  • 不支持数据流索引。

  • 本地 LLM 仅支持兼容 OpenAI SDK 的服务(如 LM Studio、LocalAI)。

相关推荐
AI周红伟2 小时前
周红伟:智能体构建,《企业智能体构建-DIFY+COZE+Skills+RAG和Agent能体构建案例实操》
大数据·人工智能
代码匠心2 小时前
从零开始学Flink:Flink 双流 JOIN 实战详解
大数据·flink·flink sql·大数据处理
SQL必知必会3 小时前
使用 SQL 实现帕累托原则(80/20 法则)
大数据·数据库·sql
xinhuanjieyi4 小时前
python获取股票分红
chrome·python·elasticsearch
AI周红伟4 小时前
周红伟:智能体构建实操:OpenClaw + Agent Skills + Seedance + RAG 案例实操
大数据·人工智能·大模型·智能体
nita张5 小时前
战略定位实战:案例分享与经验总结
大数据·人工智能·python
云器科技5 小时前
AI × Lakehouse:云器Lakehouse + Datus 从SQL查询到自然语言交互,扩展数据团队的能力边界
大数据·人工智能·数据库架构·数据平台·湖仓平台
零售ERP菜鸟6 小时前
数字系统的新角色:从管控工具到赋能平台
大数据·人工智能·职场和发展·创业创新·学习方法·业界资讯