22
33이 문서는 DataHub 없이도 Lang2SQL을 바로 사용하기 위한 최소 절차를 설명합니다. CSV로 테이블/컬럼 설명을 준비해 FAISS 또는 pgvector에 적재한 뒤 Lang2SQL을 실행합니다.
44
5+ ### 0) 준비
6+
7+ ``` bash
8+ # 소스 클론
9+ git clone https://github.com/CausalInferenceLab/lang2sql.git
10+ cd lang2sql
11+
12+ # (권장) uv 사용
13+ # uv 설치가 되어 있다면 아래 두 줄로 개발 모드 설치
14+ uv venv --python 3.11
15+ source .venv/bin/activate
16+ uv pip install -e .
17+
18+ # (대안) pip 사용
19+ python -m venv .venv
20+ source .venv/bin/activate
21+ pip install -e .
22+ ```
23+
524### 1) .env 최소 설정 (OpenAI 기준)
625
726``` bash
@@ -20,11 +39,15 @@ VECTORDB_LOCATION=./table_info_db # FAISS 디렉토리 경로
2039# VECTORDB_TYPE=pgvector
2140# VECTORDB_LOCATION=postgresql://user:pass@host:5432/db
2241# PGVECTOR_COLLECTION=table_info_db
42+
43+ # DB 타입
44+ DB_TYPE=clickhouse
2345```
2446
2547중요: 코드상 OpenAI 키는 ` OPEN_AI_KEY ` 환경변수를 사용합니다. ` .example.env ` 의 ` OPENAI_API_KEY ` 는 사용되지 않으니 혼동에 주의하세요.
2648
2749### 2) 테이블/컬럼 메타데이터 준비(CSV 예시)
50+ - table_catalog.csv
2851
2952``` csv
3053table_name,table_description,column_name,column_description
@@ -40,13 +63,31 @@ orders,주문 정보 테이블,status,주문 상태
4063### 3) FAISS 인덱스 생성(로컬)
4164
4265``` python
66+ """
67+ create_faiss.py
68+
69+ CSV 파일에서 테이블과 컬럼 정보를 불러와 OpenAI 임베딩으로 벡터화한 뒤,
70+ FAISS 인덱스를 생성하고 로컬 디렉토리에 저장한다.
71+
72+ 환경 변수:
73+ OPEN_AI_KEY: OpenAI API 키
74+ OPEN_AI_EMBEDDING_MODEL: 사용할 임베딩 모델 이름
75+
76+ 출력:
77+ 지정된 OUTPUT_DIR 경로에 FAISS 인덱스 저장
78+ """
79+
80+ import csv
81+ import os
4382from collections import defaultdict
44- import csv, os
45- from langchain_openai import OpenAIEmbeddings
83+
84+ from dotenv import load_dotenv
4685from langchain_community.vectorstores import FAISS
86+ from langchain_openai import OpenAIEmbeddings
4787
48- CSV_PATH = " ./table_catalog.csv" # 위 CSV 파일 경로
49- OUTPUT_DIR = " ./table_info_db" # VECTORDB_LOCATION과 동일하게 맞추세요
88+ load_dotenv()
89+ CSV_PATH = " ./table_catalog.csv" # 위 CSV 파일 경로
90+ OUTPUT_DIR = " ./table_info_db" # .env 파일의 VECTORDB_LOCATION 값과 동일하게 맞추세요.
5091
5192tables = defaultdict(lambda : {" desc" : " " , " columns" : []})
5293with open (CSV_PATH , newline = " " , encoding = " utf-8" ) as f:
@@ -63,9 +104,12 @@ for t, info in tables.items():
63104 cols = " \n " .join([f " { c} : { d} " for c, d in info[" columns" ]])
64105 page = f " { t} : { info[' desc' ]} \n Columns: \n { cols} "
65106 from langchain.schema import Document
107+
66108 docs.append(Document(page_content = page))
67109
68- emb = OpenAIEmbeddings(model = os.getenv(" OPEN_AI_EMBEDDING_MODEL" ), openai_api_key = os.getenv(" OPEN_AI_KEY" ))
110+ emb = OpenAIEmbeddings(
111+ model = os.getenv(" OPEN_AI_EMBEDDING_MODEL" ), openai_api_key = os.getenv(" OPEN_AI_KEY" )
112+ )
69113db = FAISS .from_documents(docs, emb)
70114os.makedirs(OUTPUT_DIR , exist_ok = True )
71115db.save_local(OUTPUT_DIR )
@@ -119,5 +163,3 @@ print(f"pgvector collection populated: {COLLECTION}")
119163```
120164
121165주의: FAISS 디렉토리가 없으면 현재 코드는 DataHub에서 메타데이터를 가져와 인덱스를 생성하려고 시도합니다. DataHub를 사용하지 않는 경우 위 절차로 사전에 VectorDB를 만들어 두세요.
122-
123-
0 commit comments