瀏覽代碼

找图找数agent

liutao 2 月之前
父節點
當前提交
1d8fd40c8f

+ 2 - 1
aiAgent_gd/agent_config.py

@@ -68,7 +68,7 @@ AgentCNNameDict = {
     "Chat": "聊天机器人",
     "KnowledgeChat": "知识库问答",
     "LandSiteSelectionSqlAgent": "智能选址",
-    "LandFindSqlAgent": "智能找图",
+    "LandFindSqlAgent": "找图找数",
     "KfqEvalSqlAgent": "园区及开发区评价查询",
     "LandSupplySqlAgent": "供地合同信息查询",
     "LandUseSqlAgent": "土地利用现状信息查询",
@@ -178,6 +178,7 @@ LLMDict_Qwen_72B_1211 = {
     "ReportAgent": "qwen2.5-instruct",
     # 智能选址
     "LandSiteSelectionSqlAgent": "qwen2.5-instruct",
+    # 找图找数
     "LandFindSqlAgent": "qwen2.5-instruct",
     # 空间分析
     "SpatialAnalysisAgent": "qwen2.5-instruct",

+ 5 - 13
aiAgent_gd/qwen_agent/config/db_config.py

@@ -12,19 +12,11 @@ db_list: dict[str, dict[Any, Any] | dict[str, str]] = {
         "user": "zjugis",
         "password": "zjugis1402!",
     },
-    # "xzpg": {
-    #     "host": "10.10.9.243",
-    #     "port": "5432",
-    #     "database": "sde",
-    #     "user": "sde",
-    #     "password": "zjugis1402!",
-    # }
     "xzpg": {
-        "host": "10.249.168.231",
-        "port": "54321",
-        "database": "sde",
-        "user": "zjugis",
-        "password": "zjugis1402!",
+        "host": "172.27.27.16",
+        "port": "3433",
+        "database": "yzt",
+        "user": "zjgt_ww_readonly",
+        "password": "Zjgt_ww_16",
     }
 }
-

+ 5 - 0
aiAgent_gd/qwen_agent/memory/data/plans/plan_examples_找图找数.jsonl

@@ -3,5 +3,10 @@
     "query_type": "land_find",
     "query": "请帮我查一下萧山区永久基本农田面积大于100亩的地块",
     "plan": "Question: 请帮我查一下萧山区永久基本农田面积大于100亩的地块 \nThought: 用户问题中想查询城市为‘萧山区’,面积为大于‘100’亩,图层为‘永久基本农田’,数量未限制,所以需要通过[LandFindSqlAgent]查询图层信息,最后使用summary的Action来总结并输出。Plan: ```json\n    [{\"action_name\": \"LandFindSqlAgent\", \"instruction\": \"你需要调用 [LandFindSqlAgent],来查询‘萧山区’,面积为大于‘100’亩,图层为‘永久基本农田’的地块\"},\n    {\"action_name\": \"summary\", \"instruction\": \"你需要根据用户的Question和查询的结果,回答用户问题。\"}]"
+  },
+  {
+    "query_type": "land_find",
+    "query": "请帮我查一下西湖区永久基本农田面积小于100亩的地块",
+    "plan": "Question: 请帮我查一下西湖区永久基本农田面积小于100亩的地块 \nThought: 用户问题中想查询城市为‘西湖区’,面积为小于‘100’亩,图层为‘永久基本农田’,数量未限制,所以需要通过[LandFindSqlAgent]查询图层信息,最后使用summary的Action来总结并输出。Plan: ```json\n    [{\"action_name\": \"LandFindSqlAgent\", \"instruction\": \"你需要调用 [LandFindSqlAgent],来查询‘西湖区’,面积为小于于‘100’亩,图层为‘永久基本农田’的地块\"},\n    {\"action_name\": \"summary\", \"instruction\": \"你需要根据用户的Question和查询的结果,回答用户问题。\"}]"
   }
 ]

+ 5 - 0
aiAgent_gd/qwen_agent/memory/data/sqls/sql_examples_找图找数.jsonl

@@ -3,5 +3,10 @@
     "query_type": "land_find",
     "query": "请帮我查一下萧山区永久基本农田面积大于100亩的地块",
     "sql_code": "select objectid,xzqmc,xzqdm,dlbm,dlmc,yjjbnttbmj from dlgis.gcs330000g2001_yjjbnt_gx_xsb where xzqmc ='萧山区' and yjjbnttbmj >100*666.67 limit 10"
+  },
+  {
+    "query_type": "land_find",
+    "query": "请帮我查一下西湖区永久基本农田面积小于100亩的地块",
+    "sql_code": "select objectid,xzqmc,xzqdm,dlbm,dlmc,yjjbnttbmj from dlgis.gcs330000g2001_yjjbnt_gx_xsb where xzqmc ='西湖区' and yjjbnttbmj <100*666.67 limit 10"
   }
 ]

+ 5 - 0
aiAgent_gd/qwen_agent/planning/plan_dispatcher.py

@@ -113,6 +113,11 @@ Question: 请帮我在西湖区找出面积最大的商服用地,数据表是
 Thought: 用户想要从公告地块表种进行选址分析,调用 LandSiteSelectionPlan 分析模块
 Plan Agent: LandSiteSelectionPlan
 
+Example #11:
+Question: 帮我在萧山区找出面积大于100亩的永久基本农田图斑
+Thought: 用户想要找出永久基本农田地块,调用 LandFindPlan 分析模块
+Plan Agent: LandFindPlan
+
 注意:
 1.Plan Agent 返回的都是单一的,不要出现多个plan,不要出现多个plan, 比如以下情况:Plan Agent: LandUsePlan, ReportPlan
 """

+ 1 - 1
aiAgent_gd/qwen_agent/planning/plans/land_find_plan.py

@@ -5,7 +5,7 @@ from qwen_agent.memory.plan_memory import PlanExampleRetrieval
 
 actions_list = {
     "GisGeocoderAgent": "用于获取用户问题中详细地址的坐标点",
-    "LandFindSqlAgent": "用于查询地块表的Agent",
+    "LandFindSqlAgent": "用于查询永久基本农田表的Agent",
     "summary": "对表查询的结果,进行总结摘要,提炼用户关注的信息",
 }
 

+ 3 - 2
aiAgent_gd/qwen_agent/sub_agent/sql/land_find_sql_agent.py

@@ -44,13 +44,14 @@ class LandFindSqlAgent(BaseSubAgent):
         有几个注意事项:
         注意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’ 来进行排序
+        注意3: 当用户问题中的面积等于不是一个确定值的时候,如‘面积为xx亩左右’或‘面积为xx平方米左右’或‘面积为xx公顷左右’, 需要条件中添加 abs(yjjbnttbmj - xx) <= 1, 将面积差控制在1公顷之内。使用 ‘order by abs(yjjbnttbmj - xx)  nulls last’ 来进行排序
+        注意4: 当用户问题中的面积是一个确定值的时候,如‘面积为xx亩’或‘面积为xx平方米’或‘面积为xx公顷左右’, 需要条件中添加 abs(yjjbnttbmj - xx) <= 1, 将面积差控制在1公顷之内。使用 ‘order by abs(yjjbnttbmj - 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: 查询语句包含 objectid,xzqmc,xzqdm,dlbm,dlmc,yjjbnttbmj这个字段
         注意9: 只准生成查询 的sql 语句,不可生成任何 修改数据的语句, 比如:update, delete, insert, truncate 等
+        注意10: gcs330000g2001_yjjbnt_gx_xsb数据表的schema是dlgis
         """
         self.retriever = SqlRetriever(query_type='land_find')