在汉语查询时用 LLM 辅助
在汉语查询( http://query.raqsoft.com.cn:6888/nlq.html )中,可以用类似自然语言的查询语句,从数据库中查询数据,如“河北省客户的订单信息”,“45 岁以上 员工”等。
在汉语查询时,仍然对查询语句有一些要求,比如要求语法尽量简洁,比较条件中的数据单位要匹配等。另外,汉语查询也无法理解一些复杂的自然语言的意思,同时查询语句中还可能存在错别字等情况。为此,可以用大语言模型 LLM(Large Language Model)辅助解析语意。
目前可以选择的大语言模型很多,以 Deepseek 为例( https://chat.deepseek.com ),在查询窗口中,输入提示,提出对汉语查询语句的要求,以及各种情况下的例句,帮助大模型理解及判断,最后输入需要大模型辅助处理的要求以及查询语句,如:
规则:A 为不支持的规则,输出“不支持”;B 之后为修改语句时的规则,按规则修改。注意例句是“应该用”还是“不能用”。
A. 不支持的查询。
A1. 不支持非常数的比较条件,包括数据项之间大小比较、数据项是否相等均不支持,也不支持用表达式的计算结果比较等。如不支持“发货地是收货地的订单”,不支持“发货日期比签单日期晚 2 天的订单”,不支持“数量大于库存量 订单明细”等。
B 查询语句基本格式:只需写关键词。
B1. 整个句子是由词构成的,写清目标表的数据项和条件即可,虚词不用写。如“请你”,“销售员的姓名”中的“的”。语气词和描述性词语以及问号句号等标点符号不要。
B2. 如果需要查询多项信息时,把各个单项数据项用空格分隔开,如“姓名 性别 身高 体重”,“商品编码 商品名称 重量 类别 库存量”,“姓名 BMI 指数”。
C 组合信息,相关信息一起查。
C1. 如果需要查询中的多个数据项是一组,那么将这些数据项用空格分开,共同形成一个组合信息。如:“城市 名称 省 人口”,表示想查找“城市名称 城市所在省 城市人口”的组合信息;组合信息中最前面的词“城市”,表示这组信息属于“城市信息”。类似的还有“员工编码 姓名 经理 姓名 性别”等。
C2. 在查询多项信息时,如果得到的结果中有单项数据项被分到了组合中,可以试着用逗号把单项数据项分隔开。如“订单编码 客户,发货 城市 日期,收货 城市 日期”。又如“员工编码,上级 姓名,姓名 身高 体重”,第一个姓名在“上级”组合中,表示上级的姓名;第二个“姓名”之前用逗号隔开,说明与上级无关了,是员工的姓名。
D 筛选条件,精准获取所需。
D1. 在查询中可以使用筛选条件,最常用的情况是说明对哪种信息筛选,筛选的条件是什么,也要说明筛选后需要的信息。如“年龄大于 40 岁 员工”,“金额小于等于 100 元 订单编码,发货 城市 日期,客户”,“发货日期 今年 订单信息”。条件中,筛选信息和筛选条件之间最好用空格分开以避免误读。
D2. 比较条件中的数值要带上单位,比如不要用“金额 1000 以上 订单”,应该用“金额 1000 元以上 订单”。类似的还有“身高大于 175 厘米 员工”“出生日期 早于 1980 年 姓名 性别”等。
D3. 筛选时,设置的比较条件均为特定的数据项与常数的比较,如果是相等的比较关系时,可以不写“等于”。如果常数是文字类型的内容,在其前后加引号,同时必须写明数据项。如“产品名称 “龙虾” 商品信息”,不能写““龙虾” 商品信息”。又如“客户名称 “宇欣实业” 2025 年订单”。如果是城市名称、省名称、性别、职务、商品类别、事件类型这类常用的文字则不必加。如“类别 海鲜 商品名称 厂家”,“籍贯 北京 姓名 职务 销售代表 年龄”“河北省男员工”等。如果查询时报错,无法识别文字类型的常数,说明并非常用文字,请在文字前后加引号。
D4. 筛选条件中可以使用一些表示组合的常数,如“籍贯 直辖市 姓名”。
D5. 如果比较条件中没有说明是什么信息,那比较条件中必须写清单位,此时查询时会尝试与数据类型相同,且单位能够匹配的信息去比较。如“大于 40 岁且小于 45 岁 员工”可以根据“岁”判断出是在比较年龄;又如“北京 员工”可以根据城市名判断出在比较籍贯。但省略比较信息的时候,有可能解读错误。如果需要给出建议时应该提示,其它时候认为是符合规则的使用。
D6. 如果查询中未指明是什么信息,通常不要尝试猜测它的字段名,而是保留原有的比较条件格式,并在建议或者提示中附加说明。如“40 岁以上 员工”,不能转换为“年龄 40 岁以上 员工”,因为“年龄”这样猜测的字段并不一定正确,保留原样即可。不猜测字段的规则,对于文字类型常数比较时例外,如果使用不常用类型的文字常数,必须添加字段名,如“龙虾 商品信息”是错误的,应改为“商品名称 “龙虾” 商品信息”;在建议中需说明比较时的字符串最好尽量带上相比的数据项,并给出修改建议。注意,对于城市名称、省名称、性别、职务、商品类别、事件类型这类常用的文字同样不必加字段名。
D7. 比较条件是一个区间时,常数前后的单位要统一,如“人口 800 万至 1000 万 城市”,“45 岁到 50 岁 雇员”,“175 厘米至 180 厘米 员工”。前方常数的单位可以省略,如“人口 800 至 1000 万 城市”,“45 到 50 岁 雇员”等。区间需要按从小到大的顺序设置,写反了调整过来,如不能用“55 岁到 50 岁 雇员”,应该修改为“50 岁到 55 岁 雇员”。在日期区间查询中,必须确保起始和结束日期单位统一,如不能用“2025 年 1 月至 6 月 发货 订单”,应该前后统一,修改为“2025 年 1 月至 2025 年 6 月 发货 订单”。
D8. 如果筛选时使用了多个比较条件,有可能无法判断筛选时是需要同时符合所有条件,还是符合一条就行。这种情况下,最好用“且”“或”等明确的连词表示多个条件之间的逻辑关系。如“3 月出生 或 籍贯西安 员工”“山东或辽宁 生产 商品”“海鲜 或 调味品 商品”等。
D9. 筛选时如果有多个条件,不允许重复需要查询的信息。例如不要用“3 月出生 员工,8 月出生 员工”,应该修改为“3 月或 8 月 出生 员工”,查询的员工不允许重复。类似的,不要用“山东生产 商品, 辽宁生产 商品”,应该用“山东或辽宁 生产 商品”。又如不要用“海鲜 商品 或 调味品 商品”,应该用“海鲜或调味品 商品”。
D10. 如果筛选条件多于两个,要用括号说明这些条件之间的组合关系,特别是“或”的关系必须明确表示,如“年龄大于 30 岁 且 (3 月出生 或 西安) 员工”,“(库存量 大于 100 或 小于 10) 且 单价 大于 25 元 商品”等。同时,查询信息不能重复,条件要合并,例如不能用“北京女 员工 山东男 员工”,这其实是 4 个条件,应该分组合并条件,修改为“(北京女)或(山东男) 员工”。
D11. 需要表达多个“属性组合”之间的“或”关系时,需要将每个组合用括号括起,并用“或”连接,整体作为筛选条件作用于同一目标,如“(2025 年 北京 )或(2024 年 上海 )发货 订单”,不能用“2025 年 北京 发货 订单,2024 年 上海 发货 订单”,也不能没有括号,即不能用“2025 年北京 2024 年上海 发货 订单”。多组条件时,即使是常用文字也需要加括号,如不能用“北京女和山东男员工”,而应该改为“(北京女)或(山东男) 员工”。类似的还有“(2025 年 北京)发货至(河北省 客户名称 “企业”结尾) 订单”,“(北京女)或(山东男) 员工”,“(2025 年北京)或(2024 年上海) 发货 订单”,“(山东海鲜)或(河北调味品) 商品”等。
D12. 如果多个比较条件是需要同时成立的,且类型不同,不会有冲突或产生歧义时,可以同时使用,中间省略连词“且”。如“北京 饮料 商品信息”,“45 岁以上 男 员工”,“25 元以上海鲜 商品”等。省略连词后,如果和其它成组条件同时使用,注意用括号,如“(北京饮料)或(山东海鲜) 商品”中,括号和“或”不能省略。
D13. 如果多个条件并非全部“且”的关系,也非类型完全相同的全部“或”的关系,必须用括号表示明确的条件,如“(河北女)或(山东男) 雇员”,“年龄小于 30 岁 或 (2 月出生 且 北京) 员工”,“(2025 年 北京 )或(2024 年 上海 )发货 订单”等。
D14. 比较条件中的日期类常数用明确的数据表示。如不要用“今年 10 月 1 日前的订单”而应该用“2025 年 10 月 1 日前的订单”;又如不能用“去年 10 月 签单 订单”,应该用“2024 年 10 月 签单 订单”等。
D15. 筛选条件中可以用动词提供信息,如“2024 年北京发货 商品信息”用“发货”表示 2024 年是发货年,北京是发货地;如“北京发往河北 订单”,用“发往”就可以知道北京是发货城市,河北是收货省。对于查询中的动词短语,必须保留原样,不要拆分成数据项的比较,如对于“北京发往河北 订单”,不能改成“发货城市 北京 收货城市 河北 订单”。动词必须原样保留,如上面的“发货”“发往”,特别是“发货至”和“发货”或者“发货自”是不同的,不要改变。类似的动词还有“生于”,“签单”,“产自”等等,均需保留。
D16. 如果筛选条件使用的是组合信息,可以使用组合信息包含的多种数据项作为比较条件,这样的比较条件最好写在组合信息前面。如“男性 45 岁以上 经理的员工”,“北京男销售员 订单”,“北京发往上海 订单 订单明细”等。
D17. 如果使用动词时只有一侧存在筛选条件,将其写在动词前面,如“2025 年 3 月 北京 发货 商品”,“晚于 1988 年 出生 员工”,“2024 年 北京 发货 订单”等。
D18. 多个条件使用时,“和”需要判断实际含义,如不能用“北京饮料和山东海鲜 商品”,应修改为“(北京饮料)或(山东海鲜) 商品”。
E 分组统计,整体分析数据
E1. 如果不想看具体数据,而是需要对数据分组统计,只看统计结果,如计算每一组数据的总和或者平均值等。那么首先要说明分组的目标维度,然后说明统计指标。如“客户 金额总和”用客户作为目标维度去分组,统计指标是计算各个客户的金额总和;“销售 订单总数”有那个销售作为目标维度,统计指标是计算订单数。
E2. 分组统计时可能同时计算多个统计指标,如“客户 订单数 平均金额”,以客户作为目标维度,统计订单数和平均金额两个指标。分组统计也可能按照多个数据分组。如“省 城市 员工数 平均年龄”,在第一个统计指标“员工数”之前的都会被认为是目标维度。在使用多个目标维度或者多个统计指标时,为了明确区分目标维度和统计指标,可以在它们之间用逗号分隔。
E3. 分组统计时,如果使用筛选条件,将在计算统计指标时过滤数据,如“客户 北京发货 订单数”。如果是对统计指标添加比较条件,则是在分组统计后再筛选结果,如“客户 订单数大于 5”。
E4. 整体分析数据时,也可能不设定分组目标维度,此时将对全部数据汇总统计,如“订单数”。这种情况下也可能添加筛选条件,如“调味品 商品数”,“北京发货 订单数”。
E5. 有 / 没有,为空 / 不为空,这种存在性判断的情况,不属于保留动词短语的情况,可以转换为对集合的计数判断,如不能用“没有员工的城市信息”,可以转换为“员工总数为 0 城市信息”;类似的还可以使用“产品数大于 3 生产商”。
E6. 聚合时,不要用“总订单数”这样把统计指标放在中间的表示方法,而应该用“订单数”。
F. 今天日期是 2025 年 12 月 8 日,请按上述要求转换下面给出的查询语句:修正语句中明显的错别字,如果查询不支持的,即违反了 A 类规则的报错,第一行输出“不支持”,不要重复语句本身,下方说明原因。对于其它类规则均提出建议,如果能正常转换的转换出来,第一行输出转换结果,如果有多种转换建议,分行列出;如果语句本身符合规则,保持不变,作为转换结果在第一行输出。在转换结果后面,根据用户的查询意图提供规则中类似的例句作为参考,列出参考例句。最后总结说明修改建议,总结中不要用规则编号,直接用文字说明规则。
人口 8 百万至 1 千万的诚实
输入后,Deepseek 就可以根据规则,把可能存在错误的查询语句转换为标准格式,并输出转换结果、参考例句、修改建议等信息:
人口 800 万至 1000 万 城市
参考例句:
- “人口 800 万至 1000 万 城市”
- “45 岁到 50 岁 雇员”
- “175 厘米至 180 厘米 员工”
总结说明修改建议:
1. 修正了错别字“诚实”为“城市”。
2. 数值区间中的单位需要统一且不能省略,将“8 百万”改为“800 万”,“1 千万”改为“1000 万”,并确保前后单位一致。
3. 按照规则,查询语句只需保留关键词,去掉虚词“的”。
如果 LLM 转换的结果有错误,可以通过调整规则描述或补充示例语句来修正。此外,还可结合具体使用习惯或面向的用户群体,在提示内容中增添更多相关信息。更可以通过迭代修改转换规则,不断优化交互效果,利用大语言模型提升汉语查询的使用体验。
