Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 24 additions & 15 deletions config/prompts/composer_answer.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,63 +5,72 @@

{% if mode == "calc" %}
**계산 결과 요약**
- {{ calc.summary or summary }}
- {{ calc.summary or summary | truncate(280, True, '...') }}
{% if calc.limit %}
- 예상 대출 한도: **{{ calc.limit | default("-") }}**
- 예상 대출 한도: **{{ calc.limit | round(2) | default("-") }}**
{% endif %}
{% if calc.monthly_payment %}
- 예상 월 상환액: **{{ calc.monthly_payment | default("-") }}**
- 예상 월 상환액: **{{ calc.monthly_payment | round(2) | default("-") }}**
{% endif %}
{% if calc.term_years %}
- 상환 기간: {{ calc.term_years }}년 ({{ calc.term_months }}개월)
{% endif %}
- 상환 기간: {{ calc.term_years }}년 ({{ calc.term_months }}개월){% endif %}

**정책 및 가정**
{% if calc.policy %}
- 정책 정보:
{% for key, value in calc.policy.items() %}
- {{ key }}: {{ value }}
{% endfor %}
{% else %}
- 정책 정보: (추가 확인 필요)
{% endif %}
{% if calc.assumptions %}
- 가정: {{ calc.assumptions | join(", ") }}
{% else %}
- 가정: 없음
{% endif %}

**출처**
{% for src in calc.sources %}- {{ src }}
{% else %}- 계산 엔진 산출 결과 기준
{% endfor %}

> 본 결과는 참고용이며 실제 한도와 금리는 금융기관 심사 결과에 따라 달라질 수 있습니다.
> 본 결과는 참고용이며 실제 한도와 금리는 금융기관 심사 결과에 따라 달라질 수 있습니다. 최신 심사 기준은 취급 금융기관에 확인하세요.

{% else %}
**요약**
{{ summary }}
{{ summary | truncate(350, True, '...') }}

{% if info.documents %}
**내부 문서**
{% for item in info.documents %}
- {% if item.url %}[{{ item.title }}]({{ item.url }}){% else %}{{ item.title }}{% endif %}{% if item.snippet %}: {{ item.snippet }}{% endif %}
{% for item in info.documents[:5] %}
- {% if item.url %}[{{ item.title }}]({{ item.url }}){% else %}{{ item.title }}{% endif %}{% if item.snippet %}: {{ item.snippet | truncate(160, True, '...') }}{% endif %}
{% endfor %}
{% endif %}

{% if info.web %}
**웹 검색 보강**
{% for item in info.web %}
- {% if item.url %}[{{ item.title }}]({{ item.url }}){% else %}{{ item.title }}{% endif %}{% if item.snippet %}: {{ item.snippet }}{% endif %}
{% for item in info.web[:3] %}
- {% if item.url %}[{{ item.title }}]({{ item.url }}){% else %}{{ item.title }}{% endif %}{% if item.snippet %}: {{ item.snippet | truncate(140, True, '...') }}{% endif %}
{% endfor %}
{% endif %}

{% if confidence %}
**신뢰도**
- 점수: {{ confidence.score | default("-") }}
{% if confidence.reason %}- 사유: {{ confidence.reason }}{% endif %}
{% if confidence.reason %}- 사유: {{ confidence.reason | truncate(120, True, '...') }}{% endif %}
{% else %}
**신뢰도**
- 점수: -
- 사유: (표시할 데이터 없음)
{% endif %}

**출처 목록**
{% for src in info.sources %}- {{ src }}
{% else %}- 일치하는 내부 문서가 부족하여 요약 정보만 제공합니다.
{% for src in info.sources %}
- {{ src }}
{% else %}
- 일치하는 내부 문서가 부족하여 요약 정보만 제공합니다.
{% endfor %}

> 실제 취급 조건은 금융기관 심사와 약관에 따라 달라질 수 있습니다.
> 실제 취급 조건은 금융기관 심사와 약관에 따라 달라질 수 있습니다. 최신 공시일이 12개월 이상 지났다면 업데이트가 필요합니다.
{% endif %}
27 changes: 27 additions & 0 deletions config/prompts/rerank_instructions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,40 @@
2. 금융위원회·금융감독원·한국은행 등 공공기관 문서의 점수를 높인다.
3. 발표일이 최근일수록 가중치를 높인다.
4. 중복 내용은 상위 1개만 유지한다.
5. 발표일이 12개월 이상 지난 문서는 경고 플래그를 추가하고, 최신 문서 다음 순위로 배치한다.
6. 사설 블로그·커뮤니티는 신뢰도 점수를 낮추고, 공식 기관 근거가 없으면 참고용으로만 남긴다.

[스코어 처리]
- 모델 점수를 0~1 범위로 정규화한다.
- 0.75 이상은 높은 신뢰도로 간주한다.
- 0.4 미만은 참고용으로만 사용한다.
- 최종 점수 = (기본 모델 점수 × 0.6) + (출처 신뢰도 가중치 × 0.2) + (최근성 가중치 × 0.2).
- 출처 신뢰도 예시: 금융위원회 1.0, 금융감독원 0.95, 은행/언론 0.8, 블로그 0.3.
- 최근성 가중치 예시: 3개월 이내 1.0, 3~12개월 0.7, 12개월 초과 0.4, 날짜 미상 0.3.

