11import os
2- from langchain_core .prompts import ChatPromptTemplate , MessagesPlaceholder
2+ from langchain_core .prompts import (
3+ ChatPromptTemplate ,
4+ MessagesPlaceholder ,
5+ SystemMessagePromptTemplate ,
6+ )
37
48from .llm_factory import get_llm
59
610from dotenv import load_dotenv
11+ from prompt .template_loader import get_prompt_template
712
813env_path = os .path .join (os .getcwd (), ".env" )
914
1621
1722
1823def create_query_refiner_chain (llm ):
24+ prompt = get_prompt_template ("query_refiner_prompt" )
1925 tool_choice_prompt = ChatPromptTemplate .from_messages (
2026 [
21- (
22- "system" ,
23- """
24- 당신은 데이터 분석 전문가(데이터 분석가 페르소나)입니다.
25- 현재 subscription_activities, contract_activities, marketing_activities,
26- sales_activities, success_activities, support_activities, trial_activities 데이터를
27- 보유하고 있으며, 사용자의 질문이 모호할 경우에도 우리가 가진 데이터를 기반으로
28- 충분히 답변 가능한 형태로 질문을 구체화해 주세요.
29-
30- 주의:
31- - 사용자에게 추가 정보를 요구하는 ‘재질문(추가 질문)’을 하지 마세요.
32- - 질문에 포함해야 할 요소(예: 특정 기간, 대상 유저 그룹, 분석 대상 로그 종류 등)가
33- 불충분하더라도, 합리적으로 추론해 가정한 뒤
34- 답변에 충분한 질문 형태로 완성해 주세요.
35-
36- 예시:
37- 사용자가 "유저 이탈 원인이 궁금해요"라고 했다면,
38- 재질문 형식이 아니라
39- "최근 1개월 간의 접속·결제 로그를 기준으로,
40- 주로 어떤 사용자가 어떤 과정을 거쳐 이탈하는지를 분석해야 한다"처럼
41- 분석 방향이 명확해진 질문 한 문장(또는 한 문단)으로 정리해 주세요.
42-
43- 최종 출력 형식 예시:
44- ------------------------------
45- 구체화된 질문:
46- "최근 1개월 동안 고액 결제 경험이 있는 유저가
47- 행동 로그에서 이탈 전 어떤 패턴을 보였는지 분석"
48-
49- 가정한 조건:
50- - 최근 1개월치 행동 로그와 결제 로그 중심
51- - 고액 결제자(월 결제액 10만 원 이상) 그룹 대상으로 한정
52- ------------------------------
53- """ ,
54- ),
27+ SystemMessagePromptTemplate .from_template (prompt ),
5528 MessagesPlaceholder (variable_name = "user_input" ),
56- (
57- "system" ,
29+ SystemMessagePromptTemplate .from_template (
5830 """
5931 위 사용자의 입력을 바탕으로
6032 분석 관점에서 **충분히 답변 가능한 형태**로
@@ -70,36 +42,11 @@ def create_query_refiner_chain(llm):
7042
7143# QueryMakerChain
7244def create_query_maker_chain (llm ):
45+ # SystemPrompt만 yaml 파일로 불러와서 사용
46+ prompt = get_prompt_template ("query_maker_prompt" )
7347 query_maker_prompt = ChatPromptTemplate .from_messages (
7448 [
75- (
76- "system" ,
77- """
78- 당신은 데이터 분석 전문가(데이터 분석가 페르소나)입니다.
79- 사용자의 질문을 기반으로, 주어진 테이블과 컬럼 정보를 활용하여 적절한 SQL 쿼리를 생성하세요.
80-
81- 주의사항:
82- - 사용자의 질문이 다소 모호하더라도, 주어진 데이터를 참고하여 합리적인 가정을 통해 SQL 쿼리를 완성하세요.
83- - 불필요한 재질문 없이, 가능한 가장 명확한 분석 쿼리를 만들어 주세요.
84- - 최종 출력 형식은 반드시 아래와 같아야 합니다.
85-
86- 최종 형태 예시:
87-
88- <SQL>
89- ```sql
90- SELECT COUNT(DISTINCT user_id)
91- FROM stg_users
92- ```
93-
94- <해석>
95- ```plaintext (max_length_per_line=100)
96- 이 쿼리는 stg_users 테이블에서 고유한 사용자의 수를 계산합니다.
97- 사용자는 유니크한 user_id를 가지고 있으며
98- 중복을 제거하기 위해 COUNT(DISTINCT user_id)를 사용했습니다.
99- ```
100-
101- """ ,
102- ),
49+ SystemMessagePromptTemplate .from_template (prompt ),
10350 (
10451 "system" ,
10552 "아래는 사용자의 질문 및 구체화된 질문입니다:" ,
@@ -123,3 +70,6 @@ def create_query_maker_chain(llm):
12370
12471query_refiner_chain = create_query_refiner_chain (llm )
12572query_maker_chain = create_query_maker_chain (llm )
73+
74+ if __name__ == "__main__" :
75+ query_refiner_chain .invoke ()
0 commit comments