|
@@ -32,55 +32,40 @@ class LandSiteSelectionSqlAgent(BaseSubAgent):
|
|
|
self.SubAgent_Summary_Prompt = "通过查询数据库,检索数据库得到的信息为:\n{obs}\n"
|
|
|
self.SubAgent_PROMPT = """你是一个PostgreSQL专家,当前需要根据用户问题和上下文,生成语法正确的PostgreSQL查询语句。'
|
|
|
#数据库表的表名和表结构如下:
|
|
|
- `sde.ecgap_klyzy`(
|
|
|
- `xzqmc` COMMENTS '所属区县(行政区代码) 用来指定区 或者 县',
|
|
|
+ `dlgis.gcs330000g2007_kzxxxgh_kgdk_kgy_dsgj`(
|
|
|
+ `objectid` COMMENTS '主键ID',
|
|
|
+ `xzqmc` COMMENTS '所属区县(行政区代码) 用来指定‘区’或者‘县’',
|
|
|
`xzqdm` COMMENTS '行政区代码 6位,前2位代表省,前4位代表市,前6位代表区县',
|
|
|
- `dkmc` COMMENTS '地块名称',
|
|
|
- `dkid` COMMENTS '地块id',
|
|
|
- `address` COMMENTS '土地坐落',
|
|
|
- `dkmj` COMMENTS '土地面积,单位亩',
|
|
|
- `tdyt` COMMENTS '土地规划用途',
|
|
|
+ `dymc` COMMENTS '地块名称',
|
|
|
+ `yddm` COMMENTS '用地代码',
|
|
|
+ `ydxz` COMMENTS '用地性质(土地用途)',
|
|
|
+ `ydmj` COMMENTS '用地面积 单位:公顷',
|
|
|
+ `pfwh` COMMENTS '批复文号',
|
|
|
+ `pfsj` COMMENTS '批复时间',
|
|
|
+ `rjlsx` COMMENTS '容积率上限',
|
|
|
+ `rjlxx` COMMENTS '容积率下限',
|
|
|
+ `jzmdsx` COMMENTS '建筑密度上限',
|
|
|
+ `jzmdxx` COMMENTS '建筑密度下限',
|
|
|
+ `jzgdsx` COMMENTS '建筑高度上限',
|
|
|
+ `jzgdxx` COMMENTS '建筑高度下限',
|
|
|
+ `ldlsx` COMMENTS '绿地率上限',
|
|
|
+ `ldlxx` COMMENTS '绿地率下限',
|
|
|
`shape` COMMENTS '地块图形wkt',
|
|
|
- `sfsj` COMMENTS '是否上架 1表示已上架,0表示未上架'
|
|
|
- )
|
|
|
-
|
|
|
+ )'
|
|
|
|
|
|
有几个注意事项:
|
|
|
- 注意0:请仔细区分"去年","今年","N年前","近三年"等时间关键词,必须使用to_char(transaction_sold_time,'yyyy') as nf,具体去年、今年等使用to_char(CURRENT_DATE - INTERVAL '1 year', 'YYYY')、to_char(CURRENT_DATE, 'YYYY'),如果提到了近三年、近五年时候查询是请使用to_char(transaction_sold_time,'yyyy') > to_char(CURRENT_DATE - INTERVAL '3 year', 'YYYY')、to_char(transaction_sold_time,'yyyy') > to_char(CURRENT_DATE - INTERVAL '5 year', 'YYYY');
|
|
|
- 注意1: 统计面积时候,无指定单位的情况下,请默认转换为亩并四舍五入成整数,平方米转换为亩请乘以0.0015
|
|
|
+ 注意1: 统计面积时候,无指定单位的情况下,请默认转换为公顷,平方米转换公顷请乘以0.0001,亩转换为公顷请乘以0.0667
|
|
|
注意2: 查询地区条件时,区县为**时请使用 xzqmc 字段。省为**时请先将行政区名称转换为行政区代码,使用xzqdm字段的前2位进行模糊查询,市为**时请先将行政区名称转换为行政区代码,使用xzqdm字段的前4位进行模糊查询
|
|
|
- 注意3: 计算百分比之类的数值时,需要使用round函数保留两位小数
|
|
|
- 注意4: 使用 order by 进行排序时。必须使用 nulls last 确保 null值不会对排序产生影响,使用方法如下: order by xxxx desc nulls last 或者 order by xxxx nulls last
|
|
|
- 注意5: 当用户问题中的面积等于不是一个确定值的时候,如‘面积为xx亩左右’或‘面积为xx平方米左右’, 需要条件中添加 abs(dkmj - xx) <= 5, 将面积差控制在5亩之内。使用 ‘order by abs(dkmj - xx) nulls last’ 来进行排序
|
|
|
- 注意5: 当用户问题中的面积是一个确定值的时候,如‘面积为xx亩’或‘面积为xx平方米’, 需要条件中添加 abs(dkmj - xx) <= 5, 将面积差控制在5亩之内。使用 ‘order by abs(dkmj - xx) nulls last’ 来进行排序
|
|
|
- 注意6: 查询出地块。必须要对dkmj 进行desc排序。查询地块有数量限制时,比如'1宗','一宗','1块',使用limit 1语句;未限定时,只查询10宗,使用limit 10语句
|
|
|
- 注意7: 问题中设计具体的地点时,需要使用round(st_distance(st_geometryfromtext('具体地点的wkt', 4528), st_transform(shape, 4528))::numeric,0)获取其distance, 如果问题未指定范围则使用 distance <= 5000 来限制在地点5公里内,并对其排序
|
|
|
- 注意8: 当问题中提及周边分析的条件时,不需要将其转换为查询条件,比如交通便利,离港口码头近,人口等
|
|
|
- 注意9: 生成sql时,只对涉及表结构中的字段进行条件设置,不可生成不在表字段列表中的查询条件,不可生成任何不在表字段中的条件,比如周边5公里有什么设施
|
|
|
- 注意10: 生成sql时,必须使用 st_astext(st_centroid(shape)) as center_wkt
|
|
|
- 注意11: 查询语句必须包含 id, dkid, xzqmc, dkmc, address, dkmj, tdyt, st_astext(st_centroid(shape)) as center_wkt 这几个字段
|
|
|
- 注意12: 只准生成查询 的sql 语句,不可生成任何 修改数据的语句, 比如:update, delete, insert, truncate 等
|
|
|
- 注意14:当用户问题中的土地用途是"工业用地"时,工业用地属于土地用途大类,需要转换成对应的土地用途小类,使用in操作符进行查询
|
|
|
- 注意15:当用户问题中的土地用途是"城镇村道路用地"时,城镇村道路用地属于土地用途小类,使用=操作符进行查询
|
|
|
- 注意16:以下是数据中的土地用途大类
|
|
|
- 道路用地:包含以下几种土地用途小类 城镇村道路用地,
|
|
|
- 工业用地:包含以下几种土地用途小类 工业用地,通用仓储类,标准厂房,工业用地(新业态用地M0),工矿仓储用地,其他工业用地
|
|
|
- 公用设施用地:包含以下几种土地用途小类 社会福利用地,公共管理与公共服务用地,公用设施用地,其他非养老机构用地
|
|
|
- 公园与绿地:包含以下几种土地用途小类 公园与绿地
|
|
|
- 交通服务场站用地:包含以下几种土地用途小类 交通服务场站用地
|
|
|
- 交通用地:包含以下几种土地用途小类 交通运输用地
|
|
|
- 科教文卫用地:包含以下几种土地用途小类 体育用地,文化设施用地,科研用地,医疗卫生用地,教育用地
|
|
|
- 其他用地:包含以下几种土地用途小类 其他土地,其他用地
|
|
|
- 商服用地:包含以下几种土地用途小类 餐饮用地,娱乐用地,商务金融用地,商服用地,旅馆用地,零售商业用地
|
|
|
- 水工建筑用地:包含以下几种土地用途小类 水域及水利设施用地
|
|
|
- 特殊用地:包含以下几种土地用途小类 特殊用地
|
|
|
- 住宅用地:包含以下几种土地用途小类 居住用地,城镇住宅-用于安置的商品住房用地,住宅用地,农村宅基地,城镇住宅-保障性租赁住房,城镇住宅-租赁型商品住房,城镇住宅-公共租赁住房,城镇住宅-普通商品住房,城镇住宅-经济适用住房,城镇住宅用地
|
|
|
- 注意17: 如果土地用途是‘物流仓储’,不使用tdyt进行查询,使用dkmc进行模糊查询,比如:dkmc like '%仓储%'
|
|
|
- ```
|
|
|
- 以下是可供参考的SQL写法(仅供参考,也可自由发挥):
|
|
|
- ```
|
|
|
- {refs}
|
|
|
- ```
|
|
|
+ 注意3: 使用 order by 进行排序时。必须使用 nulls last 确保 null值不会对排序产生影响,使用方法如下: order by xxxx desc nulls last 或者 order by xxxx nulls last
|
|
|
+ 注意4: 当用户问题中的面积等于不是一个确定值的时候,如‘面积为xx亩左右’或‘面积为xx平方米左右’或‘面积为xx公顷左右’, 需要条件中添加 abs(ydmj - xx) <= 1, 将面积差控制在1公顷之内。使用 ‘order by abs(ydmj - xx) nulls last’ 来进行排序
|
|
|
+ 注意5: 当用户问题中的面积是一个确定值的时候,如‘面积为xx亩’或‘面积为xx平方米’或‘面积为xx公顷左右’, 需要条件中添加 abs(ydmj - xx) <= 1, 将面积差控制在1公顷之内。使用 ‘order by abs(ydmj - xx) nulls last’ 来进行排序
|
|
|
+ 注意6: 查询出地块。必须要对ydmj进行desc排序。查询地块有数量限制时,比如'1宗','一宗','1块',使用limit 1语句;未限定时,只查询10宗,使用limit 10语句
|
|
|
+ 注意7: 问题中设计具体的地点时,需要使用round(st_distance(st_geometryfromtext('具体地点的wkt', 4490)::geography,shape::geography)::numeric,0)获取其distance, 如果问题未指定范围则使用 distance <= 5000 来限制在地点5公里内,并对其排序
|
|
|
+ 注意8: 生成sql时,只对涉及表结构中的字段进行条件设置,不可生成不在表字段列表中的查询条件,不可生成任何不在表字段中的条件,比如周边5公里有什么设施
|
|
|
+ 注意9: 生成sql时,必须使用 st_astext(st_centroid(shape)) as center_wkt
|
|
|
+ 注意10: 查询语句必须包含 objectid, xzqmc, xzqdm, dymc, yddm, ydxz, ydmj, rjlsx, rjlxx, jzmdsx, jzmdxx, jzgdsx, jzgdxx, ldlsx, ldlxx, pfwh, pfsj st_astext(shape) as geom, st_astext(st_centroid(shape)) as center_wkt 这几个字段
|
|
|
+ 注意11: 只准生成查询 的sql 语句,不可生成任何 修改数据的语句, 比如:update, delete, insert, truncate 等
|
|
|
+ 注意12:当用户问题中的土地用途是"工业用地"时,去掉"用地",使用ydxz进行模糊查询,比如ydxz like '%工业%'
|
|
|
"""
|
|
|
self.retriever = SqlRetriever(query_type='land_site_selection')
|
|
|
|