prompt_template.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. """
  2. SQL生成提示词模板
  3. 基于控制性详细规划表(sde.kzxxxgh)和公告地块表(sde.ecgap_klyzy)的字段信息
  4. """
  5. PROMPT_TEMPLATE = """
  6. 请根据以下两个表的字段信息生成SQL查询语句:
  7. 1. 控制性详细规划表 (sde.kzxxxgh):
  8. - id: 主键ID
  9. - xzqmc: 所属区县(行政区代码)
  10. - xzqdm: 行政区代码(6位,前2位代表省,前4位代表市,前6位代表区县)
  11. - dymc: 单元名称
  12. - yddm: 用地代码
  13. - ydxz: 用地性质
  14. - ydmj: 用地面积(单位:公顷)
  15. - pfwh: 批复文号
  16. - pfsj: 批复时间
  17. - rjlsx: 容积率上限
  18. - rjlxx: 容积率下限
  19. - jzmdsx: 建筑密度上限
  20. - jzmdxx: 建筑密度下限
  21. - jzgdsx: 建筑高度上限
  22. - jzgdxx: 建筑高度下限
  23. - ldlxx: 绿地率下限
  24. - ldlxx: 绿地率下限
  25. - shape: 地块图形wkt
  26. - dkcsd: 地块成熟度
  27. - ghfhd: 规划符合度
  28. - dkgzd: 地块规整度
  29. - jtblx: 交通便利性
  30. - cyppd: 产业匹配度
  31. 2. 公告地块表 (sde.ecgap_klyzy):
  32. - id: 主键ID
  33. - xzqmc: 所属区县(行政区代码)
  34. - xzqdm: 行政区代码(6位,前2位代表省,前4位代表市,前6位代表区县)
  35. - dkmc: 地块名称
  36. - dkid: 地块id
  37. - address: 土地坐落
  38. - dkmj: 土地面积(单位:亩)
  39. - tdyt: 土地用途
  40. - shape: 地块图形wkt
  41. - sfsj: 是否上架(1表示已上架,0表示未上架)
  42. - dkcsd: 地块成熟度
  43. - ghfhd: 规划符合度
  44. - dkgzd: 地块规整度
  45. - jtblx: 交通便利性
  46. - cyppd: 产业匹配度
  47. 重要注意事项:
  48. 1. 只准生成查询的SQL语句,不可生成任何修改数据的语句,包括但不限于:
  49. - UPDATE
  50. - DELETE
  51. - INSERT
  52. - TRUNCATE
  53. - DROP
  54. - ALTER
  55. 等修改数据的操作
  56. 2. 所有查询必须包含 shape is not null 条件,以过滤掉所有空图形数据
  57. 3. 面积字段和单位说明:
  58. - 控制性详细规划表(sde.kzxxxgh):使用 ydmj 字段,单位为公顷
  59. - 公告地块表(sde.ecgap_klyzy):使用 dkmj 字段,单位为亩
  60. - 注意单位换算:1公顷 = 15亩
  61. 4. 查询字段限制:
  62. - SELECT 语句中只能查询 id 字段
  63. - 不允许使用 SELECT * 或其他字段
  64. - 示例:SELECT id FROM table WHERE condition;
  65. 5. 使用LIMIT进行数量限制,具体规则如下:
  66. - 如果用户问题中指定了数量(如3宗、5块),则SQL中使用对应的LIMIT值
  67. - 如果未限定数量或限定数量大于5,则SQL中使用LIMIT 5
  68. - 如果用户问题涉及到最大、最小值查询(如最大面积、最小高度等),则根据相关字段排序后使用LIMIT 1
  69. 6. 评分排序规则:
  70. - 评分字段包括:地块成熟度(dkcsd)、规划符合度(ghfhd)、地块规整度(dkgzd)、交通便利性(jtblx)、产业匹配度(cyppd)
  71. - 当需要根据综合评分排序时,使用这些字段的总和进行倒序排序
  72. - 示例:ORDER BY (dkcsd + ghfhd + dkgzd + jtblx + cyppd) DESC
  73. 7. 其他注意事项:
  74. - 确保SQL语句的语法正确性
  75. - 注意字段名称的准确性
  76. - 合理使用索引字段(如id、xzqmc等)
  77. - 对于空间查询,注意使用正确的空间函数和坐标系
  78. 8. 附近地块查询:
  79. - 如果用户问题涉及"附近地块"并且提供了经纬度坐标点(如"查询某点附近的地块"),则SQL中需使用st_distance函数计算地块与指定点的距离。
  80. - 距离条件为小于10公里(10000米)。
  81. - 地块的shape字段和指定的经纬度点都需转换为geography类型,坐标系为4490。
  82. - 示例:st_distance(st_geometryfromtext('POINT (经度 纬度)', 4490)::geography,shape::geography < 10000
  83. 历史对话和相似示例:
  84. {chat_history}
  85. 用户问题:{question}
  86. 请根据以上字段信息和注意事项,生成符合要求的SQL查询语句。在生成SQL时,请确保:
  87. 1. 只使用SELECT语句
  88. 2. 只查询id字段
  89. 3. 包含shape is not null条件
  90. 4. 正确使用面积字段和单位
  91. 5. 使用LIMIT进行数量限制,具体规则如下:
  92. - 如果用户问题中指定了数量(如3宗、5块),则SQL中使用对应的LIMIT值
  93. - 如果未限定数量或限定数量大于5,则SQL中使用LIMIT 5
  94. - 如果用户问题涉及到最大、最小值查询(如最大面积、最小高度等),则根据相关字段排序后使用LIMIT 1
  95. 6. 遵循其他注意事项
  96. 请按照以下格式输出,每个部分之间用空行分隔:
  97. #### Question: 分析用户问题
  98. #### Thought: 思考查询逻辑
  99. #### Plan: 制定查询计划
  100. #### SQL: 生成SQL代码
  101. ```sql
  102. SELECT id FROM table
  103. WHERE condition
  104. LIMIT 5;
  105. ```
  106. 请确保SQL语句是完整且可执行的,并且SQL代码块是独立的部分。"""
  107. def get_prompt():
  108. """
  109. 获取提示词模板
  110. """
  111. return PROMPT_TEMPLATE