如何为Llama-Index Pandas Query Engine配置多个DataFrame?遇报错求助
解决方案
错误原因解析
触发ValueError的核心原因是Pandas Query Engine的默认模块(如SQL生成模块)在未指定dest_key时,仅允许单个输入键。你添加多个DataFrame字符串键(df1_str、df2_str等)后,违反了这一限制规则。合并多DataFrame元信息为单一输入键
将所有DataFrame的结构信息(列名、数据类型、样本数据等)合并成一个统一的字符串,作为PromptTemplate的单个输入键(例如命名为dfs_meta_str),避免多键冲突。示例代码:from llama_index.core import PromptTemplate # 生成单个DataFrame的元信息字符串 def generate_df_meta(df, df_name): meta_content = f"DataFrame {df_name}:\n" meta_content += f"列名与数据类型:\n{df.dtypes.to_string()}\n" meta_content += f"前3行样本数据:\n{df.head(3).to_string()}\n\n" return meta_content # 合并所有DataFrame的元信息 combined_dfs_meta = generate_df_meta(df1, "df1") + generate_df_meta(df2, "df2") + generate_df_meta(df3, "df3") # 定义自定义PromptTemplate,使用单一输入键 custom_prompt = PromptTemplate( """ 给定以下多个DataFrame的元信息: {dfs_meta_str} 用户查询:{query_str} 请生成对应的Pandas代码回答查询,需正确处理多DataFrame的关联逻辑(如merge、join)。 """ )配置Query Engine并传入合并后的元信息
初始化PandasQueryEngine时绑定自定义Prompt,查询时传入合并后的元信息和用户查询内容。示例代码:from llama_index.core.query_engine import PandasQueryEngine # 初始化Query Engine,这里传入任意一个DataFrame即可,实际逻辑由Prompt中的元信息驱动 query_engine = PandasQueryEngine( df=df1, prompt=custom_prompt, verbose=True ) # 执行查询 query_response = query_engine.query( query_str="你的具体查询内容", dfs_meta_str=combined_dfs_meta )验证与优化
测试查询时,检查LLM生成的代码是否正确引用多个DataFrame;若生成逻辑有误,可在Prompt中添加约束,比如要求明确写出DataFrame名称、指定关联键规则等。
内容的提问来源于stack exchange,提问作者Mir Jibraan Hussain
相关产品推荐
相关产品推荐