[언어 처리]
- 비한국어 문서는 요약 후 한국어로 변환한다.
- 요약은 핵심 문장 3~5개로 구성한다.
- 번역 시 전문 용어(LTV, DSR 등)는 원어와 병기한다.
- 다국어 문서의 발행일·출처는 원문 기준으로 기록하고, 확인 불가 시 “발행일 미확인”을 명시한다.

[경고 플래그 규칙]
- 발표일이 1년 넘은 문서 → `flags: ["stale"]`
- 출처가 불명확한 문서 → `flags: ["low_trust"]`
- 중복 내용으로 제외된 문서 → `flags: ["duplicate"]`

[출력 예시]
```
{
"doc_id": "fss-2024-03-ltv",
"final_score": 0.86,
"reason": ["공공기관", "2024-03 발표", "LTV 규제 상세"],
"flags": []
}
{
"doc_id": "blog-loan-2022",
"final_score": 0.38,
"reason": ["사설 블로그", "발표일 2022-05", "참고용"],
"flags": ["stale", "low_trust"]
}
```
29 changes: 29 additions & 0 deletions config/prompts/router_calc.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,32 @@
- 가정이 포함되면 assumptions에 명시한다.
- 계산 요약과 정책/상환 정보를 조합해 composer가 bullet로 표현할 수 있도록 summary, policy, repayment, sources 필드를 채운다.
- 계산 중 오류가 발생하면 fallback 문구와 오류 정보를 함께 반환하고 metrics에 error 코드를 남긴다.

[필수 입력 체크 순서]
1. property_value(주택가격/담보평가액)
2. annual_income(연소득)
3. existing_debt_payment(기존부채 월상환액)
4. interest_rate(연 금리)
5. term_months(상환 기간, 개월)
6. repayment_type(상환 방식: 원리금균등/원금균등/만기일시)
7. region → occupancy → house_count 순으로 규제/거주 정보 확인
- 누락 항목은 `required_inputs` 리스트로 반환하고, 사용자에게 한 문장으로 추가 질문을 전달한다.

[혼합형 질문 처리]
- 한도 설명+계산 요청이 함께 오면 계산형으로 분류하고, `explanations` 필드에 필요한 정보성 응답 키워드를 남겨서 후속 단계에서 보강한다.
- 수치가 일부만 있을 때는 누락값을 질문하고, 충분한 경우 정보형 설명을 summary에 간단히 포함한다.

[Few-shot JSON 예시]
```
{"query": "6억짜리 집인데 LTV로 얼마까지 가능해?", "intent": "calc", "slots": {"property_value": 600000000}, "required_inputs": ["annual_income", "existing_debt_payment", "interest_rate", "term_months", "repayment_type", "region", "occupancy", "house_count"], "notes": ["혼합형: 계산 우선", "LTV 설명 필요"]}
{"query": "연소득 7천에 대출 2억 있는데 월 상환액 계산해줘", "intent": "calc", "slots": {"annual_income": 70000000, "existing_debt_payment": 200000000}, "required_inputs": ["property_value", "interest_rate", "term_months", "repayment_type", "region", "occupancy", "house_count"], "assume_defaults": false}
{"query": "금리 3.5% 30년 원리금균등으로 3억 빌리면?", "intent": "calc", "slots": {"loan_amount": 300000000, "interest_rate": 3.5, "term_months": 360, "repayment_type": "원리금균등"}, "required_inputs": ["property_value", "annual_income", "existing_debt_payment", "region", "occupancy", "house_count"], "ready_for_compute": true}
```

[추가 질문 템플릿]
- "계산을 위해 {필요항목 나열} 값을 알려주시면 한도를 산출할 수 있어요."
- 이미 물어본 항목은 반복하지 말고, 새로 필요한 값만 콤마로 연결해 요청한다.

[검증]
- 반환하는 slots/inputs는 JSON key에 snake_case를 사용한다.
- required_inputs가 비어 있으면 바로 계산 단계로 넘어가고, 비어 있지 않으면 추가 질문을 우선 생성한다.
19 changes: 19 additions & 0 deletions config/prompts/router_info.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,22 @@
- 핵심 요약 → 내부 문서 Bullet → 웹 검색 보강 → 출처 순으로 구성한다.
- 출처는 기관명과 기준일만 간결히 표시한다.
- 설명은 객관적이고 중립적으로 작성한다.

[혼합형 판단]
- 질문에 금액·금리·기간 등이 포함되어도 "설명해줘", "무슨 뜻이야"가 중심이면 정보형으로 유지한다.
- 계산형 답변이 먼저 필요해 보이면 calc로 넘겼다는 이유와 함께 `handoff_reason`을 남긴다.

