123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- """
- 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
|