需求说明

实现对Excel工具的自然语言问数,即可以通过界面上传Excel文件,然后在文本框里通过语言对话的形式问出要统计的内容。比如:

用户数有多少?

语文成绩低于90的用户有多少?

.....

实现思路

Pandas AI是基于Pandas库构建的,它扩展了Pandas的功能,使其能够支持生成式AI的任务。Pandas本身是一个用于数据处理和分析的Python库,其强大的数据处理能力也是Pandas AI的基础。这里借助于Pandas AI框架集成Pandas和大模型的能力达到这个目的,详见如下代码。

代码过程

import gradio as gr
import pandas as pd
from pandasai import SmartDataframe
from pandasai.llm.local_llm import LocalLLM


ollama_llm = LocalLLM(api_base="http://127.0.0.1:11434/v1", model="qwen2.5:72b")


def analyze_excel(file_path, user_query):
    """
    使用PandasAI分析Excel文件并回答用户查询
    """
    try:
        # 读取Excel文件
        df = pd.read_excel(file_path)

        # 创建SmartDataframe

        ##smart_df = SmartDataframe(df, config={"llm": llm})
        smart_df = SmartDataframe(df, config={"llm": ollama_llm})

        # 执行查询
        response = smart_df.chat(user_query)

        # 返回响应和原始数据的前5行
        return response, df.head()
    except Exception as e:
        return f"发生错误: {str(e)}", None


# 创建Gradio界面
with gr.Blocks(title="Excel 数据分析助手") as demo:
    gr.Markdown("Excel 数据分析助手")
    gr.Markdown("上传Excel文件,然后用自然语言提问,AI会帮你分析数据!")

    with gr.Row():
        file_input = gr.File(label="上传Excel文件", file_types=[".xlsx", ".xls"])
        query_input = gr.Textbox(label="输入你的问题", placeholder="例如:哪个月的销售额最高?")

    submit_btn = gr.Button("分析")

    with gr.Row():
        output_text = gr.Textbox(label="分析结果", interactive=False)
        output_data = gr.Dataframe(label="数据预览")

    # 示例问题
    examples = [
        #["示例数据.xlsx", "哪个月的销售额最高?"],
        #["示例数据.xlsx", "按产品类别分组并计算平均价格"],
        #["示例数据.xlsx", "绘制销售额随时间变化的趋势图"]
    ]

    # 设置交互
    submit_btn.click(
        fn=analyze_excel,
        inputs=[file_input, query_input],
        outputs=[output_text, output_data]
    )

    gr.Examples(
        examples=examples,
        inputs=[file_input, query_input],
        outputs=[output_text, output_data],
        fn=analyze_excel,
        cache_examples=True
    )

# 启动应用
if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=7860)

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