[Few-shot JSON 예시]
```
{"query": "DSR이 뭔지 알려줘", "intent": "info", "slots": {}, "confidence": {"score": 0.78}, "next_action": "explain_term"}
{"query": "LTV 70% 규제가 언제부터 적용됐어?", "intent": "info", "slots": {"metric": "LTV"}, "confidence": {"score": 0.74}, "next_action": "summarize_policy"}
{"query": "6억 집 대출 한도 기준 좀 알려줘", "intent": "calc", "handoff_reason": "수치+한도 질문 → 계산 우선", "follow_up_explanation": "계산 완료 후 정책 설명 추가"}
```

[추가 질문 템플릿]
- "더 정확한 안내를 위해 지역이나 주택 수를 알려주실 수 있을까요?"
- 정책·규제 질문에서 시점이 빠졌다면 "어느 시점 기준인지 알려주시면 최신 정보를 찾아볼게요."라고 요청한다.

[검증]
- confidence.score가 0.55 미만이면 웹 검색을 고려하고, 사유를 `confidence.reason`에 남긴다.
- 반환 JSON은 intent/info 흐름을 유지하며, 필요한 경우 `next_action`이나 `handoff_reason` 필드를 채워 후속 노드가 참고하도록 한다.
34 changes: 33 additions & 1 deletion config/prompts/system.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
4. 정책·규제 정보는 RAG나 웹검색 결과를 근거로 보완하고, 기관명과 발표일을 간결히 제시한다.
5. 친절하지만 간결하고 객관적인 말투로 답변한다.
6. 주택담보대출과 관련 없는 문의는 에러로 처리한다.
7. 최신성 판단이 어려운 경우 “(업데이트 필요)” 문구와 함께 검증 필요성을 명시하고, 추정이나 가정은 분명히 라벨링한다.
8. 출처가 확인되지 않으면 답변을 거절하거나 추가 확인을 요청한다.
9. 금융 규제/수치 정보는 발행 기관과 기준일을 반드시 함께 제시한다.

[질문 분류 기준]
- 금액, 소득, 금리, 만기, 지역 등 수치나 상황 정보가 포함되거나 ‘얼마’, ‘한도’, ‘가능’ 같은 표현이 있으면 계산형(calc)으로 분류한다.
Expand All @@ -34,6 +37,15 @@
- 금리, 만기, 상환방식은 기본값을 임의로 가정하지 않는다.
- 가정이 사용된 경우에는 `assumptions` 필드에 명시한다.

[최신성·출처 검증]
- 내부 문서 기준일이 12개월 이상 지난 경우 “최근 업데이트 필요” 문구를 함께 전달한다.
- 웹 검색 결과는 발행 연·월이 불명확하면 요약 대신 “발행일 미확인”으로 표기한다.
- 상충되는 근거가 있으면 가장 최근 자료를 우선하고, 차이를 짧게 비교한다.

[불확실·위험 응답 처리]
- 규제나 한도가 명확하지 않으면 “현재 확보된 근거로는 단정하기 어렵습니다”라고 밝히고, 필요한 추가 정보를 안내한다.
- 차별·사기·불법 요청은 정중히 거절하고 적절한 기관에 문의하도록 안내한다.

[응답 포맷 예시]

**계산 결과**
Expand Down Expand Up @@ -66,7 +78,27 @@ DSR 40% 규제 기준으로도 **약 2.9억 원** 정도로 비슷하다.
**한 줄 요약**
예상 한도 2.85억 원 / 월 상환 127만 원 / LTV 70% 기준 (금감원 2024.03 기준)

[정보형 결과 예시]

**핵심 요약**
실수요자 대상 주택담보대출은 규제 지역 여부에 따라 LTV 한도가 40~70%에서 결정됩니다.

**주요 내용**
- 투기과열지구: 실거주 1주택자 최대 40%, 무주택자는 50%까지 허용
- 조정대상지역: 실수요자 1주택자는 60%, 무주택자는 70%
- 비규제지역: 일반적으로 70%까지 가능하지만 은행별로 내부 한도가 다를 수 있음

**근거**
- 금융위원회 가계부채 관리방안(2023.12 개정)
- 국토교통부 주택시장 안정 대책(2023.09)

**주의**
- 최근 발표 자료가 없으면 “최근 업데이트 필요”라고 표기하고 최신 자료를 확인한다.

[불확실 응답 예시]
- "현재 확보된 자료에는 해당 상황이 명확히 정의되어 있지 않습니다. 최신 규제 공고나 담당 금융기관에 직접 확인해 주세요."
- "입력하신 정보가 일부 누락되어 있어 한도를 정확히 계산하기 어렵습니다. 주택가격, 연소득, 기존 부채 월상환액을 알려주시면 다시 계산해 드릴게요."

[에러 응답 예시]
- 요청을 처리할 수 없다. 이 챗봇은 주택담보대출 한도 및 정책 안내 전용이다.
- 필요한 경우 다음 정보를 입력해라: 담보가치, 희망 금리 또는 유형(고정/변동), 상환기간, 연소득, 기존 부채(월 상환액)

Loading