更新工具方法 增加list数据兼容性

This commit is contained in:
2026-07-14 19:14:33 +08:00
parent 5213897bbd
commit 3b7ac4a336

View File

@@ -1,3 +1,4 @@
import numpy as np
from langchain_core.tools import tool from langchain_core.tools import tool
import requests import requests
import pandas as pd import pandas as pd
@@ -80,12 +81,21 @@ def filter_data(domain: str, filters: list[dict] | None = None, search: list[str
continue continue
col = df[field] col = df[field]
# 处理多值情况 # 处理多值情况
if col.apply(lambda x: isinstance(x, (list, tuple, set))).any(): is_multi = col.apply(lambda x: isinstance(x, (list, tuple, set))).any()
if op == "contains":
if is_multi:
if op == "eq":
col = col.apply(lambda x: value in x if isinstance(x, (list, tuple, set)) else False)
elif op == "ne":
col = col.apply(lambda x: value not in x if isinstance(x, (list, tuple, set)) else True)
elif op == "contains":
col = col.apply(lambda x: value in x if isinstance(x, (list, tuple, set)) else False) col = col.apply(lambda x: value in x if isinstance(x, (list, tuple, set)) else False)
elif op == "not_contains": elif op == "not_contains":
col = col.apply(lambda x: value not in x if isinstance(x, (list, tuple, set)) else True) col = col.apply(lambda x: value not in x if isinstance(x, (list, tuple, set)) else True)
else:
continue
df = df[col] df = df[col]
continue continue
@@ -107,8 +117,17 @@ def filter_data(domain: str, filters: list[dict] | None = None, search: list[str
for field in cfg.search_fields: for field in cfg.search_fields:
if field not in df.columns: if field not in df.columns:
continue continue
# 如果包含就表示命中
mask |= df[field].astype(str).str.contains(kw, na=False) # list 转成可检索的字符串
col_str = df[field].apply(
lambda x: " ".join(map(str, x))
if isinstance(x, (list, tuple, set))
else str(x)
)
# 如果包含则命中
mask |= col_str.str.contains(kw, na=False)
df = df[mask] df = df[mask]
filtered_len = len(df) filtered_len = len(df)
@@ -193,8 +212,19 @@ def inspect_data(domain: str, sort_by: str | None = None, ascending: bool = Fals
if fld not in row: if fld not in row:
continue continue
val = row[fld] val = row[fld]
if pd.isna(val) or val == "":
# 数组 / Series
if isinstance(val, (np.ndarray, pd.Series)) or (isinstance(val, (list, tuple))):
if len(val) == 0:
val = "未填写"
else:
val = "".join(map(str, val))
elif pd.isna(val):
val = "未填写" val = "未填写"
elif val == "":
val = "未填写"
else:
val = str(val)
lines.append(f"- {cfg.get_chinese_name(fld)}{val}") lines.append(f"- {cfg.get_chinese_name(fld)}{val}")
print(f"[TOOL] inspect_data | rendered directly") print(f"[TOOL] inspect_data | rendered directly")
return "\n".join(lines) return "\n".join(lines)