강의

멘토링

커뮤니티

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

다화 (만점)님의 프로필 이미지
다화 (만점)

작성한 질문수

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

4.1 Streamlit 설치와 user message 작성

new_question에 대한 답 출력

해결된 질문

작성

·

21

0

new_question 이 ''연봉 5천만원인 거주자의 소득세는 얼마인가요?'' 이라는 질문만 내놓고, 답은 내놓지 않습니다

%pip install python-dotenv langchain langchain-upstage langchain-community langchain-text-splitters langchain-pinecone docx2txt
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)
from dotenv import load_dotenv
from langchain_upstage import UpstageEmbeddings

# 환경변수를 불러옴
load_dotenv()

# OpenAI에서 제공하는 Embedding Model을 활용해서 `chunk`를 vector화
embedding = UpstageEmbeddings(model="embedding-query")
from langchain_pinecone import PineconeVectorStore

# 데이터를 처음 저장할 때 
index_name = 'tax-upstage-index'
database = PineconeVectorStore.from_documents(document_list, embeddin
g, index_name=index_name)
query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?'

# `k` 값을 조절해서 얼마나 많은 데이터를 불러올지 결정
retrieved_docs = database.similarity_search(query, k=3)
retrieved_docs
from langchain_upstage import ChatUpstage

llm = ChatUpstage()
from langchain_core.prompts import PromptTemplate

prompt_with_template = '아래 질문에 답변해주세요:\n\n {query}'

prompt_template = PromptTemplate(template=prompt_with_template, input_variables={"query"})
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

dictionary = ["사람을 나타내는 표현 -> 거주자"]

prompt = ChatPromptTemplate.from_template(f"""
    사용자의 질문을 보고, 우리의 사전을 참고해서 사용자의 질문을 변경해주세요.
    만약 변경할 필요가 없다고 판단된다면, 사용자의 질문을 변경하지 않아도 됩니다.
    그런 경우에는 질문만 리턴해주세요
    사전: {dictionary}
    
    질문: {{question}}
""")

dictionary_chain = prompt | llm | StrOutputParser()
tax_chain = {"query": dictionary_chain} | prompt_template
new_question = dictionary_chain.invoke({"question": query})
new_question

RetrievalQA 가 사라져서 PromptTemplate 랑 Pinecorn으로 어떻게든 대체하려고 했는데 엉망이 된거 같습니다. ㅠㅠ

어떻게 하면 답까지 내놓게 할 수 있을까요?

답변 2

0

제이쓴님의 프로필 이미지
제이쓴
지식공유자

new_question은 dictionary_chain을 활용해서 사용자의 질문을 검색이 조금 더 잘되게 수정하는 용도입니다. 코드를 조금 더 따라가보시면 답변을 얻으실 수 있을거에요!

0

안녕하세요, 인프런 AI 인턴입니다. 다화 (만점)님께서 질문하신 내용에 대해 검토해보겠습니다.

주어진 코드에서 dictionary_chain.invokenew_question을 사용하는 부분에서 제대로 된 결과가 생성되지 않는 문제를 겪고 계신 것 같습니다. 이 문제는 프롬프트 템플릿과 체인의 구성에서 발생할 수 있습니다. 여러분이 사용하려는 처리 과정 일부가 빠져있거나, 툴체인의 적절한 연결이 되지 않았기 때문일 수 있습니다.

문제 해결 가이드

문제 요약

  • dictionary_chain이 사용자의 질문을 받고 의도한 대로 변환하지 못함.
  • 최종 new_question 변수에 적절한 답변을 생성하지 못함.

해결 방안

  1. Dictionary Chain 작동 확인: 현재 설정의 프롬프트와 체인을 점검하여, 변환하고자 하는 질문이 제대로 변환 및 전달되는지 확인해야 합니다.

  2. Prompt and Chain 수정

    • Prompt Template: prompt_with_templateprompt_template이 잘못 연결된 것 같습니다. ChatPromptTemplate을 통해 정의된 부분이 일관되게 작동하도록 해주세요.
   from langchain_core.prompts import PromptTemplate
   from langchain.chains import RetrievalQA
   
   # QA 체인을 통해 질문을 처리합니다.
   qa_chain = RetrievalQA.from_chain_type(
       llm=llm,
       retriever=database.as_retriever(),
       chain_type_kwargs={"prompt": prompt_with_template}
   )
  1. 데이터베이스 및 벡터 스토어 활용:

    • Pinecone 등 벡터 데이터베이스의 설정이 올바른지 검토해야 합니다. 적절하게 데이터가 저장되고 검색되는지 확인하세요.
  2. LLM 및 Embedding 확인:

    • 사용하고 있는 UpstageEmbeddingsChatUpstage의 설정이 올바르게 연결되어 있는지 확인하십시오.
  3. 최종 실행 과정:

    • qa_chain으로 query를 처리하여 적절한 응답을 생성하고 있는지 최종 결과를 수동적으로 확인 후 디버깅 하세요.

추가 링크 및 학습 자료

  • 관련 질문과 답변 자료를 통해 더 많은 정보를 얻을 수 있습니다. 다양한 실습 사례를 통해 자신의 코드에 적용할 수 있는 힌트를 얻으실 수 있습니다.

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

다화 (만점)님의 프로필 이미지
다화 (만점)

작성한 질문수

질문하기