From e8b9fb90a0e720c0691fd87c456cc0ca9f96f952 Mon Sep 17 00:00:00 2001 From: guineaaaa <165776804+guineaaaa@users.noreply.github.com> Date: Tue, 13 May 2025 16:33:23 +0900 Subject: [PATCH] =?UTF-8?q?[REFACT]=20=EB=B2=A1=ED=84=B0=20=EC=9C=A0?= =?UTF-8?q?=EC=82=AC=EB=8F=84=20=EA=B0=90=EC=86=8C=20=EB=B0=8F=20fallback?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC=20=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/policy_service.py | 68 ++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/app/services/policy_service.py b/app/services/policy_service.py index 7cbecc7..dcead7a 100644 --- a/app/services/policy_service.py +++ b/app/services/policy_service.py @@ -33,12 +33,53 @@ qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", - retriever=vectorstore.as_retriever(search_kwargs={"k": 8}), + retriever=vectorstore.as_retriever(search_kwargs={"k": 5}), ) # 상세 설명 추출 def get_policy_description(title: str) -> str: + fallback_hardcoded = { + "중장년 경력지원제": """📌 대상: +- (참여자) 중장년내일센터 및 훈련기관을 통해 자격취득 또는 훈련 이수, 국민취업지원제도에 참여하여 IAP 수립 후 경력전환을 희망하는 50세 이상 중장년 +- (참여기업) 고용보험 피보험자수 10인 이상 기업 (기술·경영 혁신형 중소기업은 5인 이상도 가능) + +📌 지원 요건: +- 위 대상에 해당하며 경력전환을 위한 훈련 이수 또는 자격취득 + +📌 지원 내용: +- 주된 업무에서 퇴직한 사무직 등 중장년에게 경력전환형 일경험을 +쌓을 수 있도록 지원하여 취업가능성 제고 +- 참여자: 참여수당 월 150만원 +- 참여기업: 참여자 1인당 월 40만원 운영지원금 +- 1~3개월 유망 자격/훈련 분야 실무 수행, 직무교육, 멘토링 제공 +""", + "재취업지원서비스 시행지원": """📌 대상: +- 재취업지원서비스 지원 사업주 (300인 이상 기업) + +📌 지원 요건: +- 재취업지원서비스 제도 설계 또는 운영을 준비 중인 기업 + +📌 지원 내용: +- 제도 설계 컨설팅, 인사담당자 교육, 업종별 표준 프로그램 개발·보급 +""", + "중장년 내일센터": """📌 대상: +- 40세 이상 중장년층에게 생애설계, 재취업 및 창업 지원, 특화서비스등의 종합 고용지원서비스를 제공하여 고용안정 및 재취업 촉진 도모 + +📌 지원 요건: +- 중장년층 생애설계, 재취업·창업·전직 필요자 + +📌 지원 내용: +- 생애경력설계, 전직스쿨, 재도약 프로그램 +- 산업별 특화서비스, 중장년 청춘문화공간 운영 +- 사업주 대상 고용확대 컨설팅, 직무교육, 채용지원 전담반 운영 +""", + } + + if title in fallback_hardcoded: + return fallback_hardcoded[title] + + # 기본 프롬프트 prompt = f""" 정책명: {title} @@ -52,9 +93,30 @@ def get_policy_description(title: str) -> str: 정보를 직접 문서에서 발췌해서, 최대한 사실 그대로 출력해줘. 너의 생각이나 요약 없이, 원문 중심으로 정리해줘. - """ - return qa_chain.run(prompt).strip() + + result = qa_chain.run(prompt).strip() + + fallback_phrases = [ + "찾을 수 없습니다", + "죄송합니다", + "정보가 없습니다", + "I don't", + "no information", + "모르겠습니다", + ] + + if any(p in result for p in fallback_phrases) or len(result.split()) < 30: + fallback_prompt = f""" + 문서에서 정책 제목이 "{title}"로 시작하는 섹션만 발췌해서 그대로 보여줘. + 다른 정책 내용은 포함하지 말고, 최대한 많이 보여줘. + """ + result = qa_chain.run(fallback_prompt).strip() + + if any(p in result for p in fallback_phrases) or len(result.split()) < 30: + result = "아래 링크에서 정책 원문을 확인해보세요." + + return result # 메인 함수