import streamlit as st
import pandas as pd
from langchain_experimental.agents import create_csv_agent
from langchain_community.llms import OpenAI
from langchain.tools import Tool
from langchain_community.chat_models import ChatOpenAI
from dotenv import load_dotenv
import os
load_dotenv()
# OpenAI API Key 설정
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
# Streamlit에서 파일 업로드
st.title("Multiple CSV Agent")
uploaded_files = st.file_uploader("CSV 파일들을 업로드하세요", type=["csv"], accept_multiple_files=True)
# 모든 CSV 파일을 데이터프레임으로 로드
dataframes = {}
files_path = [] # csv 파일 경로
for uploaded_file in uploaded_files:
df = pd.read_csv(uploaded_file, on_bad_lines="skip") # 열 크기가 맞지 않는 행은 무시
dataframes[uploaded_file.name] = df #
files_path.append(f"./files/jeju/{uploaded_file.name}")
st.write(f"{uploaded_file.name} 데이터 미리보기:")
st.dataframe(df)
# 사용자 질문 입력
question = st.text_input("질문을 입력하세요:")
if question:
# LangChain Agent 생성
tools = []
for name, df in dataframes.items():
# 각각의 CSV 파일을 하나의 Tool로 등록
tool = Tool(
name=name,
func=lambda query, df=df: df.query(query),
description=f"Analyze the {name} dataset."
)
tools.append(tool)
# OpenAI LLM 초기화
llm = ChatOpenAI(
model="gpt-4o",
temperature=0.1,
streaming=True,
openai_api_key = OPENAI_API_KEY,
)
# Agent 생성 및 질문 실행
agent = create_csv_agent(
llm=llm, # 모델 지정
path=files_path, # csv 파일 경로들
pandas_kwargs={"on_bad_lines":"skip"}, # 열 크기가 맞지 않는 행은 무시
tools=tools,
verbose=True,
allow_dangerous_code=True, # 보안 무시 (*로컬 컴퓨터에서만 실행!*)
)
response = agent.run(question)
# 응답 출력
st.write("AI 응답:")
st.text(response)
질문에 대한 응답의 정확도가 낮음
시스템 메시지의 부재
예시 프롬프트의 부재