# Documentation - Class name: LLMParquetDatasetSearcher - Category: SALT/Language Toolkit/Tools/Dataset - Output node: False 这个节点旨在对存储在Parquet格式的大型数据集执行高级搜索操作。它利用语言模型来解释和执行复杂的查询,应用过滤器、相关性评分和并行处理,以有效地检索和排序基于查询意图的结果。 # Input types ## Required - file_type - 指定要搜索的文件类型,如parquet、text、json、yaml、csv或excel,决定了数据提取和处理的方法。 - Comfy dtype: COMBO[STRING] - Python dtype: str - path_or_url - 要搜索的文件的位置,可以是本地文件路径或URL,为搜索操作提供对数据集的访问。 - Comfy dtype: STRING - Python dtype: str ## Optional - search_term - 在数据集中搜索的查询或关键词,指导搜索和过滤过程。 - Comfy dtype: STRING - Python dtype: str - exclude_terms - 从搜索结果中排除的术语,允许更精细和相关的结果。 - Comfy dtype: STRING - Python dtype: str - columns - 数据集中要搜索的特定列,实现有针对性的搜索并提高效率。 - Comfy dtype: STRING - Python dtype: str - case_sensitive - 确定搜索是否区分大小写,影响匹配过程。 - Comfy dtype: BOOLEAN - Python dtype: bool - max_results - 返回的最大搜索结果数,控制搜索输出的范围。 - Comfy dtype: INT - Python dtype: int - term_relevancy_threshold - 相关性评分的阈值,基于与搜索词的相关性过滤结果。 - Comfy dtype: FLOAT - Python dtype: float - use_relevancy - 指示是否应对搜索结果应用相关性评分,提高结果质量。 - Comfy dtype: BOOLEAN - Python dtype: bool - min_length - 搜索结果的最小长度,过滤掉不符合此标准的结果。 - Comfy dtype: INT - Python dtype: int - max_length - 搜索结果的最大长度,确保结果在指定的大小范围内。 - Comfy dtype: INT - Python dtype: int - max_dynamic_retries - 在没有结果的情况下,应进行动态调整重试搜索的次数,提高找到相关数据的机会。 - Comfy dtype: INT - Python dtype: int - clean_content - 指定在搜索之前是否应清理或预处理内容,影响结果的准确性。 - Comfy dtype: BOOLEAN - Python dtype: bool - excel_sheet_position - 对于excel文件,指定要搜索的工作表,允许在多工作表文档中进行有针对性的数据提取。 - Comfy dtype: INT - Python dtype: int - recache - 确定是否应重新缓存数据,可能提高重复搜索的性能。 - Comfy dtype: BOOLEAN - Python dtype: bool - condense_documents - 指示是否应压缩搜索结果,可能减少返回的数据量。 - Comfy dtype: BOOLEAN - Python dtype: bool - seed - 搜索中随机操作的种子值,确保结果的可重现性。 - Comfy dtype: INT - Python dtype: int # Output types - results - Comfy dtype: STRING - 包含搜索结果的主要输出,包括相关的数据条目。 - Python dtype: str - results_list - Comfy dtype: LIST - 搜索结果的列表格式,提供另一种表示形式。 - Python dtype: list - documents - Comfy dtype: DOCUMENT - 从搜索结果派生的结构化文档,可能包括元数据和附加上下文。 - Python dtype: list ## Usage tips - Infra type: `CPU` - Common nodes: unknown ## Source code ```python class LLMParquetDatasetSearcher: @classmethod def INPUT_TYPES(cls): return { "required": { "file_type": (["parquet", "text", "json", "yaml", "csv", "excel"],), "path_or_url": ("STRING", {"placeholder": "Path to file or URL"}), }, "optional": { "search_term": ("STRING", {"placeholder": "Enter search term"}), "exclude_terms": ("STRING", {"placeholder": "Terms to exclude, comma-separated"}), "columns": ("STRING", {"default": "*"}), "case_sensitive": ("BOOLEAN", {"default": False}), "max_results": ("INT", {"default": 10, "min": 1}), "term_relevancy_threshold": ("FLOAT", {"min": 0.0, "max": 1.0, "default": 0.25, "step": 0.01}), "use_relevancy": ("BOOLEAN", {"default": False}), #"num_threads": ("INT", {"default": 2}), "min_length": ("INT", {"min": 0, "max": 1023, "default": 0}), "max_length": ("INT", {"min": 3, "max": 1024, "default": 128}), "max_dynamic_retries": ("INT", {"default": 3}), "clean_content": ("BOOLEAN", {"default": False}), "excel_sheet_position": ("INT", {"min": 0, "default": "0"}), "recache": ("BOOLEAN", {"default": False}), "condense_documents": ("BOOLEAN", {"default": True}), "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), } } RETURN_TYPES = ("STRING", "LIST", "DOCUMENT") RETURN_NAMES = ("results", "results_list", "documents") OUTPUT_IS_LIST = (True, False, False) FUNCTION = "search_dataset" CATEGORY = f"{MENU_NAME}/{SUB_MENU_NAME}/Tools/Dataset" def search_dataset(self, path_or_url, file_type, search_term="", exclude_terms="", columns="*", case_sensitive=False, max_results=10, term_relevancy_threshold=None, use_relevancy=False, num_threads=2, min_length=0, max_length=-1, max_dynamic_retries=0, clean_content=False, seed=None, excel_sheet_position="0", condense_documents=True, recache=False): # Validate path or download file and return path path = resolve_path(path_or_url) reader = ParquetReader1D() if file_type == "parquet": reader.from_parquet(path) elif file_type == "text": reader.from_text(path, recache=recache) elif file_type == "json": reader.from_json(path, recache=recache) elif file_type == "yaml": reader.from_yaml(path, recache=recache) elif file_type == "csv": reader.from_csv(path, recache=recache) elif file_type == "excel": reader.from_excel(path, sheet_name=excel_sheet_position, recache=recache) results = reader.search( search_term=search_term, exclude_terms=exclude_terms, columns=[col.strip() for col in columns.split(',') if col] if columns else ["*"], max_results=max_results, case_sensitive=case_sensitive, term_relevancy_score=term_relevancy_threshold, num_threads=num_threads, min_length=min_length, max_length=max_length, max_dynamic_retries=max_dynamic_retries, parse_content=clean_content, seed=min(seed, 99999999), use_relevancy=use_relevancy ) from pprint import pprint pprint(results, indent=4) results_list = [] results_text = "Prompts:\n\n" documents = [] for result in results: results_list.append(list(result.values())[0]) if not condense_documents: documents.append(Document(text=list(result.values())[0], extra_info={})) else: results_text += str(list(result.values())[0]) + "\n\n" if condense_documents: documents = [Document(text=results_text, extra_info={})] return (results_list, results_list, documents,) ```