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

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

lsshin1056님의 프로필 이미지

작성한 질문수

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

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

tax-with-markdown 관련 문의

해결된 질문

작성

·

71

0

query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?'의 쿼리는 다음과 같이 답변합니다.
제공된 문맥에는 연봉 5천만 원인 직장인의 소득세가 구체적으로 정의되어 있지 않습니다. 근로소득에 대한 기본세율이 적용된다고 언급되어 있지만, 기본세율의 구체적인 수치는 제공되지 않았습니다. 따라서 필요한 정보가 부족하여 소득세의 정확한 금액을 계산할 수 없습니다.

query = '연봉 5천만원의 소득세를 구체적으로 계산하고, 세율 및 공제 내용을 포함해 설명해 주세요.'의 쿼리에서

연봉이 5천만 원일 경우, 소득세를 계산하기 위해서는 종합소득 과세표준에 적용되는 세율을 사용해야 합니다. 1,400만 원 초과 5,000만 원 이하 구간에 해당하므로 세율은 84만 원 + (1,400만 원을 초과하는 금액의 15%)입니다. 따라서 소득세는 84만 원 + (3,600만 원 * 0.15) = 624만 원이 됩니다.

쿼리 내용에 따라 다르게 답변하는데, 왜 그런건지 알수 있나요?

코드 첨부합니다.


# 질문 설정

#query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?'

query = '연봉 5천만원의 소득세를 구체적으로 계산하고, 세율 및 공제 내용을 포함해 설명해 주세요.'

import pprint

# LLM 설정

from langchain_openai import ChatOpenAI

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

from langchain import hub

from langchain.chains import RetrievalQA

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

retriever = database.as_retriever()

#pprint.pprint(retriever.invoke(query))

qa_chain = RetrievalQA.from_chain_type(

llm,

retriever=database.as_retriever(),

chain_type_kwargs={"prompt": prompt}

)

import pprint

#pprint.pprint(retriever.invoke(query))

# LLM 실행

ai_message = qa_chain.invoke(query)

# 딕셔너리 형태의 응답에서 "answer" 또는 "result" 키 값만 출력

if isinstance(ai_message, dict):

answer = ai_message.get("answer") or ai_message.get("result") or "응답 없음"

print(answer)

else:

print(ai_message)

 

 

답변 2

0

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

안녕하세요! 좋은 질문 감사합니다.

생성 결과가 다른 이유는 요청사항이 다르기 때문입니다. 프롬프트가 수정되면서 LLM에게 전달되는 요청사항이 달라지면서 아웃풋이 달라진다고 보시면 됩니다. 지금 시도해보신 것처럼 프롬프트를 어떻게 작성하느냐에 따라서 LLM의 생성 결과가 다르기 때문에, 서비스를 개발하실 때도 적절히 프롬프트를 작성하고, 서비스에 맞는 프롬프트를 작성하는게 중요합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. lsshin1056님께서 질문하신 내용에 대해 살펴보겠습니다.

질문에서 언급하신 두 가지 query에 대한 서로 다른 응답은 다음과 같은 이유들로 인해 발생할 수 있습니다.

원인 분석

  1. Query의 구체성 및 명확성:

    • 첫 번째 query ('연봉 5천만원인 직장인의 소득세는 얼마인가요?')는 비교적 일반적이고 정확한 계산을 위한 모든 정보를 포함하고 있지 않을 수 있습니다. 이 경우, 시스템은 주어진 정보를 가지고 충분한 답을 생성할 수 없습니다.
    • 두 번째 query ('연봉 5천만원의 소득세를 구체적으로 계산하고, 세율 및 공제 내용을 포함해 설명해 주세요.')는 좀 더 구체적이고 계산에 필요한 정보를 포함하고 있어, 시스템이 제공된 자료를 기반으로 세부적인 답변을 생성할 수 있습니다.
  2. Prompt 구성:

    • rlm/rag-prompt로 설정된 프롬프트가 특정한 형식의 입력을 기대할 수 있습니다. 각 query가 LLM에 의해 다른 경로로 처리될 수 있으며, 이는 전달되는 프롬프트와 유사도 검색의 결과에 따라 달라질 수 있습니다.
  3. LLM의 응답 방식 차이:

    • Large Language Model은 입력된 query에 대한 정보를 가지고 가장 적합한 결론을 내리기 위해 다르게 접근할 수 있습니다. 이는 모델이 가지고 있는 학습 데이터 및 구체적인 질문 포맷에 따라 결과가 다르게 나타날 수 있는 예시입니다.
  4. 데이터베이스 및 Retrieval 설정:

    • 질문 및 모델에 전달될 문서들이 retriever에 의해 다르게 선택된다면, LLM의 응답에도 변화가 있을 수 있습니다. 여기서 retriever.invoke(query)가 불러오는 문서의 내용이 다를 경우에도 결과가 달라질 수 있습니다.

유사한 질문 링크

이해를 돕기 위해 RAG의 설정 및 질의 방식에 대해 좀 더 탐색해 보시고, query가 정확히 어떤 정보를 가져오는지 디버깅을 통해 확인해 보는 것도 좋은 방법입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.