Skip to content

Commit e6c54d0

Browse files
authored
Merge pull request #135 from #134
134 프로젝트 리팩토링
2 parents c21facf + ddc9fe2 commit e6c54d0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+7285
-6514
lines changed

.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
###############################################
44
LLM_PROVIDER=openai
55

6-
OPENAI_API_KEY=sk-proj-
6+
OPEN_AI_KEY=sk-proj-
77
LANGCHAIN_TRACING_V2=true
88
LANGCHAIN_PROJECT=langgraph_tutorial
99
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com

.github/workflows/pypi-release.yml

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Publish Python Package to PyPI
1+
name: Publish Python Package to PyPI (uv)
22

33
on:
44
push:
@@ -15,18 +15,20 @@ jobs:
1515
uses: actions/checkout@v4
1616

1717
- name: Set up Python
18-
uses: actions/setup-python@v4
18+
uses: actions/setup-python@v5
1919
with:
2020
python-version: "3.x"
2121

22-
- name: Install dependencies
23-
run: |
24-
python -m pip install --upgrade pip setuptools wheel twine
22+
- name: Install uv
23+
uses: astral-sh/setup-uv@v3
2524

26-
- name: Build package (setup.py)
27-
run: python setup.py sdist bdist_wheel
25+
- name: Build sdist/wheel with uv
26+
run: |
27+
uv build
2828
29-
- name: Publish to PyPI
29+
- name: Publish to PyPI with uv
3030
env:
31-
PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
32-
run: twine upload --username __token__ --password $PYPI_API_TOKEN dist/*
31+
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
32+
run: |
33+
uv publish --token $UV_PUBLISH_TOKEN
34+

README.md

Lines changed: 54 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,32 @@ Lang2SQL은 자연어 쿼리를 최적화된 SQL 문으로 변환하는 오픈
5656
### 빠른 설치
5757

5858
```bash
59+
# pip
5960
pip install lang2sql
61+
62+
# uv
63+
uv venv --python 3.11
64+
source .venv/bin/activate
65+
uv add lang2sql
6066
```
6167

6268
### 소스에서 설치
6369

6470
```bash
71+
# 소스 클론
6572
git clone https://github.com/CausalInferenceLab/lang2sql.git
6673
cd lang2sql
67-
pip install -r requirements.txt
68-
python setup.py install
74+
75+
# (권장) uv 사용
76+
# uv 설치가 되어 있다면 아래 두 줄로 개발 모드 설치
77+
uv venv
78+
source .venv/bin/activate
79+
uv pip install -e .
80+
81+
# (대안) pip 사용
82+
python -m venv .venv
83+
source .venv/bin/activate
84+
pip install -e .
6985
```
7086

7187
---
@@ -86,6 +102,18 @@ lang2sql run-streamlit
86102
lang2sql --datahub_server http://your-datahub-server:8080 run-streamlit -p 8888
87103
```
88104

105+
참고: Streamlit 서버는 `0.0.0.0` 으로 바인딩되어 외부에서 접속 가능합니다.
106+
107+
### Graph Builder 페이지
108+
109+
Streamlit 앱은 멀티 페이지 구조입니다. 좌측 네비게이션에서 "Graph Builder" 페이지를 열어 LangGraph 워크플로우를 구성할 수 있습니다.
110+
111+
- 프리셋 선택: "기본" 또는 "확장"
112+
- 커스텀 옵션: `PROFILE_EXTRACTION`, `CONTEXT_ENRICHMENT`, `QUERY_MAKER` 포함 여부 토글
113+
- 선택이 바뀌면 그래프가 즉시 컴파일되어 세션에 적용됩니다
114+
- "세션 그래프 새로고침" 버튼으로 수동 재적용 가능
115+
- `QUERY_MAKER`를 비활성화하면 테이블 검색 정보만 표시됩니다
116+
89117
### VectorDB 선택
90118

91119
FAISS(로컬) 또는 pgvector(PostgreSQL) 중 선택:
@@ -96,8 +124,23 @@ lang2sql --vectordb-type faiss run-streamlit
96124

97125
# pgvector 사용
98126
lang2sql --vectordb-type pgvector run-streamlit
127+
128+
# 위치 지정 예시
129+
# FAISS: 인덱스 디렉토리 경로 지정
130+
lang2sql --vectordb-type faiss --vectordb-location ./table_info_db run-streamlit
131+
132+
# pgvector: 연결 문자열 지정
133+
lang2sql --vectordb-type pgvector --vectordb-location "postgresql://user:pass@host:5432/db" run-streamlit
99134
```
100135

136+
참고: DataHub 없이도 미리 준비된 VectorDB(FAISS 디렉토리 혹은 pgvector 컬렉션)를 바로 사용할 수 있습니다. 자세한 준비 방법은 [DataHub 없이 시작하기](docs/tutorials/getting-started-without-datahub.md)를 참고하세요.
137+
138+
### 처음 시작하기 (DataHub 없이)
139+
140+
튜토리얼 본문이 길어져 별도 문서로 분리되었습니다. 아래 문서를 참고하세요.
141+
142+
- [DataHub 없이 시작하기 튜토리얼](docs/tutorials/getting-started-without-datahub.md)
143+
101144
### 자연어 쿼리 실행
102145

103146
```bash
@@ -110,10 +153,11 @@ lang2sql query "고객 데이터를 기반으로 유니크한 유저 수를 카
110153

111154
### 환경 설정
112155

113-
- 현재는 pip 패키지 설치로 프로젝트 시작이 어려운 상황입니다.
114-
- `.env` 파일을 생성하여 설정 관리 (.env.example 참고)
115-
116-
---
156+
- `.env` 파일을 생성하여 설정을 관리합니다. (예시 파일이 있다면 참조)
157+
- 또는 CLI 옵션으로 환경을 지정할 수 있습니다:
158+
- `--env-file-path`: 환경 변수 파일 경로 지정
159+
- `--prompt-dir-path`: 프롬프트 템플릿(.md) 디렉토리 지정
160+
- `--datahub_server`: DataHub GMS 서버 URL 지정
117161

118162
## 🏗️ 아키텍처
119163

@@ -156,11 +200,6 @@ Lang2SQL은 LangGraph를 사용한 다단계 접근 방식을 따릅니다:
156200
- 현재는 Datahub를 통해 로컬에 FAISS VectorDB를 생성해야만 사용 가능한 구조입니다.
157201
- 이 결합도를 낮춰서 Datahub 없이도 기존에 준비된 VectorDB만 있으면 바로 활용할 수 있도록 아키텍처를 개선하는 작업입니다.
158202

159-
### 출력 포맷 강화
160-
161-
- 현재 Streamlit을 통한 웹 인터페이스만 지원하고 있습니다.
162-
- CLI, JSON 등 다양한 출력 포맷을 지원하여 사용자가 선호하는 환경에서 유연하게 활용할 수 있도록 개선합니다.
163-
164203
### 모니터링 / 로깅 강화
165204

166205
- 프로젝트 사용 패턴과 성능을 모니터링하고, 상세한 로깅 시스템을 구축합니다.
@@ -171,6 +210,10 @@ Lang2SQL은 LangGraph를 사용한 다단계 접근 방식을 따릅니다:
171210
- 프로젝트 기여 장벽을 낮추기 위한 포괄적인 문서화 작업입니다.
172211
- 개발자 가이드, 튜토리얼 등을 체계적으로 정리하여 새로운 기여자들이 쉽게 참여할 수 있는 환경을 조성합니다.
173212

213+
### LLM 프론트에서 분리하기
214+
215+
프런트에서는 LLM 호출·키를 제거하고 내부 백엔드 API로 위임해 보안·권한·모니터링을 중앙화합니다.
216+
174217
---
175218

176219
## 🤝 기여하기

cli/__init__.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import click
1313
import dotenv
1414

15-
from llm_utils.check_server import CheckServer
15+
from infra.monitoring.check_server import CheckServer
1616
from llm_utils.tools import set_gms_server
1717
from version import __version__
1818

@@ -195,6 +195,7 @@ def run_streamlit_command(port: int) -> None:
195195
"streamlit",
196196
"run",
197197
"interface/streamlit_app.py",
198+
"--server.address=0.0.0.0",
198199
"--server.port",
199200
str(port),
200201
],
@@ -265,11 +266,6 @@ def run_streamlit_cli_command(port: int) -> None:
265266
is_flag=True,
266267
help="확장된 그래프(프로파일 추출 + 컨텍스트 보강) 사용 여부",
267268
)
268-
@click.option(
269-
"--use-simplified-graph",
270-
is_flag=True,
271-
help="단순화된 그래프(QUERY_REFINER 제거) 사용 여부",
272-
)
273269
@click.option(
274270
"--vectordb-type",
275271
type=click.Choice(["faiss", "pgvector"]),
@@ -292,7 +288,6 @@ def query_command(
292288
top_n: int,
293289
device: str,
294290
use_enriched_graph: bool,
295-
use_simplified_graph: bool,
296291
vectordb_type: str = "faiss",
297292
vectordb_location: str = None,
298293
) -> None:
@@ -317,7 +312,7 @@ def query_command(
317312
"""
318313

319314
try:
320-
from llm_utils.query_executor import execute_query, extract_sql_from_result
315+
from engine.query_executor import execute_query, extract_sql_from_result
321316

322317
# VectorDB 타입을 환경 변수로 설정
323318
os.environ["VECTORDB_TYPE"] = vectordb_type
@@ -334,7 +329,6 @@ def query_command(
334329
top_n=top_n,
335330
device=device,
336331
use_enriched_graph=use_enriched_graph,
337-
use_simplified_graph=use_simplified_graph,
338332
)
339333

340334
# SQL 추출 및 출력

0 commit comments

Comments
 (0)