강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của itmedahwa
itmedahwa

câu hỏi đã được viết

Phát triển ứng dụng LLM sử dụng RAG (feat. LangChain)

4.1 Cài đặt Streamlit và viết user message

new_question에 대한 답 출력

Đã giải quyết

Viết

·

61

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으로 어떻게든 대체하려고 했는데 엉망이 된거 같습니다. ㅠㅠ

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

vector-databasellmlangchainragopenai-api

Câu trả lời 2

0

jasonkang님의 프로필 이미지
jasonkang
Người chia sẻ kiến thức

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를 처리하여 적절한 응답을 생성하고 있는지 최종 결과를 수동적으로 확인 후 디버깅 하세요.

추가 링크 및 학습 자료

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

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

Hình ảnh hồ sơ của itmedahwa
itmedahwa

câu hỏi đã được viết

Đặt câu hỏi