修复枚举对应错误,增加问答示例,优化提示词

This commit is contained in:
yujj128
2025-10-16 17:42:06 +08:00
parent 1b4be9a907
commit de705f04fd
2 changed files with 28 additions and 25 deletions

View File

@@ -244,7 +244,10 @@ class OpenAICompatibleLLM(VannaBase):
[{'role': 'system', 'content': sys_temp}, {'role': 'user', 'content': user_temp}], **kwargs) [{'role': 'system', 'content': sys_temp}, {'role': 'user', 'content': user_temp}], **kwargs)
llm_response = str(llm_response.strip()) llm_response = str(llm_response.strip())
logger.info(f"llm_response:{llm_response}") logger.info(f"llm_response:{llm_response}")
result = {"resp": orjson.loads(extract_nested_json(llm_response))} #优化中.......
result = extract_nested_json(llm_response)
logger.info(f"result:{result}")
result = {"resp": orjson.loads(result)}
logger.info(f"llm_response:{llm_response}") logger.info(f"llm_response:{llm_response}")
sql = check_and_get_sql(llm_response) sql = check_and_get_sql(llm_response)
logger.info(f"sql:{sql}") logger.info(f"sql:{sql}")

View File

@@ -1,6 +1,6 @@
question_and_answer = [ question_and_answer = [
{"question": "综合处有多少员工,男女员工分别有多少", {"question": "XX部有多少员工,男女员工分别有多少",
"answer": ''' "answer": '''
SELECT COUNT(*) AS "总人数", SELECT COUNT(*) AS "总人数",
SUM(CASE WHEN gender = '1' THEN 1 ELSE 0 END) AS "男员工数", SUM(CASE WHEN gender = '1' THEN 1 ELSE 0 END) AS "男员工数",
@@ -8,7 +8,7 @@ question_and_answer = [
FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p
WHERE p.internal_dept IN (SELECT "id" WHERE p.internal_dept IN (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
WITH "name"||"shortname" LIKE '%综合处%' WITH "name"||"shortname" LIKE '%XX部%'
CONNECT BY PRIOR "id" = "parentid" CONNECT BY PRIOR "id" = "parentid"
) )
AND p.dr = 0 AND p.dr = 0
@@ -192,13 +192,13 @@ question_and_answer = [
END LIMIT 1000 END LIMIT 1000
''' '''
}, { }, {
"question": "数信中心下有多少员工", "question": "XX中心下有多少员工",
"answer": ''' "answer": '''
select count(*) select count(*)
from YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database from YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database
where internal_dept in (SELECT "id" where internal_dept in (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
WITH "name"||"shortname" LIKE '%数信中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' WITH "name"||"shortname" LIKE '%XX中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid" CONNECT BY PRIOR "id" = "parentid"
) )
@@ -217,14 +217,14 @@ question_and_answer = [
''' '''
}, },
{ {
"question": "数信中心下各个处室分别有多少人", "question": "XX中心下各个处室分别有多少人",
"answer": ''' "answer": '''
SELECT o.name AS "处室名称", COUNT(p.id) AS "人数" SELECT o.name AS "处室名称", COUNT(p.id) AS "人数"
FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p
JOIN IUAP_APDOC_BASEDOC.org_orgs o ON p.internal_dept = o.id JOIN IUAP_APDOC_BASEDOC.org_orgs o ON p.internal_dept = o.id
WHERE p.internal_dept IN ( WHERE p.internal_dept IN (
SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs" SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH "name"||"shortname" LIKE '%数信中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' START WITH "name"||"shortname" LIKE '%XX中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid" CONNECT BY PRIOR "id" = "parentid"
) )
AND p.dr = 0 AND p.dr = 0
@@ -248,7 +248,7 @@ question_and_answer = [
''' '''
}, },
{ {
"question": "10月数信中心有哪些有员工请假", "question": "10月XX中心有哪些有员工请假",
"answer": ''' "answer": '''
SELECT p."id" AS "id", SELECT p."id" AS "id",
p."code" AS "工号", p."code" AS "工号",
@@ -262,7 +262,7 @@ question_and_answer = [
AND ps."date_value" LIKE '2025-10%' AND ps."date_value" LIKE '2025-10%'
and p.internal_dept in (SELECT "id" and p.internal_dept in (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
WITH "name" || "shortname" LIKE '%数信中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' WITH "name" || "shortname" LIKE '%XX中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid" CONNECT BY PRIOR "id" = "parentid"
) )
AND p."dr" = 0 AND p."dr" = 0
@@ -279,7 +279,7 @@ question_and_answer = [
''' '''
}, },
{ {
"question": "数信中心员工年龄段分布图", "question": "XX中心员工年龄段分布图",
"answer": ''' "answer": '''
SELECT SELECT
CASE CASE
@@ -301,10 +301,10 @@ question_and_answer = [
WHERE "parentid" IN ( WHERE "parentid" IN (
SELECT "id" SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
WHERE name || shortname LIKE '%数信中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' WHERE name || shortname LIKE '%XX中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
) OR id IN (SELECT "id" ) OR id IN (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
WHERE name || shortname LIKE '%数信中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%') WHERE name || shortname LIKE '%XX中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%')
) )
GROUP BY GROUP BY
CASE CASE
@@ -318,7 +318,7 @@ question_and_answer = [
ORDER BY "age_group" ASC LIMIT 1000 ORDER BY "age_group" ASC LIMIT 1000
''' '''
},{ },{
"question": "查询综合处下面的员工以及他们的年龄", "question": "查询XX部下面的员工以及他们的年龄",
"answer": ''' "answer": '''
SELECT p."id" AS "员工ID", SELECT p."id" AS "员工ID",
p."name" AS "姓名", p."name" AS "姓名",
@@ -331,7 +331,7 @@ question_and_answer = [
WHERE p."dr" = 0 WHERE p."dr" = 0
AND o."id" IN (SELECT "id" AND o."id" IN (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
WITH "name"||"shortname" LIKE '%综合处%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' WITH "name"||"shortname" LIKE '%XX部%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid") CONNECT BY PRIOR "id" = "parentid")
AND p."birthday" IS NOT NULL AND p."birthday" IS NOT NULL
AND p."birthday" != '' AND p."birthday" != ''
@@ -340,7 +340,7 @@ question_and_answer = [
''' '''
}, },
{ {
"question": "查询综合处下面的员工的平均年龄", "question": "查询XX部下面的员工的平均年龄",
"answer": ''' "answer": '''
SELECT ROUND(AVG(2025 - CAST(SUBSTR(p."birthday", 1, 4) AS INT)), 2) AS "平均年龄" SELECT ROUND(AVG(2025 - CAST(SUBSTR(p."birthday", 1, 4) AS INT)), 2) AS "平均年龄"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
@@ -348,7 +348,7 @@ question_and_answer = [
WHERE p."dr" = 0 WHERE p."dr" = 0
AND o."id" IN (SELECT "id" AND o."id" IN (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
WITH "name"||"shortname" LIKE '%综合处%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' WITH "name"||"shortname" LIKE '%XX部%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid") CONNECT BY PRIOR "id" = "parentid")
AND p."birthday" IS NOT NULL AND p."birthday" IS NOT NULL
AND p."birthday" != '' AND p."birthday" != ''
@@ -356,7 +356,7 @@ question_and_answer = [
''' '''
}, },
{ {
"question": "综合处有几个人,男员工,女员工分别有多少", "question": "XX部有几个人,男员工,女员工分别有多少",
"answer": ''' "answer": '''
SELECT COUNT(*) AS "总人数", SELECT COUNT(*) AS "总人数",
SUM(CASE WHEN p."gender" = '1' THEN 1 ELSE 0 END) AS "男员工数", SUM(CASE WHEN p."gender" = '1' THEN 1 ELSE 0 END) AS "男员工数",
@@ -365,7 +365,7 @@ question_and_answer = [
WHERE p."internal_dept" IN ( WHERE p."internal_dept" IN (
SELECT "id" SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH "name" LIKE '%综合处%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' START WITH "name" LIKE '%XX部%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid" CONNECT BY PRIOR "id" = "parentid"
) )
AND p."dr" = 0 AND p."dr" = 0
@@ -373,13 +373,13 @@ question_and_answer = [
''' '''
}, },
{ {
"question": "综合女员工有多少", "question": "XX综合女员工有多少",
"answer": ''' "answer": '''
SELECT (SELECT COUNT(*) SELECT (SELECT COUNT(*)
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
WHERE p."internal_dept" IN (SELECT "id" WHERE p."internal_dept" IN (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH "name"||"shortname" LIKE '%综合%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' START WITH "name"||"shortname" LIKE '%XX综合%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid" CONNECT BY PRIOR "id" = "parentid"
) )
AND p."gender" = '2' AND p."gender" = '2'
@@ -388,14 +388,14 @@ question_and_answer = [
''' '''
}, },
{ {
"question": "数信中心今天各个处室在岗人员数量", "question": "XX中心今天各个处室在岗人员数量",
"answer": ''' "answer": '''
SELECT o.name AS "处室名称", COUNT(p.id) AS "人数" SELECT o.name AS "处室名称", COUNT(p.id) AS "人数"
FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p
JOIN IUAP_APDOC_BASEDOC.org_orgs o ON p.internal_dept = o.id JOIN IUAP_APDOC_BASEDOC.org_orgs o ON p.internal_dept = o.id
WHERE p.internal_dept IN ( WHERE p.internal_dept IN (
SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs" SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH "name"||"shortname" LIKE '%数信中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' START WITH "name"||"shortname" LIKE '%XX中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid" CONNECT BY PRIOR "id" = "parentid"
) )
AND p.id IN (SELECT person_id FROM "YJOA_APPSERVICE_DB"."t_yj_person_status" WHERE status = '1001' AND date_value = TO_CHAR(SYSDATE, 'yyyy-MM-dd') AND dr = 0) AND p.id IN (SELECT person_id FROM "YJOA_APPSERVICE_DB"."t_yj_person_status" WHERE status = '1001' AND date_value = TO_CHAR(SYSDATE, 'yyyy-MM-dd') AND dr = 0)
@@ -406,17 +406,17 @@ question_and_answer = [
''' '''
}, },
{ {
"question": "数信中心下的综合管理处有多少人", "question": "XX中心下的XX管理处有多少人",
"answer": ''' "answer": '''
SELECT o.name AS "处室名称", COUNT(p.id) AS "人数" SELECT o.name AS "处室名称", COUNT(p.id) AS "人数"
FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p
JOIN IUAP_APDOC_BASEDOC.org_orgs o ON p.internal_dept = o.id JOIN IUAP_APDOC_BASEDOC.org_orgs o ON p.internal_dept = o.id
WHERE p.internal_dept IN ( WHERE p.internal_dept IN (
SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs" SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH "name"||"shortname" LIKE '%数信中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%' START WITH "name"||"shortname" LIKE '%XX中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid" CONNECT BY PRIOR "id" = "parentid"
) )
AND p.dr = 0 AND o.name LIKE '%综合管理处%' AND p.dr = 0 AND o.name LIKE '%XX管理处%'
GROUP BY o.name GROUP BY o.name
ORDER BY "人数" DESC ORDER BY "人数" DESC
LIMIT 1000 LIMIT 1000