feat:增加强制提示词,增加新的问答示例
This commit is contained in:
@@ -63,6 +63,12 @@ template:
|
|||||||
- **默认行为**:若提问未指定排序,**默认按时间字段降序排序**(即最新数据在前)。
|
- **默认行为**:若提问未指定排序,**默认按时间字段降序排序**(即最新数据在前)。
|
||||||
- **格式化**:若提问要求时间/日期/年月/年,且未指定格式,则分别格式化为 'yyyy-MM-dd HH:mm:ss' / 'yyyy-MM-dd' / 'yyyy-MM' / 'yyyy',语法需适配当前数据库引擎。(达梦数据库如果时间字段是varchar类型也可以)
|
- **格式化**:若提问要求时间/日期/年月/年,且未指定格式,则分别格式化为 'yyyy-MM-dd HH:mm:ss' / 'yyyy-MM-dd' / 'yyyy-MM' / 'yyyy',语法需适配当前数据库引擎。(达梦数据库如果时间字段是varchar类型也可以)
|
||||||
</rule-detail>
|
</rule-detail>
|
||||||
|
<rule-title>
|
||||||
|
解析用户问题,识别并替换所有已知的等价短语:
|
||||||
|
** 数信部 -> 数字信息部
|
||||||
|
** 安质部 -> 安全质量部
|
||||||
|
|
||||||
|
</rule-title>
|
||||||
</rule>
|
</rule>
|
||||||
<rule>
|
<rule>
|
||||||
<rule-title>聚合与计算</rule-title>
|
<rule-title>聚合与计算</rule-title>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from service.cus_vanna_srevice import CustomVanna
|
from service.cus_vanna_srevice import CustomVanna
|
||||||
from util import train_ddl
|
from util import train_ddl
|
||||||
from util import q_and_a_dict
|
from util import q_and_a_dict,q_a_next
|
||||||
|
import random
|
||||||
table_ddls = [
|
table_ddls = [
|
||||||
train_ddl.person_database_ddl,train_ddl.person_status_ddl,
|
train_ddl.person_database_ddl,train_ddl.person_status_ddl,
|
||||||
train_ddl.person_attendance_ddl,train_ddl.person_ac_area,
|
train_ddl.person_attendance_ddl,train_ddl.person_ac_area,
|
||||||
@@ -20,6 +21,10 @@ def add_ddl(vn: CustomVanna):
|
|||||||
def add_documentation(vn: CustomVanna):
|
def add_documentation(vn: CustomVanna):
|
||||||
for doc in list_documentions:
|
for doc in list_documentions:
|
||||||
vn.add_documentation(doc)
|
vn.add_documentation(doc)
|
||||||
for d in q_and_a_dict.question_and_answer:
|
dd=[]
|
||||||
|
dd.extend(q_and_a_dict.question_and_answer)
|
||||||
|
##dd.extend(q_a_next.org_and_attend_q_a)
|
||||||
|
random.shuffle(dd)
|
||||||
|
for d in dd:
|
||||||
vn.add_question_sql(question=d['question'], sql=d['answer'])
|
vn.add_question_sql(question=d['question'], sql=d['answer'])
|
||||||
|
|
||||||
|
|||||||
187
util/q_a_next.py
Normal file
187
util/q_a_next.py
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
org_and_attend_q_a = [
|
||||||
|
{
|
||||||
|
"question": "XX中心员工在林芝工作的天数",
|
||||||
|
"answer": '''
|
||||||
|
SELECT DISTINCT p."code" AS "工号",
|
||||||
|
p."name" AS "姓名",
|
||||||
|
|
||||||
|
COUNT(DISTINCT TO_CHAR(a."attendance_time", 'yyyy-MM-dd')) AS "在林芝工作天数"
|
||||||
|
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
|
||||||
|
LEFT JOIN "YJOA_APPSERVICE_DB"."t_yj_person_attendance" a ON p."code" = a."person_id"
|
||||||
|
LEFT JOIN "YJOA_APPSERVICE_DB"."t_yj_person_ac_area" ac
|
||||||
|
ON a."access_control_point" = ac."ac_point"
|
||||||
|
WHERE p."dr" = 0
|
||||||
|
AND a."dr" = 0
|
||||||
|
AND ac."region" = 5
|
||||||
|
AND p."internal_dept" in
|
||||||
|
(SELECT "id"
|
||||||
|
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
|
||||||
|
WITH "name"||"shortname" LIKE '%xx中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
|
||||||
|
CONNECT BY PRIOR "id" = "parentid")
|
||||||
|
GROUP BY p."code", p."name"
|
||||||
|
ORDER BY "在林芝工作天数" DESC LIMIT 1000
|
||||||
|
'''
|
||||||
|
}, {
|
||||||
|
"question": "xx中心10月有哪些人迟到/早退",
|
||||||
|
"answer": '''
|
||||||
|
SELECT p."id" AS "id",
|
||||||
|
p."code" AS "code",
|
||||||
|
p."name" AS "name",
|
||||||
|
CASE WHEN ps."status" = '1006' THEN '迟到/早退' ELSE ps."status" END AS "status"
|
||||||
|
FROM "YJOA_APPSERVICE_DB"."t_yj_person_status" ps
|
||||||
|
INNER JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
|
||||||
|
ON p."code" = ps."person_id"
|
||||||
|
WHERE ps."status" = '1006'
|
||||||
|
AND ps."date_value" LIKE '2025-10%'
|
||||||
|
AND ps."dr" = 0
|
||||||
|
AND p."dr" = 0
|
||||||
|
AND p."internal_dept" IN (SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
|
||||||
|
WITH "name" || "shortname" LIKE '%xx中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
|
||||||
|
CONNECT BY PRIOR "id" = "parentid")
|
||||||
|
ORDER BY ps."date_value" DESC LIMIT 1000
|
||||||
|
'''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "xx中心10月有哪些人出差",
|
||||||
|
"answer": '''
|
||||||
|
SELECT p."id" AS "id",
|
||||||
|
p."code" AS "code",
|
||||||
|
p."name" AS "name",
|
||||||
|
CASE WHEN ps."status" = '1002' THEN '出差' ELSE ps."status" END AS "status"
|
||||||
|
FROM "YJOA_APPSERVICE_DB"."t_yj_person_status" ps
|
||||||
|
INNER JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
|
||||||
|
ON p."code" = ps."person_id"
|
||||||
|
WHERE ps."status" = '1002'
|
||||||
|
AND ps."date_value" LIKE '2025-10%'
|
||||||
|
AND ps."dr" = 0
|
||||||
|
AND p."dr" = 0
|
||||||
|
AND p."internal_dept" IN (SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
|
||||||
|
WITH "name" || "shortname" LIKE '%xx中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
|
||||||
|
CONNECT BY PRIOR "id" = "parentid")
|
||||||
|
ORDER BY ps."date_value" DESC LIMIT 1000
|
||||||
|
'''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "xx中心10月有哪些人旷工",
|
||||||
|
"answer": '''
|
||||||
|
SELECT p."id" AS "id",
|
||||||
|
p."code" AS "code",
|
||||||
|
p."name" AS "name",
|
||||||
|
CASE WHEN ps."status" = '1002' THEN '旷工' ELSE ps."status" END AS "status"
|
||||||
|
FROM "YJOA_APPSERVICE_DB"."t_yj_person_status" ps
|
||||||
|
INNER JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
|
||||||
|
ON p."code" = ps."person_id"
|
||||||
|
WHERE ps."status" = '1005'
|
||||||
|
AND ps."date_value" LIKE '2025-10%'
|
||||||
|
AND ps."dr" = 0
|
||||||
|
AND p."dr" = 0
|
||||||
|
AND p."internal_dept" IN (SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
|
||||||
|
WITH "name" || "shortname" LIKE '%xx中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
|
||||||
|
CONNECT BY PRIOR "id" = "parentid")
|
||||||
|
ORDER BY ps."date_value" DESC LIMIT 1000
|
||||||
|
'''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "xx中心10月有哪些人请假",
|
||||||
|
"answer": '''
|
||||||
|
SELECT p."id" AS "id",
|
||||||
|
p."code" AS "code",
|
||||||
|
p."name" AS "name",
|
||||||
|
CASE WHEN ps."status" = '1003' THEN '请假' ELSE ps."status" END AS "status"
|
||||||
|
FROM "YJOA_APPSERVICE_DB"."t_yj_person_status" ps
|
||||||
|
INNER JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
|
||||||
|
ON p."code" = ps."person_id"
|
||||||
|
WHERE ps."status" = '1005'
|
||||||
|
AND ps."date_value" LIKE '2025-10%'
|
||||||
|
AND ps."dr" = 0
|
||||||
|
AND p."dr" = 0
|
||||||
|
AND p."internal_dept" IN (SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
|
||||||
|
WITH "name" || "shortname" LIKE '%xx中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
|
||||||
|
CONNECT BY PRIOR "id" = "parentid")
|
||||||
|
ORDER BY ps."date_value" DESC LIMIT 1000
|
||||||
|
'''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "xx中心,9月迟到次数多前三是哪几个员工",
|
||||||
|
"answer": '''
|
||||||
|
SELECT p.name AS "employee_name",
|
||||||
|
p.code AS "employee_code",
|
||||||
|
o.name AS "department_name",
|
||||||
|
COUNT(ps.id) AS "late_count"
|
||||||
|
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
|
||||||
|
JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o ON p.internal_dept = o.id
|
||||||
|
JOIN "YJOA_APPSERVICE_DB"."t_yj_person_status" ps ON p.id = ps.person_id
|
||||||
|
WHERE p.dr = 0
|
||||||
|
AND ps.dr = 0
|
||||||
|
AND ps.status = '1006'
|
||||||
|
AND ps.date_value LIKE '2025-09%'
|
||||||
|
AND o.id IN (SELECT id FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
|
||||||
|
WITH (name LIKE '%xx中心%' OR shortname LIKE '%xx中心%') AND dr=0 AND enable=1
|
||||||
|
CONNECT BY PRIOR id = parentid)
|
||||||
|
GROUP BY p.name, p.code, o.name
|
||||||
|
ORDER BY "late_count" DESC LIMIT 3
|
||||||
|
'''
|
||||||
|
}, {
|
||||||
|
"question": "xx中心员工10月打卡记录查询",
|
||||||
|
"answer": '''
|
||||||
|
SELECT a."person_name" AS "person_name",
|
||||||
|
p."code" AS "employee_code",
|
||||||
|
a."attendance_time" AS "attendance_time",
|
||||||
|
a."attendance_address" AS "attendance_address",
|
||||||
|
CASE
|
||||||
|
WHEN a."status" = 1 THEN '在岗'
|
||||||
|
WHEN a."status" = 2 THEN '出差'
|
||||||
|
WHEN a."status" = 3
|
||||||
|
THEN '休假' END AS "status_desc",
|
||||||
|
CASE
|
||||||
|
WHEN a."enter_or_exit" = 1 THEN '进'
|
||||||
|
WHEN a."enter_or_exit" = 2
|
||||||
|
THEN '出' END AS "entry_exit",
|
||||||
|
o."name" AS "department_name"
|
||||||
|
FROM "YJOA_APPSERVICE_DB"."t_yj_person_attendance" a
|
||||||
|
JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p ON a."person_id" = p."code"
|
||||||
|
JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o ON p."internal_dept" = o."id"
|
||||||
|
WHERE a."dr" = 0
|
||||||
|
AND p."dr" = 0
|
||||||
|
AND a."attendance_time" >= '2025-10-01'
|
||||||
|
AND a."attendance_time" < '2025-11-01'
|
||||||
|
AND o."id" IN (SELECT o2."id" FROM "IUAP_APDOC_BASEDOC"."org_orgs" o2
|
||||||
|
START WITH (o2."name" LIKE '%xx中心%'
|
||||||
|
OR o2."shortname" LIKE '%xx中心%')
|
||||||
|
AND o2."dr" = 0
|
||||||
|
AND o2."enable" = 1
|
||||||
|
CONNECT BY PRIOR o2."id" = o2."parentid")
|
||||||
|
ORDER BY a."attendance_time" DESC LIMIT 1000
|
||||||
|
'''
|
||||||
|
}, {
|
||||||
|
"question": "xx中心员工10月考勤查询",
|
||||||
|
"answer": '''
|
||||||
|
SELECT p."code" AS "工号",
|
||||||
|
p."name" AS "姓名",
|
||||||
|
o."name" AS "部门名称",
|
||||||
|
ps."date_value" AS "日期",
|
||||||
|
CASE
|
||||||
|
WHEN ps."status" = '1001' THEN '在岗'
|
||||||
|
WHEN ps."status" = '1002' THEN '出差'
|
||||||
|
WHEN ps."status" = '1003' THEN '休假,请假'
|
||||||
|
WHEN ps."status" = '1005' THEN '旷工'
|
||||||
|
WHEN ps."status" = '1006' THEN '迟到,早退'
|
||||||
|
WHEN ps."status" = '1007' THEN '休息日'
|
||||||
|
WHEN ps."status" = '4001' THEN 'am在岗pm缺勤'
|
||||||
|
WHEN ps."status" = '4002' THEN 'am缺勤pm在岗'
|
||||||
|
WHEN ps."status" = '6001' THEN 'am在岗pm早退'
|
||||||
|
WHEN ps."status" = '6002' THEN 'am迟到pm在岗'
|
||||||
|
WHEN ps."status" = '6004' THEN 'am迟到pm缺勤'
|
||||||
|
WHEN ps."status" = '4006' THEN 'am缺勤pm早退'
|
||||||
|
ELSE ps."status" END AS "人员状态"
|
||||||
|
FROM "YJOA_APPSERVICE_DB"."t_yj_person_status" ps
|
||||||
|
JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p ON ps."person_id" = p."code"
|
||||||
|
JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o ON p."internal_dept" = o."id"
|
||||||
|
WHERE o."id" IN (SELECT id FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
|
||||||
|
WITH ("name" LIKE '%xx中心%' OR "shortname" LIKE '%xx中心%') AND "enable" = 1 AND "dr" = 0 AND "code" LIKE '%CYJ%'
|
||||||
|
CONNECT BY PRIOR "id" = "parentid") AND ps."date_value" LIKE '2025-10%' AND ps."dr" = 0 AND p."dr" = 0
|
||||||
|
ORDER BY ps."date_value" DESC LIMIT 1000
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
@@ -451,29 +451,7 @@ question_and_answer = [
|
|||||||
LIMIT 1
|
LIMIT 1
|
||||||
'''
|
'''
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"question": "张三今天早上9点半之前,今天早上0点之后,有打卡记录吗",
|
|
||||||
"answer": '''
|
|
||||||
SELECT a."person_name" AS "姓名",
|
|
||||||
a."attendance_time" AS "考勤时间",
|
|
||||||
a."attendance_address" AS "考勤地址",
|
|
||||||
CASE
|
|
||||||
WHEN a."status" = 1 THEN '在岗'
|
|
||||||
WHEN a."status" = 2 THEN '出差'
|
|
||||||
WHEN a."status" = 3 THEN '休假'
|
|
||||||
END AS "状态",
|
|
||||||
CASE
|
|
||||||
WHEN a."enter_or_exit" = 1 THEN '进'
|
|
||||||
WHEN a."enter_or_exit" = 2 THEN '出'
|
|
||||||
END AS "进出类型"
|
|
||||||
FROM "YJOA_APPSERVICE_DB"."t_yj_person_attendance" a
|
|
||||||
WHERE a."person_name" = '张三'
|
|
||||||
AND a."attendance_time" >= '2025-10-16 00:00:00'
|
|
||||||
AND a."attendance_time" < '2025-10-16 09:30:00'
|
|
||||||
AND a."dr" = 0
|
|
||||||
ORDER BY a."attendance_time" DESC LIMIT 1000
|
|
||||||
'''
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"question": "XX中心正式人员有多少,各个处室有多少?",
|
"question": "XX中心正式人员有多少,各个处室有多少?",
|
||||||
"answer": '''
|
"answer": '''
|
||||||
|
|||||||
@@ -7,11 +7,7 @@ train_document='''
|
|||||||
查询单位时,通过orgs表查询,且需要基于parentID查询递归查询单位下的子单位;
|
查询单位时,通过orgs表查询,且需要基于parentID查询递归查询单位下的子单位;
|
||||||
查询内部单位时,则可以直接查询人员信息表,通过like模糊查询;
|
查询内部单位时,则可以直接查询人员信息表,通过like模糊查询;
|
||||||
没有明确说明查询外部单位,都默认查询通过orgs查询单位;
|
没有明确说明查询外部单位,都默认查询通过orgs查询单位;
|
||||||
数信中心和数信部并非同一个部门,注意区分,不要混淆
|
|
||||||
数信中心下还有多个部门,这些部门里的人员也隶属于数信中心
|
|
||||||
根据部门名称查询部门时除了全称name,简称shortname也重要信息
|
根据部门名称查询部门时除了全称name,简称shortname也重要信息
|
||||||
数信部是简称
|
|
||||||
部门表org_orgs中的level字段 {1:公司,2:一级部门,3:二级部门.....}
|
|
||||||
internal_dept和internal_unit是部门编号不是名称,注意区分
|
internal_dept和internal_unit是部门编号不是名称,注意区分
|
||||||
查询部门信息时尽量使用internal_dept而非internal_unit<UNK>
|
查询部门信息时尽量使用internal_dept而非internal_unit<UNK>
|
||||||
'''
|
'''
|
||||||
|
|||||||
Reference in New Issue
Block a user