66from utils .data .datahub_services .base_client import DataHubBaseClient
77from utils .data .datahub_services .glossary_service import GlossaryService
88from utils .data .datahub_services .query_service import QueryService
9+ from utils .llm .retrieval import search_glossary , search_query_examples
910
1011
1112@tool
@@ -105,11 +106,11 @@ def _simplify_glossary_data(glossary_data):
105106
106107
107108@tool
108- def get_glossary_terms (gms_server : str = "http://35.222.65.99:8080" ) -> list :
109+ def get_glossary_terms (query : str , force_update : bool = False ) -> list :
109110 """
110- DataHub에서 용어집(Glossary) 정보를 조회합니다 .
111+ DataHub에서 용어집(Glossary) 정보를 검색합니다 .
111112
112- 이 함수는 DataHub 서버에 연결하여 전체 용어집 데이터를 가져옵니다 .
113+ 이 함수는 사용자의 질문과 관련된 용어 정의를 찾기 위해 Vector Search를 수행합니다 .
113114 용어집은 비즈니스 용어, 도메인 지식, 데이터 정의 등을 표준화하여 관리하는 곳입니다.
114115
115116 **중요**: 사용자의 질문이나 대화에서 다음과 같은 상황이 발생하면 반드시 이 도구를 사용하세요:
@@ -120,40 +121,26 @@ def get_glossary_terms(gms_server: str = "http://35.222.65.99:8080") -> list:
120121 5. 표준 정의가 필요한 비즈니스 용어가 나왔을 때
121122
122123 Args:
123- gms_server (str, optional ): DataHub GMS 서버 URL입니다 .
124- 기본값은 "http://35.222.65.99:8080"
124+ query (str): 검색할 용어 또는 관련 질문입니다 .
125+ force_update (bool, optional): True일 경우 데이터를 새로고침하여 검색 인덱스를 재생성합니다. 기본값은 False.
125126
126127 Returns:
127- list: 간소화된 용어집 데이터 리스트입니다.
128- 각 항목은 name, description, children(선택적) 필드를 포함합니다.
128+ list: 검색된 용어집 데이터 리스트입니다.
129+ 각 항목은 name, description 등을 포함합니다.
129130
130131 예시 형태:
131132 [
132133 {
133134 "name": "가짜연구소",
134135 "description": "스터디 단체 가짜연구소를 의미하며...",
135- "children": [
136- {
137- "name": "빌더",
138- "description": "가짜연구소 스터디 리더를 지칭..."
139- }
140- ]
136+ "type": "term"
141137 },
142- {
143- "name": "PII",
144- "description": "개인 식별 정보...",
145- "children": [
146- {
147- "name": "identifier",
148- "description": "개인식별정보중 github 아이디..."
149- }
150- ]
151- }
138+ ...
152139 ]
153140
154141 Examples:
155- >>> get_glossary_terms()
156- [{'name': '가짜연구소 ', 'description': '...', 'children': [ ...] }]
142+ >>> get_glossary_terms("PII가 뭐야?" )
143+ [{'name': 'PII ', 'description': '개인 식별 정보 ...', ...}]
157144
158145 Note:
159146 이 도구는 다음과 같은 경우에 **반드시** 사용하세요:
@@ -178,37 +165,22 @@ def get_glossary_terms(gms_server: str = "http://35.222.65.99:8080") -> list:
178165 있는지 확인하고, 있다면 먼저 이 도구를 호출하여 정확한 정의를 파악하세요.
179166 """
180167 try :
181- # DataHub 클라이언트 초기화
182- client = DataHubBaseClient (gms_server = gms_server )
183-
184- # GlossaryService 초기화
185- glossary_service = GlossaryService (client )
186-
187- # 전체 용어집 데이터 가져오기
188- glossary_data = glossary_service .get_glossary_data ()
168+ return search_glossary (query = query , force_update = force_update )
189169
190- # 간소화된 데이터 반환
191- simplified_data = _simplify_glossary_data (glossary_data )
192-
193- return simplified_data
194-
195- except ValueError as e :
196- return {"error" : True , "message" : f"DataHub 서버 연결 실패: { str (e )} " }
197170 except Exception as e :
198171 return {"error" : True , "message" : f"용어집 조회 중 오류 발생: { str (e )} " }
199172
200173
201174@tool
202175def get_query_examples (
203- gms_server : str = "http://35.222.65.99:8080" ,
204- start : int = 0 ,
205- count : int = 10 ,
206- query : str = "*" ,
176+ query : str ,
177+ force_update : bool = False ,
178+ count : int = 5 ,
207179) -> list :
208180 """
209- DataHub에서 저장된 쿼리 예제들을 조회합니다 .
181+ DataHub에서 저장된 쿼리 예제들을 검색합니다 .
210182
211- 이 함수는 DataHub 서버에 연결하여 저장된 SQL 쿼리 목록을 가져옵니다 .
183+ 이 함수는 사용자의 질문과 관련된 SQL 쿼리 예제를 찾기 위해 Vector Search를 수행합니다 .
212184 조직에서 실제로 사용되고 검증된 쿼리 패턴을 참고하여 더 정확한 SQL을 생성할 수 있습니다.
213185
214186 **중요**: 사용자의 질문이나 대화에서 다음과 같은 상황이 발생하면 반드시 이 도구를 사용하세요:
@@ -220,11 +192,9 @@ def get_query_examples(
220192 6. 조직 내에서 검증된 쿼리 작성 방식을 확인해야 할 때
221193
222194 Args:
223- gms_server (str, optional): DataHub GMS 서버 URL입니다.
224- 기본값은 "http://35.222.65.99:8080"
225- start (int, optional): 조회 시작 위치입니다. 기본값은 0
226- count (int, optional): 조회할 쿼리 개수입니다. 기본값은 10
227- query (str, optional): 검색 쿼리입니다. 기본값은 "*" (모든 쿼리)
195+ query (str): 검색할 쿼리 관련 질문이나 키워드입니다.
196+ force_update (bool, optional): True일 경우 데이터를 새로고침하여 검색 인덱스를 재생성합니다. 기본값은 False.
197+ count (int, optional): 반환할 검색 결과 개수입니다. 기본값은 5.
228198
229199 Returns:
230200 list: 쿼리 정보 리스트입니다.
@@ -237,19 +207,12 @@ def get_query_examples(
237207 "description": "각 고객별 주문 건수를 집계하는 쿼리",
238208 "statement": "SELECT customer_id, COUNT(*) as order_count FROM orders GROUP BY customer_id"
239209 },
240- {
241- "name": "월별 매출 현황",
242- "description": "월별 총 매출을 계산하는 쿼리",
243- "statement": "SELECT DATE_TRUNC('month', order_date) as month, SUM(amount) FROM orders GROUP BY month"
244- }
210+ ...
245211 ]
246212
247213 Examples:
248- >>> get_query_examples()
249- [{'name': '고객별 주문 수 조회', 'description': '...', 'statement': 'SELECT ...'}]
250-
251- >>> get_query_examples(count=5)
252- # 5개의 쿼리 예제만 조회
214+ >>> get_query_examples("매출 집계 쿼리 보여줘")
215+ [{'name': '월별 매출 현황', 'description': '...', 'statement': 'SELECT ...'}]
253216
254217 Note:
255218 이 도구는 다음과 같은 경우에 **반드시** 사용하세요:
@@ -280,33 +243,10 @@ def get_query_examples(
280243 SQL을 생성하는 데 큰 도움이 됩니다.
281244 """
282245 try :
283- # DataHub 클라이언트 초기화
284- client = DataHubBaseClient (gms_server = gms_server )
285-
286- # QueryService 초기화
287- query_service = QueryService (client )
288-
289- # 쿼리 데이터 가져오기
290- result = query_service .get_query_data (start = start , count = count , query = query )
291-
292- # 오류 체크
293- if "error" in result and result ["error" ]:
294- return {"error" : True , "message" : result .get ("message" )}
295-
296- # name, description, statement만 추출하여 리스트 생성
297- simplified_queries = []
298- for query_item in result .get ("queries" , []):
299- simplified_query = {
300- "name" : query_item .get ("name" ),
301- "description" : query_item .get ("description" , "" ),
302- "statement" : query_item .get ("statement" , "" ),
303- }
304- simplified_queries .append (simplified_query )
305-
306- return simplified_queries
246+ return search_query_examples (
247+ query = query , force_update = force_update , top_n = count
248+ )
307249
308- except ValueError as e :
309- return {"error" : True , "message" : f"DataHub 서버 연결 실패: { str (e )} " }
310250 except Exception as e :
311251 return {
312252 "error" : True ,
0 commit comments