小白都会es查询,AI-ESQuery

116 阅读4分钟

Text2ESQuery 项目

基于原始Text2ESQuery项目,使用NestJS作为后端服务和React作为前端应用的实现。

项目结构

├── Text2ESQuery-main/  # 原始项目
├── back/               # NestJS后端
└── frotend/            # React前端

功能特点

  • 接受自然语言查询并将其转换为Elasticsearch查询语言
  • 通过Prompt Engineering技术提高用户体验和查询准确性
  • 对生成的ES查询执行并获取结果
  • 检索相关样本记录并以清晰有组织的方式呈现
  • 提供可视化帮助用户理解检索到的数据

后端 (NestJS)

安装

cd back
npm install

配置

编辑 .env 文件,设置以下配置:

# Elasticsearch配置
ELASTICSEARCH_NODE=https://localhost:9200
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=your_password

# OpenAI配置
OPENAI_API_KEY=your_openai_api_key

# 服务器配置
PORT=3000

运行

npm run start:dev

前端 (React)

安装

cd frotend
npm install

运行

npm run dev

使用方法

  1. OpenAI API密钥:用户必须首先输入他们的OpenAI API密钥来验证请求。

  2. 表格选择:用户从下拉菜单中选择表名,该菜单由Elasticsearch数据库中可用的表名填充。

  3. 自然语言查询:用户在文本输入字段中输入他们的自然语言查询。

  4. 查询处理:OpenAI API处理自然语言查询以生成Elasticsearch查询。

  5. 查询执行:生成的Elasticsearch查询针对Elasticsearch数据库执行。

  6. 结果显示:以表格格式向用户显示相关的样本记录。

  7. 数据可视化:可选的数据可视化选项,如图表或图形,帮助用户理解数据。

  8. 结果摘要:提供查询结果的摘要,突出显示数据中的关键见解或模式。

image.png

核心提示词 (Prompt Engineering)

本项目的核心在于精心设计的提示词模板,通过Prompt Engineering技术实现高质量的自然语言到Elasticsearch查询的转换。以下是系统中使用的关键提示词:

1. Elasticsearch查询生成提示词

使用Elasticsearch索引'{indexName}',你的任务是根据列名{columnNames}和映射{mapping}生成Elasticsearch查询。
在查询的'aggregation''_source'字段下不要添加'.keyword'。尽量在结果中提供聚合字段,并在'_source'下返回所有数据记录。
确保生成的Elasticsearch查询严格不包含注释(没有 // 或 /* */)

设计要点

  • 明确指定索引名称和字段映射信息
  • 避免在聚合和源字段中添加.keyword后缀
  • 强调返回完整数据记录和聚合信息
  • 确保生成的查询不包含注释,保证JSON格式的纯净性

2. 聚合数据摘要提示词

提取{aggregationData}中'aggregations'字段下的详细信息,并以带有项目符号的句子形式显示。
如果'aggregations'字段为空,则通过说明空聚合字段的原因来通知用户,此处不包括文档计数。

设计要点

  • 专注于聚合数据的结构化提取
  • 使用项目符号格式提高可读性
  • 处理空聚合的边界情况
  • 排除文档计数以突出业务价值

3. 图表数据生成提示词

分析{aggregationData}或{finalData}中的数据,并生成可用于ECharts可视化的JSON结构。JSON应包括:
1. chartType: 推荐最适合此数据的图表类型(饼图、柱状图、折线图、散点图等)
2. title: 图表的描述性标题
3. data: 为ECharts准备的格式化数据,包括系列、类别等
4. options: 额外的ECharts配置选项

仅返回有效的JSON,不要包含任何解释或markdown。

设计要点

  • 智能分析数据特征并推荐合适的图表类型
  • 生成符合ECharts规范的数据结构
  • 包含完整的配置选项
  • 严格要求JSON格式输出,避免格式污染

4. 商业智能洞察提示词

使用来自{finalData}和{aggregationData}的数据,基于数据生成商业智能洞察。
提供格式良好的文本。仅返回洞察内容。

设计要点

  • 结合原始数据和聚合数据进行深度分析
  • 生成具有商业价值的洞察报告
  • 注重文本格式的可读性
  • 专注于洞察内容,避免冗余信息

提示词工程最佳实践

  1. 明确性:每个提示词都明确指定了输入数据格式和期望输出
  2. 约束性:通过具体约束条件确保输出质量和格式一致性
  3. 容错性:考虑边界情况和异常数据的处理
  4. 可扩展性:提示词设计支持不同类型的数据和查询场景
  5. 格式控制:严格控制输出格式,确保与下游系统的兼容性

结论

总之,Text2ESQuery通过将自然语言查询转换为Elasticsearch查询语言来简化Elasticsearch查询。它通过Prompt Engineering增强用户体验和准确性。Text2ESQuery通过消除用户需要了解查询语言的需求,使Elasticsearch变得易于访问。它检索并呈现相关数据,并提供可视化。