2
2
3
3
이 문서는 DataHub 없이도 Lang2SQL을 바로 사용하기 위한 최소 절차를 설명합니다. CSV로 테이블/컬럼 설명을 준비해 FAISS 또는 pgvector에 적재한 뒤 Lang2SQL을 실행합니다.
4
4
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
+
5
24
### 1) .env 최소 설정 (OpenAI 기준)
6
25
7
26
``` bash
@@ -20,11 +39,15 @@ VECTORDB_LOCATION=./table_info_db # FAISS 디렉토리 경로
20
39
# VECTORDB_TYPE=pgvector
21
40
# VECTORDB_LOCATION=postgresql://user:pass@host:5432/db
22
41
# PGVECTOR_COLLECTION=table_info_db
42
+
43
+ # DB 타입
44
+ DB_TYPE=clickhouse
23
45
```
24
46
25
47
중요: 코드상 OpenAI 키는 ` OPEN_AI_KEY ` 환경변수를 사용합니다. ` .example.env ` 의 ` OPENAI_API_KEY ` 는 사용되지 않으니 혼동에 주의하세요.
26
48
27
49
### 2) 테이블/컬럼 메타데이터 준비(CSV 예시)
50
+ - table_catalog.csv
28
51
29
52
``` csv
30
53
table_name,table_description,column_name,column_description
@@ -40,13 +63,31 @@ orders,주문 정보 테이블,status,주문 상태
40
63
### 3) FAISS 인덱스 생성(로컬)
41
64
42
65
``` 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
43
82
from collections import defaultdict
44
- import csv, os
45
- from langchain_openai import OpenAIEmbeddings
83
+
84
+ from dotenv import load_dotenv
46
85
from langchain_community.vectorstores import FAISS
86
+ from langchain_openai import OpenAIEmbeddings
47
87
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 값과 동일하게 맞추세요.
50
91
51
92
tables = defaultdict(lambda : {" desc" : " " , " columns" : []})
52
93
with open (CSV_PATH , newline = " " , encoding = " utf-8" ) as f:
@@ -63,9 +104,12 @@ for t, info in tables.items():
63
104
cols = " \n " .join([f " { c} : { d} " for c, d in info[" columns" ]])
64
105
page = f " { t} : { info[' desc' ]} \n Columns: \n { cols} "
65
106
from langchain.schema import Document
107
+
66
108
docs.append(Document(page_content = page))
67
109
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
+ )
69
113
db = FAISS .from_documents(docs, emb)
70
114
os.makedirs(OUTPUT_DIR , exist_ok = True )
71
115
db.save_local(OUTPUT_DIR )
@@ -119,5 +163,3 @@ print(f"pgvector collection populated: {COLLECTION}")
119
163
```
120
164
121
165
주의: FAISS 디렉토리가 없으면 현재 코드는 DataHub에서 메타데이터를 가져와 인덱스를 생성하려고 시도합니다. DataHub를 사용하지 않는 경우 위 절차로 사전에 VectorDB를 만들어 두세요.
122
-
123
-
0 commit comments