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
使用方法
-
OpenAI API密钥:用户必须首先输入他们的OpenAI API密钥来验证请求。
-
表格选择:用户从下拉菜单中选择表名,该菜单由Elasticsearch数据库中可用的表名填充。
-
自然语言查询:用户在文本输入字段中输入他们的自然语言查询。
-
查询处理:OpenAI API处理自然语言查询以生成Elasticsearch查询。
-
查询执行:生成的Elasticsearch查询针对Elasticsearch数据库执行。
-
结果显示:以表格格式向用户显示相关的样本记录。
-
数据可视化:可选的数据可视化选项,如图表或图形,帮助用户理解数据。
-
结果摘要:提供查询结果的摘要,突出显示数据中的关键见解或模式。
核心提示词 (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}的数据,基于数据生成商业智能洞察。
提供格式良好的文本。仅返回洞察内容。
设计要点:
- 结合原始数据和聚合数据进行深度分析
- 生成具有商业价值的洞察报告
- 注重文本格式的可读性
- 专注于洞察内容,避免冗余信息
提示词工程最佳实践
- 明确性:每个提示词都明确指定了输入数据格式和期望输出
- 约束性:通过具体约束条件确保输出质量和格式一致性
- 容错性:考虑边界情况和异常数据的处理
- 可扩展性:提示词设计支持不同类型的数据和查询场景
- 格式控制:严格控制输出格式,确保与下游系统的兼容性
结论
总之,Text2ESQuery通过将自然语言查询转换为Elasticsearch查询语言来简化Elasticsearch查询。它通过Prompt Engineering增强用户体验和准确性。Text2ESQuery通过消除用户需要了解查询语言的需求,使Elasticsearch变得易于访问。它检索并呈现相关数据,并提供可视化。