|
@@ -32,11 +32,12 @@ class LandSiteSelectionSqlAgent(BaseSubAgent):
|
|
|
self.SubAgent_Summary_Prompt = "通过查询数据库,检索数据库得到的信息为:\n{obs}\n"
|
|
|
self.SubAgent_PROMPT = """你是一个PostgreSQL专家,当前需要根据用户问题和上下文,生成语法正确的PostgreSQL查询语句。'
|
|
|
#数据库表的表名和表结构如下:
|
|
|
- `dlgis.gcs330000g2007_kzxxxgh_kgdk_kgy_dsgj`(
|
|
|
+ 以下是控制性详细规划表
|
|
|
+ `sde.kzxxxgh`(
|
|
|
`objectid` COMMENTS '主键ID',
|
|
|
`xzqmc` COMMENTS '所属区县(行政区代码) 用来指定‘区’或者‘县’',
|
|
|
`xzqdm` COMMENTS '行政区代码 6位,前2位代表省,前4位代表市,前6位代表区县',
|
|
|
- `dymc` COMMENTS '地块名称',
|
|
|
+ `dymc` COMMENTS '单元名称',
|
|
|
`yddm` COMMENTS '用地代码',
|
|
|
`ydxz` COMMENTS '用地性质',
|
|
|
`ydmj` COMMENTS '用地面积 单位:公顷',
|
|
@@ -52,23 +53,33 @@ class LandSiteSelectionSqlAgent(BaseSubAgent):
|
|
|
`ldlxx` COMMENTS '绿地率下限',
|
|
|
`shape` COMMENTS '地块图形wkt',
|
|
|
)'
|
|
|
-
|
|
|
+
|
|
|
+ 以下是公告地块表
|
|
|
+ `sde.ecgap_klyzy`(
|
|
|
+ `id` COMMENTS '主键ID',
|
|
|
+ `xzqmc` COMMENTS '所属区县(行政区代码) 用来指定区 或者 县',
|
|
|
+ `xzqdm` COMMENTS '行政区代码 6位,前2位代表省,前4位代表市,前6位代表区县',
|
|
|
+ `dkmc` COMMENTS '地块名称',
|
|
|
+ `dkid` COMMENTS '地块id',
|
|
|
+ `address` COMMENTS '土地坐落',
|
|
|
+ `dkmj` COMMENTS '土地面积,单位亩',
|
|
|
+ `tdyt` COMMENTS '土地规划用途',
|
|
|
+ `shape` COMMENTS '地块图形wkt',
|
|
|
+ `sfsj` COMMENTS '是否上架 1表示已上架,0表示未上架'
|
|
|
+ )
|
|
|
有几个注意事项:
|
|
|
- 注意1: 查询地区条件时,区县为**时请使用 xzqmc 字段。省为**时请先将行政区名称转换为行政区代码,使用xzqdm字段的前2位进行模糊查询,市为**时请先将行政区名称转换为行政区代码,使用xzqdm字段的前4位进行模糊查询
|
|
|
- 注意2: 使用 order by 进行排序时。必须使用 nulls last 确保 null值不会对排序产生影响,使用方法如下: order by xxxx desc nulls last 或者 order by xxxx nulls last
|
|
|
- 注意3: 当用户问题中的面积等于不是一个确定值的时候,如‘面积为xx亩左右’或‘面积为xx平方米左右’或‘面积为xx公顷左右’, 需要条件中添加 abs(ydmj - xx) <= 1, 将面积差控制在1公顷之内。使用 ‘order by abs(ydmj - xx) nulls last’ 来进行排序
|
|
|
- 注意4: 当用户问题中的面积是一个确定值的时候,如‘面积为xx亩’或‘面积为xx平方米’或‘面积为xx公顷左右’, 需要条件中添加 abs(ydmj - xx) <= 1, 将面积差控制在1公顷之内。使用 ‘order by abs(ydmj - xx) nulls last’ 来进行排序
|
|
|
- 注意5: 查询出地块。必须要对ydmj进行desc排序。查询地块有数量限制时,比如'1宗','一宗','1块',使用limit 1语句;未限定时,只查询10宗,使用limit 10语句
|
|
|
- 注意6: 问题中设计具体的地点时,需要使用round(st_distance(st_geometryfromtext('具体地点的wkt', 4490)::geography,shape::geography)::numeric,0)获取其distance, 如果问题未指定范围则使用 distance <= 5000 来限制在地点5公里内,并对其排序
|
|
|
- 注意7: 生成sql时,只对涉及表结构中的字段进行条件设置,不可生成不在表字段列表中的查询条件,不可生成任何不在表字段中的条件,比如周边5公里有什么设施
|
|
|
- 注意8: 生成sql时,必须使用 st_astext(st_centroid(shape)) as center_wkt
|
|
|
- 注意9: 查询语句必须包含 objectid, dymc, xzqmc, ydxz, st_area(shape::geography) as pfmarea, st_astext(st_centroid(shape)) as center_wkt 这几个字段
|
|
|
- 注意10: 只准生成查询 的sql 语句,不可生成任何 修改数据的语句, 比如:update, delete, insert, truncate 等
|
|
|
- 注意11:当用户问题中的用地性质是"工业用地"时,去掉"用地",使用ydxz进行模糊查询,比如ydxz like '%工业%',工业用地没有二级分类
|
|
|
- 注意12:where语句中必须包含NOT EXISTS (select 1 from dlgis.gcs330000k3003_zdzy_gd as b where st_intersects(a.shape, b.shape)
|
|
|
- 注意13:数据表的schema是dlgis
|
|
|
- 注意14:from语句中给dlgis.gcs330000g2007_kzxxxgh_kgdk_kgy_dsgj设置别名a
|
|
|
- 注意15:select语句中使用st_area(shape::geography) as pfmarea字段来计算面积,单位是平方米,不要做任何的单位换算
|
|
|
+
|
|
|
+ 注意1:查询的数据表有两张,分别是控制性详细规划表(sde.kzxxxgh)和公告地块表(sde.ecgap_klyzy)
|
|
|
+ 注意2: 查询地区条件时,区县为**时请使用 xzqmc 字段。省为**时请先将行政区名称转换为行政区代码,使用xzqdm字段的前2位进行模糊查询,市为**时请先将行政区名称转换为行政区代码,使用xzqdm字段的前4位进行模糊查询
|
|
|
+ 注意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: 控制性详细规划表查询语句select种只包含objectid字段,公告地块表查询语句select种只包含id字段
|
|
|
+ 注意9: 只准生成查询 的sql 语句,不可生成任何 修改数据的语句, 比如:update, delete, insert, truncate 等
|
|
|
+ 注意10:当用户问题中的数据源是‘控制性详细规划表’,用地性质是"工业用地"时,去掉"用地",使用ydxz进行模糊查询,比如ydxz like '%工业%',工业用地没有二级分类
|
|
|
+ 注意11:数据表的schema是sde
|
|
|
"""
|
|
|
self.retriever = SqlRetriever(query_type='land_site_selection')
|
|
|
|