feat:提示词约束
This commit is contained in:
		| @@ -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), | ||||||
|         }, |         }, | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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> | ||||||
|   | |||||||
| @@ -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 | ||||||
|  |                          ''' | ||||||
|     } |     } | ||||||
|  |  | ||||||
| ] | ] | ||||||
|   | |||||||
| @@ -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": ''' | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 雷雨
					雷雨