-
Notifications
You must be signed in to change notification settings - Fork 3
Week1
동욱 edited this page Mar 4, 2025
·
6 revisions
- GitHub 저장소 클론
git clone https://github.com/CausalInferenceLab/Lang2SQL
- 프로젝트 디렉터리 이동
cd Lang2SQL
- 환경변수 설정 파일
.env
생성 및 설정# 필수 환경변수 (현재 ChatGPT만 지원됨) OPENAI_API_KEY=sk-proj-OJwm9QBxu~~ # LangSmith 관련 환경변수 LANGCHAIN_TRACING_V2=true LANGCHAIN_PROJECT=langgraph_tutorial LANGCHAIN_ENDPOINT=https://api.smith.langchain.com LANGCHAIN_API_KEY=lsv2_~~ # DataHub 서버 설정 DATAHUB_SERVER=http://localhost:8080
- 패키지 설치
pip install .
- Streamlit 서버 실행
lang2sql --datahub_server http://34.125.140.137:8080 run-streamlit
- DataHub 대시보드 접속
- http://34.125.140.137:9002
- ID:
datahub
, PW:datahub
- 현재 회사의 데이터 카탈로그를 확인할 수 있는 Datahub로 가정
- 원본 프로젝트
- 수정본 프로젝트
- 원본의 프로젝트에다가 sql 과 schema 관련 yml을 일부 수정해서 회사 데이터로 가정
- 현재 schema를 정리한 부분은 subscription_activities 로 구독관련 더미데이터로 확인

-
사용자 입력 처리
-
query_refiner
노드에서 사용자 입력을 보다 구체적인 질의로 변환 - 예시:
- 입력:
구독서비스를 이용하는 유니크한 유저수
- 변환 결과:
"최근 3개월 동안 구독 서비스에 가입한 유니크한 유저 수를 월별로 분석하고, 이 중에서 반복적인 구독을 유지한 유저 비율을 파악하여 유저 유지율을 평가하고 싶다." 가정된 조건: - 분석 대상: 최근 3개월 간의 구독 활동 로그 - 유니크 유저 수: 각 월별로 중복되지 않는 사용자 수 - 반복 구독 유지율: 2회 이상 구독한 사용자 비율
- 입력:
-
-
테이블 검색 (
get_table_info
노드)- DataHub 데이터를 조회하여 FAISS를 이용해 벡터화
- 벡터 DB에서 재정의된 사용자 질문을 기반으로 유사한 테이블 검색 (
db.similarity_search
) - 검색된 테이블 목록
searched_tables
에 저장
-
쿼리 생성 (
query_maker
노드)- 다음 정보를 기반으로 SQL 쿼리 생성
- 첫 사용자 질문 (원본 입력)
- 재정의된 질문 (
query_refiner
노드에서 변환된 입력) - 검색된 테이블 목록 (
get_table_info
노드에서 찾은 값) -
user_database_env
값 (초기 사용자 입력값)
- 다음 정보를 기반으로 SQL 쿼리 생성
-
각자 하고싶은 부분 이슈 생성하기 입니다. 아래는 예시입니다.
- 반드시 직접 작업할 부분이 아니더라도 필요한 기능이나 개선이 필요한 부분에 대해 자유롭게 이슈를 생성할 수 있습니다.
- Best Practice 쿼리 활용 기능 추가
class QueryMakerState(TypedDict):
messages: Annotated[list, add_messages]
user_database_env: str
searched_tables: dict[str, dict[str, str]]
best_practice_query: str
refined_input: str
generated_query: str
-
현재
best_practice_query
변수가 존재하지만 쿼리 생성에 사용되지 않음 -
best_practice_input
을 추가하여 과거 유사한 질문이 있었다면 이를 참고해 쿼리를 생성하도록 개선 -
혹은 해당 내용도 저장할 수 있다면 점점 답변의 퀄리티가 올라갈 가능성이 높음
-
openai_api_key 입력받도록 하기
llm = get_llm(
model_type="openai",
model_name="gpt-4o-mini",
openai_api_key=os.getenv("OPENAI_API_KEY"),
)
-
현재 환경변수에서
OPENAI_API_KEY
값을 가져오고 있음 -
Streamlit UI에서 API 키를 직접 입력할 수 있도록 개선 혹은 다른 모델 지원 (hugging-face ...)
-
프롬프트 강화하기 (쿼리를 생성하기엔 너무 간단한 프롬프트)
-
쿼리 실행부분 추가 (쿼리 생성 + 실행해서 시각화 + 분석 etc)
-
테이블 retrieval 강화 (reranking ...)
-
서버단 추가 (현재 streamlit에서 llm을 생성하고 있어서 여러 사용자가 사용하면 아마 꼬일듯합니다.)
-
etc...