feat:提示词约束

This commit is contained in:
雷雨
2025-10-23 16:23:19 +08:00
parent db76d6f7fb
commit c40e36a2ba
4 changed files with 27 additions and 48 deletions

View File

@@ -48,7 +48,7 @@ def create_vana():
"api_base": config('CHAT_MODEL_BASE_URL', default=''), "api_base": config('CHAT_MODEL_BASE_URL', default=''),
"model": config('CHAT_MODEL_NAME', default=''), "model": config('CHAT_MODEL_NAME', default=''),
'temperature':config('CHAT_MODEL_TEMPERATURE', default=0.7, cast=float), 'temperature':config('CHAT_MODEL_TEMPERATURE', default=0.7, cast=float),
'max_tokens':config('CHAT_MODEL_MAX_TOKEN', default=20000), 'max_tokens':config('CHAT_MODEL_MAX_TOKEN', default=5000),
}, },
) )

View File

@@ -63,12 +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-detail>
解析用户问题,识别并替换所有已知的等价短语: 解析用户问题,识别并替换所有已知的等价短语,将前面的短语换成后面得等价短语,:
** 数信部 -> 数字信息部 ** 数信部 -> 数字信息部
** 安质部 -> 安全质量部 ** 安质部 -> 安全质量部
例如:查询数信部有多少人->查询数字信息部有多少人
</rule-title> </rule-detail>
</rule> </rule>
<rule> <rule>
<rule-title>聚合与计算</rule-title> <rule-title>聚合与计算</rule-title>
@@ -77,8 +77,9 @@ template:
<rule-detail>使用了函数(如 COUNT(), CAST(), SUM())的字段,必须为其指定一个英文别名。</rule-detail> <rule-detail>使用了函数(如 COUNT(), CAST(), SUM())的字段,必须为其指定一个英文别名。</rule-detail>
<rule-detail>计算占比或百分比时,结果保留两位小数,并以 '%' 符号结尾。示例ROUND(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM table), 2) || '%' (PostgreSQL语法)</rule-detail> <rule-detail>计算占比或百分比时,结果保留两位小数,并以 '%' 符号结尾。示例ROUND(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM table), 2) || '%' (PostgreSQL语法)</rule-detail>
<rule-detail>若查询结果包含枚举字段(如 gender=1,2必须使用 CASE WHEN 语句将其转换为可读的标签。示例: SELECT CASE WHEN "gender" = '1' THEN '男' WHEN "gender" = '2' THEN '女' END AS "gender"</rule-detail> <rule-detail>若查询结果包含枚举字段(如 gender=1,2必须使用 CASE WHEN 语句将其转换为可读的标签。示例: SELECT CASE WHEN "gender" = '1' THEN '男' WHEN "gender" = '2' THEN '女' END AS "gender"</rule-detail>
<rule-detail>重点!重点!涉及查询orgs表时部门存在多层级需要递归查询。语法示例:SELECT "id" <rule-detail>重点!重点!重点!涉及查询orgs表时部门存在多层级必须递归查询。使用 start .. with 语法。递归语法示例:
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
WITH "name"||"shortname" LIKE '%xx中心%' 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"
</rule-detail> </rule-detail>

View File

@@ -182,6 +182,23 @@ org_and_attend_q_a = [
CONNECT BY PRIOR "id" = "parentid") AND ps."date_value" LIKE '2025-10%' AND ps."dr" = 0 AND p."dr" = 0 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 ORDER BY ps."date_value" DESC LIMIT 1000
''' '''
},{
"question": "10月迟到人数最多的部门",
"answer": '''
SELECT o."name" AS "部门名称", COUNT(DISTINCT ps."person_id") 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 ps."status" = '1006'
AND ps."date_value" LIKE '2025-10%'
AND ps."dr" = 0
AND o."dr" = 0
AND o."enable" = 1
AND o."code" LIKE '%CYJ%'
GROUP BY o."name"
ORDER BY COUNT(DISTINCT ps."person_id") DESC LIMIT 1
'''
} }
] ]

View File

@@ -1,32 +1,7 @@
question_and_answer = [ question_and_answer = [
{"question": "XX部有多少员工男女员工分别有多少",
"answer": '''
SELECT COUNT(*) AS "总人数",
SUM(CASE WHEN gender = '1' THEN 1 ELSE 0 END) AS "男员工数",
SUM(CASE WHEN gender = '2' THEN 1 ELSE 0 END) AS "女员工数"
FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p
WHERE p.internal_dept IN (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
WITH "name"||"shortname" LIKE '%XX部%'
CONNECT BY PRIOR "id" = "parentid"
)
AND p.dr = 0
LIMIT 1000;
'''
},
{
"question": "外部单位是联通下面有哪些员工",
"answer": '''
SELECT "id" AS "id",
"code" AS "工号",
"name" AS "姓名",
"external_unit" AS "外部单位"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database"
WHERE "external_unit" LIKE '%联通%' LIMIT 1000
'''
},
{ {
"question": "9月有多少哪些员工在休假", "question": "9月有多少哪些员工在休假",
"answer": ''' "answer": '''
@@ -362,21 +337,7 @@ question_and_answer = [
LIMIT 1000; LIMIT 1000;
''' '''
}, },
{
"question": "XX综合部女员工有多少",
"answer": '''
SELECT (SELECT COUNT(*)
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
WHERE 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"
)
AND p."gender" = '2'
AND p."dr" = 0
) AS "女员工数"
'''
},
{ {
"question": "XX中心今天各个处室在岗人员数量", "question": "XX中心今天各个处室在岗人员数量",
"answer": ''' "answer": '''