""" SQL生成提示词模板 基于控制性详细规划表(sde.kzxxxgh)和公告地块表(sde.ecgap_klyzy)的字段信息 """ PROMPT_TEMPLATE = """ 请根据以下两个表的字段信息生成SQL查询语句: 1. 控制性详细规划表 (sde.kzxxxgh): - id: 主键ID - xzqmc: 所属区县(行政区代码) - xzqdm: 行政区代码(6位,前2位代表省,前4位代表市,前6位代表区县) - dymc: 单元名称 - yddm: 用地代码 - ydxz: 用地性质 - ydmj: 用地面积(单位:公顷) - pfwh: 批复文号 - pfsj: 批复时间 - rjlsx: 容积率上限 - rjlxx: 容积率下限 - jzmdsx: 建筑密度上限 - jzmdxx: 建筑密度下限 - jzgdsx: 建筑高度上限 - jzgdxx: 建筑高度下限 - ldlxx: 绿地率下限 - ldlxx: 绿地率下限 - shape: 地块图形wkt - dkcsd: 地块成熟度 - ghfhd: 规划符合度 - dkgzd: 地块规整度 - jtblx: 交通便利性 - cyppd: 产业匹配度 2. 公告地块表 (sde.ecgap_klyzy): - id: 主键ID - xzqmc: 所属区县(行政区代码) - xzqdm: 行政区代码(6位,前2位代表省,前4位代表市,前6位代表区县) - dkmc: 地块名称 - dkid: 地块id - address: 土地坐落 - dkmj: 土地面积(单位:亩) - tdyt: 土地用途 - shape: 地块图形wkt - sfsj: 是否上架(1表示已上架,0表示未上架) - dkcsd: 地块成熟度 - ghfhd: 规划符合度 - dkgzd: 地块规整度 - jtblx: 交通便利性 - cyppd: 产业匹配度 重要注意事项: 1. 只准生成查询的SQL语句,不可生成任何修改数据的语句,包括但不限于: - UPDATE - DELETE - INSERT - TRUNCATE - DROP - ALTER 等修改数据的操作 2. 所有查询必须包含 shape is not null 条件,以过滤掉所有空图形数据 3. 面积字段和单位说明: - 控制性详细规划表(sde.kzxxxgh):使用 ydmj 字段,单位为公顷 - 公告地块表(sde.ecgap_klyzy):使用 dkmj 字段,单位为亩 - 注意单位换算:1公顷 = 15亩 4. 查询字段限制: - SELECT 语句中只能查询 id 字段 - 不允许使用 SELECT * 或其他字段 - 示例:SELECT id FROM table WHERE condition; 5. 使用LIMIT进行数量限制,具体规则如下: - 如果用户问题中指定了数量(如3宗、5块),则SQL中使用对应的LIMIT值 - 如果未限定数量或限定数量大于5,则SQL中使用LIMIT 5 - 如果用户问题涉及到最大、最小值查询(如最大面积、最小高度等),则根据相关字段排序后使用LIMIT 1 6. 评分排序规则: - 评分字段包括:地块成熟度(dkcsd)、规划符合度(ghfhd)、地块规整度(dkgzd)、交通便利性(jtblx)、产业匹配度(cyppd) - 当需要根据综合评分排序时,使用这些字段的总和进行倒序排序 - 示例:ORDER BY (dkcsd + ghfhd + dkgzd + jtblx + cyppd) DESC 7. 其他注意事项: - 确保SQL语句的语法正确性 - 注意字段名称的准确性 - 合理使用索引字段(如id、xzqmc等) - 对于空间查询,注意使用正确的空间函数和坐标系 8. 附近地块查询: - 如果用户问题涉及"附近地块"并且提供了经纬度坐标点(如"查询某点附近的地块"),则SQL中需使用st_distance函数计算地块与指定点的距离。 - 距离条件为小于10公里(10000米)。 - 地块的shape字段和指定的经纬度点都需转换为geography类型,坐标系为4490。 - 示例:st_distance(st_geometryfromtext('POINT (经度 纬度)', 4490)::geography,shape::geography < 10000 历史对话和相似示例: {chat_history} 用户问题:{question} 请根据以上字段信息和注意事项,生成符合要求的SQL查询语句。在生成SQL时,请确保: 1. 只使用SELECT语句 2. 只查询id字段 3. 包含shape is not null条件 4. 正确使用面积字段和单位 5. 使用LIMIT进行数量限制,具体规则如下: - 如果用户问题中指定了数量(如3宗、5块),则SQL中使用对应的LIMIT值 - 如果未限定数量或限定数量大于5,则SQL中使用LIMIT 5 - 如果用户问题涉及到最大、最小值查询(如最大面积、最小高度等),则根据相关字段排序后使用LIMIT 1 6. 遵循其他注意事项 请按照以下格式输出,每个部分之间用空行分隔: #### Question: 分析用户问题 #### Thought: 思考查询逻辑 #### Plan: 制定查询计划 #### SQL: 生成SQL代码 ```sql SELECT id FROM table WHERE condition LIMIT 5; ``` 请确保SQL语句是完整且可执行的,并且SQL代码块是独立的部分。""" def get_prompt(): """ 获取提示词模板 """ return PROMPT_TEMPLATE