묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
split_text 문의
안녕하세요.코드를 보면 문서를 인코딩 후 청크 단위로 나눈 다음 다시 디코딩하여 임베딩 하는데요.언뜻 생각하기로는 다시 디코딩하는 것이 효율적이지 않은 것 같은데요. 바로 임베딩하지 않고 디코딩하여 임베딩하는 이유가 있을까요?
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
hub.pull("rlm/rag-prompt") 실행 시 오류가 발생합니다.
위 이미지처럼 코드 실행 시 오류가 발생하는데, 원인 파악이 안돼서 여쭤보고자 합니다.이전에는 LangSmith API KEY 미존재 오류가 발생하여 .env 파일에 LANGCHAIN_API_KEY, LANGCHAIN_TRACING_V2 값 모두 등록해놓은 상태입니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
배포 시 requirement.txt 유무
배포 시 requirement.txt 가 존재하지 않을 때는 배포가 되지 않았는데, 추가하니까 배포가 정상적으로 됩니다. 해당 파일은 배포 시 필수 파일인가요 ?
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
10강 궁금증
10강에서 OpenAIEmbeddings -> UpstageEmbeddings로 변경하는 과정을 따라하고 있었습니다. 궁금한 점은 query = "연봉 5천만원인 직장인의 소득세는 얼마인가요?" reviewed_docs = database.similarity_search(query, k=3) 이렇게 진행을 하시고, 또 아래와 같은 코드를 왜 실행시키는지 궁금합니다.# 이제 QA 체인 만들기 from langchain.chains import RetrievalQA qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=database.as_retriever(), chain_type_kwargs={"prompt" : prompt})QA 체인이 문서 검색 기능을 해주는 것으로 알고 있는데 왜 위에서 "reviewed_docs = database.similarity_search(query, k=3) " 을 넣으신건지 궁금합니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
문서 못 찾음
%pip install --upgrade --quiet docx2txt langchain-community from langchain_community.document_loaders import Docx2txtLoader from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=200) # 사이즈는 하나의 청크가 가지는 토큰 수, 오버랩을 통해 유사도 검색시 우리가 원하는 문서 가져오는 확률 높임(앞뒤 문맥 주기 가능) loader = Docx2txtLoader("./tax.docx") document_list = loader.load_and_split(text_splitter=text_splitter) %pip install -qU langchain-text-splitters document_list len(document_list) from langchain_openai import OpenAIEmbeddings from dotenv import load_dotenv load_dotenv() embedding = OpenAIEmbeddings(model="text-embedding-3-large") %pip install -qU langchain-chroma from langchain_chroma import Chroma # database = Chroma.from_documents(documents=document_list, embedding=embedding, collection_name="chroma-tax", persist_directory="./chroma") database = Chroma(collection_name="chroma-tax", persist_directory="./chroma", embedding_function=embedding) print(database._collection.count()) # 문서 개수 query = "연봉 5천만원인 직장인의 소득세는 얼마인가요?" # reviewed_docs = database.similarity_search(query, k=3) from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o") %pip install -U langchain langchainhub --quiet from langchain import hub prompt = hub.pull("rlm/rag-prompt") prompt # 이제 QA 체인 만들기 from langchain.chains import RetrievalQA qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=database.as_retriever(), chain_type_kwargs={"prompt" : prompt}) ai_messgae = qa_chain.invoke({"query" : query}) ai_messgae인강을 들으며 코드를 동일하게 작성하였는데 관련 문서 내용을 찾지 못하여 답변이 저렇게 나오는데 어느 부분이 문제인지 모르겠습니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
Golden Dataset 관련 질문
안녕하세요. 강의 잘 듣고 있습니다. 강의에서 evaluation을 위한 golden dataset을 chatgpt로 생성하셨는데 실무에서는 보통 어떻게 처리하시는지 궁금합니다. 실무에서도 LLM이나 인공지능을 활용하여 dataset을 만드시나요? 아니면 사람이 개입해서 수집이나 조사 등을 통해 작성하시나요?
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
멘토링 신청은 어디서 하나요
멘토링 페이지에서 강사님 이름을 쳐도 안나오는데 멘토링 신청 안받는것인지 궁금해서 여쭤봅니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
Mysql과 벡터 DB를 사용해야하는 경우
안녕하세요. 실무에서 Mysql을 많이 사용하는데 Mysql 사용자 테이블을 기준으로 사용자와 비슷한 취미 이런것들을 추천 시스템을 만든다고한다면 mysql에 저장된 데이터를 벡터 DB에 계속 업데이트를 해야하는데 가능한건지 의문이듭니다. 사용자 테이블에는 탈퇴를 했다거나 취미가 바뀌었다거나 등 데이터가 업데이트가 되는데 벡터 DB에서도 해당 데이터를 찾아서 업데이트 되는게 가능한건지 아니면 배치성으로 데이터를 한번에 업데이트를 헤야하는것인지 고민이 드는데 강사님 같은 경우에 어떻게 해결하셨는지 궁금합니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
OpenAIEmbedding
OpenAI Embedding 모델을 사용하셨는데, 기업 환경에서도 이 모델을 활용하는지 궁금합니다. 데이터가 OpenAI 서버로 전송된다면 보안상 위험은 없을까요?
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
AI논문은 주로 어디서 보시나요?
이번 강의에서 많은 인사이트를 얻어갑니다. Few shot이나 이런 논문은 주로 어디서 어떻게 얻으시는지 궁금합니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
Metric 3가지 방식 중에 추천해주시는 방식이있나요?
제목 그대로 추천해주시는 Mertic 방식이 있나요? 각 방식마다 장 단점이 있을거같고 특수 상황에서 쓰이는 방식들이있을거같아서요.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
토큰별로 문서를 쪼개는 이유
안녕하세요.토큰별로 문서를 쪼개는 이유가 아래가 맞을까요?유사도 검색18만글자를 안쪼개고 벡터 데이터베이스에 저장하면 유사도 검색이 안됨GPT4-0 컨텍스트 토큰 한계18만글자를 안쪼개고 넣는다 한들 유사도 검색 후 GPT가 그 결과값을 보고 답변을 줘야하는데 결과값이 18만글자니깐 답변 조차 못함
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
chunk_overlap은 할수가 없나요?
langchain으로 했을때는 chunk_overlap이라는 옵션이있어서 글자의 중복을해서 답변정확도를 올린다고이해했습니다. 그리고 현재 강의에서는 토큰이 18만이기 때문에 이거를 1500토큰으로 자르는거까지 코드에 반영이된거같은데 중복도는 어쩔수가 없는걸까요?
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
영상에 나온 답변이랑 다르게 나오네요.
질문을 하니```{'query': '연봉 5천만원인 직장인의 소득세는 얼마인가요?', 'result': '죄송하지만 연봉 5천만원인 직장인의 소득세를 직접 계산할 수 있는 구체적인 정보는 제공된 문서에 포함되어 있지 않습니다. 소득세 계산을 위해서는 세율표 및 공제 항목 등의 자세한 정보가 필요합니다. 이러한 정보는 국세청 웹사이트나 관련 세무 전문가를 통해 확인하시기 바랍니다.', 'source_documents': [Document(id='c8968fab-aa34-4a18-959a-bbc7ad50eab7', metadata={'source': 'tax.docx'}, page_content='[전문개정 2009. 12. 31.]\n\n\n\n제10조(납세지의 변경신고) 거주자나 비거주자는 제6조부터 제9조까지의 규정에 따른 납세지가 변경된 경우 변경된 날부터 15일 이내에 대통령령으로 정하는 바에 따라 그 변경 후의 납세지 관할 세무서장에게 신고하여야 한다.\n\n[전문개정 2009. 12. 31.]\n\n\n\n제11조(과세 관할) 소득세는 제6조부터 제10조까지의 규정에 따른 납세지를 관할하는 세무서장 또는 지방국세청장이 과세한다.\n\n[전문개정 2009. 12. 31.]\n\n\n\n제2장 거주자의 종합소득 및 퇴직소득에 대한 납세의무 <개정 2009. 12. 31.>\n\n\n\n제1절 비과세 <개정 2009. 12. 31.>\n\n\n\n제12조(비과세소득) 다음 각 호의 소득에 대해서는 소득세를 과세하지 아니한다. <개정 2010. 12. 27., 2011. 7. 25., 2011. 9. 15., 2012. 2. 1., 2013. 1. 1., 2013. 3. 22., 2014. 1. 1., 2014. 3. 18., 2014. 12. 23., 2015. 12. 15., 2016. 12. 20., 2018. 3. 20., 2018. 12. 31., 2019. 12. 10., 2019. 12. 31., 2020. 6. 9., 2020. 12. 29., 2022. 8. 12., 2022. 12. 31., 2023. 8. 8., 2023. 12. 31., 2024. 12. 31.>\n\n1. 「공익신탁법」에 따른 공익신탁의 이익\n\n2. 사업소득 중 다음 각 목의 어느 하나에 해당하는 소득\n\n가. 논ㆍ밭을 작물 생산에 이용하게 함으로써 발생하는 소득\n\n나. 1개의 주택을 소유하는 자의 주택임대소득(제99조에 따른 기준시가가 12억원을 초과하는 주택 및 국외에 소재하는 주택의 임대소득은 제외한다) 또는 해당 과세기간에 대통령령으로 정하는 총수입금액의 합계액이 2천만원 이하인 자의 주택임대소득(2018년 12월 31일 이전에 끝나는 과세기간까지 발생하는 소득으로 한정한다). 이 경우 주택 수의 계산 및 주택임대소득의 산정 등 필요한 사항은 대통령령으로 정한다.\n\n다. 대통령령으로 정하는 농어가부업소득\n\n라. 대통령령으로 정하는 전통주의 제조에서 발생하는 소득\n\n마. 조림기간 5년 이상인 임지(林地)의 임목(林木)의 벌채 또는 양도로 발생하는 소득으로서 연 600만원 이하의 금액. 이 경우 조림기간 및 세액의 계산 등 필요한 사항은 대통령령으로 정한다.\n\n바. 대통령령으로 정하는 작물재배업에서 발생하는 소득\n\n사. 대통령령으로 정하는 어로어업 또는 양식어업에서 발생하는 소득\n\n3. 근로소득과 퇴직소득 중 다음 각 목의 어느 하나에 해당하는 소득\n\n가. 대통령령으로 정하는 복무 중인 병(兵)이 받는 급여\n\n나. 법률에 따라 동원된 사람이 그 동원 직장에서 받는 급여'), Document(id='a4e88f4b-a02f-4202-bf48-2b6985e47a1a', metadata={'source': 'tax.docx'}, page_content='바. 「문화유산의 보존 및 활용에 관한 법률」에 따라 국가지정문화유산으로 지정된 서화ㆍ골동품의 양도로 발생하는 소득\n\n사. 서화ㆍ골동품을 박물관 또는 미술관에 양도함으로써 발생하는 소득\n\n아. 제21조제1항제26호에 따른 종교인소득 중 다음의 어느 하나에 해당하는 소득\n\n\u3000\u3000\u3000\u30001) 「통계법」 제22조에 따라 통계청장이 고시하는 한국표준직업분류에 따른 종교관련종사자(이하 “종교관련종사자”라 한다)가 받는 대통령령으로 정하는 학자금\n\n\u3000\u3000\u3000\u30002) 종교관련종사자가 받는 대통령령으로 정하는 식사 또는 식사대\n\n\u3000\u3000\u3000\u30003) 종교관련종사자가 받는 대통령령으로 정하는 실비변상적 성질의 지급액\n\n\u3000\u3000\u3000\u30004) 종교관련종사자 또는 그 배우자의 출산이나 6세 이하(해당 과세기간 개시일을 기준으로 판단한다) 자녀의 보육과 관련하여 종교단체로부터 받는 금액으로서 월 20만원 이내의 금액\n\n\u3000\u3000\u3000\u30005) 종교관련종사자가 기획재정부령으로 정하는 사택을 제공받아 얻는 이익\n\n자. 법령ㆍ조례에 따른 위원회 등의 보수를 받지 아니하는 위원(학술원 및 예술원의 회원을 포함한다) 등이 받는 수당\n\n[전문개정 2009. 12. 31.]\n\n\n\n제13조 삭제 <2009. 12. 31.>\n\n\n\n제2절 과세표준과 세액의 계산 <개정 2009. 12. 31.>\n\n\n\n제1관 세액계산 통칙 <개정 2009. 12. 31.>\n\n\n\n제14조(과세표준의 계산) ① 거주자의 종합소득 및 퇴직소득에 대한 과세표준은 각각 구분하여 계산한다.\n\n② 종합소득에 대한 과세표준(이하 “종합소득과세표준”이라 한다)은 제16조, 제17조, 제19조, 제20조, 제20조의3, 제21조, 제24조부터 제26조까지, 제27조부터 제29조까지, 제31조부터 제35조까지, 제37조, 제39조, 제41조부터 제46조까지, 제46조의2, 제47조 및 제47조의2에 따라 계산한 이자소득금액, 배당소득금액, 사업소득금액, 근로소득금액, 연금소득금액 및 기타소득금액의 합계액(이하 “종합소득금액”이라 한다)에서 제50조, 제51조, 제51조의3, 제51조의4 및 제52조에 따른 공제(이하 “종합소득공제”라 한다)를 적용한 금액으로 한다.<개정 2013. 1. 1., 2014. 1. 1.>\n\n③ 다음 각 호에 따른 소득의 금액은 종합소득과세표준을 계산할 때 합산하지 아니한다.<개정 2010. 12. 27., 2011. 7. 14., 2013. 1. 1., 2014. 12. 23., 2015. 12. 15., 2017. 12. 19., 2018. 12. 31., 2019. 12. 31., 2020. 12. 29., 2023. 12. 31.>\n\n1. 「조세특례제한법」 또는 이 법 제12조에 따라 과세되지 아니하는 소득\n\n2. 대통령령으로 정하는 일용근로자(이하 “일용근로자”라 한다)의 근로소득\n\n3. 제129조제2항의 세율에 따라 원천징수하는 이자소득 및 배당소득과 제16조제1항제10호에 따른 직장공제회 초과반환금'), Document(id='98624c4c-4eb2-459a-803b-0ff2a81624ca', metadata={'source': 'tax.docx'}, page_content='2) 대학의 교직원 또는 대학과 고용관계가 있는 학생이 소속 대학에 설치된 「산업교육진흥 및 산학연협력촉진에 관한 법률」 제25조에 따른 산학협력단(이하 이 조에서 “산학협력단”이라 한다)으로부터 같은 법 제32조제1항제4호에 따라 받는 보상금\n\n저. 대통령령으로 정하는 복리후생적 성질의 급여\n\n처. 제20조제1항제6호에 따른 소득 중 다음의 요건을 모두 충족하는 소득으로서 대통령령으로 정하는 금액 이하의 금액\n\n1) 임원 또는 종업원(이하 이 조, 제20조 및 제164조의5에서 “임원등”이라 한다) 본인이 소비하는 것을 목적으로 제공받거나 지원을 받아 구입한 재화 또는 용역으로서 대통령령으로 정하는 기간 동안 재판매가 허용되지 아니할 것\n\n2) 해당 재화 또는 용역의 제공과 관련하여 모든 임원등에게 공통으로 적용되는 기준이 있을 것\n\n4. 연금소득 중 다음 각 목의 어느 하나에 해당하는 소득\n\n가. 「국민연금법」, 「공무원연금법」 또는 「공무원 재해보상법」, 「군인연금법」 또는 「군인 재해보상법」, 「사립학교교직원 연금법」, 「별정우체국법」 또는 「국민연금과 직역연금의 연계에 관한 법률」(이하 “공적연금 관련법”이라 한다)에 따라 받는 유족연금ㆍ퇴직유족연금ㆍ퇴역유족연금ㆍ장해유족연금ㆍ상이유족연금ㆍ순직유족연금ㆍ직무상유족연금ㆍ위험직무순직유족연금, 장애연금, 장해연금ㆍ비공무상 장해연금ㆍ비직무상 장해연금, 상이연금(傷痍年金), 연계노령유족연금 또는 연계퇴직유족연금\n\n나. 삭제<2013. 1. 1.>\n\n다. 「산업재해보상보험법」에 따라 받는 각종 연금\n\n라. 「국군포로의 송환 및 대우 등에 관한 법률」에 따른 국군포로가 받는 연금\n\n마. 삭제<2013. 1. 1.>\n\n5. 기타소득 중 다음 각 목의 어느 하나에 해당하는 소득\n\n가. 「국가유공자 등 예우 및 지원에 관한 법률」 또는 「보훈보상대상자 지원에 관한 법률」에 따라 받는 보훈급여금ㆍ학습보조비 및 「북한이탈주민의 보호 및 정착지원에 관한 법률」에 따라 받는 정착금ㆍ보로금(報勞金)과 그 밖의 금품\n\n나. 「국가보안법」에 따라 받는 상금과 보로금\n\n다. 「상훈법」에 따른 훈장과 관련하여 받는 부상(副賞)이나 그 밖에 대통령령으로 정하는 상금과 부상\n\n라. 종업원등 또는 대학의 교직원이 퇴직한 후에 사용자등 또는 산학협력단으로부터 지급받거나 대학의 학생이 소속 대학에 설치된 산학협력단으로부터 받는 직무발명보상금으로서 대통령령으로 정하는 금액. 다만, 직무발명보상금을 지급한 사용자등 또는 산학협력단과 대통령령으로 정하는 특수관계에 있는 자가 받는 직무발명보상금은 제외한다.\n\n마. 「국군포로의 송환 및 대우 등에 관한 법률」에 따라 국군포로가 받는 위로지원금과 그 밖의 금품\n\n바. 「문화유산의 보존 및 활용에 관한 법률」에 따라 국가지정문화유산으로 지정된 서화ㆍ골동품의 양도로 발생하는 소득\n\n사. 서화ㆍ골동품을 박물관 또는 미술관에 양도함으로써 발생하는 소득\n\n아. 제21조제1항제26호에 따른 종교인소득 중 다음의 어느 하나에 해당하는 소득'), Document(id='bb10cf65-d7b0-492f-b37e-a0d16a3f0214', metadata={'source': 'tax.docx'}, page_content='소득세법\n\n소득세법\n\n[시행 2025. 7. 1.] [법률 제20615호, 2024. 12. 31., 일부개정]\n\n기획재정부(재산세제과(양도소득세)) 044-215-4312\n\n기획재정부(소득세제과(근로소득)) 044-215-4216\n\n기획재정부(금융세제과(이자소득, 배당소득)) 044-215-4233\n\n기획재정부(소득세제과(사업소득, 기타소득)) 044-215-4217\n\n\n\n제1장 총칙 <개정 2009. 12. 31.>\n\n\n\n제1조(목적) 이 법은 개인의 소득에 대하여 소득의 성격과 납세자의 부담능력 등에 따라 적정하게 과세함으로써 조세부담의 형평을 도모하고 재정수입의 원활한 조달에 이바지함을 목적으로 한다.\n\n[본조신설 2009. 12. 31.]\n\n[종전 제1조는 제2조로 이동 <2009. 12. 31.>]\n\n\n\n제1조의2(정의) ① 이 법에서 사용하는 용어의 뜻은 다음과 같다. <개정 2010. 12. 27., 2014. 12. 23., 2018. 12. 31.>\n\n1. “거주자”란 국내에 주소를 두거나 183일 이상의 거소(居所)를 둔 개인을 말한다.\n\n2. “비거주자”란 거주자가 아닌 개인을 말한다.\n\n3. “내국법인”이란 「법인세법」 제2조제1호에 따른 내국법인을 말한다.\n\n4. “외국법인”이란 「법인세법」 제2조제3호에 따른 외국법인을 말한다.\n\n5. “사업자”란 사업소득이 있는 거주자를 말한다.\n\n② 제1항에 따른 주소ㆍ거소와 거주자ㆍ비거주자의 구분은 대통령령으로 정한다.\n\n[본조신설 2009. 12. 31.]\n\n\n\n제2조(납세의무) ① 다음 각 호의 어느 하나에 해당하는 개인은 이 법에 따라 각자의 소득에 대한 소득세를 납부할 의무를 진다.\n\n1. 거주자\n\n2. 비거주자로서 국내원천소득(國內源泉所得)이 있는 개인\n\n② 다음 각 호의 어느 하나에 해당하는 자는 이 법에 따라 원천징수한 소득세를 납부할 의무를 진다.\n\n1. 거주자\n\n2. 비거주자\n\n3. 내국법인\n\n4. 외국법인의 국내지점 또는 국내영업소(출장소, 그 밖에 이에 준하는 것을 포함한다. 이하 같다)\n\n5. 그 밖에 이 법에서 정하는 원천징수의무자\n\n③ 「국세기본법」 제13조제1항에 따른 법인 아닌 단체 중 같은 조 제4항에 따른 법인으로 보는 단체(이하 “법인으로 보는 단체”라 한다) 외의 법인 아닌 단체는 국내에 주사무소 또는 사업의 실질적 관리장소를 둔 경우에는 1거주자로, 그 밖의 경우에는 1비거주자로 보아 이 법을 적용한다. 다만, 다음 각 호의 어느 하나에 해당하는 경우에는 소득구분에 따라 해당 단체의 각 구성원별로 이 법 또는 「법인세법」에 따라 소득에 대한 소득세 또는 법인세[해당 구성원이 「법인세법」에 따른 법인(법인으로 보는 단체를 포함한다)인 경우로 한정한다. 이하 이 조에서 같다]를 납부할 의무를 진다.<개정 2010. 12. 27., 2013. 1. 1., 2018. 12. 31.>\n\n1. 구성원 간 이익의 분배비율이 정하여져 있고 해당 구성원별로 이익의 분배비율이 확인되는 경우')]}```위와같은 답변을 받았습니다.데이터 베이스 저장할때도 똑같이 진행했는데 이상하네요.
-
미해결맞춤형 LLM 만들기 : 처음 시작하는 분을 위한 RAG 기초 개념부터 멀티모달·Agent 실습까지
test.pdf
첨부파일이 어딧죠 실습데이터 셋 안 열리는데
-
미해결맞춤형 LLM 만들기 : 처음 시작하는 분을 위한 RAG 기초 개념부터 멀티모달·Agent 실습까지
섹션 1 퀴즈 2번 문제 리포팅
섹션 1 퀴즈 2에 정답이 2개 검색기, 생성기지만 선택이 하나만 되는 문제가 있습니다.멀티플 초이스가 안되고 생성기만 선택하면 오답으로 반응함.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
Langchain을 활용한 실습 주제 추천해주실 수 있으신가요?
안녕하세요 강사님! 이번에 처음 langchain 입문해서 강사님 기초 강의부터 쭉 수강했습니다개념 이해와 실습까지 함께 할 수 있어서 정말 좋았습니다! 다름이 아니구 혹시 실무에서 경험해볼수있는 실습 주제를 몇가지 추천해주실 수 있으신가요..? 아무래도 처음이다 보니 한번에 감이 잡히진 않아서요!! 감사합니다!
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
tax_with_markdown 파일 내용 오류
안녕하세요:)퀄리티 높은 강의 만들어주셔서 감사합니다! 실습을 따라하면서 제 소득세 답변과 병진님의 소득세 답변이 달라서 (금액이 다름) 왜 그런가 이유를 찾아보았는데요. 올려주신 tax_with_markdown.docx 자료에서 기존 이미지의 금액과 다른 것을 확인하였습니다. (아래 빨간색 박스) 기존 이미지의 금액으로 변경해서 다시 pinecone에 index 올린 후에 채팅을 하니까 그제서야 병진님과의 답변과 똑같아졌네요! 자료 파일 다시 한번 확인해주시면 감사하겠습니다:)
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
dictionary chain 생성 시 적절치 않은 변환
%pip install --upgrade langchain-text-splitters langchain-upstage from langchain_community.document_loaders import Docx2txtLoader from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=100 ) #loader = Docx2txtLoader('./tax_with_table.docx') loader = Docx2txtLoader('./tax_with_markdown.docx') documents_list = loader.load_and_split(text_splitter=text_splitter) documents_list1=documents_list[len(documents_list)//2:] documents_list2=documents_list[:len(documents_list)//2] from langchain_upstage import UpstageEmbeddings from dotenv import load_dotenv load_dotenv() embedding = UpstageEmbeddings(model="solar-embedding-1-large") import os from pinecone import Pinecone from langchain_pinecone import PineconeVectorStore pinecone_api_key = os.environ.get("PINECONE_API_KEY") pc = Pinecone(api_key=pinecone_api_key) index_name = "tax-markdown-index" vector_store = PineconeVectorStore.from_documents(documents_list1, embedding, index_name=index_name) vector_store.add_documents(documents_list2) query = "연봉 5천만원인 직장인의 소득세는 얼마인가요?" #retrieved_docs = database.similarity_search(query) from langchain_upstage import ChatUpstage llm = ChatUpstage() # prompt = f""" # - 당신은 최고의 한국 소득세 전문가입니다 # - [Context]를 참고해서 아용자의 질문에 답변해주세요 # [Context] # {retrieved_docs} # Question: {query} # """ # ai_message = llm.invoke(prompt) from langchain import hub prompt = hub.pull("rlm/rag-prompt") # retriever = vector_store.as_retriever() # retriever.invoke("연봉 5천만원인 거주자의 소득세는 얼마인가요?") from langchain.chains import RetrievalQA qa_chain = RetrievalQA.from_chain_type( llm=llm, retriever=vector_store.as_retriever(), chain_type_kwargs={"prompt": prompt} ) query = "연봉 5천만원인 직장인의 소득세는 얼마인가요? 2024년도 소득 기준으로 하고 인적공제는 혼자고 공제항목은 평균정도로 잡아봐." ai_message = qa_chain({"query":query}) ai_message from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate dictionary = ["사람을 나타내는 표현 -> 거주자"] prompt = ChatPromptTemplate.from_template(f""" 사용자의 질문을 보고 우리의 사전을 참고해서 사용자의 질문을 변경해주세요. 만약 변경할 필요가 없다고 판단된다면 사용자의 질문을 변경하지 않아도 됩니다. 사전 : {dictionary} """) dictionary_chain = prompt | llm | StrOutputParser() dictionary_chain.invoke({"question": "연봉 5천만원인 직장인의 소득세는 얼마인가요?"}) tax_chain = {"query": dictionary_chain} | qa_chain ai_response = tax_chain.invoke({"question": "연봉 5천만원인 직장인의 소득세는 얼마인가요?"}) ai_response 이 상황에서 dictionary_chain.invoke({"question":"연봉 5천만원인 직장인의 소득세는 얼마인가요?"})를 했을때 직장인을 거주자로 바꾸는게 아니라 답변을 아래와같이줍니다 ㅜㅜ'사용자의 질문을 사람을 나타내는 표현을 우리의 사전을 참고하여 "거주자"로 변경해보겠습니다. 그러나 사용자가 질문을 아직 제출하지 않았으므로, 가상의 질문을 만들어 변경해보겠습니다.\n\n가상의 사용자 질문: "사람들이 자주 방문하는 관광지는 어디인가요?"\n\n변경된 질문: "거주자들이 자주 방문하는 관광지는 어디인가요?"\n\n만약 사용자의 질문이 이미 적절하거나 변경이 필요하지 않다고 판단되면 질문을 변경하지 않습니다. 실제 사용자 질문을 알려주시면 그에 맞게 도움을 드리겠습니다.' 그 결과 최종 response도 아래와같이 나와버리네요 ㅠㅠ ['e9f858cf-0c76-4887-9556-22c5f32eadf4', '40a151b4-ee72-4f3c-ab61-055114344dd9', '6072bcb7-4ea0-4fbc-8828-e74cb883d162', 'a6a9fc0d-eb7a-482d-8b9d-e12073ea6dce', '9d16b74e-557b-475d-b536-8f37e77306a8', '5ad3b09f-8afa-42b6-8cec-a77a525e6f4b', 'a678eb3b-1b5d-4106-888f-bdf3302ac84c', '57a9b7e1-9511-4a34-822d-7f2a0ae710fc', '4ecd54b8-fac0-459b-ae14-4985f2dd0a20', 'bc50c84a-4770-4756-a8d4-06985387f03b', '65a1116f-93c3-4a5b-8a17-3018ccbd26b0', 'cfde5547-ee30-417c-b2dd-ed0c7f7a602d', '5f9a45e2-0279-4363-bb7c-b0fe85cc0595', '907860e1-e1c4-410d-8fa2-8eb82808f008', '682389cf-f2ad-45df-9db8-a1b6b046f43d', '76395c00-dffa-4d26-9f5e-fd910228538c', '136528f9-c253-406f-a5c8-c8fcd4fad21f', '5f6c5158-cd35-4b74-ae75-ec1f34c35394', 'b8cb52ec-e324-48c1-83a1-31c02e4d202d', '98dfe4bc-c0de-4f7e-996e-bf20416915dc', 'c9018194-109e-443c-8dd0-af5607de3c6f', '2120a161-f0f4-4c91-9759-5bb0aebb995d', '96948c3b-5937-44c1-ad84-04ed923e695b', '490a568c-d378-4cbb-aa69-bf195e41371b', '14e8fcec-7c2c-45d6-ac7b-14c009a6acc5',... '84802efa-23df-4a84-b311-577933f09c51', 'a22be767-fa83-4325-a605-498647daa19e', '879e0a7f-50ed-4cf1-8b6e-f4dbd2a498fc', 'e275ec53-9664-4a18-a813-d40b0e130a23', 'fbde51af-1fbb-445b-8c59-68d61b9bfa2d']Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings.../Users/arang/.pyenv/versions/3.13.2/envs/inflearn-llm-application/lib/python3.13/site-packages/langsmith/client.py:272: LangSmithMissingAPIKeyWarning: API key must be provided when using hosted LangSmith API warnings.warn({'query': '연봉 5천만원인 직장인의 소득세는 얼마인가요? 2024년도 소득 기준으로 하고 인적공제는 혼자고 공제항목은 평균정도로 잡아봐.', 'result': '연봉 5천만원의 직장인의 경우, 2024년도 소득 기준으로 산출세액은 552만원입니다. 여기에 근로소득세액공제 29만원을 적용하면, 최종 소득세는 523만원이 됩니다.'}{'query': '사용자의 질문이 "사람을 나타내는 표현은 무엇인가요?"라면, 우리의 사전을 참고하여 질문을 변경하면 다음과 같습니다: "거주자를 나타내는 표현은 무엇인가요?" \n\n만약 사용자의 질문이 다른 주제나 내용을 다루고 있다면, 해당 질문에 맞게 사전을 참고하여 변경할 수 있습니다. 만약 질문이 이미 명확하고 변경할 필요가 없다고 판단된다면, 질문을 그대로 유지할 수 있습니다.', 'result': '사용자의 질문이 "사람을 나타내는 표현은 무엇인가요?"라면, 우리의 사전을 참고하여 질문을 변경하면 다음과 같습니다: "거주자를 나타내는 표현은 무엇인가요?" 사전에서 "거주자"는 국내에 주소를 두거나 183일 이상의 거소를 둔 개인을 의미합니다.'}
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
문서 전처리에 관한 질문
안녕하십니까 강사님. 제공해주신 고품질의 강의 너무 잘 보고 있습니다.3.6의 강의 내용 중 문서의 표에 대한 마크다운 전처리를 추천해주셨습니다. 만약 실시간으로 크롤링하는 데이터를 바탕으로 RAG 챗봇을 만든다고 했을 때, 크롤링된 문서를 자동적으로 전처리하는 로직은 따로 없을까요? 사용자가 수동적으로 해야하는 부분일까요? 감사합니다.