智充兽AI车载快充:车载共享充电模式解析与行业应用研究
2026/5/16 23:57:50
传统数据分析工具往往存在“工具链割裂”“需手动编写复杂逻辑”“对非技术人员不友好”等问题。而LangChain的出现,恰好解决了这些痛点:
对于开发者而言,LangChain无需从零搭建LLM交互框架,只需聚焦业务场景组合工具链,开发效率提升50%以上。
首先创建虚拟环境(避免依赖冲突),再安装所需包:
# 创建虚拟环境python -m venv langchain-data-env# 激活环境(Windows)langchain-data-env\Scripts\activate# 激活环境(Mac/Linux)sourcelangchain-data-env/bin/activate# 安装核心依赖pipinstalllangchain==0.1.12openai==1.13.3 pandas matplotlib sqlalchemy python-dotenv注意:安装过程中若出现“pycrypto依赖缺失”等报错,可手动安装对应依赖(如pip install pycrypto);国内用户建议使用清华镜像源(-i https://pypi.tuna.tsinghua.edu.cn/simple)加速安装。
创建.env文件,存储LLM API密钥、数据库连接信息等敏感数据:
# LLM配置(以OpenAI为例,其他LLM替换对应密钥) OPENAI_API_KEY="your-api-key" OPENAI_MODEL="gpt-3.5-turbo-1106" # 推荐使用该模型,平衡成本与效果 # 数据库配置(以MySQL为例,根据实际数据源修改) DB_HOST="localhost" DB_PORT=3306 DB_USER="root" DB_PASSWORD="your-db-password" DB_NAME="data_analysis_db" # LangChain配置 LANGCHAIN_TRACING_V2="true" # 开启追踪,方便调试 LANGCHAIN_API_KEY="your-langchain-api-key" # 可选,用于LangSmith调试在代码中通过dotenv加载环境变量,避免硬编码敏感信息:
fromdotenvimportload_dotenvimportos load_dotenv()# 加载.env文件openai_api_key=os.getenv("OPENAI_API_KEY")db_connection=f"mysql+pymysql://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{os.getenv('DB_NAME')}"本次开发的数据分析助手包含3大核心模块:
利用LangChain的CSVLoader快速加载本地文件,支持批量导入多个CSV:
fromlangchain.document_loaders.csv_loaderimportCSVLoaderfromlangchain.vectorstoresimportFAISSfromlangchain.embeddings.openaiimportOpenAIEmbeddings# 加载单个CSV文件loader=CSVLoader(file_path="sales_data_2024.csv",encoding="utf-8")data=loader.load()# 若需批量加载多个CSV,可遍历文件夹defload_batch_csv(folder_path):loaders=[]forfileinos.listdir(folder_path):iffile.endswith(".csv"):loaders.append(CSVLoader(file_path=os.path.join(folder_path,file)))return[loader.load()forloaderinloaders]# 可选:构建向量库,支持模糊查询(如“查找2024年3月的销售数据”)embeddings=OpenAIEmbeddings(openai_api_key=openai_api_key)vector_db=FAISS.from_documents(data,embeddings)通过SQLDatabase类对接数据库,支持直接执行LLM生成的SQL语句:
fromlangchain.utilitiesimportSQLDatabasefromlangchain.chainsimportcreate_sql_query_chain# 连接MySQL数据库db=SQLDatabase.from_uri(db_connection)# 创建SQL查询链:将自然语言转换为SQLllm=OpenAI(temperature=0,openai_api_key=openai_api_key,model_name=os.getenv("OPENAI_MODEL"))sql_chain=create_sql_query_chain(llm,db)# 测试:自然语言转SQLquery="统计2024年Q2各产品的销售额,按从高到低排序"sql=sql_chain.invoke({"question":query})print("生成的SQL语句:",sql)# 执行SQL并获取结果result=db.run(sql)print("分析结果:",result)通过LangChain的Agent实现复杂逻辑拆解,比如“筛选2024年Q2销售额超过50万的产品,且显示其毛利率”:
fromlangchain.agentsimportcreate_pandas_dataframe_agentimportpandasaspd# 加载CSV数据为DataFramedf=pd.read_csv("sales_data_2024.csv")# 创建Pandas Agentagent=create_pandas_dataframe_agent(llm,df,verbose=True,handle_parsing_errors="请重新表述你的问题,我将为你分析数据")# 自然语言提问question="筛选2024年Q2销售额超过50万的产品,显示产品名称、销售额、毛利率,按毛利率降序排列"response=agent.invoke({"input":question})print("最终分析结果:",response["output"])结合Matplotlib实现自动绘图,支持生成折线图、柱状图、饼图等,示例如下:
fromlangchain.toolsimportToolfromlangchain.agentsimportAgentExecutor,create_openai_tools_agentfromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholder# 定义绘图工具函数defplot_sales_trend(df):# 按月份分组计算销售额monthly_sales=df.groupby("月份")["销售额"].sum()# 绘制折线图monthly_sales.plot(kind="line",title="2024年销售额月度趋势",xlabel="月份",ylabel="销售额(万元)")plt.savefig("sales_trend.png",dpi=300,bbox_inches="tight")return"销售额趋势图已保存为sales_trend.png"# 将工具封装为LangChain Tooltools=[Tool(name="PlotSalesTrend",func=lambdax:plot_sales_trend(df),description="用于绘制销售额月度趋势图,无需输入参数,直接调用即可")]# 配置Agent提示词prompt=ChatPromptTemplate.from_messages([("system","你是数据分析助手,可调用绘图工具生成可视化图表,回答需简洁明了"),("user","{input}"),MessagesPlaceholder(variable_name="agent_scratchpad")])# 创建Agent并执行agent=create_openai_tools_agent(llm,tools,prompt)agent_executor=AgentExecutor(agent=agent,tools=tools,verbose=True)# 调用绘图功能response=agent_executor.invoke({"input":"绘制2024年销售额月度趋势图"})print(response["output"])将分析结果和可视化图表整合为自然语言报告,支持Markdown格式输出:
defgenerate_analysis_report(question,sql,result,plot_path=None):report=f""" # 数据分析报告 # 查询问题:{question} # 执行SQL: # 分析结果: {result} """ifplot_path:report+=f"\n# 可视化图表:"returnreport# 生成报告report=generate_analysis_report(query,sql,result,"sales_trend.png")print(report)以某电商平台2024年销售数据为例,完整实现“数据接入-自然语言查询-可视化-报告生成”全流程:
关键优化点: