인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

duckhee.lee님의 프로필 이미지
duckhee.lee

작성한 질문수

RAG를 활용한 LLM Application 개발 (feat. LangChain)

3.5 Retrieval 효율 개선을 위한 데이터 전처리

query 결과 값이 일치하지 않습니다.

해결된 질문

작성

·

208

·

수정됨

0

안녕하세요.

이번에 처음 프론트개발하다 파이썬 사용해보고 강의 잘 보고 있습니다. 꾸역꾸역 따라가고 있는데 결과값이 일치하지 않네요.

3.5 강의에서 결과가 일치하지 않습니다!

 %%
%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_with_markdown.docx')
document_list = loader.load_and_split(text_splitter=text_splitter)

# %%
document_list[52]

# %%
from dotenv import load_dotenv
from langchain_openai import OpenAIEmbeddings

load_dotenv()

embedding = OpenAIEmbeddings(model="text-embedding-3-large")

# %%
import os

from pinecone import Pinecone
from langchain_pinecone import PineconeVectorStore

index_name = 'tab-markdown-index'
pinecone_api_key = os.environ.get("PINECONE_API_KEY")
pc = Pinecone(api_key=pinecone_api_key)

database = PineconeVectorStore.from_documents(document_list, embedding, index_name=index_name)

# %%
query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?'
# retrieved_docs = database.similarity_search(query, k=3)

# %%
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o")

# %%
from langchain import hub

prompt = hub.pull("rlm/rag-prompt")

# %%
from langchain.chains import RetrievalQA

retriever=database.as_retriever()
qa_chain = RetrievalQA.from_chain_type(
  llm,
  retriever=retriever,
  chain_type_kwargs={"prompt": prompt}
)

# %%
retriever.invoke(query)

# %%
ai_message = qa_chain({"query":query})

# %%
ai_message

# %% [markdown]
# {'query': '연봉 5천만원인 직장인의 소득세는 얼마인가요?',
#  'result': '연봉 5천만원인 직장인의 소득세는 기본세율이 적용됩니다. 기본세율은 과세표준 구간별로 다르므로, 정확한 소득세 금액을 계산하려면 연말정산 등 세율표를 참조해야 합니다. 따라서 구체적인 금액을 제공하려면 추가 정보가 필요합니다.'}

# %% [markdown]
# 


참고1 retriever.invoke(query) 한 다음

이미지처럼 metadata 속성이 더 추가 되어 제 코드 결과가 나옵니다.

image.png

참고2 마크다운 테이블 잘 가져옵니다.

image.png

참고3 인덱스 네임은 제가 오타나서 그대로 사용중입니다.ㅜㅜ
index_name = 'tab-markdown-index'

참고4

https://github.com/jasonkang14/inflearn-rag-notebook/blob/main/3.5%20Retrieval%20%ED%9A%A8%EC%9C%A8%20%EA%B0%9C%EC%84%A0%EC%9D%84%20%EC%9C%84%ED%95%9C%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%A0%84%EC%B2%98%EB%A6%AC.ipynb

이 코드 그대로 하면 결과는 아래 이미지와 같습니다!

image.png

참고5

image.png

답변 2

1

강병진님의 프로필 이미지
강병진
지식공유자

안녕하세요!

retriver.invoke() 의 결과에서 제55조를 가져오지 못해서 답변이 원하는대로 나오지 않는다고 보시면 됩니다! 강의에서는 4번째에 잘 걸리지만, 제가 시도했을 때에도 4번째에서 문서를 가져오지 못했다면 k값을 변경해보면서 더 많은 문서를 가져오도록 하는 식으로 보여드렸을거에요.

그리고 첨부해주신 스크린샷으로 보면 4개의 문서를 가져오는데, 첫번째와 두번째, 세번째와 네번째 값이 동일한데요, 뭔가 중복돼서 값이 들어간게 아닌가 생각합니다!

그리고 3.6강에서 보신것처럼 3.5강까지만으로는 유사도 검색이 완벽하게 이루어지지 않기 때문에 키워드를 활용해서 저희가 원하는 문서를 잘 가져오기 때문에 원하는 답변을 얻어낸다고 보시면 됩니다!

 

설명이 부족하다면 다시 댓글을 달아주세요~ 더 상세하게 풀어서 말씀드리겠습니다!

duckhee.lee님의 프로필 이미지
duckhee.lee
질문자

아하 감사합니다!!

1

duckhee.lee님의 프로필 이미지
duckhee.lee
질문자

query = '연봉 5천만원인 거주자의 소득세는 얼마인가요?'
# retrieved_docs = database.similarity_search(query, k=3)
image.png

강의 3.6 보면서 질문을 변경하면 강의랑 동일하게 query의 값이 나옵니다!

duckhee.lee님의 프로필 이미지
duckhee.lee

작성한 질문수

질문하기