@@ -33,11 +33,11 @@ OPEN_AI_EMBEDDING_MODEL=text-embedding-3-large # 권장
3333
3434# VectorDB (선택: 명시하지 않으면 기본값 동작)
3535VECTORDB_TYPE=faiss
36- VECTORDB_LOCATION=. /table_info_db # FAISS 디렉토리 경로
36+ VECTORDB_LOCATION=dev /table_info_db # FAISS 디렉토리 경로
3737
3838# (pgvector를 쓰는 경우)
3939# VECTORDB_TYPE=pgvector
40- # VECTORDB_LOCATION=postgresql://user:pass@host :5432/db
40+ # VECTORDB_LOCATION=postgresql://pgvector:pgvector@localhost :5432/postgres
4141# PGVECTOR_COLLECTION=table_info_db
4242
4343# DB 타입
@@ -46,9 +46,8 @@ DB_TYPE=clickhouse
4646
4747중요: 코드상 OpenAI 키는 ` OPEN_AI_KEY ` 환경변수를 사용합니다. ` .example.env ` 의 ` OPENAI_API_KEY ` 는 사용되지 않으니 혼동에 주의하세요.
4848
49- ### 2) 테이블/컬럼 메타데이터 준비(CSV 예시)
50- - table_catalog.csv
51-
49+ ### 2) 테이블/컬럼 메타데이터 준비 (CSV 예시)
50+ - dev/table_catalog.csv 파일을 생성합니다.
5251``` csv
5352table_name,table_description,column_name,column_description
5453customers,고객 정보 테이블,customer_id,고객 고유 ID
@@ -60,11 +59,12 @@ orders,주문 정보 테이블,amount,결제 금액
6059orders,주문 정보 테이블,status,주문 상태
6160```
6261
63- ### 3) FAISS 인덱스 생성(로컬)
64-
62+ ### 3) FAISS 인덱스 생성 (로컬)
63+ - dev/create_faiss.py 파일을 실행합니다.
64+ - ` python dev/create_faiss.py `
6565``` python
6666"""
67- create_faiss.py
67+ dev/ create_faiss.py
6868
6969CSV 파일에서 테이블과 컬럼 정보를 불러와 OpenAI 임베딩으로 벡터화한 뒤,
7070FAISS 인덱스를 생성하고 로컬 디렉토리에 저장한다.
@@ -86,8 +86,10 @@ from langchain_community.vectorstores import FAISS
8686from langchain_openai import OpenAIEmbeddings
8787
8888load_dotenv()
89- CSV_PATH = " ./table_catalog.csv" # 위 CSV 파일 경로
90- OUTPUT_DIR = " ./table_info_db" # .env 파일의 VECTORDB_LOCATION 값과 동일하게 맞추세요.
89+ # CSV 파일 경로
90+ CSV_PATH = " ./dev/table_catalog.csv"
91+ # .env의 VECTORDB_LOCATION과 동일하게 맞추세요
92+ OUTPUT_DIR = " ./dev/table_info_db"
9193
9294tables = defaultdict(lambda : {" desc" : " " , " columns" : []})
9395with open (CSV_PATH , newline = " " , encoding = " utf-8" ) as f:
@@ -120,26 +122,47 @@ print(f"FAISS index saved to: {OUTPUT_DIR}")
120122
121123``` bash
122124# Streamlit UI
123- lang2sql --vectordb-type faiss --vectordb-location ./table_info_db run-streamlit
125+ lang2sql --vectordb-type faiss --vectordb-location ./dev/ table_info_db run-streamlit
124126
125127# CLI 예시
126- lang2sql query " 주문 수를 집계하는 SQL을 만들어줘" --vectordb-type faiss --vectordb-location ./table_info_db
128+ lang2sql query " 주문 수를 집계하는 SQL을 만들어줘" --vectordb-type faiss --vectordb-location ./dev/ table_info_db
127129
128130# CLI 예시 (pgvector)
129- lang2sql query " 주문 수를 집계하는 SQL을 만들어줘" --vectordb-type pgvector --vectordb-location " postgresql://postgres:postgres @localhost:5431 /postgres"
131+ lang2sql query " 주문 수를 집계하는 SQL을 만들어줘" --vectordb-type pgvector --vectordb-location " postgresql://pgvector:pgvector @localhost:5432 /postgres"
130132```
131133
132134### 5) (선택) pgvector로 적재하기
135+ - dev/create_pgvector.py 파일을 실행합니다.
136+ - ` python dev/create_pgvector.py `
133137
134138``` python
139+ """
140+ dev/create_pgvector.py
141+
142+ CSV 파일에서 테이블과 컬럼 정보를 불러와 OpenAI 임베딩으로 벡터화한 뒤,
143+ pgvector에 적재한다.
144+
145+ 환경 변수:
146+ OPEN_AI_KEY: OpenAI API 키
147+ OPEN_AI_EMBEDDING_MODEL: 사용할 임베딩 모델 이름
148+ VECTORDB_LOCATION: pgvector 연결 문자열
149+ PGVECTOR_COLLECTION: pgvector 컬렉션 이름
150+ """
151+
152+ import csv
153+ import os
135154from collections import defaultdict
136- import csv, os
155+
156+ from langchain.schema import Document
137157from langchain_openai import OpenAIEmbeddings
138158from langchain_postgres.vectorstores import PGVector
139- from langchain.schema import Document
140159
141- CSV_PATH = " ./table_catalog.csv"
142- CONN = os.getenv(" VECTORDB_LOCATION" ) or " postgresql://user:pass@host:5432/db"
160+ # CSV 파일 경로
161+ CSV_PATH = " ./dev/table_catalog.csv"
162+ # .env의 VECTORDB_LOCATION과 동일하게 맞추세요
163+ CONN = (
164+ os.getenv(" VECTORDB_LOCATION" ) or " postgresql://pgvector:pgvector@localhost:5432/postgres"
165+ )
143166COLLECTION = os.getenv(" PGVECTOR_COLLECTION" , " table_info_db" )
144167
145168tables = defaultdict(lambda : {" desc" : " " , " columns" : []})
@@ -157,8 +180,12 @@ for t, info in tables.items():
157180 cols = " \n " .join([f " { c} : { d} " for c, d in info[" columns" ]])
158181 docs.append(Document(page_content = f " { t} : { info[' desc' ]} \n Columns: \n { cols} " ))
159182
160- emb = OpenAIEmbeddings(model = os.getenv(" OPEN_AI_EMBEDDING_MODEL" ), openai_api_key = os.getenv(" OPEN_AI_KEY" ))
161- PGVector.from_documents(documents = docs, embedding = emb, connection = CONN , collection_name = COLLECTION )
183+ emb = OpenAIEmbeddings(
184+ model = os.getenv(" OPEN_AI_EMBEDDING_MODEL" ), openai_api_key = os.getenv(" OPEN_AI_KEY" )
185+ )
186+ PGVector.from_documents(
187+ documents = docs, embedding = emb, connection = CONN , collection_name = COLLECTION
188+ )
162189print (f " pgvector collection populated: { COLLECTION } " )
163190```
164191
0 commit comments