Commit 44bdb2dd by tinywell

补充监测点查询 warnlevel 参数;优化 prompt 改进数量问题回答效果

parent 0823b3f5
......@@ -109,7 +109,7 @@ class MonitorClient(BaseHttpClient):
def query_points_sync(self, key: str,
year: str, monitor_type: str, three_d_model: str, ortho_image: str,
disaster_threat_people_range_start: str, disaster_threat_people_range_end: str,
disaster_scale_start: str, disaster_scale_end: str, device_type: str) -> BaseResponse[List]:
disaster_scale_start: str, disaster_scale_end: str, warn_level: str, device_type: str) -> BaseResponse[List]:
"""同步查询监测点信息"""
params = {
"key": key,
......@@ -117,9 +117,11 @@ class MonitorClient(BaseHttpClient):
"MONITORTYPE": monitor_type,
"MODELEXIST": three_d_model,
"DOMEXIST": ortho_image,
"WARNLEVEL": warn_level,
"STARTTHREATSPOPULATION": disaster_threat_people_range_start,
"ENDTHREATSPOPULATION": disaster_threat_people_range_end,
"STARTDISASTERSCALE": disaster_scale_start,
"ENDDISASTERSCALE": disaster_scale_end
}
print(f"查询参数: {params}")
......
......@@ -26,6 +26,7 @@ class MonitorPointArgs(BaseModel):
disaster_threat_people_range_end: str = Field("", description="灾害威胁人数范围结束值,如200,默认为空")
disaster_scale_start: str = Field("", description="灾害规模范围起始值,灾害为崩塌、滑坡、泥石流时表示体积,灾害为地面塌陷、地面沉降时表示面积,为地裂缝时表示长度,默认为空")
disaster_scale_end: str = Field("", description="灾害规模范围结束值,灾害为崩塌、滑坡、泥石流时表示体积,灾害为地面塌陷、地面沉降时表示面积,为地裂缝时表示长度,默认为空")
warn_level: str = Field("", description="预警等级,1、2、3、4、5,1-4分别对应红色、橙色、黄色、蓝色,5为无预警,默认为空")
device_type: str = Field("", description="设备类型或者传感器类型,当查询设备或传感器信息时需要(例如 加速度、位移、温度、湿度、裂缝计、雨量等),默认为空")
......@@ -35,7 +36,7 @@ class MonitorPointTool(BaseTool):
description:str = """查询指定行政区划的监测点信息。
可以查询任意省/市/区县级别的监测点数据,也可以通过灾害类型、灾害规模、灾害威胁人数范围、设备类型等条件查询。
输入参数为行政区划名称,如:湖南省、长沙市、岳麓区等。
返回该区域内的监测点列表,包含位置、经纬度等详细信息。
返回该区域内的监测点列表,包含位置、经纬度、海拔、建设单位、监测单位、监测类型、有无三维模型、有无正射影像、威胁人数、规模等级等详细信息。
还可以查询监测点下相关监测设备、传感器信息,比如设备数量、传感器数量等。
"""
args_schema: Type[BaseModel] = MonitorPointArgs
......@@ -57,7 +58,7 @@ class MonitorPointTool(BaseTool):
def _run(self, key: str, start_time: str = "", end_time: str = "", disaster_type: str = "",
three_d_model: str = "", ortho_image: str = "",
disaster_threat_people_range_start: str = "", disaster_threat_people_range_end: str = "",
disaster_scale_start: str = "", disaster_scale_end: str = "", device_type: str = "",
disaster_scale_start: str = "", disaster_scale_end: str = "", warn_level: str = "", device_type: str = "",
query_type: str = "points") -> Dict[str, Any]:
"""
执行监测点查询
......@@ -73,6 +74,7 @@ class MonitorPointTool(BaseTool):
disaster_threat_people_range_end: 灾害威胁人数范围结束值
disaster_scale_start: 灾害规模范围起始值
disaster_scale_end: 灾害规模范围结束值
warn_level: 预警等级
device_type: 设备类型
query_type: 查询类型
Returns:
......@@ -95,7 +97,7 @@ class MonitorPointTool(BaseTool):
return self._get_device_info(code, start_time, end_time, device_type)
else:
year = start_time.split("-")[0]
return self._get_points_info(code, year, disaster_type, three_d_model, ortho_image, disaster_threat_people_range_start, disaster_threat_people_range_end, disaster_scale_start, disaster_scale_end, device_type)
return self._get_points_info(code, year, disaster_type, three_d_model, ortho_image, disaster_threat_people_range_start, disaster_threat_people_range_end, disaster_scale_start, disaster_scale_end, warn_level, device_type)
def _get_device_info(self, code: str, start_time: str = "", end_time: str = "", device_type: str = ""):
self.logger.info(f"开始查询设备信息,区域: {key}")
......@@ -141,7 +143,7 @@ class MonitorPointTool(BaseTool):
result = {
'code': 200,
'message': f"在{key}找到{len(devices_info)}个设备信息, {len(sensors_info)}个传感器信息",
'summary': f"在{key}找到{len(devices_info)}个设备信息, {len(sensors_info)}个传感器信息",
# 'devices': {
# 'table_header': device_table_header,
# 'table_data': device_table_data
......@@ -163,14 +165,14 @@ class MonitorPointTool(BaseTool):
def _get_points_info(self, key: str, year: str = "", disaster_type: str = "",
three_d_model: str = "", ortho_image: str = "",
disaster_threat_people_range_start: str = "", disaster_threat_people_range_end: str = "",
disaster_scale_start: str = "", disaster_scale_end: str = "", device_type: str = ""):
disaster_scale_start: str = "", disaster_scale_end: str = "", warn_level: str = "", device_type: str = ""):
try:
self.logger.info(f"开始查询监测点信息,区域: {key}")
response = self.client.query_points_sync(key, year,
disaster_type, three_d_model, ortho_image,
disaster_threat_people_range_start, disaster_threat_people_range_end,
disaster_scale_start, disaster_scale_end, device_type)
disaster_scale_start, disaster_scale_end, warn_level, device_type)
self.logger.debug(f"API响应: {response}")
if response.type != 1 or len(response.resultdata) == 0:
......@@ -216,12 +218,12 @@ class MonitorPointTool(BaseTool):
table_data = []
for item in points_info:
table_data.append(list(item.values()))
if len(table_data) > 50:
table_data = table_data[:50]
if len(table_data) > 200:
table_data = table_data[:200]
table_data.append(["..."])
result = {
'code': 200,
'message': f"在{key}找到{len(points_info)}个监测点信息",
'summary': f"在{key}找到{len(points_info)}个满足条件的监测点信息",
'points': {
'table_header': table_header,
'table_data': table_data
......
......@@ -88,7 +88,9 @@ RUNNER_SYSTEM_PROMPT_V0 = """
请遵循以下规则:
- 工具执行结果中的数据必须使用 markdown 表格展示
- 确保数据的完整性, 不要遗漏数据
- 表格中的数据只能来源于工具执行结果
- 表格中的数据只能来源于工具执行结果,不得添加或修改
- 涉及数量的问题(如个数、总数等),必须严格按照工具返回的结果数据回答,不得进行任何推断或估算
- 如果工具结果中没有相关数据,应明确告知无法得知具体数量,而不是给出推测的数字
"""
......@@ -136,6 +138,9 @@ class ToolRunner:
if "markdown" in result:
table = result["markdown"]
del result["markdown"]
if "summary" in result:
summary = result["summary"]
result["summary"] = f"针对问题 {input},我们{summary}"
# LLM 解释结果
llm_start = time.time()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment