RAG(Retrieval-Augmented Generation)에서 retrieve
단계에서 사용하는 multi-query
와 fusion
기법은 질의의 정확성을 높이고 더 풍부한 정보를 얻기 위해 사용됩니다. 두 기법은 주로 검색 결과의 질을 높이고, 다양한 정보 조합을 통해 생성된 응답의 질을 향상하기 위해 결합하여 사용됩니다.
본 포스팅에서는 2가지 기법에 대해 설명하고, 예제 코드와 실행 결과를 제시합니다.
예제 코드 : GitHub - RAG_Series
Multi-query
기법은 하나의 질문을 여러 개의 하위 질문 또는 다양한 형태로 변형하여 검색하는 방법입니다. 각 하위 질의는 다른 관점에서 동일한 정보를 요청하도록 설계되어, 검색 시스템이 보다 다양한 답변을 제공하게 합니다.
Multi-query 생성 및 문서 검색
MultiQueryRetriever 클래스를 사용해 주어진 질문과 연관된 추가 쿼리를 여러 개 생성하고,
각각의 쿼리를 이용해 문서를 검색합니다.
(MultiQueryRetriever 클래스를 사용하지 않고 프롬프트를 이용해 쿼리를 생성할 수도 있습니다.
참고 : https://wikidocs.net/234109)
# 멀티 쿼리 생성
from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain_openai import ChatOpenAI
question = '보험금의 지급사유'
llm = ChatOpenAI(model="gpt-4-0125-preview", temperature=0)
# MultiQueryRetriever 설정
retriever_from_llm = MultiQueryRetriever.from_llm(
retriever=vector_store.as_retriever(), llm=llm
)
# Set logging for the queries
import logging
# 생성되는 multi-query 확인
logging.basicConfig()
logging.getLogger('langchain.retrievers.multi_query').setLevel(logging.INFO)
# query 에 대해 Multi-query 문서 검색 (질문과 관련 있는 문서 검색)
relevant_docs = retriever_from_llm.get_relevant_documents(query=question)
relevant_docs
get_relevant_documents 대신 invoke 를 이용할 수도 있습니다.
relevant_docs = retriever_from_llm.invoke(question)
relevant_docs
output 은 2개 메서드 모두 동일합니다.
INFO:langchain.retrievers.multi_query:Generated queries: ['1. 보험금 지급을 결정하는 기준은 무엇인가요?', '2. 어떤 상황에서 보험금을 받을 수 있나요?', '3. 보험금 지급 조건에는 어떤 것들이 포함되나요?']
[Document(id='1d7f192c-4261-4fee-9563-e05dbbcb178e', metadata={'page': 14, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 4 - 4. 기타 보험수익자가 보험금의 수령에 필요하여 제출하는 서류(사망보험금 지급시 피보험\n자의 법정상속인이 아닌자가 청구하는 경우 법정상속인의 확인서 )\n② 제1항 제2호의 사고증명서는 의료법 제3조(의료기관 )에서 규정한 국내의 병원이나 의원 또\n는 국외의 의료관련법에서 정한 의료기관에서 발급한 것이어야 합니다 .\n제8조(보험금의 지급절차 ) \n① 회사는 제7조(보험금의 청구)에서 정한 서류를 접수한 때에는 접수증을 드리고 휴대전화 문\n자메시지 또는 전자우편 등으로도 송부하며 , 그 서류를 접수한 날부터 3영업일 이내에 보\n험금을 지급합니다 .\n② 회사가 보험금 지급사유를 조사․확인하기 위해 필요한 기간이 제1항의 지급기일을 초과할 \n것이 명백히 예상되는 경우에는 그 구체적인 사유와 지급예정일 및 보험금 가지급제도 (회사\n가 추정하는 보험금의 50% 이내를 지급)에 대하여 피보험자 또는 보험수익자에게 즉시 통\n지합니다 . 다만, 지급예정일은 다음 각 호의 어느 하나에 해당하는 경우를 제외하고는 제7\n조(보험금의 청구)에서 정한 서류를 접수한 날부터 30영업일 이내에서 정합니다 .\n 1. 소송제기\n 2. 분쟁조정 신청\n【분쟁조정 신청】\n분쟁조정 신청은 이 약관의 「분쟁의 조정」조항에 따르며 분쟁조정 신청 대상기관은 금융\n감독원의 금융분쟁조정위원회를 말합니다 .\n 3. 수사기관의 조사 \n 4. 해외에서 발생한 보험사고에 대한 조사\n 5. 제6항에 따른 회사의 조사요청에 대한 동의 거부 등 계약자 , 피보험자 또는 보험수익자\n의 책임있는 사유로 보험금 지급사유의 조사와 확인이 지연되는 경우\n 6. 제4조(보험금 지급에 관한 세부규정 ) 제6항에 따라 보험금 지급사유에 대해 제3자의 의\n견에 따르기로 한 경우\n③ 제2항에 의하여 장해지급률의 판정 및 지급할 보험금의 결정과 관련하여 확정된 장해지급\n률에 따른 보험금을 초과한 부분에 대한 분쟁으로 보험금 지급이 늦어지는 경우에는 보험\n수익자의 청구에 따라 이미 확정된 보험금을 먼저 가지급합니다 .\n④ 제2항에 의하여 추가적인 조사가 이루어지는 경우, 회사는 보험수익자의 청구에 따라 회사\n가 추정하는 보험금의 50% 상당액을 가지급보험금으로 지급합니다 .\n【가지급보험금 】\n보험금이 지급기한 내에 지급되지 못할 것으로 판단되는 경우 회사가 예상되는 보험금의 \n일부를 먼저 지급하는 제도로 피보험자가 필요로 하는 비용을 보전해 주기 위해 회사가 먼\n저 지급하는 임시 교부금을 말합니다 .\n⑤ 회사는 제1항에서 정한 지급기일내에 보험금을 지급하지 않았을 때(제2항에서 정한 지급예\n정일을 통지한 경우를 포함합니다 )에는 그 다음날부터 지급일까지의 기간에 대하여 <부표> \n‘보험금을 지급할 때의 적립이율 ’에 따라 연단위 복리로 계산한 금액을 보험금에 더하여 지\n급합니다 . 다만, 계약자 , 피보험자 또는 보험수익자에게 책임이 있는 사유로 지급이 지연된 \n경우에는 그 기간에 대한 이자는 지급하지 않습니다 .\n 기 간 지 급 이 자\n지급기일의 다음 날부터 30일 이내 기간 보험계약대출이율\n지급기일의 31일이후부터 60일이내 기간 보험계약대출이율 + 가산이율 (4.0%)\n지급기일의 61일이후부터 90일이내 기간 보험계약대출이율 + 가산이율 (6.0%)\n지급기일의 91일이후 기간 보험계약대출이율 + 가산이율 (8.0%)<부표> 보험금을 지급할 때의 적립이율'),
Document(id='87b9bd3c-53f0-4a99-b172-6361570bd70b', metadata={'page': 148, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 138 -내에서 계약자 또는 피보험자가 제3자에 대하여 가지는 손해배상청구권을 취득합니다 . 다\n만, 회사가 보상한 금액이 피보험자가 입은 손해의 일부인 경우에는 피보험자의 권리를 침\n해하지 않는 범위 내에서 그 권리를 취득합니다 .\n② 계약자 또는 피보험자는 제1항에 의하여 회사가 취득한 권리의 행사 및 보전에 관하여 필\n요한 조치를 하여야 하며, 또한 회사가 요구하는 증거 및 서류를 제출하여야 합니다 . 이에 \n필요한 비용은 회사가 드립니다 .\n③ 제1항 및 제2항에도 불구하고 타인을 위한 보험계약의 경우에는 회사는 계약자에 대한 대\n위권을 포기합니다 .\n④ 회사는 제1항에 따른 권리가 계약자 또는 피보험자와 생계를 같이 하는 가족에 대한 것인 \n경우에는 그 권리를 취득하지 못합니다 . 다만, 손해가 그 가족의 고의로 인하여 발생한 경\n우에는 그 권리를 취득합니다 .\n제10조(잔존물 )\n회사가 제1조(보상하는 손해)의 보험금을 지급하고 잔존물을 취득할 의사표시를 하는 경우에는 \n그 잔존물은 회사의 소유가 됩니다 .\n제11조(손해의 통지 및 조사)\n① 보험의 목적에 손해가 생긴 경우 계약자 또는 피보험자는 지체없이 이를 회사에 알려야 합\n니다.\n② 계약자 또는 피보험자가 제1항의 통지를 게을리하여 손해가 증가된 때에는 회사는 그 증가\n된 손해는 보상하여 드리지 않습니다 . \n③ 회사가 제1항에 대한 손해의 사실을 확인하기 어려운 경우에는 계약자 또는 피보험자에게 \n필요한 증거자료의 제출을 요청할 수 있습니다 .\n④ 회사는 제1항의 통지를 받은 때에는 사고가 생긴 건물 또는 그 구내와 거기에 들어있는 피\n보험자의 소유물을 조사할 수 있습니다 .\n제12조(보험금의 지급절차 )\n① 회사는 보통약관 제7조(보험금의 청구)에서 정한 서류를 접수한 때에는 접수증을 교부하고 , \n그 서류를 접수받은 후 지체없이 지급할 보험금을 결정하고 지급할 보험금이 결정되면 7일 \n이내에 이를 지급하여 드립니다 . 또한, 지급할 보험금이 결정되기 전이라도 피보험자의 청\n구가 있을 때에는 회사가 추정한 보험금의 50% 상당액을 가지급보험금으로 지급합니다 .\n② 회사는 제1항의 지급보험금이 결정된 후 7일(이하 ‘지급기일 ’이라 합니다 )이 지나도록 보험\n금을 지급하지 않았을 때에는 지급기일의 다음날부터 지급일까지의 기간에 대하여 <부표> \n‘보험금을 지급할 때의 적립이율 ’에 따라 연단위 복리로 계산한 금액을 보험금에 더하여 지\n급합니다 . 그러나 피보험자의 책임있는 사유로 지체된 경우에는 그 해당기간에 대한 이자를 \n더하여 지급하지 않습니다 .\n제13조(보험의 목적에 대한 조사)\n회사는 보험목적에 대한 위험상태를 조사하기 위하여 보험기간 중 언제든지 보험의 목적 또는 \n이들이 들어 있는 건물이나 구내를 조사할 수 있습니다 . 기 간 지 급 이 자\n지급기일의 다음 날부터 30일 이내 기간 보험계약대출이율\n지급기일의 31일이후부터 60일이내 기간 보험계약대출이율 + 가산이율 (4.0%)\n지급기일의 61일이후부터 90일이내 기간 보험계약대출이율 + 가산이율 (6.0%)\n지급기일의 91일이후 기간 보험계약대출이율 + 가산이율 (8.0%)\n주) 1. 보험계약대출이율은 보험개발원이 공시하는 보험계약대출이율을 적용합니다 . <부표> 보험금을 지급할 때의 적립이율'),
Document(id='13e178ec-e372-4dd0-ae38-92de6aa4e79c', metadata={'page': 12, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 2 - 4. 기간과 날짜 관련 용어\n가. 보험기간 : 계약에 따라 보장을 받는 기간을 말합니다 .\n나. 영업일 : 회사가 영업점에서 정상적으로 영업하는 날을 말하며 , 토요일 , ‘관공서의 공휴\n일에 관한 규정’에 따른 공휴일과 근로자의 날을 제외합니다 .\n제2관 보험금의 지급\n제3조(보험금의 지급사유 )\n회사는 피보험자에게 다음 중 어느 하나의 사유가 발생한 경우에는 보험수익자에게 약정한 보\n험금을 지급합니다 .\n 1. 보험기간 중에 상해의 직접결과로써 사망한 경우(질병으로 인한 사망은 제외합니다 ): 사\n망보험금\n 2. 보험기간 중 상해로 장해분류표 (<별표1> 참조)에서 정한 각 장해지급률에 해당하는 장해\n상태가 되었을 때: 후유장해보험금 (장해분류표에서 정한 지급률을 보험가입금액에 곱하\n여 산출한 금액)\n제4조(보험금 지급에 관한 세부규정 ) \n① 제3조(보험금의 지급사유 ) 제1호 ‘사망’에는 보험기간에 다음 어느 하나의 사유가 발생한 \n경우를 포함합니다 .\n 1. 실종선고를 받은 경우: 법원에서 인정한 실종기간이 끝나는 때에 사망한 것으로 봅니다 .\n 2. 관공서에서 수해, 화재나 그 밖의 재난을 조사하고 사망한 것으로 통보하는 경우: 가족관\n계등록부에 기재된 사망연월일을 기준으로 합니다 .\n② 「호스피스 ·완화의료 및 임종과정에 있는 환자의 연명의료 결정에 관한 법률」에 따른 연명\n의료중단등결정 및 그 이행으로 피보험자가 사망하는 경우 연명의료중단등결정 및 그 이행\n은 제3조(보험금의 지급사유 ) 제1호 ‘사망’의 원인 및 ‘사망보험금 ’ 지급에 영향을 미치지 \n않습니다 .\n③ 제3조(보험금의 지급사유 ) 제2호에서 장해지급률이 상해 발생일부터 180일 이내에 확정되\n지 않는 경우에는 상해 발생일부터 180일이 되는 날의 의사 진단에 기초하여 고정될 것으\n로 인정되는 상태를 장해지급률로 결정합니다 . 다만, 장해분류표 (<별표1> 참조)에 장해판정\n시기를 별도로 정한 경우에는 그에 따릅니다 .\n④ 제3항에 따라 장해지급률이 결정되었으나 그 이후 보장받을 수 있는 기간(계약의 효력이 \n없어진 경우에는 상해 발생일부터 1년 이내)에 장해상태가 더 악화된 때에는 그 악화된 장\n해상태를 기준으로 장해지급률을 결정합니다 .\n⑤ 장해분류표에 해당되지 않는 후유장해는 피보험자의 직업, 연령, 신분 또는 성별 등에 관계\n없이 신체의 장해정도에 따라 장해분류표의 구분에 준하여 지급액을 결정합니다 . 다만, 장\n해분류표의 각 장해분류별 최저 지급률 장해정도에 이르지 않는 후유장해에 대하여는 후유\n장해보험금을 지급하지 않습니다 .\n⑥ 보험수익자와 회사가 제3조(보험금의 지급사유 )의 보험금 지급사유에 대해 합의하지 못할 \n때는 보험수익자와 회사가 함께 제3자를 정하고 그 제3자의 의견에 따를 수 있습니다 . 제3\n자는 의료법 제3조(의료기관 )에 규정한 종합병원 소속 전문의 중에 정하며 , 보험금 지급사\n유 판정에 드는 의료비용은 회사가 전액 부담합니다 .\n⑦ 같은 상해로 두 가지 이상의 후유장해가 생긴 경우에는 후유장해 지급률을 더하여 지급합\n니다. 다만, 장해분류표의 각 신체부위별 판정기준에 별도로 정한 경우에는 그 기준에 따릅\n니다.\n⑧ 다른 상해로 인하여 후유장해가 2회 이상 발생하였을 경우에는 그 때마다 이에 해당하는 \n후유장해지급률을 결정합니다 . 그러나 그 후유장해가 이미 후유장해보험금을 지급받은 동일\n한 부위에 가중된 때에는 최종 장해상태에 해당하는 후유장해보험금에서 이미 지급받은 후\n유장해보험금을 차감하여 지급합니다 . 다만, 장해분류표의 각 신체부위별 판정기준에서 별\n도로 정한 경우에는 그 기준에 따릅니다 .\n⑨ 이미 이 계약에서 후유장해보험금 지급사유에 해당되지 않았거나 (보장개시 이전의 원인에'),
Document(id='2d0f969b-291c-4b06-8fb1-aab52e460dca', metadata={'page': 151, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 141 -증가된 손해를 보상하여 드리지 않으며 , 제1항 제3호의 통지를 게을리 한 때에는 소송비용\n과 변호사비용도 보상하여 드리지 않습니다 . 다만, 계약자 또는 피보험자가 상법 제657조 \n제1항에 의해 보험사고의 발생을 회사에 알린 경우에는 제2조(보상하는 손해의 범위) 제1\n호 및 제2호 ‘다’목 또는 ‘라’목의 비용에 대하여 보상한도액을 한도로 보상하여 드립니다 .\n제5조(보험금의 청구)\n피보험자가 보험금을 청구할 때에는 다음의 서류를 회사에 제출하여야 합니다 .\n 1. 보험금 청구서 (회사양식 )\n 2. 신분증 (주민등록증이나 운전면허증 등 사진이 붙은 정부기관발행 신분증 , 본인이 아닌 경\n우에는 본인의 인감증명서 또는 본인서명사실확인서 포함)\n 3. 손해배상금 및 그 밖의 비용을 지급하였음을 증명하는 서류\n 4. 회사가 요구하는 그 밖의 서류\n제6조(보험금의 지급절차 )\n① 회사는 제5조(보험금의 청구)에서 정한 서류를 접수한 때에는 접수증을 교부하고 , 그 서류\n를 접수받은 후 지체없이 지급할 보험금을 결정하고 지급할 보험금이 결정되면 7일 이내에 \n이를 지급하여 드립니다 . 또한, 지급할 보험금이 결정되기 전이라도 피보험자의 청구가 있\n을 때에는 회사가 추정한 보험금의 50% 상당액을 가지급보험금으로 지급합니다 .\n② 회사는 제1항의 지급보험금이 결정된 후 7일(이하 ‘지급기일 ’이라 합니다 )이 지나도록 보험\n금을 지급하지 않았을 때에는 지급기일의 다음날부터 지급일까지의 기간에 대하여 <부표> \n‘보험금을 지급할 때의 적립이율 ’에 따라 연단위 복리로 계산한 금액을 보험금에 더하여 지\n급합니다 . 그러나 피보험자의 책임있는 사유로 지체된 경우에는 그 해당기간에 대한 이자를 \n더하여 지급하지 않습니다 .\n제7조(보험금 등의 지급한도 ) \n① 회사는 1회의 보험사고에 대하여 다음과 같이 보상합니다 . 이 경우 보상한도액과 자기부담\n금은 각각 보험증권에 기재된 금액을 말합니다 . \n 1. 제2조(보상하는 손해의 범위) 제1항 제1호의 손해배상금 : 보상한도액을 한도로 보상하\n되, 자기부담금이 약정된 경우에는 그 자기부담금을 초과한 부분만 보상합니다 .\n 2. 제2조(보상하는 손해의 범위) 제1항 제2호 ‘가’목, ‘나’목 또는 ‘마’목의 비용 : 비용의 전\n액을 보상합니다 .\n 3. 제2조(보상하는 손해의 범위) 제1항 제2호 ‘다’목 또는 ‘라’목의 비용 : 이 비용과 제1호\n에 의한 보상액의 합계액을 보상한도액내에서 보상합니다 .\n② 보험기간 중 발생하는 사고에 대한 회사의 보상총액은 보험증권에 기재된 총 보상한도액을 \n한도로 합니다 .\n제8조(의무보험과의 관계)\n① 회사는 이 약관에 의하여 보상하여야 하는 금액이 의무보험에서 보상하는 금액을 초과할 \n때에 한하여 그 초과액만을 보상합니다 . 다만, 이 계약이 의무보험인 경우에는 그러하지 않\n으며, 의무보험이 다수인 경우에는 제9조(보험금의 분담)를 따릅니다 . 기 간 지 급 이 자\n지급기일의 다음 날부터 30일 이내 기간 보험계약대출이율\n지급기일의 31일이후부터 60일이내 기간 보험계약대출이율 + 가산이율 (4.0%)\n지급기일의 61일이후부터 90일이내 기간 보험계약대출이율 + 가산이율 (6.0%)\n지급기일의 91일이후 기간 보험계약대출이율 + 가산이율 (8.0%)\n주) 보험계약대출이율은 보험개발원이 공시하는 보험계약대출이율을 적용합니다 . <부표> 보험금을 지급할 때의 적립이율'),
Document(id='3dffb042-6715-45aa-bab8-eb5d58218244', metadata={'page': 202, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 192 -2. 배상\n1) 일상(가족, 자녀)생활중 배상책임 관련 \n【사례5】\n피보험자가 차량 뒷자석에서 하차중 차량문을 열고 내리던중 옆차량을 파손한 사고로 약관 \n제0조 ‘항공기 , 선박, 차량, 총기의 소유, 사용, 관리로 인한 배상책임 ’은 면책\n⇒ 차량 하차중 개문발차사고는 자동차를 용법에 맞게 사용중 발생한 사고로 자동차 보험\n처리 적용 대상에 해당하여 일상생활 중 배상책임에서 보상되지 않습니다 .\n【사례6】\n피보험자 (미성년자 )가 돌로 차량에 낙서를 하여 차량에 피해를 준 사고\n⇒ 피보험자의 고의사고에 해당하여 보상하지 않으나 , 판례에 따라 책임무능력자는 사리분\n별이 안되므로 고의로 보기 힘들다 하여 12세 이하까지는 보상을 하고 있음\n3. 화재\n1) 화재보험의 도난담보 (명기가재 )관련 \n【사례7】\nK씨는 화재 및 도난을 보상받고자 보험가입을 하였으나 추후 귀금속 등 귀중품은 명기가\n재로 등록해야 보상이 가능하다고 내용을 알고 불만 제기\n⇒ 명기가재란 한점당 300만원 이상 고가의 가재로 보험가입시 해당 내용을 명확하게 서\n면으로 작성하셔야 하며, 서면으로 작성하지 않을 경우 보상에 문제가 있을 수 있습니다 .\n2) 화재보험의 화재의 정의 관련 \n【사례8】\n사용하는 열풍기 (전열기 )에 의해 피보험자의 소파 열변형이 발생한 사례로 약관에서 규정\n하는 화재의 정의에 대한 분쟁(피보험자는 본건 열변형이 화재라고 주장함 )\n⇒ 약관 해석상 화재는 연소현상이 있어야 하며 열변형은 화재에 해당하지 않습니다 .'),
Document(id='a10a022a-015c-4c84-866d-1c27ce90a41a', metadata={'page': 13, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 3 -의하거나 또는 그 이전에 발생한 후유장해를 포함합니다 ), 후유장해보험금이 지급되지 않았\n던 피보험자에게 그 신체의 동일 부위에 또다시 제8항에 규정하는 후유장해상태가 발생하\n였을 경우에는 직전까지의 후유장해에 대한 후유장해보험금이 지급된 것으로 보고 최종 후\n유장해 상태에 해당되는 후유장해보험금에서 이를 차감하여 지급합니다 .\n【사 례】\n이 계약의 보장개시전의 원인에 의하거나 또는 그 이전에 발생한 장해로 후유장해보험금\n의 지급사유가 되지 않았던 장해 :\n보험가입 전 한 팔의 손목관절에 심한 장해(지급률 20%)가 있었던 피보험자가 보험가입 \n후 상해로 그 손목관절에 기능을 완전히 잃은 경우(지급률 30%)에는 보험가입 후 발생한 \n상해로 인한 장해지급률 30%에서 보험가입 전 발생한 장해지급률 20%를 차감한 10%에 \n해당하는 후유장해보험금을 지급\n⑩ 회사가 지급하여야 할 하나의 상해로 인한 후유장해보험금은 보험가입금액을 한도로 합니다 .\n제5조(보험금을 지급하지 않는 사유) \n① 회사는 다음 중 어느 한가지로 보험금 지급사유가 발생한 때에는 보험금을 지급하지 않습\n니다.\n 1. 피보험자가 고의로 자신을 해친 경우. 다만, 피보험자가 심신상실 등으로 자유로운 의사\n결정을 할 수 없는 상태에서 자신을 해친 경우에는 보험금을 지급합니다 .\n 2. 보험수익자가 고의로 피보험자를 해친 경우. 다만, 그 보험수익자가 보험금의 일부 보험\n수익자인 경우에는 다른 보험수익자에 대한 보험금은 지급합니다 .\n 3. 계약자가 고의로 피보험자를 해친 경우\n 4. 피보험자의 임신, 출산(제왕절개를 포함합니다 ), 산후기 . 그러나 , 회사가 보장하는 보험금 \n지급사유와 보장개시일부터 2년이 지난 후에 발생한 습관성 유산, 불임 및 인공수정 관\n련 합병증으로 인한 경우에는 보험금을 지급합니다 .\n【습관성 유산, 불임 및 인공수정 】\n 한국표준질병 ·사인분류상의 N96~N98에 해당하는 질병을 말합니다 . \n 5. 전쟁, 외국의 무력행사 , 혁명, 내란, 사변, 폭동\n② 회사는 다른 약정이 없으면 피보험자가 직업, 직무 또는 동호회 활동목적으로 아래에 열거\n된 행위로 인하여 제3조(보험금의 지급사유 )의 상해 관련 보험금 지급사유가 발생한 때에는 \n해당 보험금을 지급하지 않습니다 .\n 1. 전문등반 (전문적인 등산용구를 사용하여 암벽 또는 빙벽을 오르내리거나 특수한 기술, 경\n험, 사전훈련을 필요로 하는 등반을 말합니다 ), 글라이더 조종, 스카이다이빙 , 스쿠버다\n이빙, 행글라이딩 , 수상보트 , 패러글라이딩\n 2. 모터보트 , 자동차 또는 오토바이에 의한 경기, 시범, 흥행(이를 위한 연습을 포함합니다 ) \n또는 시운전 (다만, 공용도로상에서 시운전을 하는 동안 보험금 지급사유가 발생한 경우\n에는 보장합니다 )\n 3. 선박에 탑승하는 것을 직무로 하는 사람이 직무상 선박에 탑승하고 있는 동안\n제6조(보험금 지급사유의 통지) \n계약자 또는 피보험자나 보험수익자는 제3조(보험금의 지급사유 )에서 정한 보험금 지급사유의 \n발생을 안 때에는 지체없이 그 사실을 회사에 알려야 합니다 .\n제7조(보험금의 청구) \n① 보험수익자는 다음의 서류를 제출하고 보험금을 청구하여야 합니다 .\n 1. 청구서 (회사 양식)\n 2. 사고증명서 (진료비계산서 , 사망진단서 , 장해진단서 , 입원치료확인서 , 의사처방전 (처방조제\n비) 등)\n 3. 신분증 (주민등록증이나 운전면허증 등 사진이 붙은 정부기관발행 신분증 , 본인이 아닌 경\n우에는 본인의 인감증명서 또는 본인서명사실확인서 포함)'),
Document(id='d3fb71b8-3c35-4da7-b234-7e0d5ebe4016', metadata={'page': 61, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 51 -항공기탑승중 상해위험 특별약관\n제1조(보험금의 지급사유 ) \n① 회사는 피보험자에게 다음 사항 중 어느 한 가지의 경우에 해당되는 사유가 발생한 때에는 \n보험수익자에게 약정한 보험금을 지급합니다 .\n 1. 보험기간 중에 급격하고도 우연한 외래의 항공기 사고로 발생한 상해의 직접결과로써 사\n망한 경우(질병으로 인한 사망은 제외합니다 ) : 사망보험금\n 2. 보험기간 중에 제1호의 상해로 장해분류표 ([별표1]참조. 이하 같습니다 )에서 정한 각 장\n해지급률에 해당하는 장해상태가 되었을 때 : 후유장해보험금 (장해분류표에서 정한 지급\n률을 보험가입금액에 곱하여 산출한 금액)\n② 제1항에서 「항공기사고 」라 함은 항공기 탑승중의 사고, 비행장 구내에서의 사고 및 피보험\n자가 탑승한 항공기가 불시착한 경우에 피보험자가 목적지에 도착할 때까지 항공운송업자\n가 제공하는 자동차 및 기타 교통승용구에 탑승중의 사고를 말합니다 . 여기서 「비행장구\n내」란 비행기 탑승시 각 항공사의 개찰구 안쪽을 말합니다 . \n③ 제2항에서 자동차라 함은 자동차관리법 시행규칙 제2조에 정한 승용자동차 , 승합자동차 , 화\n물자동차 , 특수자동차 , 이륜자동차 및 자동차손해배상보장법 시행령 제2조에 정한 건설기계\n를 말합니다 . 다만, 건설기계가 작업기계로 사용되는 동안은 자동차로 보지 않습니다 . \n④ 제2항에서 기타교통승용구라 함은 아래의 어느 하나에 해당하는 것을 말합니다 . \n 1. 기차, 전동차 , 기동차 , 케이블카 (공중케이블카를 포함합니다 ), 리프트 , 엘리베이터 및 에\n스컬레이터 , 모노레일 \n 2. 스쿠터 , 자전거 , 원동기를 붙인 자전거 \n 3. 항공기 , 선박(요트, 모트보트 , 보트를 포함합니다 ) \n 4. 자동차손해배상보장법 시행령 제2조에 정한 건설기계를 제외한 건설기계 및 농업기계 (다\n만, 이들이 작업기계로 사용되는 동안은 자동차로 보지 않습니다 ) \n제2조(보험금을 지급하지 않는 사유) \n회사는 보통약관 제5조(보험금을 지급하지 않는 사유) 및 다음 중 어느 한 가지의 경우에 의하\n여 보험금 지급사유가 발생한 때에는 보험금을 지급하지 않습니다 .\n 1. 시운전 , 경기(연습을 포함합니다 ) 또는 흥행(연습을 포함합니다 )을 위하여 운행중의 자동\n차 및 기타교통승용구에 탑승(운전을 포함합니다 )하고 있는 동안 \n 2. 하역작업을 하는 동안 \n 3. 자동차 및 기타교통승용구의 설치, 수선, 점검, 정비나 청소작업을 하는 동안 \n제3조(준용규정 ) \n이 특별약관에 정하지 않은 사항은 보통약관을 따릅니다 .')]
LangChain 을 이용한 Multi-Query 답변 생성
Multi-query 를 생성하여 여러 개의 문서(Document) 를 리스트 형태로 얻었다면
이를 context 로 이용하는 Langchain 을 생성하여 최종 답변을 얻을 수 있습니다.
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.schema.runnable import RunnablePassthrough
from langchain.retrievers.multi_query import MultiQueryRetriever
# Prompt
template = '''Answer the question based only on the following context:
{context}
Question: {question}
'''
prompt = ChatPromptTemplate.from_template(template)
question = '보험금의 지급사유'
llm = ChatOpenAI(model="gpt-4-0125-preview", temperature=0)
retriever_from_llm = MultiQueryRetriever.from_llm(
retriever=vector_store.as_retriever(), llm=llm
)
# 각각의 문서를 하나의 문자열로 join 합니다.
def format_docs(docs):
return '\n\n'.join([d.page_content for d in docs])
# LangChain 을 생성합니다.
# retriever_from_llm 을 이용해 얻은 문서들을 context 로 하는 LangChain 을 생성해 최종 답변을 얻습니다.
chain = (
{'context': retriever_from_llm | format_docs, 'question': RunnablePassthrough()}
| ChatPromptTemplate.from_template(template)
| llm
| StrOutputParser()
)
# Run
response = chain.invoke(question)
response
Output
INFO:langchain.retrievers.multi_query:Generated queries: ['1. 보험금 지급을 결정하는 기준은 무엇인가요?', '2. 어떤 상황에서 보험금을 받을 수 있나요?', '3. 보험금 지급 조건에는 어떤 것들이 포함되나요?']
'보험금의 지급사유는 다음과 같습니다:\n\n1. 보험기간 중에 상해의 직접결과로써 사망한 경우: 사망보험금\n2. 보험기간 중 상해로 장해분류표에서 정한 각 장해지급률에 해당하는 장해상태가 되었을 때: 후유장해보험금 (장해분류표에서 정한 지급률을 보험가입금액에 곱하여 산출한 금액)\n3. 항공기탑승중 상해위험 특별약관에 따라, 보험기간 중에 급격하고도 우연한 외래의 항공기 사고로 발생한 상해의 직접결과로써 사망한 경우 또는 제1호의 상해로 장해분류표에서 정한 각 장해지급률에 해당하는 장해상태가 되었을 때 보험수익자에게 약정한 보험금을 지급합니다.\n\n이 외에도 보험금 지급사유에는 특정 질병으로 인한 사망, 장해 상태, 연명의료중단등결정 및 그 이행으로 인한 사망 등이 포함될 수 있으며, 보험 약관에 따라 다양한 사유가 명시되어 있습니다.'
Fusion
기법은 여러 출처에서 가져온 응답을 합쳐 최종적인 답변을 생성하는 방법입니다. Multi-query 기법과는 다르게, Fusion은 다양한 문서나 검색 결과에서 검색된 내용을 결합하여 최종적으로 유용한 정보를 제공하도록 합니다.
더 자세한 설명 : RAG-Fusion 논문 참조(RAG-Fusion: a New Take on Retrieval-Augmented Generation)
(Abstract)
...RAG-Fusion combines RAG and reciprocal rank fusion (RRF) by generating multiple queries, reranking them with reciprocal scores and fusing the documents and scores.
...
RAG-Fusion은 여러 쿼리를 생성하고, 이를 상호 점수로 순위를 재조정하고(Reranking), 문서와 점수를 융합하여 RAG와 상호 순위 융합(RRF)을 결합합니다.
다시 말해, 논문에서 말하는 RAG Fusion은 다중 쿼리와 검색 결과를 통합하는 과정에서 중요한 기법으로, Reciprocal Rank Fusion(RRF)을 사용하여 검색된 문서를 재정렬합니다.
RRF 함수 정의
RRF에서 각 문서의 점수는 다음과 같이 계산됩니다:
여기서 k는 작은 상수(일반적으로 60 정도), rank(d)
는 문서 d가 각 검색 결과에서 차지한 순위입니다. 순위가 높을수록, 즉 더 상위에 랭크된 문서일수록 점수가 높아집니다.
예를 들어,
이처럼 순위가 낮아질수록 점수가 줄어드는 것을 알 수 있습니다. 그래서 상위에 랭크된 문서가 더 큰 영향을 미치게 됩니다.
출처 : [강의노트] RAG From Scratch : Query Translation
from langchain.load import dumps, loads
def reciprocal_rank_fusion(results: list[list], k=60):
""" Reciprocal_rank_fusion that takes multiple lists of ranked documents
and an optional parameter k used in the RRF formula """
# Initialize a dictionary to hold fused scores for each unique document
fused_scores = {}
# Iterate through each list of ranked documents
for docs in results:
# Iterate through each document in the list, with its rank (position in the list)
for rank, doc in enumerate(docs):
# Convert the document to a string format to use as a key (assumes documents can be serialized to JSON)
doc_str = dumps(doc)
# If the document is not yet in the fused_scores dictionary, add it with an initial score of 0
if doc_str not in fused_scores:
fused_scores[doc_str] = 0
# Retrieve the current score of the document, if any
previous_score = fused_scores[doc_str]
# Update the score of the document using the RRF formula: 1 / (rank + k)
fused_scores[doc_str] += 1 / (rank + k)
# Sort the documents based on their fused scores in descending order to get the final reranked results
reranked_results = [
(loads(doc), score)
for doc, score in sorted(fused_scores.items(), key=lambda x: x[1], reverse=True)
]
# Return the reranked results as a list of tuples, each containing the document and its fused score
return reranked_results
프롬프트를 이용한 질문 생성
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
# RAG-Fusion: Related
template = """You are a helpful assistant that generates multiple search queries based on a single input query. \n
Generate multiple search queries related to: {question} \n
Output (3 queries):"""
prompt_rag_fusion = ChatPromptTemplate.from_template(template)
llm = ChatOpenAI(model="gpt-4-0125-preview", temperature=0)
# Chain 생성
generate_queries = (
prompt_rag_fusion
| llm
| StrOutputParser()
| (lambda x: x.split("\n"))
)
question = '보험금의 지급사유'
generate_queries.invoke({"question": question})
Output
['1. "보험금 지급사유의 종류와 예시"',
'2. "보험금 지급 거절 사유 및 대응 방법"',
'3. "보험금 지급 절차 및 필요 서류"']
문서 검색 후 RRF score 계산 및 정렬
retriever = vector_store.as_retriever()
retrieval_chain_rag_fusion = generate_queries | retriever.map() | reciprocal_rank_fusion
docs = retrieval_chain_rag_fusion.invoke({"question": question})
docs
Output
[(Document(id='13e178ec-e372-4dd0-ae38-92de6aa4e79c', metadata={'page': 12, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 2 - 4. 기간과 날짜 관련 용어\n가. 보험기간 : 계약에 따라 보장을 받는 기간을 말합니다 .\n나. 영업일 : 회사가 영업점에서 정상적으로 영업하는 날을 말하며 , 토요일 , ‘관공서의 공휴\n일에 관한 규정’에 따른 공휴일과 근로자의 날을 제외합니다 .\n제2관 보험금의 지급\n제3조(보험금의 지급사유 )\n회사는 피보험자에게 다음 중 어느 하나의 사유가 발생한 경우에는 보험수익자에게 약정한 보\n험금을 지급합니다 .\n 1. 보험기간 중에 상해의 직접결과로써 사망한 경우(질병으로 인한 사망은 제외합니다 ): 사\n망보험금\n 2. 보험기간 중 상해로 장해분류표 (<별표1> 참조)에서 정한 각 장해지급률에 해당하는 장해\n상태가 되었을 때: 후유장해보험금 (장해분류표에서 정한 지급률을 보험가입금액에 곱하\n여 산출한 금액)\n제4조(보험금 지급에 관한 세부규정 ) \n① 제3조(보험금의 지급사유 ) 제1호 ‘사망’에는 보험기간에 다음 어느 하나의 사유가 발생한 \n경우를 포함합니다 .\n 1. 실종선고를 받은 경우: 법원에서 인정한 실종기간이 끝나는 때에 사망한 것으로 봅니다 .\n 2. 관공서에서 수해, 화재나 그 밖의 재난을 조사하고 사망한 것으로 통보하는 경우: 가족관\n계등록부에 기재된 사망연월일을 기준으로 합니다 .\n② 「호스피스 ·완화의료 및 임종과정에 있는 환자의 연명의료 결정에 관한 법률」에 따른 연명\n의료중단등결정 및 그 이행으로 피보험자가 사망하는 경우 연명의료중단등결정 및 그 이행\n은 제3조(보험금의 지급사유 ) 제1호 ‘사망’의 원인 및 ‘사망보험금 ’ 지급에 영향을 미치지 \n않습니다 .\n③ 제3조(보험금의 지급사유 ) 제2호에서 장해지급률이 상해 발생일부터 180일 이내에 확정되\n지 않는 경우에는 상해 발생일부터 180일이 되는 날의 의사 진단에 기초하여 고정될 것으\n로 인정되는 상태를 장해지급률로 결정합니다 . 다만, 장해분류표 (<별표1> 참조)에 장해판정\n시기를 별도로 정한 경우에는 그에 따릅니다 .\n④ 제3항에 따라 장해지급률이 결정되었으나 그 이후 보장받을 수 있는 기간(계약의 효력이 \n없어진 경우에는 상해 발생일부터 1년 이내)에 장해상태가 더 악화된 때에는 그 악화된 장\n해상태를 기준으로 장해지급률을 결정합니다 .\n⑤ 장해분류표에 해당되지 않는 후유장해는 피보험자의 직업, 연령, 신분 또는 성별 등에 관계\n없이 신체의 장해정도에 따라 장해분류표의 구분에 준하여 지급액을 결정합니다 . 다만, 장\n해분류표의 각 장해분류별 최저 지급률 장해정도에 이르지 않는 후유장해에 대하여는 후유\n장해보험금을 지급하지 않습니다 .\n⑥ 보험수익자와 회사가 제3조(보험금의 지급사유 )의 보험금 지급사유에 대해 합의하지 못할 \n때는 보험수익자와 회사가 함께 제3자를 정하고 그 제3자의 의견에 따를 수 있습니다 . 제3\n자는 의료법 제3조(의료기관 )에 규정한 종합병원 소속 전문의 중에 정하며 , 보험금 지급사\n유 판정에 드는 의료비용은 회사가 전액 부담합니다 .\n⑦ 같은 상해로 두 가지 이상의 후유장해가 생긴 경우에는 후유장해 지급률을 더하여 지급합\n니다. 다만, 장해분류표의 각 신체부위별 판정기준에 별도로 정한 경우에는 그 기준에 따릅\n니다.\n⑧ 다른 상해로 인하여 후유장해가 2회 이상 발생하였을 경우에는 그 때마다 이에 해당하는 \n후유장해지급률을 결정합니다 . 그러나 그 후유장해가 이미 후유장해보험금을 지급받은 동일\n한 부위에 가중된 때에는 최종 장해상태에 해당하는 후유장해보험금에서 이미 지급받은 후\n유장해보험금을 차감하여 지급합니다 . 다만, 장해분류표의 각 신체부위별 판정기준에서 별\n도로 정한 경우에는 그 기준에 따릅니다 .\n⑨ 이미 이 계약에서 후유장해보험금 지급사유에 해당되지 않았거나 (보장개시 이전의 원인에'),
0.03306010928961749),
(Document(id='1d7f192c-4261-4fee-9563-e05dbbcb178e', metadata={'page': 14, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 4 - 4. 기타 보험수익자가 보험금의 수령에 필요하여 제출하는 서류(사망보험금 지급시 피보험\n자의 법정상속인이 아닌자가 청구하는 경우 법정상속인의 확인서 )\n② 제1항 제2호의 사고증명서는 의료법 제3조(의료기관 )에서 규정한 국내의 병원이나 의원 또\n는 국외의 의료관련법에서 정한 의료기관에서 발급한 것이어야 합니다 .\n제8조(보험금의 지급절차 ) \n① 회사는 제7조(보험금의 청구)에서 정한 서류를 접수한 때에는 접수증을 드리고 휴대전화 문\n자메시지 또는 전자우편 등으로도 송부하며 , 그 서류를 접수한 날부터 3영업일 이내에 보\n험금을 지급합니다 .\n② 회사가 보험금 지급사유를 조사․확인하기 위해 필요한 기간이 제1항의 지급기일을 초과할 \n것이 명백히 예상되는 경우에는 그 구체적인 사유와 지급예정일 및 보험금 가지급제도 (회사\n가 추정하는 보험금의 50% 이내를 지급)에 대하여 피보험자 또는 보험수익자에게 즉시 통\n지합니다 . 다만, 지급예정일은 다음 각 호의 어느 하나에 해당하는 경우를 제외하고는 제7\n조(보험금의 청구)에서 정한 서류를 접수한 날부터 30영업일 이내에서 정합니다 .\n 1. 소송제기\n 2. 분쟁조정 신청\n【분쟁조정 신청】\n분쟁조정 신청은 이 약관의 「분쟁의 조정」조항에 따르며 분쟁조정 신청 대상기관은 금융\n감독원의 금융분쟁조정위원회를 말합니다 .\n 3. 수사기관의 조사 \n 4. 해외에서 발생한 보험사고에 대한 조사\n 5. 제6항에 따른 회사의 조사요청에 대한 동의 거부 등 계약자 , 피보험자 또는 보험수익자\n의 책임있는 사유로 보험금 지급사유의 조사와 확인이 지연되는 경우\n 6. 제4조(보험금 지급에 관한 세부규정 ) 제6항에 따라 보험금 지급사유에 대해 제3자의 의\n견에 따르기로 한 경우\n③ 제2항에 의하여 장해지급률의 판정 및 지급할 보험금의 결정과 관련하여 확정된 장해지급\n률에 따른 보험금을 초과한 부분에 대한 분쟁으로 보험금 지급이 늦어지는 경우에는 보험\n수익자의 청구에 따라 이미 확정된 보험금을 먼저 가지급합니다 .\n④ 제2항에 의하여 추가적인 조사가 이루어지는 경우, 회사는 보험수익자의 청구에 따라 회사\n가 추정하는 보험금의 50% 상당액을 가지급보험금으로 지급합니다 .\n【가지급보험금 】\n보험금이 지급기한 내에 지급되지 못할 것으로 판단되는 경우 회사가 예상되는 보험금의 \n일부를 먼저 지급하는 제도로 피보험자가 필요로 하는 비용을 보전해 주기 위해 회사가 먼\n저 지급하는 임시 교부금을 말합니다 .\n⑤ 회사는 제1항에서 정한 지급기일내에 보험금을 지급하지 않았을 때(제2항에서 정한 지급예\n정일을 통지한 경우를 포함합니다 )에는 그 다음날부터 지급일까지의 기간에 대하여 <부표> \n‘보험금을 지급할 때의 적립이율 ’에 따라 연단위 복리로 계산한 금액을 보험금에 더하여 지\n급합니다 . 다만, 계약자 , 피보험자 또는 보험수익자에게 책임이 있는 사유로 지급이 지연된 \n경우에는 그 기간에 대한 이자는 지급하지 않습니다 .\n 기 간 지 급 이 자\n지급기일의 다음 날부터 30일 이내 기간 보험계약대출이율\n지급기일의 31일이후부터 60일이내 기간 보험계약대출이율 + 가산이율 (4.0%)\n지급기일의 61일이후부터 90일이내 기간 보험계약대출이율 + 가산이율 (6.0%)\n지급기일의 91일이후 기간 보험계약대출이율 + 가산이율 (8.0%)<부표> 보험금을 지급할 때의 적립이율'),
0.032539682539682535),
(Document(id='3dffb042-6715-45aa-bab8-eb5d58218244', metadata={'page': 202, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 192 -2. 배상\n1) 일상(가족, 자녀)생활중 배상책임 관련 \n【사례5】\n피보험자가 차량 뒷자석에서 하차중 차량문을 열고 내리던중 옆차량을 파손한 사고로 약관 \n제0조 ‘항공기 , 선박, 차량, 총기의 소유, 사용, 관리로 인한 배상책임 ’은 면책\n⇒ 차량 하차중 개문발차사고는 자동차를 용법에 맞게 사용중 발생한 사고로 자동차 보험\n처리 적용 대상에 해당하여 일상생활 중 배상책임에서 보상되지 않습니다 .\n【사례6】\n피보험자 (미성년자 )가 돌로 차량에 낙서를 하여 차량에 피해를 준 사고\n⇒ 피보험자의 고의사고에 해당하여 보상하지 않으나 , 판례에 따라 책임무능력자는 사리분\n별이 안되므로 고의로 보기 힘들다 하여 12세 이하까지는 보상을 하고 있음\n3. 화재\n1) 화재보험의 도난담보 (명기가재 )관련 \n【사례7】\nK씨는 화재 및 도난을 보상받고자 보험가입을 하였으나 추후 귀금속 등 귀중품은 명기가\n재로 등록해야 보상이 가능하다고 내용을 알고 불만 제기\n⇒ 명기가재란 한점당 300만원 이상 고가의 가재로 보험가입시 해당 내용을 명확하게 서\n면으로 작성하셔야 하며, 서면으로 작성하지 않을 경우 보상에 문제가 있을 수 있습니다 .\n2) 화재보험의 화재의 정의 관련 \n【사례8】\n사용하는 열풍기 (전열기 )에 의해 피보험자의 소파 열변형이 발생한 사례로 약관에서 규정\n하는 화재의 정의에 대한 분쟁(피보험자는 본건 열변형이 화재라고 주장함 )\n⇒ 약관 해석상 화재는 연소현상이 있어야 하며 열변형은 화재에 해당하지 않습니다 .'),
0.03200204813108039),
(Document(id='6abc5c5c-182f-4734-af96-eb13c2f38536', metadata={'page': 110, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 100 -자동차사고 변호사선임비용 특별약관\n제1조(보험금의 지급사유 ) \n① 회사는 피보험자가 보험기간 중에 자동차를 운전하던 중에 급격하고도 우연한 자동차사고\n(이하 『자동차 운전 중 교통사고 』라 합니다 )로 타인의 신체(의수, 의족, 의안, 의치 등 신\n체보조장구는 제외하나 , 인공장기나 부분 의치 등 신체에 이식되어 그 기능을 대신할 경우\n는 포함합니다 . 이하 같습니다 )에 상해를 입힘으로써 구속영장에 의하여 구속되었거나 , 검\n찰에 의해 공소제기 (이하 “기소”라 합니다 . 단, 약식기소는 제외합니다 .)된 경우 또는 검사\n에 의해 약식기소 되었으나 법원에 의해 보통의 심판절차인 공판절차에 의해 재판이 진행\n하게 된 경우에는 변호사선임비용을 부담함으로써 입은 손해(이하 “변호사선임비용 ”이라 \n합니다 .)를 『1사고』마다 보험가입금액을 한도로 보험수익자 ( 수익자의 지정이 없을 때에\n는 피보험자 )에게 지급하여 드립니다 . 다만, 검사에 의해 약식기소 되었으나 피보험자가 법\n원의 약식명령에 불복하여 정식재판을 청구한 경우에는 보상하여 드리지 않습니다 .\n② 제1항의 『약식기소 』라 함은 검사가 지방법원의 관할사건에 대하여 보통의 심판절차인 공\n판절차를 거치지 아니하고 피고인에게 벌금, 구류 또는 몰수의 형을 과하는 것이 타당하다\n고 판단하여 약식명령 공소장에 의하여 기소하는 것을 말합니다 .\n③ 제1항의 『자동차 』라 함은 자동차관리법 시행규칙 제2조에 정한 승용자동차 , 승합자동차 , \n화물자동차 , 특수자동차 , 이륜자동차 및 자동차손해배상보장법 시행령 제2조에 정한 건설기\n계를 말합니다 . 다만 건설기계가 작업기계로서만 사용되는 동안은 자동차로 보지 않습니다 .\n④ 제1항의 『자동차를 운전하던 중』 이라 함은 도로여부 , 주정차 여부, 엔진의 시동여부를 \n불문하고 피보험자가 자동차 운전석에 탑승하여 핸들을 조작하거나 조작 가능한 상태에 있\n는 것을 말합니다 .\n⑤ 제1항의 『1사고』 라 함은 하나의 자동차 운전 중 교통사고를 말하며 , 『1사고』로 항소\n심, 상고심 포함하여 다수의 소송을 하였을 경우 그 소송동안 피보험자가 부담한 전체 변호\n사선임비용을 합쳐서 보험가입금액을 한도로 보험수익자 ( 수익자의 지정이 없을 때에는 피\n보험자 )에게 지급하여 드립니다 .\n⑥ 제1항에서 정한 변호사선임비용에 대하여 보험금을 지급할 다른 계약(공제계약을 포함)이 \n체결되어 있고 각각의 계약에 대하여 다른 계약(공제계약을 포함)이 없는 것으로 하여 산출\n한 보상책임액의 합계액이 피보험자가 부담하는 금액을 초과했을 때 회사는 이 계약에 따\n른 보상책임액의 상기 합계액에 대한 비율에 따라 보험금을 지급합니다 .\n제2조(보험금을 지급하지 않는 사유) \n회사는 아래의 사유로 생긴 손해는 보상하여 드리지 않습니다 .\n 1. 피보험자의 고의\n 2. 계약자의 고의\n 3. 피보험자가 사고를 내고 도주하였을 때\n 4. 피보험자가 자동차를 경기용이나 경기를 위한 연습용 또는 시험용으로 운전하던 중 사고\n를 일으킨 때\n 5. 피보험자 (자가용 운전자를 대상으로 합니다 )가 자동차를 영업목적으로 운전하던 중 사고\n를 일으킨 때\n 6. 피보험자가 도로교통법 제43조, 제44조에 의한 음주, 무면허 상태 또는 제45조에 의한 \n약물 상태에서 운전하던 중 사고를 일으킨 때\n제3조(보험금의 청구)\n보험수익자 또는 계약자는 보험금을 청구할 때에는 다음 서류를 첨부하여 회사에 제출하여야 \n합니다 .\n 1. 보험금 청구서 (회사 양식)\n 2. 사고증명서 (소장, 선임한 변호사가 발행한 세금계산서 )\n 3. 신분증 (주민등록증 또는 운전면허증 등 사진이 부착된 정부기관발행 신분증 , 본인이 아닌 \n경우에는 본인의 인감증명서 또는 본인서명사실확인서 포함)\n 4. 기타 보험수익자가 보험금 등의 수령에 필요하여 제출하는 서류'),
0.016666666666666666),
(Document(id='a10a022a-015c-4c84-866d-1c27ce90a41a', metadata={'page': 13, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 3 -의하거나 또는 그 이전에 발생한 후유장해를 포함합니다 ), 후유장해보험금이 지급되지 않았\n던 피보험자에게 그 신체의 동일 부위에 또다시 제8항에 규정하는 후유장해상태가 발생하\n였을 경우에는 직전까지의 후유장해에 대한 후유장해보험금이 지급된 것으로 보고 최종 후\n유장해 상태에 해당되는 후유장해보험금에서 이를 차감하여 지급합니다 .\n【사 례】\n이 계약의 보장개시전의 원인에 의하거나 또는 그 이전에 발생한 장해로 후유장해보험금\n의 지급사유가 되지 않았던 장해 :\n보험가입 전 한 팔의 손목관절에 심한 장해(지급률 20%)가 있었던 피보험자가 보험가입 \n후 상해로 그 손목관절에 기능을 완전히 잃은 경우(지급률 30%)에는 보험가입 후 발생한 \n상해로 인한 장해지급률 30%에서 보험가입 전 발생한 장해지급률 20%를 차감한 10%에 \n해당하는 후유장해보험금을 지급\n⑩ 회사가 지급하여야 할 하나의 상해로 인한 후유장해보험금은 보험가입금액을 한도로 합니다 .\n제5조(보험금을 지급하지 않는 사유) \n① 회사는 다음 중 어느 한가지로 보험금 지급사유가 발생한 때에는 보험금을 지급하지 않습\n니다.\n 1. 피보험자가 고의로 자신을 해친 경우. 다만, 피보험자가 심신상실 등으로 자유로운 의사\n결정을 할 수 없는 상태에서 자신을 해친 경우에는 보험금을 지급합니다 .\n 2. 보험수익자가 고의로 피보험자를 해친 경우. 다만, 그 보험수익자가 보험금의 일부 보험\n수익자인 경우에는 다른 보험수익자에 대한 보험금은 지급합니다 .\n 3. 계약자가 고의로 피보험자를 해친 경우\n 4. 피보험자의 임신, 출산(제왕절개를 포함합니다 ), 산후기 . 그러나 , 회사가 보장하는 보험금 \n지급사유와 보장개시일부터 2년이 지난 후에 발생한 습관성 유산, 불임 및 인공수정 관\n련 합병증으로 인한 경우에는 보험금을 지급합니다 .\n【습관성 유산, 불임 및 인공수정 】\n 한국표준질병 ·사인분류상의 N96~N98에 해당하는 질병을 말합니다 . \n 5. 전쟁, 외국의 무력행사 , 혁명, 내란, 사변, 폭동\n② 회사는 다른 약정이 없으면 피보험자가 직업, 직무 또는 동호회 활동목적으로 아래에 열거\n된 행위로 인하여 제3조(보험금의 지급사유 )의 상해 관련 보험금 지급사유가 발생한 때에는 \n해당 보험금을 지급하지 않습니다 .\n 1. 전문등반 (전문적인 등산용구를 사용하여 암벽 또는 빙벽을 오르내리거나 특수한 기술, 경\n험, 사전훈련을 필요로 하는 등반을 말합니다 ), 글라이더 조종, 스카이다이빙 , 스쿠버다\n이빙, 행글라이딩 , 수상보트 , 패러글라이딩\n 2. 모터보트 , 자동차 또는 오토바이에 의한 경기, 시범, 흥행(이를 위한 연습을 포함합니다 ) \n또는 시운전 (다만, 공용도로상에서 시운전을 하는 동안 보험금 지급사유가 발생한 경우\n에는 보장합니다 )\n 3. 선박에 탑승하는 것을 직무로 하는 사람이 직무상 선박에 탑승하고 있는 동안\n제6조(보험금 지급사유의 통지) \n계약자 또는 피보험자나 보험수익자는 제3조(보험금의 지급사유 )에서 정한 보험금 지급사유의 \n발생을 안 때에는 지체없이 그 사실을 회사에 알려야 합니다 .\n제7조(보험금의 청구) \n① 보험수익자는 다음의 서류를 제출하고 보험금을 청구하여야 합니다 .\n 1. 청구서 (회사 양식)\n 2. 사고증명서 (진료비계산서 , 사망진단서 , 장해진단서 , 입원치료확인서 , 의사처방전 (처방조제\n비) 등)\n 3. 신분증 (주민등록증이나 운전면허증 등 사진이 붙은 정부기관발행 신분증 , 본인이 아닌 경\n우에는 본인의 인감증명서 또는 본인서명사실확인서 포함)'),
0.01639344262295082),
(Document(id='8586aa97-9b25-4b6a-b556-f6040b1a57b8', metadata={'page': 116, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 106 - 3. 경찰서에서 발행한 교통사고사실확인원 또는 검찰에 의해 기소된 경우 검찰청에서 발행\n한 공소장\n 4. 진단서 , 소견서 등 피해자의 상해등급을 확인할 수 있는 서류\n 5. 그 밖에 보험회사가 필요하다고 인정하는 서류\n⑨ 제1항에서 자동차라 함은 자동차관리법 시행규칙 제2조에 정한 승용자동차 , 승합자동차 , 화\n물자동차 , 특수자동차 및 자동차손해배상보장법 시행령 제2조에 정한 덤프트럭 , 타이어식 \n기중기 , 콘크리트믹서트럭 , 트럭적재식 콘크리트펌프 , 트럭적재식 아스팔트살포기 , 타이어식 \n굴삭기 , 노면측정장비 (노면측정장치를 가진 자주식인 것을 말한다 ), 트럭지게차 , 도로보수트\n럭)를 말합니다 . 이 경우 관련 법규가 변경되어 새로운 항목이 추가되는 경우에는 그 항목\n도 포함하는 것으로 합니다 . 다만, 건설기계가 작업기계로 사용되는 동안은 자동차로 보지 \n않습니다 .\n【용어풀이 】\n「중상해 」라 함은 사람의 신체를 상해하여 생명에 대한 위험을 발생하게 한 경우 신체의 \n상해로 인하여 불구 또는 불치나 난치의 질병에 이르게 한 경우를 말합니다 .\n제2조(보험금을 지급하지 않는 사유)\n회사는 아래의 사유를 원인으로 하여 생긴 손해는 보상하여 드리지 않습니다 .\n 1. 피보험자의 고의\n 2. 계약자의 고의 \n 3. 피보험자가 사고를 내고 도주하였을 때\n 4. 피보험자가 자동차를 경기용이나 경기를 위한 연습용 또는 시험용으로 운전하던 중 사고\n를 일으킨 때\n 5. 피보험자가 도로교통법 제43조, 제44조에 정한 음주․무면허 상태 또는 제45조에 의한 약\n물 상태에서 운전하던 중 사고를 일으킨 때\n 6. 자가용의 경우 피보험자가 자동차를 영업목적으로 운전하던 중 발생한 사고\n제3조(보험금의 비례분담 )\n① 제1조(보험금의 지급사유 ) 제1항의 형사합의금에 대하여 교통사고처리지원금을 지급할 다수 \n계약(각종 공제계약을 포함합니다 )이 체결되어 있는 경우 형사합의금 및 각 계약의 보상책\n임액에 따라 제2항에 의해 계산된 각 계약의 비례분담액을 보상책임액으로 지급합니다 .\n② 다수 계약이 체결되어 있는 경우 각각의 계약에 대하여 다른 계약이 없는 것으로 하여 산\n출한 보상책임액의 합계액이 형사합의금을 초과한 때에는 회사는 각 계약의 보상책임액을 \n비례분담하여 지급하며 , 비례분담액 산출방식은 다음과 같습니다 .\n각 계약별 비례분담액 = \n 형사합의금 × 각 계약별 보상책임액\n각 계약별 보상책임액의 합계액\n제4조(준용규정 )\n이 특별약관에서 정하지 않은 사항은 보통약관을 따릅니다 .'),
0.01639344262295082),
(Document(id='d56a027c-81d5-482a-8012-b573290e069b', metadata={'page': 201, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 191 -1. 공통 및 상해보험 \n1) 알릴 의무 위반 관련\n【사례1】\nS씨는 가입전부터 질병이 있었으나 몇 년 동안 보상 청구하지 않으면 괜찮다는 권유로 청\n약서에 기재하지 않았다가 추후 보상시 불이익이 발생됨을 인지하고 불만 제기\n⇒ 계약 전 알릴 의무는 상법 제651조(고지의무 위반으로 인한 계약해지 )에서 정하고 있는 \n의무사항으로 보험계약자나 피보험자는 청약시 반드시 보험회사가 질문한 중요한 사항에 \n대해 서면으로 정확히 알려야만 합니다 .\n【사례2】\nP씨는 대수롭지 않은 치료라는 생각으로 가입 전 병원 진료에 대해 알리지 않고 가입하였\n다가 추후 보상시 면책 안내되어 불만 제기\n⇒ 계약 전 알릴 의무는 상법 제651조(고지의무 위반으로 인한 계약해지 )에서 정하고 있는 \n의무사항으로 임의 판단으로 누락시에는 보험계약의 해지 또는 보험금 부지급 등 불이익을 \n당할 수 있습니다 .\n2) 자필서명 미이행 관련\n【사례3】\nA씨는 지인인 B설계사의 설명을 듣고 남편을 피보험자로 하여 보험 가입을 권하였으나 남\n편 설득이 여의치 않자 A씨가 피보험자 서명을 대필하여 보험가입하였고 추후 보상시 문\n제가 될 수 있다는 내용을 인지하고 불만 제기\n⇒ 피보험자의 서면 동의를 받지 않으면 보상시 불이익이 있을 수 있으므로 , 반드시 피보\n험자 동의를 받으셔야 합니다 .\n3) 계약유지 관련 \n【사례4】\nK씨는 직업이 변경되어 보험사에 통지하였으나 직업의 위험도가 변경되어 현재 계약의 보\n험료 및 담보가 변경됨을 안내받고 불만 제기\n⇒ 표준약관 (상해보험 계약 후 알릴 의무)에 근거하여 직업 급수(위험도 )에 따라 보험료의 \n증액을 청구하거나 계약의 해지 등 가입조건이 변경될 수 있습니다 .주요 민원 / 분쟁 사례 및 유의사항'),
0.016129032258064516),
(Document(id='2581cf35-645d-467d-87d6-eb01735373a9', metadata={'page': 119, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 109 -한 공소장\n 4. 진단서 , 소견서 등 피해자의 상해등급을 확인할 수 있는 서류\n 5. 그 밖에 보험회사가 필요하다고 인정하는 서류\n⑨ 제1항에서 자동차라 함은 자동차관리법 시행규칙 제2조에 정한 승용자동차 , 승합자동차 , 화\n물자동차 , 특수자동차 및 자동차손해배상보장법 시행령 제2조에 정한 덤프트럭 , 타이어식 \n기중기 , 콘크리트믹서트럭 , 트럭적재식 콘크리트펌프 , 트럭적재식 아스팔트살포기 , 타이어식 \n굴삭기 , 노면측정장비 (노면측정장치를 가진 자주식인 것을 말한다 ), 트럭지게차 , 도로보수트\n럭)를 말합니다 . 이 경우 관련 법규가 변경되어 새로운 항목이 추가되는 경우에는 그 항목\n도 포함하는 것으로 합니다 . 다만, 건설기계가 작업기계로 사용되는 동안은 자동차로 보지 \n않습니다 .\n【용어풀이 】\n「중상해 」라 함은 사람의 신체를 상해하여 생명에 대한 위험을 발생하게 한 경우 신체의 \n상해로 인하여 불구 또는 불치나 난치의 질병에 이르게 한 경우를 말합니다 .\n제2조(보험금을 지급하지 않는 사유)\n회사는 아래의 사유를 원인으로 하여 생긴 손해는 보상하여 드리지 않습니다 .\n 1. 피보험자의 고의\n 2. 계약자의 고의 \n 3. 피보험자가 사고를 내고 도주하였을 때\n 4. 피보험자가 자동차를 경기용이나 경기를 위한 연습용 또는 시험용으로 운전하던 중 사고\n를 일으킨 때\n 5. 피보험자가 도로교통법 제43조, 제44조에 정한 음주․무면허 상태 또는 제45조에 의한 약\n물 상태에서 운전하던 중 사고를 일으킨 때\n 6. 자가용의 경우 피보험자가 자동차를 영업목적으로 운전하던 중 발생한 사고\n제3조(보험금의 비례분담 )\n① 제1조(보험금의 지급사유 ) 제1항의 형사합의금에 대하여 교통사고처리지원금을 지급할 다수 \n계약(각종 공제계약을 포함합니다 )이 체결되어 있는 경우 형사합의금 및 각 계약의 보상책\n임액에 따라 제2항에 의해 계산된 각 계약의 비례분담액을 보상책임액으로 지급합니다 .\n② 다수 계약이 체결되어 있는 경우 각각의 계약에 대하여 다른 계약이 없는 것으로 하여 산\n출한 보상책임액의 합계액이 형사합의금을 초과하는 때에는 회사는 각 계약의 보상책임액\n을 비례분담하여 지급하며 , 비례분담액 산출방식은 다음과 같습니다 .\n각 계약별 비례분담액 = \n 형사합의금 × 각 계약별 보상책임액\n각 계약별 보상책임액의 합계액\n제4조(준용규정 )\n이 특별약관에서 정하지 않은 사항은 보통약관을 따릅니다 .'),
0.016129032258064516),
(Document(id='2989db1e-ade4-4f26-9336-e21b30f6329c', metadata={'page': 113, 'source': '../data/[일반보험]_KB개인상해보험_보험약관.pdf'}, page_content='- 103 - 3. 경찰서에서 발행한 교통사고사실확인원 또는 검찰에 의해 기소된 경우 검찰청에서 발행\n한 공소장\n 4. 진단서 , 소견서 등 피해자의 상해등급을 확인할 수 있는 서류\n 5. 그 밖에 보험회사가 필요하다고 인정하는 서류\n⑨ 제1항에서 자동차라 함은 자동차관리법 시행규칙 제2조에 정한 승용자동차 , 승합자동차 , 화\n물자동차 , 특수자동차 및 자동차손해배상보장법 시행령 제2조에 정한 덤프트럭 , 타이어식 \n기중기 , 콘크리트믹서트럭 , 트럭적재식 콘크리트펌프 , 트럭적재식 아스팔트살포기 , 타이어식 \n굴삭기 , 노면측정장비 (노면측정장치를 가진 자주식인 것을 말한다 ), 트럭지게차 , 도로보수트\n럭)를 말합니다 . 이 경우 관련 법규가 변경되어 새로운 항목이 추가되는 경우에는 그 항목\n도 포함하는 것으로 합니다 . 다만, 건설기계가 작업기계로 사용되는 동안은 자동차로 보지 \n않습니다 .\n【용어풀이 】\n「중상해 」라 함은 사람의 신체를 상해하여 생명에 대한 위험을 발생하게 한 경우 신체의 \n상해로 인하여 불구 또는 불치나 난치의 질병에 이르게 한 경우를 말합니다 .\n제2조(보험금을 지급하지 않는 사유)\n회사는 아래의 사유를 원인으로 하여 생긴 손해는 보상하여 드리지 않습니다 .\n 1. 피보험자의 고의\n 2. 계약자의 고의 \n 3. 피보험자가 사고를 내고 도주하였을 때\n 4. 피보험자가 자동차를 경기용이나 경기를 위한 연습용 또는 시험용으로 운전하던 중 사고\n를 일으킨 때\n 5. 피보험자가 도로교통법 제43조, 제44조에 정한 음주․무면허 상태 또는 제45조에 의한 약\n물 상태에서 운전하던 중 사고를 일으킨 때\n 6. 자가용의 경우 피보험자가 자동차를 영업목적으로 운전하던 중 발생한 사고\n제3조(보험금의 비례분담 )\n① 제1조(보험금의 지급사유 ) 제1항의 형사합의금에 대하여 교통사고처리지원금을 지급할 다수 \n계약(각종 공제계약을 포함합니다 )이 체결되어 있는 경우 형사합의금 및 각 계약의 보상책\n임액에 따라 제2항에 의해 계산된 각 계약의 비례분담액을 보상책임액으로 지급합니다 .\n② 다수 계약이 체결되어 있는 경우 각각의 계약에 대하여 다른 계약이 없는 것으로 하여 산\n출한 보상책임액의 합계액이 형사합의금을 초과하는 때에는 회사는 각 계약의 보상책임액\n을 비례분담하여 지급하며 , 비례분담액 산출방식은 다음과 같습니다 .\n각 계약별 비례분담액 = \n 형사합의금 × 각 계약별 보상책임액\n각 계약별 보상책임액의 합계액\n제4조(준용규정 )\n이 특별약관에서 정하지 않은 사항은 보통약관을 따릅니다 .'),
0.015873015873015872)]
LangChain 을 이용한 답변 생성
from operator import itemgetter
from langchain_core.runnables import RunnablePassthrough
# Prompt
template = '''Answer the question based only on the following context:
{context}
Question: {question}
'''
prompt = ChatPromptTemplate.from_template(template)
llm = ChatOpenAI(model="gpt-4-0125-preview", temperature=0)
final_rag_chain = (
{'context': retrieval_chain_rag_fusion, 'question': RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
final_rag_chain.invoke(question)
Output
'보험금의 지급사유는 다음과 같습니다:\n\n1. 보험기간 중에 상해의 직접결과로써 사망한 경우(질병으로 인한 사망은 제외합니다): 사망보험금\n2. 보험기간 중 상해로 장해분류표에서 정한 각 장해지급률에 해당하는 장해상태가 되었을 때: 후유장해보험금 (장해분류표에서 정한 지급률을 보험가입금액에 곱하여 산출한 금액)'
두 기법을 함께 사용하면 모델이 더 나은 답변을 생성할 가능성이 높아집니다. Multi-query로 다양한 질의로 검색을 수행한 후, Fusion 기법으로 이러한 검색 결과를 조합하여 최종 응답을 생성할 수 있습니다. 이 방식은 특히 대량의 정보에서 특정한 답변을 생성해야 하는 RAG 시스템에 효과적입니다.
이렇게 사용하면 다양한 각도의 정보를 수집하면서도 응답의 풍부함과 정확성을 향상시킬 수 있습니다.
<'보험금의 지급사유' 에 대한 답변 비교>
Multi Query Retriever
2-6-2. Multi Query Retriever
06. 다중 쿼리 검색기(MultiQueryRetriever)
How to use the MultiQueryRetriever
Fusion
rag-fusion
rag-from-scratch
[강의노트] RAG From Scratch : Query Translation
RAG-FUSION: A NEW TAKE ON RETRIEVAL-AUGMENTED GENERATION
RAG의 패러다임(Naive RAG, Advanced RAG, Modular RAG)